Você está na página 1de 27

Programao Orientada a Objetos

Enumerao, Herana e Generalizao

Prof. Dr. Everton Guimares


O que vamos ver hoje?
Tipos Enumerados

Generalizao e Herana

Chamada de Construtores

A classe Object

2/
Tipos Enumerados
Os tipos enumerados so usados para criar novos tipos de dados, que
podem assumir uma gama restrita de valores no-numricos (enumeradores)
Os valores (enumeradores) associados a um enumerado so identificadores
definidos pelo programador.

3/
Tipos Enumerados
Antes da Edio 1.5 do Java SE, a linguagem no oferecia suporte direto a
construo de tipos enumerados.

A construo desses tipos era simulada atravs do uso de classes, conforme


o exemplo abaixo.

4/
Simulao de Enumerados
O uso de varveis estticas inteiras tem pelo menos duas desvantagens:

A varivel corRoupa continuar a ser uma varivel inteira. Logo


valores fora do domnio, podero ser atribudos a ela;

A associao entre os nomes das variveis e os valores das contantes


s est representada na definio da classe, o que podem dificultar o
entendimento do cdigo escrito;

Os tipos enumerados resolvem estes problemas da seguinte maneira:

Os valores dos tipos enumerados so referenciados pelos seus nomes


e no por valores inteiros;

Apensar valores pertencentes ao domnio de um enumerado podero


ser usados nos comandos de atribuio.

5/
Tipos Enumerados Vantagens?
As contantes que representam os valores enumerados no so compiladas
para as classes que as usam;

Cada constante de um enumerado deixada como referncia (simblica)


que ser ligada em tempo de execuo, similarmente ao que ocorre com as
referncias de mtodos e variveis de uma instncia de objeto;

A retirada de uma constante que usada por uma outra classe qualquer ser
sinalizada com uma mensagem de erro pela biblioteca de tempo de
execuo, assim que a constante for retirada.

6/
Tipos Enumerados - switch/case
O comando switch / case foi alterado para poder ser utilizado com os tipos
enumerados. O exemplo a seguir mostra como isso feito:

7/
Taxonomia
Muito antes da criao das cincias, os seres humanos j nomeavam as
espcies, o que lhes permitia ter sucesso nas suas atividades de caa;

A Taxonomia uma palavra de origem grega que surgiu no sculo XVII, e


significa estudo das classificaes;

No sculo seguinte essa terminologia


comeou a ser utilizada nos trabalhos de
Carl von Linneo, que props um sistema
de organizao dos seres vivos em
grupos cada vez menores;

A classificao est organizada a


seguinte forma: Reino, Filo, Classe,
Ordem, Famlia, Gnero, Espcie
Neste sistema, os membros de um
grupo particular compartilhavam
determinadas caractersticas. 8/
A Taxonomia passou a ser usada em um sentido mais abrangente, podendo
portanto, ser aplicada na classificao de quase tudo.

Ex.: Objetos (animados e inanimados), lugares, eventos, dentre outros.

9/
Taxonomia de Polgonos

10/
A UML representa graficamente uma classe por um retngulo dividido em
trs compartimentos:

Nome (identificador)
Lista de atributos (estado do objeto)
Lista de operaes (comportamento do objeto)

11/
Generalizao
A Generalizao consiste na atividade de identificar aspectos comuns
(similaridades) e no comuns entre os conceitos pertencentes ao domnio da
aplicao;

Por meio da generalizao possvel definir relaes entre superclasses


(representam conceitos genricos) e subclasses (representam conceitos
especficos)

Essas relaes formam uma taxonomia de conceitos de um certo domnio,


que pode ser ilustrada por meio de uma hierarquia de classes.

12/
Por exemplo, a hierarquia de Polgonos em Java poderia ser definida da
seguinte maneira:

A palavra reservada extends usada para declarar que uma classe (ex.
Tringulo) subclasse de outra (ex. Polgono).

13/
Generalizao vs. Teoria dos Conjuntos
A generalizao pode ser vista sob a tica da Teoria dos Conjuntos.
Desse ponto de vista, o diagrama de Venn equivalente ao diagrama de
classes (ilustrado nos slides anteriores)

Polgono

po1
Retngulo
Triangulo Pentgono

Quadrado rt3
tr1 rt1
pen1
tr2 rt2 rt4
qd1 qd2

qd3
po2 po3

14/
Benefcios
Identificar superclasses e subclasses podem nos oferecer os seguintes
benefcios:

Permite compreender aspectos de um problema em termos mais gerais e


