34
Programação Orientada a Objetos Aula 5 Curso: Análise e Desenvolvimento de Sistemas Professor: Rafael Wendel Pinheiro

Aula 5 encapsulamento, associação, polimorfismo, interfaces

Embed Size (px)

Citation preview

Page 1: Aula 5   encapsulamento, associação, polimorfismo, interfaces

Programação Orientada a Objetos

Aula 5Curso: Análise e Desenvolvimento de Sistemas

Professor: Rafael Wendel Pinheiro

Page 2: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Roteiro da Aula

– Encapsulamento– Associação– Polimorfismo– Exercícios

2

Page 3: Aula 5   encapsulamento, associação, polimorfismo, interfaces

Encapsulamento

3

Page 4: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento– O conceito de encapsulamento visa

“esconder” atributos e métodos de uma classe que são interessantes não serem “vistos” fora da classe.

– Nesse contexto, quem for consumir a classe, saberá “o que ela faz” e não “como ela faz”.

– A classe será acessada apenas por seus métodos públicos, que são as “interfaces da classe”.

4

Page 5: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento– Imagine a classe “Carro”. Essa classe possui

os atributos capacidadeTanque e qtdeCombustivel.

– É interessante que esses atributos sejam implementados como “privados” para garantir que anomalias como quantidade > capacidade.

5

Page 6: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento

6

public class Carro{ private int capacidadeTanque; private int qtdeCombustivel;

public Carro(int capacidadeTanque){ this.capacidadeTanque = capacidadeTanque; }

public void abastecer(int qtdeCombustivel){ if((this.qtdeCombustivel + qtdeCombustivel) > this.capacidadeCombustivel){ System.out.println(“Quantidade excede o limite do tanque!”); } else{ this.qtdeCombustivel = this.qtdeCombustivel + qtdeCombustivel;, System.out.println(“Carro abastecido. Quantidade atual: ” + this.qtdeCombustivel ); } } }

Page 7: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento

7

Carro c = new Carro(50);c.abastecer(40); // Imprime: “Carro abastecido. Quantidade atual: 40”c.abastecer(15); // Imprime: “Quantidade excede o limite do tanque”c.abastecer(10); // Imprime: “Carro abastecido. Quantidade atual: 50”

Externamente não é possível saber que o método abastecer está acessando os atributos capacidadeTanque e qtdeCombustivel e por vezes alterando esse segundo.

Page 8: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento– É interessante que todos os atributos de uma

classe sejam encapsulados, ou seja, não sejam públicos.

– Dessa forma, eles não poderão ser acessados/modificados diretamente fora da classe, apenas através de comportamentos (métodos).

– Para isso, deve-se implementar os métodos set e get.

8

Page 9: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento– Método set serve para atribuir um valor a uma

propriedade da classe.– Método get serve para recuperar/visualizar o

valor de uma propriedade da classe

9

Page 10: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento

10

public class Pessoa{ private String nome; private String email;

public void setNome(String nome){ this.nome = nome; }

public String getNome(){ return this.nome; }

public void setEmail(String email){ this.email = email; }

public String getEmail(){ return this.email; }}

Page 11: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Encapsulamento

11

Pessoa p = new Pessoa();p.setNome(“Joao”);p.setEmail(“[email protected]”);

System.out.println(“Nome: ” + p.getNome() ); System.out.println(“Email: ” + p.getEmail() );

Page 12: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Exercício 1:– Crie a classe Usuario com os atributos nome,

login e senha.– Como você implementaria a classe para que o

atributo nome só salvasse nomes com CAIXA ALTA, login só caixa baixa e senha uma String com limite de 16 caracteres?

– Implemente!!!

12

Page 13: Aula 5   encapsulamento, associação, polimorfismo, interfaces

Associação

13

Page 14: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Associação– A associação entre classes ocorre quando o

atributo de uma classe é do tipo de outra classe.

– Por exemplo, imagine a classe Endereço com os atributos rua e numero. Imagine também a classe Cliente que tem os atributos nome e idade. Cliente possui Endereço, logo, nessa classe terá um atributo do tipo Endereço.

14

Page 15: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Associação

15

