poo_modificador final e interface
DESCRIPTION
apresentação da disciplina de poo do curso de adsTRANSCRIPT
Programação Orientada a Objetos - POO
- Interface
Prof. DSc. Gilvan Martins Durães
Roteiro
O que vimos na última aula Modificador final Interface Exemplos Exercícios
Prof. DSc. Gilvan M. Durães 2POO – 2015.2
3
O que vimos nas últimas aulas...
Herança
Classes Abstratas Polimorfismo Sobrescrita x Sobrecarga de métodos método String toString() método boolean equals(Objecto o)
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
4
O Modificador final
classes finais não podem ser estendidas (ter subclasses).
variáveis finais são equivalentes a CONSTANTES.
métodos finais não podem ser sobrescritos (overriden) por subclasses da classe em que ele foi declarado.
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
5
O Modificador final
São usadas basicamente por segurança e eficiência.
Segurança porque ninguém poderá fazer uma subclasse de uma classe e adicionar comportamento malicioso a ela. Exemplo: estender uma classe do pacote system para copiar informação crítica de outros programas.
Eficiência pois a máquina virtual pode ser otimizada para classes não estendidas.
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
6
Classe final
// Uma classe final
public final class UmaClasseFinal {
//...
}
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
7
Variáveis finais
//São usadas para declarar constantes em programas Java
public class Constantes {
public final String AUTOR = “Gilvan Duraes”;
private final float PI = 3.14159;
}
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
8
Métodos finais
public class ClassesComMetodosFinais {
public static final void metodoUnicoEutil() {
//...
}
private final void apenasEuChamoEste() {
//...
}
}
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
9
Interface
As interfaces são estritamente modelos de comportamento.
As interfaces não podem ser instanciadas pois não produzem objetos.
A relação existente entre as classes que implementam uma Interface e a Interface é uma relação do tipo “implementa os métodos de”.
Se uma classe é definida por apenas métodos abstratos então é melhor defini-la como uma Interface.
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
10
Interface
Nenhum método de interface pode ter um corpo, ou seja, não tem um algoritmo definido para executar o comportamento. Mas, as classes que prometem implementar uma interface são obrigadas a implementar todos os métodos nela especificados.
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
11
Interface
Uma interface não herda de Object pois, além de Object ser uma classe, interfaces não possuem nenhuma classe no topo de sua hierarquia de herança. Diferente de Herança, uma classe pode implementar mais de
uma Interface!
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
12
Interface
public interface UmaInterface
extends Interface1, Interface2, Interface3 {
// todos as variáveis aqui são públicas, estáticas e finais
public static final int umaVariavel = 0;
// todos os métodos aqui são públicos e abstratos
public abstract int umMetodoAbstrato();
}
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
13
Interface
public interface UmaInterface
extends Interface1, Interface2, Interface3 {
// todos as variáveis se tornam públicas, estáticas e finais
int umaVariavel = 0;
// todos os métodos se tornam públicos e abstratos
int umMetodoAbstrato();
}Prof. DSc. Gilvan M. Durães
POO – 2015.2
14
Interface// colocada sob UmaOutraClasse na árvore de herança
public class MinhaClasse extends UmaOutraClasse
implements UmaInterface, OutraInterface {
//...
}
// colocada sob Object na árvore de herança
public class MinhaClasse2
implements UmaInterface {
//...
}
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
15
Interfaceinterface Fruta {
void apodrece();
void machuca();
}
class FrutaCitrica extends Food implements Fruta {
private Color minhaCor;
private int diasAteEstragar;
//...
}
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
16
Interfaceinterface Esfera {
void jogar();
void rolar();
}
class Laranja extends FrutaCitrica implements Esfera {
// implementa jogar e rolar
}
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
17
Usando Interfaces Laranja umaLaranja = new Laranja();
FrutaCitrica umaFrutaCitrica = (FrutaCitrica) new Laranja();
Fruta umaFruta = (Fruta) new Laranja();
Esfera umaEsfera = (Esfera) new Laranja();
umaFruta.apodrece(); // OK!
umaFruta.machuca(); // OK!
umaFrutaCitrica.apodrece(); // OK!
umaFrutaCitrica.machuca(); // OK!
umaFruta.jogar(); // Não pode !!!
umaEsfera.jogar(); // OK!
umaLaranja.apodrece(); // OK!
umaLaranja.machuca(); // OK!
umaLaranja.jogar(); // OK!
umaLaranja.rolar(); // OK!
Prof. DSc. Gilvan M. DurãesPOO – 2015.2
18
Atividade em sala...
...
Prof. DSc. Gilvan M. DurãesPOO – 2015.2