Private ao invés de public

5 respostas
D

Tenho um programa dividido em dois arquivos; Registro e principal

public class Registro {
	public String nome;
	public String fone;
	
	//construtor
	public Registro (String novoNome, String novoFone) {
		nome = novoNome;
		fone = novoFone;
	}
}

então, no principal é utilizado o nome e o fone; Eu preciso mudar o nome e o fone do registro para private e ainda continuar usando eles no principal. Como posso fazer isso?

public class Principal
{
	Vector listaTelefones;    
	
	public Principal() {
		listaTelefones = new Vector();
	}
	
	public void adicionarFone() {
		String nome,fone;
	
BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
		
		try {
			System.out.print ("Nome: ");
			nome = entrada.readLine();
			System.out.print ("Fone: ");
			fone = entrada.readLine();
			
			listaTelefones.add(new Registro(nome,fone));
			System.out.println ("Registro adicionado com sucesso!!!");
		}
		catch (IOException e) {
			System.out.println ("Houve um erro: " + e.getMessage());
		}
	}

Editado por JavaTeco. Quando tiver código no post, por favor, utilize a opção Code para ajudar na visualização. Obrigado.

5 Respostas

J

Fala cara…

Geralmente provemos a leitura/escrita de atributos privates com métos getter’s/setter’s. Explico:

public class Registro { 
   private String nome; 
   private String fone; 
    
   //construtor 
   public Registro (String novoNome, String novoFone) { 
      nome = novoNome; 
      fone = novoFone; 
   } 

   public void setNome(String novoNome) { nome = novoNome; }
   public String getNome() { return nome; }
}

OK… agora omo utilizar?

public class Principal {
     public static void main(String[] args) {
           Registro r = new Registro("JP", "99999999");
           r.setNome("doowidou");
           //r.nome = "doowidou"; Não pode mais fazer isso
     }
}

Qual a vantagem disto? Você pode colocar uma validação e implementar condições pra deixar o atributo conssitente.

Té mais.

D

Tá, mas no caso a entrada de um nome novo é ali dentro do try:
nome = entrada.readLine();
Devo mudar alguma coisa aí?

J

Fala cara…

Observe que a maneira que você vai entrar com os dados é desconhecida pra classe de entidade… que no caso é a classe Registro.

No seu caso, que você vai usar a entrada de dados pela shell, seria interessante, por questão de organização, que você separasse o tratamento das exceções que podem ocorrer na entrada de dados (try/catch) dos métodos setNome e setFone

Porque? esses métodos devem possuir código apenas para deixar os dados em um estado consistente, ou para implementar regras de negócio, eles não precisam se preocupar em tratar as exceções de entrada de dados que serão passados pra ele pq eles nem sabem como esses dados serão passados. ok? :slight_smile:

Qualquer dúvida, posta ae…

D

Tá, mas de qualquer forma, como fica a entrada de novos nomes e fones?

J

Classe Registro:

public class Registro { 
   private String nome; 
   private String fone; 
    
   //construtor 
   public Registro (String novoNome, String novoFone) { 
      nome = novoNome; 
      fone = novoFone; 
   } 

   public void setNome(String novoNome) { nome = novoNome; } 
   public String getNome() { return nome; } 
   public void setFone(String novoFone) { fone = novoFone; }
   public String getFone() { return fone; }
}

Classe principal:

public class Principal

{

Vector listaTelefones;
public Principal() {

listaTelefones = new Vector();

}

public void adicionarFone() {
String nome,fone;

BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));

try { 
     System.out.print ("Nome: "); 
     nome = entrada.readLine(); 
     System.out.print ("Fone: "); 
     fone = entrada.readLine(); 

     // Essa instrução funcionará sem problemas pois o construtor é public
     listaTelefones.add(new Registro(nome,fone)); 
     
     // Aqui explico como alterar depois do construtor ter sido chamado:
     Registro r = new Registro("", "");
     r.setNome(nome);
     r.setFone(fone);
     System.out.println ("Registro adicionado com sucesso!!!"); 
  } 
  catch (IOException e) { 
     System.out.println ("Houve um erro: " + e.getMessage()); 
  }

}

Criado 24 de maio de 2004
Ultima resposta 26 de mai. de 2004
Respostas 5
Participantes 2