Câmpus Santa Helena Curso: Ciência da Computação Disciplina: Programação Orientada a Objetos AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos
Tema Polimorfismo de: coerção, overloading, inclusão e paramétrico Objetivos Entender o que é e para que serve o polimorfismo; Compreender os tipos de polimorfismo e suas aplicações; Compreender o que é amarração estática e dinâmica. Prof. Dr. Fernando Henrique Campos
Abstração Encapsulamento Herança Polimorfismo Pilares Orientação a Objetos Aula 8 Uma linguagem é caracterizada como Orientada a Objetos quando atende aos quatros seguintes tópicos: Orientação a Objetos
Polimorfismo O que é? O termo polimorfismo é originário do grego e significa muitas formas. Poli = Muitas Morphos = Formas Aula 8
Polimorfismo O que é polimorfismo? Aula 8 Capacidade de uma referência de classe de se associar a instâncias de diferentes classes em tempo de execução. Capacidade de um método de uma classe poder se adaptar a cada objeto derivado dela É uma das principais habilidades da orientação a objetos que consiste na operações se adequarem automaticamente aos objetos aos quais estão sendo aplicadas.
Polimorfismo Exemplo Pessoa sexo: char idade: int peso: double andar( ) falar ( ) Bebe Crianca Adulto Idoso andar( ) falar ( ) andar( ) falar ( ) andar( ) falar ( ) andar( ) falar ( )
Polimorfismo Exemplo Aula 8 imprimir( ) Idéia chave: Cada objeto sabe agir corretamente em resposta a mesma chamada de método!!
Polimorfismo Vantagens do polimorfismo Aula 8 Projeto e implementação de sistemas que são facilmente extensíveis; Novas classes podem ser adicionadas a partes gerais do programa com pouca ou nenhuma modificação; Através da utilização do polimorfismo é possível trazer clareza ao código, diminuir linhas do mesmo e ainda é possível inserir aplicações flexíveis; Para utilizar o polimorfismo, os objetos devem executar as mesmas ações (métodos), mesmo que com comportamentos diferentes.
Polimorfismo Tipos de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Overloading Coerção
Polimorfismo Tipos de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Overloading Coerção
Polimorfismo Ad-Hoc Aula 8 É o polimorfismo que ocorre em tempo de compilação; É implementado quando se deseja definir uma coisa específica; Diferente do universal, não pode ser usado em todo o lugar, logo sabemos quantas vezes ele será aplicado.
Polimorfismo Tipos de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Overloading Coerção
Tipos de Polimorfismo Coerção Aula 8 A linguagem de programação tem um mapeamento interno entre tipos Exemplo: Se o operador + é definido para somar dois número do tipo real e um inteiro é passado como parâmetro então o inteiro é coargido para real.
Tipos de Polimorfismo Coerção Exemplo
Prof. Dr. Fernando Henrique Campos Aula 8
Polimorfismo Tipos de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Overloading Coerção
Tipos de Polimorfismo Aula 8 Overloading (Sobrecarga de métodos) A permite que um nome de função seja usado mais de uma vez com diferentes assinaturas (tipos de parâmetros); Nesse caso, compilador automaticamente chama a função correta que deve ser utilizada. O que é a assinatura de um método??
Assinaturas Assinatura do método Aula 8 Refere-se a quantidade, tipos e ordem dos argumentos de um método Dessa forma podem existir métodos com o mesmo nome mas assinaturas diferentes Se a quantidade de argumentos for diferente as assinaturas são diferentes Se os tipos dos argumentos são diferentes as assinaturas são diferentes Se a ordem dos tipos dos argumentos forem diferentes as assinaturas são diferentes
Assinatura do métodos Exemplo calcular ( ) calcular (int x) calcular (double x) calcular (int x, double y) calcular (double x, int y) calcular (double x, int y, double z)
Tipos de Polimorfismo Overloading (Sobrecarga de métodos) Exemplo Aula 8
Prof. Dr. Fernando Henrique Campos Aula 8
Sobrecarga de métodos construtores Overloading (Sobrecarga de métodos) O método construtor, também é um método, dessa forma é possível definir mais do que um método construtor seguindo as mesmas regras de sobrecarga de métodos. A partir do momento em que é definido um método construtor diferente do Default, o compilador não aceitará mais o construtor Default.
Overloading (Sobrecarga de métodos) Sobrecarga de métodos construtores Exemplo Aula 8 public class Pessoa { public Pessoa ( ) { //método construtor default } }
Overloading (Sobrecarga de métodos) Sobrecarga de métodos construtores Exemplo public class Pessoa { public Pessoa ( ) { //método construtor } public Pessoa (String nome) { //método construtor } public Pessoa (String nome, int idade) { //método construtor } } Aula 8
Prof. Dr. Fernando Henrique Campos Aula 8
Polimorfismo Tipos de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Overloading Coerção
Polimorfismo Universal Aula 8 É o polimorfismo que ocorre em tempo de execução; Pode ser aplicado em vários casos, logo não pode se saber quantas vezes ele será aplicado; Funcionada potencialmente em um conjunto infinito de tipos de modo disciplinado.
Polimorfismo Tipos de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Overloading Coerção
Tipos de Polimorfismo Inclusão (Polimorfismo de herança, Overriding, Sobreposição ou reescrita de métodos) Estudo de caso Aula 8 Em uma empresa além de seu salário fixo todos os funcionários recebem uma bonificação padrão de 10% sobre o salário Para funções que requerem mais responsabilidade no entanto a bonificação sobre o salário é maior: Supervisor (20%), Gerente(30%) e Diretor (40%)
Overriding (Sobreposição ou reescrita de métodos) Estudo de caso Funcionario salario: double exibirsalario( ) adicionarbonificacao( ) Aula 8 Supervisor Gerente Diretor
Tipos de Polimorfismo Inclusão (Polimorfismo de herança, Overriding, Sobreposição ou reescrita de métodos) Também conhecido como polimorfismo de subclasse (ou subtipo); É o polimorfismo mais comum suportado pela maioria de linguagens de programação; Permite a redefinição de métodos de uma classe Filha; A redefinição de um método em subclasses herdeiras de uma classe base chama-se especialização.
Tipos de Polimorfismo Aula 8 Inclusão (Polimorfismo de herança, Overriding, Sobreposição ou reescrita de métodos) Sobreposição de métodos (override) em programação orientada a objetos, é um recurso da linguagem que permite que a subclasse, rescreva uma implementação especifica de um método que já esta previsto em uma superclasse; A implementação na subclasse sobrepõe a implementação na superclasse.
Tipos de Polimorfismo Inclusão (Polimorfismo de herança, Overriding, Sobreposição ou reescrita de métodos) Deve ser utilizado o mesmo nome e assinatura do método; É explicitado pela anotação @Override; O @Override no Java é nada mais nada menos que um diretiva de compilação, ou seja, ela orienta o compilador para alocação de memória, indicando que logo a seguir tem um método que deverá ser sobrescrito; Orienta também o desenvolvedor de aquele método já foi escrito na superclasse.
Tipos de Polimorfismo Inclusão (Polimorfismo de herança, Overriding, Sobreposição ou reescrita de métodos) Exemplo Aula 8
Inclusão (Polimorfismo de herança, Overriding, Sobreposição ou reescrita de métodos) Exemplo Aula 8 Peca - valor: double mover( ) Cavalo Peao Rei mover( ) mover( ) mover( )
Inclusão (Polimorfismo de herança, Overriding, Sobreposição ou reescrita de métodos) Exemplo public class Peca { int valor; public void mover ( ) { } } public class Rei extends Peca { @override public void mover ( ) { } } Aula 8
Sobreposição ou reescrita de métodos (override) Estudo de caso Funcionario salario: double exibirsalario( ) adicionarbonificacao( ) Aula 8 Supervisor Gerente Diretor adicionarbonificacao( ) adicionarbonificacao( ) adicionarbonificacao( )
Prof. Dr. Fernando Henrique Campos Aula 8
Polimorfismo Static binding X Dynamic ou late binding Estudo de caso
Polimorfismo Princípios do polimorfismo em herança Uma variável declarada em uma classe pode ser instanciada em qualquer subclasse. Exemplo Peca peca = new Cavalo(); Peca pedra = new Peao(); Peca Cavalo - tipo: String - valor: double mover( ) Peao mover( ) mover( )
Polimorfismo Princípios do polimorfismo em herança A decisão de quem chamar, depende do tipo de amarração (binding) Estática (Static) Dinâmica ou tardia (Dynamic or Late)
Polimorfismo Static binding X Dynamic ou late binding Amarração é a ligação da chamada de um método ao método; Amarração estática (static binding): define permanentemente o endereço do método durante a compilação; Amarração dinâmica ou tardia (dynamic or late binding): determina o endereço do método acionado no momento da execução.
Static binding Antigamente mover() mover() compilação 5027 call 5027 Amarração estática: decide a ligação entre chamada e execução na hora da compilação (na execução fica muito rápida)
Dynamic ou late binding Linguagens Modernas Peca mover() mover( ) Peca p1 = new Peca() Peca p1 = new Cavalo()? Cavalo mover( ) p1.mover()? mover()
Polimorfismo Aula 8 Amarração estática (Static binding) Problema E se a instanciação ocorrer dentro de um if? Como o compilador vai saber quem foi instanciado? É impossível o compilador saber em tempo de compilação quem será instanciado; O compilador não tem com decidir em tempo de compilação quem será chamado; O C++ decide pelo tipo da variável declarada então amarra na hora da compilação ao mover() da Superclasse, não importa quem você instanciou, isso é uma amarração estática.
Polimorfismo Static binding X Dynamic ou late binding Amarração é a ligação da chamada de um método ao método; Amarração estática (static binding): define permanentemente o endereço do método durante a compilação; Amarração dinâmica ou tardia (dynamic or late binding): determina o endereço do método acionado no momento da execução.
Polimorfismo Amarração dinâmica ou tardia (Dynamic or late binding) Na hora da compilação ele não resolve; Ele cria uma tabela de opções chamada de Vtable; Decide na hora da execução de acordo com o objeto instanciado (indireto).
Dynamic ou late binding Linguagens Modernas Peca mover() mover( ) Peca p1 = new Peca() Peca p1 = new Cavalo() Cavalo p1.mover() mover() mover( )
Dynamic ou late binding Linguagens Modernas Peca mover() mover( ) Peca p1 = new Peca() Peca p1 = new Cavalo() Cavalo mover( ) p1.mover() VTable Peca Cavalo mover()
Polimorfismo Amarração dinâmica ou estática Qual dos dois é mais coerentes? O Java e todas linguagens modernas, python, javascript não tem static binding; Mas por que o c++ tem static binding? É mais rápido
Prof. Dr. Fernando Henrique Campos Aula 8
Sobrecarga de Objetos Sobrecarga de Objetos Estudo de caso
Sobrecarga de Objetos Estudo de caso Animal emitirsom() Galinha Vaca Burro emitirsom() emitirsom() emitirsom()
Sobrecarga de Objetos Sobrecarga de Objetos Estudo de caso Problema Ao ser clicado sobre um animal deverá ser obrigatoriamente instanciada uma classe para emitir o som dele; Sobrecarga de memória. EXISTE OUTRA MANEIRA DE RESOLVER ISSO?
Sobrecarga de Objetos Estudo de caso Animal SomAnimal emitirsom() Som(animal: Animal) Galinha Vaca Burro emitirsom() emitirsom() emitirsom()
Sobrecarga de Objetos Estudo de caso
Sobrecarga de Objetos Estudo de caso Animal SomAnimal emitirsom() Som(animal: Animal) Galinha Vaca Burro emitirsom() emitirsom() emitirsom()
Polimorfismo Tipos de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Overloading Coerção
Tipos de Polimorfismo Paramétrico Aula 8 Uma única classe ou método pode ser utilizado com um conjunto de dados de diferentes tipos (sem qualquer relação entre si); São conhecidos como Classe ou métodos genéricos ou tipos genéricos. TEREMOS UMA AULA TRATANDO ESPECÍFICAMENTE DESTE TIPO DE POLIMORFISMO!
Revisão O que é quais são os tipos de polimorfismo? Quais as diferenças entre amarração estática e tardia? Prof. Dr. Fernando Henrique Campos
Câmpus Santa Helena Curso: Ciência da Computação Disciplina: Programação Orientada a Objetos OBRIGADO!!!! Prof. Dr. Fernando Henrique Campos