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.