Diretor
class Diretor extends Funcionario {
public boolean autentica( int senha) {
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
1 de 24 14/09/2015 16:19
Gerente
Funcionario
SistemaInterno
Diretor Gerente
como parametro}
}
class Gerente extends Funcionario { public boolean autentica( int senha) {
// verifica aqui se a senha confere com a recebida como parametro
// no caso do gerente verifica também se o departamento dele
// tem acesso}
}
class SistemaInterno { void login(Funcionario funcionario) {
// invocar o método autentica?
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
2 de 24 14/09/2015 16:19
SistemaInterno Funcionario
Funcionario autentica
Funcionario
login
SistemaInterno Diretor
Gerente
Funcionario
SistemaInterno
}}
class SistemaInterno { void login(Funcionario funcionario) {
funcionario.autentica(...); // não compila}
}
class SistemaInterno {
// design problemáticovoid login(Diretor funcionario) {
funcionario.autentica(...);}
// design problemáticovoid login(Gerente funcionario) {
funcionario.autentica(...);}
}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
3 de 24 14/09/2015 16:19
FuncionarioAutenticavel
Diretor Gerente
FuncionarioAutenticavel SistemaInterno
class FuncionarioAutenticavel extends Funcionario { public boolean autentica( int senha) {
// faz autenticacao padrão}
// outros atributos e métodos }
class SistemaInterno { void login(FuncionarioAutenticavel fa) {
int senha = //pega senha de um lugar, ou de um scanner de polegar
// aqui eu posso chamar o autentica!
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
4 de 24 14/09/2015 16:19
FuncionarioAutenticavel
autentica
SistemaInterno
login SistemaInterno
Cliente extends FuncionarioAutenticavel
Cliente
boolean ok = fa . autentica ( senha );
}}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
5 de 24 14/09/2015 16:19
Cliente getBonificacao
Diretor Gerente Cliente
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
6 de 24 14/09/2015 16:19
Gerente
Gerente Autenticavel
interface
Autenticavel
contrato Autenticavel: quem quiser ser Autenticavel precisa saber faze r: 1.autenticar dada uma senha, devolvendo um bo oleano
interface Autenticavel { boolean autentica( int senha);
}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
7 de 24 14/09/2015 16:19
Gerente
implements
class Gerente extends Funcionario implementsAutenticavel { private int senha;
// outros atributos e métodos
public boolean autentica( int senha) {if( this.senha != senha) {return false;
}// pode fazer outras possíveis verificações, como
saber se esse // departamento do gerente tem acesso ao Sistema
return true;
} }
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
8 de 24 14/09/2015 16:19
implements
Gerente Autenticavel
Gerente
Autenticavel
Gerente
Autenticavel
Autenticavel
SistemaInterno
Autenticavel a = new Gerente();// posso aqui chamar o método autentica!
class SistemaInterno { void login(Autenticavel a) {
int senha = // pega senha de um lugar, ou de um scanner de polegar
boolean ok = a.autentica(senha);
// aqui eu posso chamar o autentica! // não necessariamente é um Funcionario!// Mais ainda, eu não sei que objeto a
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
9 de 24 14/09/2015 16:19
Autenticavel
SistemaInterno Diretor
Diretor
Autenticavel SistemaInterno
autentica
Flexibilidade.}
}
class Diretor extends Funcionario implementsAutenticavel {
// métodos e atributos, além de obrigatoriamente te r o autentica }
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
10 de 24 14/09/2015 16:19
Fornecedor
Autenticavel
SistemaInterno
Autenticavel
Diretor Gerente Cliente
Autenticavel
Autenticavel diretor = new Diretor();Autenticavel gerente = new Gerente();
class SistemaInterno {
void login(Autenticavel a) {// não importa se ele é um gerente ou diretor// será que é um fornecedor?// Eu, o programador do SistemaInterno, não me preo cupo// Invocarei o método autentica}
}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
11 de 24 14/09/2015 16:19
default
List.sort
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
12 de 24 14/09/2015 16:19
Comparable
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
13 de 24 14/09/2015 16:19
Collections.sort()
Elefante Conexao ContaCorrente
Comparable
Conexao
Conexao
Conexao
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
14 de 24 14/09/2015 16:19
java.sql.Connection
DriverManager
interfaces AreaCalculavel
AreaCalculavel
interface AreaCalculavel {double calculaArea();
}
class Quadrado implements AreaCalculavel {private int lado;
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
15 de 24 14/09/2015 16:19
Quadrado Retangulo Circulo
Teste
public Quadrado ( int lado ) {this.lado = lado;
}
public double calculaArea() {return this.lado * this.lado;
}}
class Retangulo implements AreaCalculavel {private int largura;private int altura;
public Retangulo( int largura, int altura) {this.largura = largura;this.altura = altura;
}
public double calculaArea() {return this.largura * this.altura;
}}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
16 de 24 14/09/2015 16:19
AreaCalculavel
Circulo
Math.PI * raio * raio
ContaPoupanca
ContaCorrente
SeguroDeVida
implements
Tributavel ContaCorrente
class Teste { public static void main(String[] args) {
AreaCalculavel a = new Retangulo(3,2);System.out.println(a.calculaArea());
}}
class Circulo implements AreaCalculavel {// ... atributos (raio) e métodos (calculaArea)
}
interface Tributavel {double calculaTributos();
}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
17 de 24 14/09/2015 16:19
SeguroDeVida
TestaTributavel main
class ContaCorrente extends Conta implements Tributavel {
// outros atributos e métodos
public double calculaTributos() {return this.getSaldo() * 0.01;
}}
class SeguroDeVida implements Tributavel {public double calculaTributos() {return 42;
}}
class TestaTributavel {
public static void main(String[] args) {ContaCorrente cc = new ContaCorrente();cc.deposita(100);System.out.println(cc.calculaTributos());
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
18 de 24 14/09/2015 16:19
getSaldo t
cc Tributavel
GerenciadorDeImpostoDeRenda
main
Tributavel
GerenciadorDeImpostoDeRenda
Tributavel
Tributavel t = cc ;System.out.println(t.calculaTributos());
}}
class GerenciadorDeImpostoDeRenda {private double total;
void adiciona(Tributavel t) {System.out.println( "Adicionando tributavel: " + t);
this.total += t.calculaTributos();}
public double getTotal() {return this.total;
}}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
19 de 24 14/09/2015 16:19
GerenciadorDeImpostoDeRenda
getSaldo
Tributavel
Tributavel
Tributavel
SeguroDeVida ContaCorrente
PlanoDeCapitalizacao
Tributavel
public class TestaGerenciadorDeImpostoDeRenda {public static void main(String[] args) {
GerenciadorDeImpostoDeRenda gerenciador =
new GerenciadorDeImpostoDeRenda();
SeguroDeVida sv = new SeguroDeVida();gerenciador.adiciona(sv);
ContaCorrente cc = new ContaCorrente();cc.deposita(1000);gerenciador.adiciona(cc);
System.out.println(gerenciador.getTotal());
}}
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
20 de 24 14/09/2015 16:19
PlanoDeCapitalizacao
Tributavel
printf
conta-interface Conta
Conta
System.out.printf( "O saldo é: %.2f" , cc.getSaldo());
public interface Conta {public double getSaldo();
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
21 de 24 14/09/2015 16:19
ContaCorrente ContaPoupanca
public void saca ( double valor );public void atualiza( double taxaSelic);
}
class ContaCorrente implements Conta {// ...
}
class ContaPoupanca implements Conta {// ...
}
interface ContaTributavel extends Conta, Tributavel {}
class ContaCorrente implements ContaTributavel {// métodos
}
Conta c = new ContaCorrente();Tributavel t = new ContaCorrente();
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
22 de 24 14/09/2015 16:19
Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...
23 de 24 14/09/2015 16:19
Top Related