JAVA - Apostila
532 pág.

JAVA - Apostila


DisciplinaProgramação Orientada A Objetos3.329 materiais51.081 seguidores
Pré-visualização28 páginas
Programação Orientada a Objetos com Java
Ricardo Terra
rterrabh@gmail.com
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 1 / 527
CV
Nome: Ricardo Terra
Email: rterrabh@gmail.com
www: ricardoterra.com.br
Twitter: rterrabh
Lattes: lattes.cnpq.br/ 0162081093970868
Ph.D. (UFMG/UWaterloo) (a ser concluído em Julho/2013),
M.Sc. (PUC Minas)
Background
Acadêmico: UFSJ (desde 2013), FUMEC (3 anos), UNIPAC (1 ano), FAMINAS (3 anos)
Profissional: DBA Eng. (1 ano), Synos (2 anos) e Stefanini (1 ano)
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 2 / 527
1. Introdução \u2013 Conteúdo
1 Introdução 3
Visão Geral de POO 4
2 UML 22
3 Java 60
4 POO 183
5 Padrões de Projeto 356
6 Tópicos Relevantes 386
7 Materiais Complementares 417
8 Extras 498
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 3 / 527
Introdução
Visão Geral de POO
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 4 / 527
Introdução \u2013 Visão Geral de POO
Origem da POO
Simula
Foi a primeira linguagem de programação a introduzir os
conceitos subjacentes a programação orientada a objetos
(objetos, classes, subclasses, métodos virtuais, coletor de lixo
etc)
Mas, não foi amplamente desenvolvida
Smalltalk
Linguagem puramente orientada a objetos
Atualmente
C++
Object Pascal
Java
Python
Eiffel
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 5 / 527
Introdução \u2013 Visão Geral de POO
Linguagem para criação de modelos
UML
Padrão OMG (Object Management Group)
Mais utilizada nos dias de hoje
Utilizaremos bastante o Diagrama de Classe, um dos seus 14
diagramas, em nossa disciplina
Booch
OOSE (Object-Oriented Software Engineering)
OMT (Object Modeling Technique)
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 6 / 527
Introdução \u2013 Visão Geral de POO
Paradigma de Programação
Definição
Conjunto de regras e/ou hipóteses que governam a
definição de um modelo
Aplicação na computação/informática
Auxiliar na condução do processo de busca da solução
(modelo conceitual) de um problema
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 7 / 527
Introdução \u2013 Visão Geral de POO
Exemplos de paradigma de programação
Procedural (imperativo)
É um paradigma de programação que descreve a
computação como ações (instruções) que mudam o estado
(variáveis) de um programa. Muito parecido com o
comportamento imperativo das linguagens naturais que
expressam ordens, programas imperativos são uma
sequência de comandos para o computador executar
Orientado a objetos
É um paradigma de programação que utiliza \u201cobjetos\u201d e a
interação entre eles para projetar aplicações e programas
de computador. Suas técnicas de programação podem
incluir características como encapsulamento, polimorfismo e
herança. Esse paradigma não era comumente usado no
desenvolvimento de aplicações de grande porte até início
de 1990. Atualmente, várias linguagens modernas suportam
POO
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 8 / 527
Introdução \u2013 Visão Geral de POO
Objeto
\u201cObjeto é uma coisa, uma entidade, alguma coisa que
você levanta ou chuta, qualquer coisa que você possa
imaginar que tenha sua própria identidade.\u201d (Mike
O\u2019Docherty, 2005)
Possuem características (atributos)
Possuem comportamentos (métodos)
Assume responsabilidades no domínio do problema
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 9 / 527
Introdução \u2013 Visão Geral de POO
Classe
\u201cUma classe encapsula características comuns a grupos de
objetos.\u201d (Mike O\u2019Docherty, 2005)
Pode ser pensada de várias formas:
Um conjunto de especificações que caracterizam como
seus membros devem ser
Um molde que produz objetos com a mesma forma
...
Enfim
Desenvolvedores utilizam classes para descrever elementos
de programação que alguns tipos de objetos terão
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 10 / 527
Introdução \u2013 Visão Geral de POO
Classe
Atributos
Representam as informações (características) que os objetos
da classe terão
Por exemplo, uma pessoa tem um nome, idade, peso etc
Métodos
Representam as ações (comportamentos) que os objetos da
classe realizarão
Por exemplo, uma pessoa respira, come, bebe etc
Encapsulamento
Classe é a menor unidade modular de POO, isto é, não existe
nada menor que uma classe
Assim, classe é definida como um grupo de atributos,
métodos e outros membros que são tratado como uma
única unidade modular
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 11 / 527
Introdução \u2013 Visão Geral de POO
Herança
Basicamente, é a habilidade de definir novas classes
baseadas em classes existentes
Suponha:
Um animal
Animal morre
Um mamífero é um animal
Mamífero morre
Mamífero mama (novo)
Um leão é um mamífero
Leão morre
Leão mama
Leão ruge (novo)
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 12 / 527
Introdução \u2013 Visão Geral de POO
Herança requer o entendimento dos conceitos de
superclasse e subclasses
Superclasses são as classes mais genéricas em sua hierarquia
Subclasses são as classes mais específicas em sua hierarquia
Com base no exemplo anterior:
Animal
superclasse de Mamífero e Leão
Mamífero
superclasse de Leão
subclasse de Animal
Leão
subclasse de Animal e Mamífero
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 13 / 527
Introdução \u2013 Visão Geral de POO
Sobreposição
Você sobrepõe uma operação quando deseja que uma
operação herdada seja realizada diferentemente pela
subclasse
Por exemplo, uma cobra se alimenta de ratos, mas um tipo
específico de cobra (subclasse) se alimenta diferentemente
Assim, é necessário sobrepor o método alimentar:
Classe Cobra
void alimentar (Rato comida) { /* mata e come */ }
Classe Cascavel
@Override
void alimentar (Rato comida) { /* come mesmo vivo */ }
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 14 / 527
Introdução \u2013 Visão Geral de POO
Sobrecarga
Você sobrecarrega uma operação quando deseja que a
mesma operação também seja realizada por entradas
diferentes
Por exemplo, uma cobra se alimenta de ratos, mas um tipo
específico de cobra (subclasse) se alimenta também de
ratazanas
Assim, é necessário sobrecarregar o método alimentar:
Classe Cobra
void alimentar (Rato comida) { /* mata e come */ }
Classe Cascavel
@Override
void alimentar (Rato comida) { /* come mesmo vivo */ }
void alimentar (Ratazana comida) { /* come também */ }
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 15 / 527
Introdução \u2013 Visão Geral de POO
Polimorfismo
Habilidade de um objeto poder ser tratado como qualquer
uma de suas classes mais genéricas (superclasses)
Com base no exemplo anterior:
Leão pode ser visto como um animal
Contudo, se for visto como animal, só poderá morrer
Um leão pode ser visto como um mamífero
Contudo, se for visto como mamífero, só poderá morrer e
mamar
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 16 / 527
Introdução \u2013 Visão Geral de POO
Repasso
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 17 / 527
Introdução \u2013 Visão Geral de POO
Agenda Telefônica
Atributos
lista de contatos
Operações
inserir contato
alterar contato
excluir contato
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 18 / 527
Introdução \u2013 Visão Geral de POO
Contato (para uma agenda telefônica)
Atributos
nome
endereço
telefone
email
Operações
obter/alterar nome
obter/alterar endereço
obter/alterar telefone
obter/alterar email
Ricardo Terra (rterrabh@gmail.com) POO 11 de março de 2013 19 / 527
Introdução \u2013 Visão Geral de POO
Cavalo (como ele é)
Atributos
peso
altura
cor
raça
...
Operações
andar
comer
puxar carroça
relinchar
...
Ricardo