Interfaces - Java e Orientação a Objetos

24
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

Transcript of Interfaces - Java e Orientação a Objetos

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

encontra a Caelum também em:

Blog Caelum

CursosOnline

Facebook

Newsletter

Casa doCódigo

Twitter

Interfaces - Java e Orientação a Objetos http://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/...

24 de 24 14/09/2015 16:19