Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Presbiteriana Mackenzie Polimorfismo (Herança) Profa. Ana Cristina dos Santos Faculdade de Computação e Informática Linguagem de Programação I Conteúdo • Orientação a Objetos: – Herança – Sobrecarga (Overloading ou Overload) – Sobrescrita (Overrinding ou Override) • Polimorfismo • Conversão de tipos de instância (type casting) Polimorfismo 2 Herança • Herança é o mecanismo da Programação Orientada à Objetos (POO) que permite a definição de novas classes a partir de uma já existente – Entre suas características, podemos destacar: • A generalização de características e comportamentos de classes irmãs • Reutilização de atributos e métodos • Isso é possível mesmo quando não se tem acesso ao código-fonte da superclasse Polimorfismo 3 Herança • O mecanismo de herança sempre envolve dois elementos: – Superclasse • Aquela que representa as características genéricas de um conjunto de objetos – Subclasse • Aquela que estende a superclasse para incluir a representação de características específicas de um subconjunto desses objetos Polimorfismo 4 Herança • Características de herança na linguagem Java: – O termo extends é utilizado na declaração de uma subclasse para especificar quem é sua superclasse • Caso ele seja omitido, a classe Object será assumida como a superclasse da nova classe – A referência this é utilizada para referir-se ao objeto corrente de uma classe – A referência super possibilita que atributos e métodos da superclasse sejam referenciados pelos métodos da subclasse Polimorfismo 5 Herança Polimorfismo 6 Sobrecarga – A sobrecarga (overload) é a implementação, em uma mesma classe ou em classes ligadas pelo mecanismo de herança – Suas características são as seguintes: • Duas ou mais versões distintas para um mesmo método ou construtor • Cada versão manifesta comportamentos distintos • O que distinguirá cada versão é sua assinatura do método, ou seja, seu conjunto de parâmetros Polimorfismo 7 Sobrecarga (Exemplo 01) Polimorfismo 8 Sobrecarga (Exemplo 02) Polimorfismo 9 Sobrescrita – A sobrescrita (override) é a implementação de métodos em subclasses que possuem o mesmo nome e assinatura de métodos de sua superclasse – Suas características são as seguintes: • Anular o comportamento que o método apresentava na superclasse ou acrescentar novas instruções • O novo método deve ter: – exatamente o mesmo nome daquele que queremos sobrescrever – a mesma lista de parâmetros (assinatura) – o mesmo tipo de retorno Polimorfismo 10 Sobrescrita (Exemplo 03) Polimorfismo 11 Polimorfismo • Palavra de origem grega que significa muitas formas – É um mecanismo da POO que possibilita: • Que um trecho de código assuma comportamentos diferenciados de acordo com o estado do objeto • Que os objetos possam ser tratados de forma genérica • Que métodos sejam sobrecarregados com o mesmo nome e assinaturas diferentes 12 Polimorfismo Polimorfismo • Existem duas categorias de polimorfismo: – Polimorfismo Universal: • Inclusão: ocorre quando uma variável da superclasse guarda a referência de um objeto da subclasse; • Paramétrico: na linguagem Java é representado pelo uso de tipos genéricos. – Polimorfismo Ad-Hoc: • Coerção: a linguagem de programação é a responsável pela coerção de tipos (conversão automática de tipos); • Sobrecarga: métodos com o mesmo nome na classe. 13 Polimorfismo Polimorfismo • Qual o comportamento dos objetos com o polimorfismo? – Os objetos de subclasses distintas passam a ser vistos como objetos de uma mesma superclasse – Isso significa que o método apropriado a ser executado será escolhido automaticamente baseado na subclasse em que o objeto foi criado 14 Polimorfismo Polimorfismo (Exemplo 04) 15 Polimorfismo Polimorfismo (Exemplo 04) 16 Polimorfismo Polimorfismo (Exemplo 04) 17 Polimorfismo Polimorfismo (Exemplo 04) 18 Polimorfismo • O polimorfismo está no método fala() – Note que a classe Animal é a generalização das classes Cachorro e Gato, logo todo cachorro é um Animal e todo Gato também é um Animal – Com isto é possível armazenar a instância do objeto Cachorro ou Gato em uma variável do tipo Animal e com isto podemos realizar o polimorfismo através do método fala() Polimorfismo (Exemplo 05) 19 Polimorfismo Polimorfismo (Exemplo 05) 20 Polimorfismo • A classe Veiculo é a superclasse das subclasses Onibus e Caminhao – Esse exemplo mostra tanto a sobrecarga de construtores quanto a sobrecarga de métodos – E as classes Onibus e Caminhao, por sua vez, ilustraram a sobrescrita de métodos da classe Veiculo Polimorfismo (Exemplo 05) 21 Polimorfismo ● Sobrecarga (construtor) ● Sobrecarga (método) ● Sobrescrita Conversão de Tipo (Type Casting) 22 Polimorfismo • A operação de cast de objetos é semelhante à operação de cast de tipos primitivos • A diferença é que: – na conversão de tipos primitivos, perdemos informação e dizemos ao compilador que concordamos – na conversão de tipos de instância, corremos o risco de causar uma exceção e dizemos ao compilador que concordamos com correr esse risco Conversão de Tipo (Type Casting) 23 Polimorfismo Conversão de Tipo (Type Casting) 24 Polimorfismo • O type casting aplicado em objetos tem as seguintes características: – É possível fazer cast de classes desde que estejam em uma mesma hierarquia – Não podemos fazer cast entre classes "irmãs", tal como entre Funcionario e Cliente – O cast não representa uma mudança estrutural do objeto Conversão de Tipo (Type Casting) 25 Polimorfismo • Existem dois tipos de type casting, são eles: – Cast up: conversão para classes localizadas nos níveis acima da hierarquia – Cast down: conversão para classes localizadas nos níveis inferiores da hierarquia Conversão de Tipo (Type Casting) 26 Polimorfismo • Cast up – Com base na hierarquia de classes do diagrama abaixo, podemos concluir que: • Todo Cliente é uma Pessoa e toda Pessoa é um Object Conversão de Tipo (Type Casting) 27 Polimorfismo • Cast up – Com base na hierarquia de classes do diagrama abaixo, podemos concluir que: • Todo Cliente é uma Pessoa e toda Pessoa é um Object – Portanto, podemos realizar a operação de cast up, visualizando um objeto da classe Cliente como Pessoa ou Object, mas o objeto não perderá definitivamente suas características de Cliente – O cast up pode ser explícito ou automático Conversão de Tipo (Exemplo 06) 28 Polimorfismo Conversão de Tipo (Type Casting) 29 Polimorfismo • Cast down – A operação de cast down é oposta à operação de cast up, isto é, ao invés de generalizarmos um objeto vamos especializá-lo – Se um objeto é criado como Cliente, e sofre um cast up para Pessoa, é possível fazer o cast down para voltar a visualizá-lo como Cliente Conversão de Tipo (Type Casting) 30 Polimorfismo • Cast down – Lembrando que: Todo Cliente é uma Pessoa, mas nem toda Pessoa é um Cliente Conversão de Tipo (Type Casting) 31 Polimorfismo • Cast down – Lembrando que: Todo Cliente é uma Pessoa, mas nem toda Pessoa é um Cliente – Se um objeto é criado e declarado como Pessoa, não é possível fazer o cast down para transformá- lo em Cliente – Quando for possível realizar a operação de cast down, deverá ser feita sempre de forma explícita Conversão de Tipo (Exemplo 07) 32 Polimorfismo ObrigadaProfa. Ana Cristina dos Santos anacristina.santos@mackenzie.br 33
Compartilhar