Aula 5 da disciplina de Programação Orientada a Objetos (POO), do curso de ADS do IFSP Capivari. Os slides abordam conceitos importantes do paradigma orientado a objetos, como encapsulamento, associação, polimorfismo e interfaces
4. • 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
5. • 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
6. • 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 );
}
}
}
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é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
10. • 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;
}
}
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
14. • 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
15. • 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. 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;
}
}
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”
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?
22. • 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
24. • 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
26. • 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
31. • 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
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