Programação Orientada a
Objetos
Aula 5
Curso: Análise e Desenvolvimento de Sistemas
Professor: Rafael Wendel Pinheiro
• Roteiro da Aula
– Encapsulamento
– Associação
– Polimorfismo
– Exercícios
2
Encapsulamento
3
• 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
• 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
• 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 );
}
}
}
• 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.
• 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
• 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
• 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;
}
}
• Encapsulamento
11
Pessoa p = new Pessoa();
p.setNome(“Joao”);
p.setEmail(“joao@ifspcapivari.com.br”);
System.out.println(“Nome: ” + p.getNome() );
System.out.println(“Email: ” + p.getEmail() );
• 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
Associação
13
• 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
• 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;
}
}
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;
}
}
• 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”
Polimorfismo
18
• 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
• 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?
Interfaces
21
• 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
• Interfaces
– Exemplo: Organograma de Funcionários da
Empresa XYZ.
23
• 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
• Interfaces
– Incompatibilidade: Operador não “autentica” no
sistema.
25
• 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
• Interfaces
27
• Implementação
28
Classe Funcionario
(Super-classe
Interface
IAutenticavel
• Implementação
– Classe Gerente
29
• Implementação
– Classe Diretor
30
• 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
32
• 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
• Fim!
34

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

  • 1.
    Programação Orientada a Objetos Aula5 Curso: Análise e Desenvolvimento de Sistemas Professor: Rafael Wendel Pinheiro
  • 2.
    • Roteiro daAula – Encapsulamento – Associação – Polimorfismo – Exercícios 2
  • 3.
  • 4.
    • Encapsulamento – Oconceito 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
  • 5.
    • Encapsulamento – Imaginea 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
  • 6.
    • Encapsulamento 6 public classCarro{ 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 ); } } }
  • 7.
    • 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.
  • 8.
    • 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
  • 9.
    • Encapsulamento – Métodoset 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
  • 10.
    • Encapsulamento 10 public classPessoa{ 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; } }
  • 11.
    • Encapsulamento 11 Pessoa p= new Pessoa(); p.setNome(“Joao”); p.setEmail(“joao@ifspcapivari.com.br”); System.out.println(“Nome: ” + p.getNome() ); System.out.println(“Email: ” + p.getEmail() );
  • 12.
    • 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
  • 13.
  • 14.
    • Associação – Aassociaçã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
  • 15.
    • Associação 15 public classEndereco{ 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; } }
  • 16.
    16 public class Cliente{ privateString 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; } }
  • 17.
    • 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”
  • 18.
  • 19.
    • 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
  • 20.
    • 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?
  • 21.
  • 22.
    • Interfaces – EmOO, 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
  • 23.
    • Interfaces – Exemplo:Organograma de Funcionários da Empresa XYZ. 23
  • 24.
    • Interfaces – NoSistema 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
  • 25.
    • Interfaces – Incompatibilidade:Operador não “autentica” no sistema. 25
  • 26.
    • Interfaces – Nessecaso, 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
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
    • Interfaces – Umaclasse 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
  • 32.
  • 33.
    • 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
  • 34.