public class Endereco{ private String rua; private String numero;

public void setRua(String rua){ this.rua = rua; }

public String getRua(){ return this.rua; }

public void setNumero(String numero){ this.numero = numero; }

public String getNumero(){ return this.numero; }}

Page 16: Aula 5   encapsulamento, associação, polimorfismo, interfaces

16

public class Cliente{ private String nome; private int idade; private Endereco endereco;

public void setNome(String nome){ this.nome = nome; }

public String getNome(){ return this.nome; }

public void setIdade(int idade){ this.idade = idade; }

public int getIdade(){ return this.idade; }

public void setEndereco(Endereco endereco){ this.endereco = endereco; }

public Endereco getEndereco(){ return this.endereco; }}

Page 17: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Associação

17

Endereco e = new Endereco(); e.setRua(“Rua das Flores”); e.setNumero(“123”);

Cliente c = new Cliente(); c.setNome(“Joao”); c.setIdade(30); c.setEndereco(e);

System.out.println(“Rua: ” + c.getEndereco().getRua() ); //Imprime: “Rua: Rua das Flores”

Page 18: Aula 5   encapsulamento, associação, polimorfismo, interfaces

Polimorfismo

18

Page 19: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Polimorfismo– Polimorfismo é a capacidade de uma instância

se portar de várias formas de acordo com sua referência.

– Por exemplo, retome o projeto da aula anterior onde existia a classe Funcionario e Gerente.

– Sabe-se que todo gerente é um funcionário, e isso é viabilizado através da herança.

19

Page 20: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Polimorfismo

20

Gerente g = new Gerente(“Joao”); g.salario = 1500; g.horasExtras = 10; Funcionario f = g; f.calcularSalarioTotal();

Vai ser executado o método da classe Funcionario ou Gerente?

Page 21: Aula 5   encapsulamento, associação, polimorfismo, interfaces

Interfaces

21

Page 22: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Interfaces– Em OO, as Interfaces fornecem uma lista de

métodos que as classes que a implementarem deverão ter.

– Sua principal função é fornecer um mecanismo de desacoplar as classes (diminuir a dependência entre as classes)

– Serve como um “contrato” que todas as classes devem cumprir quando assumem a implementação da Interface.

22

Page 23: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Interfaces– Exemplo: Organograma de Funcionários da

Empresa XYZ.

23

Page 24: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Interfaces– No Sistema da Empresa XYZ os Diretores e

Gerentes possuem acesso através de um login/senha. Os Operadores NÃO POSSUEM acesso ao sistema.

– Como fazer?

24

Page 25: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Interfaces– Incompatibilidade: Operador não “autentica” no

sistema.

25

Page 26: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Interfaces– Nesse caso, pode-se criar uma Interface

“IAutenticavel” e nela declarar o método “autenticar(): boolean”. Todas as classes que tiverem acesso através de login e senha deverão implementar essa Interface e consequentemente possui o método “autenticar(): boolean”

26

Page 27: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Interfaces

27

Page 28: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Implementação

28

Classe Funcionario (Super-classe

Interface IAutenticavel

Page 29: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Implementação– Classe Gerente

29

Page 30: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Implementação– Classe Diretor

30

Page 31: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Interfaces– Uma classe pode implementar várias Interfaces

distintas– A classe pode ter outros métodos particulares

além daqueles declarados pela Interface a qual implementa

– Uma variável do tipo “Interface” pode receber uma instância de qualquer classe que a implementa.

31

Page 32: Aula 5   encapsulamento, associação, polimorfismo, interfaces

32

Page 33: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Exercício 2:– Crie uma classe chamada ContaBancaria. Essa classe

deverá ter os atributos numeroConta, saldo e historico. Faça os métodos:

• Construtor para receber o numero e o saldo inicial da conta.• depositar: recebe um valor e acopla ao saldo• sacar: recebe um valor a ser sacado do saldo• consultarSaldo: Imprime o número da conta e o saldo atual.

(Obs: cada consulta resulta em uma taxa de 0,25 no saldo)• aplicarReajuste: Atualiza o saldo em 0,02%• exibirHistorico: deverá exibir todas as ações já executadas

por essa conta.33

Page 34: Aula 5   encapsulamento, associação, polimorfismo, interfaces

• Fim!

34