Introdução à Programação Orientada a Objetos
Introdução à Programação Orientada a Objetos
1
1
Um exemplo inicial Um exemplo inicial
uUm trecho do programa escrito em Java: uUm trecho do programa escrito em Java:
class Figura { Usamos objetos para public void exiba() {
private Triangulo teto; representar nossa figura [Link]("gray");
private Circulo sol; [Link](); Através desta função, um
private Quadrado janela, casa; [Link]("red"); objeto Figura envia
[Link](); mensagens 'exiba()'
[Link]("white");para seus
public Figura() {
[Link](); objetos componentes
teto = new Triangulo(); Cada objeto
[Link]("yellow");
janela = new Quadrado(); é instância
de uma classe [Link]();
casa = new Quadrado();
}
sol = new Circulo(); } //fim da classe Figura
}
}
Fred&Leônidas (c) 2003 POO 7 Fred&Leônidas (c) 2003 POO 8
2
2
Abstração de dados Abstração de dados
uDefinição de Abstração: uNa programação de computadores:
ðAbstrair um conceito é limitar -se a representar este
"(...) 2. Processo mental que consiste em escolher ou conceito numa linguagem de programação apenas em
isolar um aspecto determinado de um estado de coisas seus detalhes necessários à aplicação em curso.
relativamente complexo, a fim de simplificar a sua ðPor exemplo, um sistema bancário abstrai a entidade
avaliação, classificação ou para permitir a comunicação real cliente em apenas alguns dados do cliente que são
do mesmo (...) " importantes (nome, cpf, endereço, renda mensal,etc).
Fonte: Dicionário Houaiss ðNão é necessário guardar nestes sistemas todos os
dados de um cliente (o tamanho do pé dele, se é
careca, se teve varíola, cor do cabelo, etc.)
Fred&Leônidas (c) 2003 POO 13 Fred&Leônidas (c) 2003 POO 14
3
3
Objetos Objetos
uPara o ser humano, um objeto é... uPara um programador...
ðAlgo tangível e/ou visível “Um objeto representa uma entidade, unidade ou item
ðAlgo que possa ser compreendido intelectualmente identificável, individual, real ou abstrato, com um papel
ðAlgo para o qual um pensamento ou ação possa ser bem definido no domínio do problema. ” [Booch, 91]
direcionado uObjetos podem ser físicos...
uUm objeto modela alguma parte da realidade e é ðbicicleta, máquina, pessoa, sensor, ...
algo que existe no tempo e no espaço uOu não...
ðreação química, número complexo, B-Tree
OBJETO: ÔNIBUS
AÇÔES OU SERVIÇOS
VELOCIDADE: 112 ACELERAR
LUGARES: 44 FREIAR
MARCA: MERCEDES
KM: 80.732 DIRECIONAR
EIXOS: 2 RECEBER PASSAGEIRO
PINTAR
OBJETO: SOFÁ
COR: VERDE AÇÔES OU SERVIÇOS
LUGARES: 2 ACOMODAR PESSOA
MARCA: ARTEFACTO
MOVER
PINTAR
COBRIR
4
4
Exemplos de objetos (estrutura) Objetos
acelerar( )
uDefinição:
pintar( )
freiar( )
LUGARES: 44
MARCA: MERCEDES
pintar( )
COR: VERDE
LUGARES: 2
MARCA: ARTEFACTO
mover( )
Fred&Leônidas (c) 2003 POO 25 Fred&Leônidas (c) 2003 POO 26
5
5
Ciclo de vida de um Objeto Ciclo de vida de um Objeto
uLinha da vida de um objeto: uExemplo com um código Java:
1 ðInstanciação: o objeto é criado e passa a ser Quadrado q;
referenciado por um nome (referência);
2 ðUso: o objeto recebe mensagens de outros objetos e, 1 q = new Quadrado();
com isso, executa parte da funcionalidade do sistema; [Link](10);
3 ðDestruição: A área de memória ocupada pelo objeto é [Link](20);
2
reclamada; todas as referências para o objeto ficam [Link]();
[Link]("red");
nulas.
3 q = null;
isVisible : false
6
6
Referências para objetos Referências para objetos
uReferências são ponteiros para o objeto uReferências são ponteiros para o objeto
Quadrado q; //declaração Quadrado q; //declaração
q = new Quadrado(); //instanciação q = new Quadrado(); //instanciação
[Link](50); //uso [Link](50); //uso
q = null; //desprezo q = null; //desprezo
q q
size 30
q mudeTamanho(50) q
size 30 size 50
7
7
Mensagens Mensagens
uExemplo: uPara realizar a operação associada a uma
Quadrado q; String s; mensagem, um objeto precisa executar um
procedimento computacional (bloco de código)
q = new Quadrado(); s = new String("Java");
[Link](10); int x = [Link](); uTais procedimentos são implementados na classe
[Link](20); int y = [Link](2); do objeto e recebem o nome de métodos
[Link](); s = [Link](1);
[Link]("red"); s = "J".concat(s); uSempre que um objeto recebe uma mensagem,
... ... ele executa o método correspondente a ela.
ðA mensagem é a ativação de um método!
Mensagens
Mensagens Mensagens
uO conceito de mensagem na POO é análogo ao de uO envio de uma mensagem para um objeto pode
ativação de função/procedimento na programação provocar um dos dois efeitos abaixo no objeto alvo:
imperativa ðMudança no estado interno do objeto
uO conceito de método na POO é análogo ao de ðInvariância do estado de um objeto
implementação de função/procedimento na uA mensagem pode ainda:
programação imperativa. ðProduzir um valor de retorno
• (Em Java, mensagens são expressões)
ðProduzir nenhum valor de retorno
Mensagens Mensagens
uExemplos: uExemplos:
Quadrado q; String s;
q = new Quadrado(); s = new String("Java");
8
8
Aula Prática Classes
uFaça os exercícios da Prática 1 uDefinição:
uNesta prática você: ðLocal onde encontram -se definidas as propriedades
(variáveis) e o comportamento (métodos) que uma
ðConhecerá o BlueJ ([Link]), a ferramenta de
categoria de objetos deve possuir.
programação Java que nos acompanhará por todo o
curso uEstrutura fundamental de programação em Java.
ðInstanciará objetos a partir de classes prontas ðTodo e qualquer programa Java define pelo menos
ðEnviará mensagens para estes objetos uma classe.
ðRemoverá referências para estes objetos ðNão há como escrever código Java sem definir uma
classe.
9
9
Exemplo de uma classe em Java Métodos
uAmpliando a classe Cliente (inserindo métodos): uUm método é um procedimento ou função que
permite aos objetos de uma classe executarem
class Cliente {
private String nome; serviços
private String endereco; ðÉ como o objeto implementa suas operações
private char sexo; uO envio de uma mensagem para um objeto faz o
método correspondente (de mesmo nome) ser
public void setNome(String novo) { executado
nome = novo;
ðA mensagem é a ativação de um método sobre o
} Método
objeto
}
Fred&Leônidas (c) 2003 POO 55 Fred&Leônidas (c) 2003 POO 56
Encapsulamento Encapsulamento
uA abstração de um objeto deve preceder à sua
implementação.
uA implementação, uma vez selecionada, deve ser
tratada como um segredo da abstração e
escondida dos clientes deste objeto
“Nenhuma parte de um sistema complexo deve
depender dos detalhes internos de outras partes”
[Booch, 91]
10
10
Encapsulamento e abstração Encapsulamento
uConceitos complementares: uDefinição:
ðA abstração representa um conceito “Encapsulamento é o processo de esconder todos os
ðO encapsulamento impede os clientes de verem como detalhes de um objeto que não contribuem para suas
este conceito foi implementado características essenciais.” [Booch, 91]
u“Para uma abstração funcionar sua implementação
deve estar encapsulada.”
uObjetos são formados por 2 partes:
ðuma interface (visão externa)
ðuma implementação (funcionalidade interna)
Fred&Leônidas (c) 2003 POO 61 Fred&Leônidas (c) 2003 POO 62
Encapsulamento Encapsulamento
“A habilidade de mudar a representação de uma uUma classe Java define um bloco para
abstração sem perturbar quaisquer de seus clientes é o encapsulamento de propriedades e métodos
principal benefício do encapsulamento” [Booch, 91]. uOs métodos de uma classe deveriam acessar
uLembre-se disto: apenas as propriedades da própria classe e nunca
ð“O encapsulamento previne acidentes, não fraudes” as de outra classe
[Stroustroup]
uModificadores de acesso controlam a visibilidade
ð“O encapsulamento não impede o desenvolvedor de do encapsulamento de Java
fazer coisas estúpidas” [Booch, 91]
ðpublic: tudo que pode ser acessado de fora da classe
ðprivate: tudo que é exclusivo da própria classe
Fred&Leônidas (c) 2003 POO 63 Fred&Leônidas (c) 2003 POO 64
X
private char sexo; public void mudeCliente(String novo) {
[Link] = novo;
public void setNome(String novo) { }
público
nome = novo; }
} A propriedade nome é privativa da classe Cliente
}
Fred&Leônidas (c) 2003 POO 65 Fred&Leônidas (c) 2003 POO 66
11
11
Exemplo de uma classe em Java Exemplo de uma classe em Java
uVisibilidade do encapsulamento de Cliente: uEsquematicamente:
class Venda {
setNome()
private Cliente cliente;
...
public void mudeCliente(String novo) { umaVenda
[Link](novo); Emissor
}
} método mudeCliente()
O método setNome() é público em Cliente cliente
Receptor
Fred&Leônidas (c) 2003 POO 67 Fred&Leônidas (c) 2003 POO 68
12
12
Classes: resumo Variáveis de classe
uUma classe Java define uma abstração e permite uUma classe pode ter variáveis contendo informações
seu encapsulamento úteis, como:
ðGraus de visibilidade podem ser definidos ðnúmero de objetos instanciados da classe até certo
uO corpo da classe é formado por: instante
ðPropriedades dos objetos da classe (variáveis) ðvalor médio/mínimo/máximo de determinada propriedade
ðMétodos que implementam as operações executadas uEssas variáveis não devem ser criadas para cada
pelos objetos (procedimentos e funções) objeto
ðConstrutores que inicializam as propriedades de um ðPara cada classe existirá apenas uma única cópia de
objeto recém-criado cada variável: variável de classe
Fred&Leônidas (c) 2003 POO 73 Fred&Leônidas (c) 2003 POO 74
agenciaEpitacio
de classe (para ler ou modificar seu valor)
Classe AgenciaBancaria uA modificação do valor de uma variável de classe é
agenciaCentro percebida por todos os objetos
juros uA variável de classe fica armazenada na classe e
não nas instâncias
agenciaManaira
uÉ comum o uso de variáveis de classe para definir
Variável de Classe constantes: e.g. PI, MAX_IDADE, etc.
13
13
Aula Prática Composição
uFaça os exercícios da Prática 2 uObjetos reais podem ser agrupamentos ou
uNesta prática você: composições de objetos mais "básicos"
ðConhecerá um pouco mais sobre a sintaxe de classes uExemplo:
Java ðUm objeto bicicleta é a composição de um objeto
ðIdentificará propriedades de objetos guidon, um objeto selim, dois objetos pneus, um objeto
ðIdentificará e utilizará construtores de objetos quadro, etc.
ðDistinguirá variáveis de classe de variáveis de uEstes "objetos básicos" podem ser reutilizados
instância para compor outros tipos de objetos compostos.
ðA composição favorece a reutilização de código!
Fred&Leônidas (c) 2003 POO 79 Fred&Leônidas (c) 2003 POO 80
Composição Composição
uA composição do mundo real é conseguida por uE na POO? Como definimos objetos compostos?
meio de um processo chamado de montagem ðO objeto composto possui propriedades que apontam
ðOs objetos são unidos por meio de interfaces físicas para os objetos componentes,
bem definidas (o cano do guidon deve encaixar ou em outras palavras
perfeitamente no tubo do quadro, o parafuso do pneu ðO objeto composto possui propriedades cujos tipos
dianteiro deve encaixar no garfo do quadro, etc..) são as classes dos objetos componentes
uAs operações enviadas ao objeto composto uA composição é um relacionamento entre objetos
disparam operações dos seus objetos uA herança é um relacionamento entre classes
componentes
Fred&Leônidas (c) 2003 POO 81 Fred&Leônidas (c) 2003 POO 82
Composição Composição
uExemplo: uExemplo:
preco 300
class Bicicleta {
peso 25
private Guidon guidon;
pneus guidon
private Pneu[] pneus; [][]
quadro
private Quadro quadro;
float preco; (Bicicleta)
int peso;
(Guidon)
}
14
14
Composição Composição
uOutro exemplo: uExemplo: calculeTotal()
class Venda { numProd 2
private Cliente cliente; produtos
private Produto[] produtos; cliente data
[][]
private Date data;
private int numProd; 15/07/03
(Venda)
}
class Produto { (Date)
200 50
private float preco;
public float getPreco(); (Produto) (Produto)
} (Cliente)
Composição Composição
uExemplo: calculeTotal() uExemplo: calculeTotal()
1 numProd 2 1 numProd 2 250
0 produtos 1 produtos
cliente data cliente data
0 [][] 0 [][]
getPreco () 15/07/03 getPreco () 15/07/03
(Bicicleta) (Bicicleta)
(Date) (Date)
200 50 200 50
15
15
Herança Herança
uPermite reutilizar as características de uma classe uClasses:
na definição de outra ðmais generalizada: superclasse
uÉ a contribuição original do paradigma de objetos ðmais especializada: subclasse
uRepresentação gráfica da herança: uViabiliza a construção de sistemas a partir de
componentes reusáveis
Empregado ðSuporta a reutilização entre sistemas
ðFacilita a extensibilidade em um mesmo sistema
uO objeto descendente não tem trabalho para
Assalariado Gerente Supervisor
receber a herança
Fred&Leônidas (c) 2003 POO 91 Fred&Leônidas (c) 2003 POO 92
Herança Herança
uHerança é uma técnica para prover suporte à uSe B é subclasse de A então:
especialização ðos objetos de B suportam todas as operações
ðClasses mais abaixo: especializadas suportadas pelos objetos de A, exceto aquelas
ðClasses mais acima: genéricas redefinidas
ðas variáveis de instância de B incluem todas as
uMétodos e variáveis internas são herdados por
variáveis de instância de A
todos os objetos dos níveis para baixo
uHerança pode afetar encapsulamento
uVárias subclasses podem herdar as características
ðSubclasses “enxergam” os dados e a implementação
de uma superclasse (herança múltipla – não das superclasses
presente em Java!)
Fred&Leônidas (c) 2003 POO 93 Fred&Leônidas (c) 2003 POO 94
16
16
Herança Múltipla Problemas da Herança múltipla
Pessoa uConflitos de nomes
ðO mesmo nome de método ou variável de instância
existe em mais de uma das superclasses. Qual deles
Estudante Professor herdar?
Professor
Estudante Estudante
Pós-Graduação Pós-Graduação
imprime()
imprime()
Assistente Assistente
Graduado Graduado
Fred&Leônidas (c) 2003 POO 97 Fred&Leônidas (c) 2003 POO 98
17
17
Polimorfismo Exemplo de uso de Polimorfismo
uVárias classes podem ter métodos com o mesmo uÁrea total sem polimorfismo:
nome double areaTotal = 0;
uUma variável do tipo Poligono pode assumir a for (int i = 0; i < MAXPOLIG; ++i) {
18
18
Ligação dinâmica Polimorfismo no Sistema Caixa
uA ligação dinâmica é feita em tempo de execução Venda
ou pode ser alterada no decorrer da execução do calculeTotal() Caixa
programa
uLigação do operador a uma particular operação
feita em tempo de execução Venda[ ]
ðCompromete a eficiência VendaVista VendaPrazo
calculeTotal() calculeTotal()
ðUma instância de uma subclasse pode ser atribuída a
uma instância de uma superclasse
Fred&Leônidas (c) 2003 POO 109 Fred&Leônidas (c) 2003 POO 110
Fred&Leônidas (c) 2003 POO 111 Fred&Leônidas (c) 2003 POO 112
ContaBonus
em inglês)
Fred&Leônidas (c) 2003 POO 113 Fred&Leônidas (c) 2003 POO 114
19
19
Polimorfismo paramétrico Operações com objeto, classe e herança
uUma mensagem pode ser enviada a um objeto u Objetos, classes e herança permitem a definição de
com parâmetros: hierarquias de abstrações
ðnúmero variável u Abstrações facilitam o entendimento e o gerenciamento da
ðde tipos diferentes complexidade dos sistemas
uO método invocado é escolhido pelos parâmetros u Classes agrupam objetos com características iguais
enviados na mensagem u Herança estrutura classes semelhantes
class Documento { u Operações abstratas:
…
void imprime(); ðclassificação/instanciação
void imprime(String titulo); ðgeneralização/especialização
} ðcomposição/decomposição
Fred&Leônidas (c) 2003 POO 115 Fred&Leônidas (c) 2003 POO 116
Classificação/Instanciação Generalização/Especialização
uA capacidade de classificar objetos permite uA partir da observação de duas ou mais classes pode-se
expressar relações de classificação/instanciação abstrair uma classe mais genérica
u Uma superclasse é considerada uma generalização das
uObservação de diversos fenômenos para subclasses, que são chamadas de especializações
categorização em grupos (classes), com base nas u Deve haver pelo menos uma propriedade que diferencie
propriedades comuns a todos INSTANCIAÇÃO duas classes especializadas
Venda
Fred&Leônidas (c) 2003 POO 119 Fred&Leônidas (c) 2003 POO 120
20
20
Bibliografia
[Booch , 91] Booch, G. Object Oriented Design with
Applications . The Benjamin/Cummings Publishing
Company. 1991.
[Gamma, 95] Gamma, Erich. Helm, Richard. Johnson, Ralph.
Vlissides, John. Padrões de Projeto – Soluções
Reutilizáveis de Software Orientado a Objetos
[Sebesta, 99] Sebesta, R. Conceitos de Linguagens de
Programação. 4a edição. Bookman. 1999.
21
21