abstratos;

Resulta em mais expressividade, melhoria na compreenso e reduo das


redundncias de um modelo;

A utilizao de superclasses e subclasses, juntamente com o mecanismo de


polimorfismo, nos permite construir softwares bem organizados.

15/
Regra um
Pode-se afirmar, informalmente, que toda instncia de uma classe tambm
instncia da sua superclasse;

Isso conhecido com a regra -um ou do ingls is-a

Ex. Todo quadrado um retngulo; todo retngulo um polgono.

Podemos concluir que todas as propriedades validas para objetos de uma


classe tambm so validas para objetos de suas subclasses;

Propriedades de uma classe:

Atributos (variveis)
Operaes (mtodos)
Relaes (variveis)

16/
Exemplo
Pela regra -um podemos afirmar que:

Um pagamento de carto de crdito uma espcie de pagamento. Por


isso, ele possui um valor e est relacionado a uma venda
(propriedades herdadas de Pagamento);

A operao getValor(...), vlida para todas as formas de pagamento


existentes.

17/
Outras Consideraes
Nem todas as propriedades vlidas para os objetos de uma classe so
vlidas pra os objetos de sua superclasse;

No exemplo dado, o nmero e a validade de um carto so propriedades


exclusivas do pagamento atravs de carto de crdito. Portanto, essas
propriedades no so aplicveis as outras formas de pagamento;

O pagamento com carto tambm poderia, por exemplo, ser associado a


uma classe que represente a operadora do carto utilizados;

Essa associao somente seria vlida para os pagamentos com carto, ou


seja, seria especfico da classe PgtCartaoCredito.

18/
Exemplo Pagamento com Carto

19/
Herana Simples
Nos exemplos de generalizao apresentados usamos somente herana
simples, ou seja, uma classe somente pode ser descendente direta de uma
nica superclasse;

A herana simples usada nos exemplos contm somente generalizaes


no-sobrepostas;

Sob a tima da Teoria dos Conjuntos, uma generalizao no-sobreposta


significa que, em uma generalizao, a interseco entre duas classes
(conjuntos) quaisquer sempre vazia, exceto quando uma for subclasse da
outra;

Neste caso, a interseco ser a prpria subclasse;

20/
Generalizao e Herana
No confundir generalizao com herana;

Uma generalizao uma relao entre classes, onde uma classe


especializada (subclasse) definida em termos de uma classe mais geral
(superclasse);

A herana o mecanismo pelo qual todas as propriedades no privadas de


uma superclasse fazem parte do espao de nomes de uma subclasse;

21/
Chamada de Construtores
Quando um objeto de uma classe criado, todos os construtores das classes
ancestrais sero invocados (implcita ou explicitamente);

Por exemplo, uma condio de erro ser sinalizada pelo runtime do Java
quando um quadrado for criado, pois o construtor padro (default) da classe
Polgono, no foi definido explicitamente;

22/
Chamada de Construtores
O erro causado pela invocao implcita do construtor padro da classe
Retngulo, que por sua vez invoca implicitamente o construtor padro da
classe Polgono;
Como o construtor padro da classe Polgono no foi definido, embora
existe um construtor para esta classe, o erro sinalizado;
A soluo definir um construtor Retngulo que ir invocar o construtor da
classe Polgono, usando a palavra reservada super;

23/
Utilizando o construtor super()

24/
A Classe Object
A classe java.lang.Object o ancestral de qualquer classe em Java; ou
seja, toda classe definida em um programa Java herda as propriedades da
classe Object;

A classe Object possui mtodos genricos que podem ser invocados por
qualquer objeto;

Exemplo

O mtodo equals(...), definido na classe Object, permite implementar o


conceito de igualdade de maneira pouco sofisticada do que o simples
uso do operador relacional ==

25/
Operador Relacional ==
O operador relacional == compara apenas se duas variveis do objeto
referenciam a mesma instncia do objeto;

No exemplo a seguir, as variveis p1 e p2 referenciam o mesmo objeto, e


uma mensagem ser exibida como resultado da comparao de p1 e p2;

26/
Operador Relacional == vs. equals
O mtodo equals(...) implementado em Object gera o memso resulta que o
operador ==;
Caso queira implementar um conceito prprio de igualdade, deve-se
sobrescrever o mtodo equals(...) para implementar a nova soluo;
Por exemplo, usa-se o mtodo equals(...) para definir que dois quadrados
que tenham o mesmo permetro so iguais;

27/

Você também pode gostar