Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
03/09/12 1 Programação Orientada a Objetos - POO Prof. Emerson Freire POO – Conceitos POLIMORFISMO Como o próprio nome sugere Várias Formas. Possibilita a criação de objetos contendo métodos de mesmo nome, porém com execuções diferentes. Permite utilizar, portanto, um único nome para uma determinada ação e compartilhar com toda a hierarquia dos objetos. Enquanto a herança é um processo de especialização, o polimorfismo é um processo de generalização. O polimorfismo pode ser implementado por intermédio da sobrescrita e sobrecarga de métodos. 03/09/12 2 POO – Conceitos POLIMORFISMO Sobrescrita de métodos (OVERRIDING): Um método da superclasse é redefinido nas subclasses para modificar seu comportamento, mas mantendo a assinatura original Exemplo: Uma superclasse Classe Animal, pode gerar objetos do tipo Peixe, Pássaro e Anfíbio. Todos se movem, portanto, possuem um método public void mover(); Porém, cada animal pode mover-se de maneira diferente, exigindo uma implementação diferente para cada um, embora com o mesmo nome: public void mover(). POO – Conceitos POLIMORFISMO Sobrecarga de métodos (OVERLOADING): Um mesmo método pode ser definido diversas vezes, sendo que cada um executa uma ação específica conforme os parâmetros recebidos. Sendo assim, as assinaturas serão diferentes. Exemplo: Uma superclasse Soma pode realizar esta operação para números inteiros e números ponto-flutuante. Portanto, é possível criar um método chamado Soma que receberá parâmetros diferentes; public void Soma( int valor1, int valor2); public void Soma( double valor1, double valor2); 03/09/12 3 POO – Conceitos Override x Overloading @Override: uma anotação em Java. São metadados que iniciam por @. Permitem ao compilador, neste caso, saber que o método seguinte é sobrescrito. POO – Conceitos Referência implícita super super: Utilizado para referenciar os atributos e métodos da classe pai (ou superclasse). Exemplo: Uma classe Pessoa possui o atributo rg. A classe Funcionario é herdeira de Pessoa, portanto: System.out.println( super.rg); imprimirá o valor armazenado no atributo rg da superclasse. ! ! 03/09/12 4 POO – Conceitos O modificador final na declaração de classes Quando o modificador final aparece na declaração da classe, significa que aquela classe não pode ser estendida, ou seja, herdada. Exemplo: final class ContaCorrente { //corpo da classe; } Caso haja a tentativa de estendê-la, ocorrerá um erro: Class ContaCorrenteDiferente extends ContaCorrente{ } à Cannot inherit from final… POO – Conceitos O modificador final na declaração de métodos Quando o modificador final aparece na declaração de métodos, significa que aquele método não poderá ser sobrescrito (override) em classes filhas. Exemplo: public final void Quadrado (int a, int b) { //corpo do método; } Caso haja a tentativa de override um erro: Public void Quadrado (int a, int b) { } à Cannot override; … overridden method is final… 03/09/12 5 POO – Conceitos Classes Abstratas e Concretas Uma classe abstrata é aquela que NÃO permite a criação de Objetos; (usa-se o modificador abstract) Uma classe concreta, ao contrário, permite a geração de instâncias; Usa-se classes abstratas, geralmente, quando uma classe serve apenas de base para outra. Por exemplo: Classe Pessoa. public abstract class Pessoa{ } Pessoa meuFuncionario = new Pessoa(); à ERRO! PessoaFuncionario meuFuncionario = new PessoaFuncionario(); à OK! Portanto, PessoaFuncionario é subclasse de Pessoa. POO – Conceitos Modificador abstract em métodos O modificador abstract também pode ser utilizado em métodos, gerando métodos abstratos. Quando um método é apenas definido na superclasse e implementado nas classes herdeiras: Exemplo: A Classe Veículo possui o método acelerar(), porém um objeto veículo Automóvel pode acelerar de maneira diferente de um objeto veículo Avião. Portanto na classe Veículo temos apenas: public abstract void acelerar(); E a implementação é feita nas subclasses: Classe Automovel: @override public void acelerar(){ velocidade++;} Classe Aviao: @override public void acelerar(){ velocidade++ * 100;} 03/09/12 6 JAVA – noções básicas Exercício No processo de informatização de uma prefeitura está sendo requerido o cálculo dos impostos locais. Pode-se distinguir duas categorias de habitação: habitações para uso profissional e residenciais (habitação individual), sendo que o imposto será calculado de maneira diferente para cada categoria. As Habitações Profissionais e Habitações Individuais possuem algumas características comuns, como: proprietário, endereço, área de construção. O imposto é calculado na seguinte base: 2R por metro quadrado, onde R é o valor de base em reais do imposto (p.ex. R$ 2,00). O cálculo do imposto de uma habitação individual calcula-se em função da área construída, do número de cômodos e da presença ou não de uma piscina. Acima de 5 cômodos adiciona-se R$ 100,00. Em caso de haver piscina, também haverá um acréscimo de R$ 200,00. Já o imposto de uma habitação profissional levará em consideração o número de empregados, sendo que existirá um acréscimo de R$ 500,00 a cada 10 empregados. Exiba os impostos separadamente e no total. Faça a implementação em Java utilizando o máximo dos conceitos POO vistos até aqui: classes, objetos, encapsulamento, herança, polimorfismo, etc. Caso necessário, crie novas funcionalidades no sistema.