Escolar Documentos
Profissional Documentos
Cultura Documentos
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.