Você está na página 1de 2

Nome: Rgis Ebeling

Carto: 219427
Programao Orientada a Objeto: Polimorfismo
O polimorfismo garante programar em geral graas hierarquia de herana. Exemplo de
polimorfismo: superclasse Animal com a funo 'move'. Cada espcie de animal subclasse e se
move de maneira diferente, ento a implementao do mtodo move feita dentro da subclasse para
a espcie em especfico.
Com polimorfismo criam-se sistemas extensveis, onde para inserir uma nova classe precisa
somente escrever a classe e a parte que instancia o objeto da nova classe.
Superclasses Abstratas
No instanciam objetos, somente servem como uma hierarquia de herana para ter um
design em comum. As classes usadas para instanciar objetos so as classes concretas. Uma classe
abstrata possui um ou mais mtodos abstratos, que no fornecem implementao.
Um sistema operacional um polimorfismo para funes como escrita: cada perifrico
possui um jeito diferente de efetuar a escrita, porm precisam de drivers para adaptar essa funo
com a escrita do S.O. Isso acaba tornando o sistema operacional extensvel.
Exemplo2: Hierarquia de remunerao de empregados. Uma empresa possui 4 tipos de
remunerao dos funcionrios: salariado, comissionado, por hora e base com comisso. Apesar do
tipo de remunerao ser diferente entre ambos, todo empregado possui dados em comum. Uma
superclasse Empregado ento criada, com subclasses SalariedEmployee, HourlyEmployee e
ComissionEmployee, alm da BasePlusComissionEmployee que subclasse de
ComissionEmployee.
A funo genrica declarada como abstrata na superclasse e ento cada subclasse
sobrescreve esta funo de acordo com seu interesse.
A subclasse declarada como extends da superclasse, assim, para chamar uma funo da
superclasse pode-se usar super.funcao();. Ao incicializar um objeto de uma subclasse, deve-se
inicializar a superclasse junto, chamando super(parmetros em comum) no construtor da
subclasse. O mecanismo para usar uma das subclasses como superclasse o mesmo: deve-se
declarar como extends desta subclasse a nova subclasse.
Pode-se criar um array de objetos do tipo da superclasse, assim obtendo um array de objetos
diferentes porm de mesma interface.
Vinculao Dinmica (tardia): um mtodo que tem implementao diferente para cada
classe; se chamado dentro de um loop de vetor de objetos da superclasse, vai retornar como
resultado a funo prpria da subclasse.
Uma referncia de superclasse s pode ser utilizada para invocar os mtodos da superclasse.
Um downcast necessrio para invocar um mtodo da subclasse no objeto da superclasse, como
mostrado a seguir: BasePlusComissionEmployee employee = (BasePlusComissionEmployee)
currentEmployee, seno ocorre um erro de compilao.
Referncias entre objetos:
- Referenciar superclasse a uma varivel de superclasse possvel.
- Referenciar subclasse a uma varivel de subclasse possvel.
- Referenciar subclasse a uma varivel de superclasse possvel, visto que um objeto da
subclasse um objeto da sua superclasse.
- Referenciar superclasse a uma varivel de subclasse erro de compilao, devendo realizar o
downcast para tal.

Mtodos Finais e Classes


No podem ser alterados aps declarados. Private e static so implicitamente finais. Uma
declarao de mtodo final no muda, ento as subclasses utilizam a mesma implementao do
mtodo e suas chamadas resolvidas em tempo de compilao (vinculao esttica). Obviamente,
uma classe declarada como final no pode ser superclasse.
Interfaces
Pode-se ter mtodos comuns entre duas classes no relacionadas atravs de uma interface.
Uma interface contm somente constantes e mtodos abstratos, sendo usada no lugar de uma classe
abstrata quando no h nenhuma implementao padro a herdar. A classe que implementa a
interface deve desenvolver todos os mtodos descritos na declarao para ser considerada correta.
As classes que utilizaro a interface precisam ser alteradas para indicar isso, como segue:
public <abstract> class Teste implements Interface1 <, Interface2, ...>. O mtodo da interface
ento implementado nesta classe. Os objetos das classes que implementam a interface so objeto da
interface.

Você também pode gostar