Dúvida sobre nomes de atributos e variáveis de métodos

2 respostas
poojava
B

Olá amigos, estou iniciando em POO e surgiu algumas dúvidas. Abaixo coloquei um pequeno trecho de código de um exercício que estou desenvolvendo. A dúvidas são as seguinte:

  • Eu poderia declarar no método variáveis com os mesmos nomes dos atributos? Por exemplo ao invés de String tp e int nc colocar String tipo e int numConta;

  • Estou fixando o conceito sobre setters e getters ainda, porém percebi que umas das funcionalidades é garantir segurança na manipulação de atributos no método main. Porém, visando boas práticas, seria ruim manipular diretamento os atributos dentro dos métodos das classes? Exemplo trocar o this.settitpo(tp); por tipo=tp;

package curso_poo_aula5;

public class ContaBanco {

public int numConta;

protected String tipo;

private String dono;

private float saldo;

private boolean status;
public ContaBanco(){
    this.saldo=0;
    this.status=false;
}

public void abrirConta(String tp, int nc){
    
    **this.settitpo(tp);**
    this.setstatus(true);
    if(tp=="CC"){
        saldo=50;
    }
    else if(tp== "CP"){
        saldo=150;
    }
    this.setnumConta(nc);  
}

2 Respostas

pmlm

Sim, sem qualquer problema. Tens o this para distinguir os atributos da classe. É muito comum teres

private String tipo;
...    

public void setTipo(String tipo){
    this.tipo = tipo;
}

Não é para garantir segurança para o main mas para outras classes que usem o teu código. Exemplo prático: o campo saldo na tua ContaBanco. Certamente que não queres que nenhuma classe possa fazer

ContaBanco conta = new ContaBanco (); // inicias com saldo a 0
conta.saldo = 99999999; // magia, sou rico

Ao colocar o atributo como privado, evitas que se possa fazer o set e expoes só um getSaldo() para que se possa em qualquer altura consultar o saldo da conta (na realidade mais para frente vais aprender que com Reflection também consegues alterar os atributos privados).

Nos métodos internos é perfeitamente aceitável e normal aceder diretamente aos atributos:

public void abrirConta(String tp, int nc){
    tipo = tp;   // como os nomes são diferentes, aqui o this.tipo é opcional, embora seja uma boa prática
    this.status = true;  // aqui seguindo a boa prática, em vez de ter apenas   status = true;
    ....
B

Obrigado! Ficou tudo mais claro agora. Eu poderia colocar o saldo como private e só exibr ele então.

é conveniente usar métodos setters dentro dos métodos das classes? Como no exemplo abaixo:

public void abrirConta(String tipo_de_conta, int n_daconta, String nome_dono){

this.settitpo(tipo_de_conta);
    this.setstatus(true);
    if(tipo_de_conta=="CC"){
        this.setsaldo(50);
    }
    else if(tipo_de_conta== "CP"){
        this.setsaldo(150);
    }
    this.setnumConta(n_daconta);
    this.setdono(nome_dono);
Criado 23 de abril de 2020
Ultima resposta 23 de abr. de 2020
Respostas 2
Participantes 2