Buscar

ltp2_parte3

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

*
*
*
Que problemas de controle de dados 
podemos ter na classe abaixo?
_____________________
class Conta {
 String nome;
 double saldo;
 void saca(double quantidade) {
 	double novoSaldo = this.saldo - quantidade;
 this.saldo = novoSaldo;
 }
 void deposita(double quantidade)
 {
 this.saldo += quantidade;
 }
}
.
*
*
*
Visibilidade
_____________________
Visibilidade indica até que ponto os atributos (variáveis de instância) e os métodos declarados em uma classe são acessíveis a outras classes.
Os termos public e private são responsáveis por controlar a visibilidade entre os elementos das classes.
Public e Private são chamados de Controladores de acesso.
*
*
*
Controladores de acesso
_____________________
As variáveis de instancia e os métodos que são declaras pelo public, podem ser instanciados por qualquer classe.
O termo private restringe o acesso aos métodos e as variáveis somente a própria classe que os originou, nenhum objeto externo poderá instanciar esses elementos.
*
*
*
Usando public e private.
_____________________
public class Poupanca
{
 private double taxa_rendi=0.06;
 private double total_conta=0.0;
 public void investir (double invest)
 {
 total_conta = total_conta + invest + (taxa_rendi*total_conta);
 System.out.println("total da conta:"+total_conta);
 }
}
public class Cliente
{ 
 public static void main (String args[])
 {
 Poupanca poup = new Poupanca ();
 poup.investir(20.00);
 }
}
*
*
*
Encapsulamento
_____________________
Encapsular tem como objetivo esconder todos os membros de uma classe (como vimos acima), além de esconder como funcionam as rotinas (no caso métodos) do nosso sistema.
Encapsular é fundamental para que seu sistema seja sucetível a mudanças: não precisaremos mudar uma regra de negócio em vários lugares, mas sim em apenas um único lugar, já que essa regra está encapsulada.
*
*
*
Interface de classe
_____________________
O conjunto de métodos públicos de uma classe é também chamado de interface da classe, pois esta é a única maneira a qual você se comunica com objetos dessa classe.
É sempre bom programar pensando na interface da sua classe, como seus usuários a estarão utilizando, e não somente em como ela irá funcionar.
A implementação em si, o conteúdo dos métodos, não tem tanta importância para o usuário dessa classe, uma vez que ele só precisa saber o que cada método pretende fazer, e não como ele faz, pois isto pode mudar com o tempo.
*
*
*
Interfaces no dia-a-dia
_____________________
Quando você dirige um carro, o que te importa são os pedais e o volante (interface) e não o motor que você está usando (implementação). 
É claro que um motor diferente pode te dar melhores resultados, mas o que ele faz é o mesmo que um motor menos potente, a diferença está em como ele faz. 
Para trocar um carro a álcool para um a gasolina você não precisa reapreender a dirigir! 
Trocar a implementação dos métodos não precisa mudar a interface, fazendo com que as outras classes continuem usando eles da mesma maneira.
*
*
*
Implementação de Interface
_____________________
class Cliente {
	private String cpf;
	public void mudaCPF(String cpf) {
		if (contarDigitoCPF(cpf)) {
			this.cpf = cpf;
	 }
	}
	private boolean contarDigitoCPF (String cpf) {
	 if (cpf.length() == 11 ) {
		 return true;
	 }
	 else {
		 return false;
	 }
	}
}
*
*
*
Implementação de Interface
_____________________
Construa uma classe com método main chamada CriaCliente, que instancie um objeto da classe Cliente anterior;
Tente manipular os dados dos atributos e com método contarDigitoCPF da classe Cliente;
Por fim, manipule o método
*
*
*
Getters e Setters
_____________________
Para permitir o acesso aos atributos (já que eles são private) de uma maneira controlada, a prática mais comum é criar dois métodos, um que retorna o valor e outro que muda o valor.
O padrão para esses métodos é de colocar a palavra get ou set antes do nome do atributo. 
*
*
*
Classe Conta com gets e sets
_____________________
public class Conta {
private double saldo;
private double limite;
public double getSaldo() {
return this.saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public double getLimite() {
return this.limite;
}
}
*
*
*
Boas práticas
_____________________
É uma má prática criar uma classe e, logo em seguida, criar getters e setters pros seus atributos. 
Você só deve criar um getter ou setter se tiver a real necessidade. 
Repare que nesse exemplo setSaldo não deveria ter sido criado, já que queremos que todos usem deposita() e saca().
*
*
*
Algumas observações
_____________________
O método getSaldo não devolve simplesmente o saldo... e sim o que queremos que seja mostrado como se fosse o saldo. 
Utilizar getters e setters não só ajuda você a proteger seus atributos, como também possibilita ter de mudar algo em um só lugar... chamamos isso de encapsulamento, pois esconde a maneira como os objetos guardam seus dados. 
*
*
*
Getter e Setter para atributos boolean
_____________________
O padrão dos métodos get e set não vale para as variáveis de tipo boolean.
 Esses atributos são acessados via is e set. 
Por exemplo, para verificar se um carro está ligado seriam criados os métodos isLigado e setLigado.
*
*
*
Exercício 4
_____________________
Crie uma classe chamada Disco, que contenha o atributo capacidadeDisco (int), e também os métodos setcapacidadeDisco (int capacidade) e getcapacidadeDisco. O primeiro método irá apanhar o valor do argumento capacidade e somá-lo ao atributo capacidadeDisco. Já o segundo, retorna o valor do atributo capacidadeDisco.
*
*
*
Exercício 4
_____________________
Crie uma segunda classe chamada Computador, que tem como atributos modelo (String) e disc (Disco), e também os métodos, setModelo (String n), que irá atribuir valor do argumento n à variável do atributo modelo, e getModelo, irá retornar o valor do atributo modelo. Além desses métodos, deverá ser criado o getTotalDisco(), que retornará o valor da capacidade do disco referente ao atributo disc. Crie um método private chamado isLimiteCapacidade, que verifique se a capacidade do disco for superior a 8, então retornará true, caso contrário retornará false. Crie também outro método chamado setAdicionarDisco (Disco disco,int quantidade), que tem como objetivo verificar o status do método isLimiteCapacidade(), se for true imprima "Não é possível adicionar mais disco“, caso contrário adicione o valor de quantidade para a capacidade do disco do atributo disc.
*
*
*
Exercício 4
_____________________
Por fim, crie uma classe principal chamada CriarComputador, onde deve ser instanciado os objetos das classes Disco e Computador. Atribua valor aos métodos setModelo e imprima o valor de Modelo usando getModelo. Adicione o valores ao método setAdicionarDisco e imprima o valor de getTotalDisco().

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes