Acessando os atributos de uma classe

7 respostas
_

Olá pessoal,

Estou com uma dúvida. imaginando que tenho uma classe chamada “Livro” que tem como uma variável de instância uma referencia a outra classe chamada “Autor”.

public class Livro {

private Autor autor;
private String nome;
private String editora;

Como é de costume, fiz todos os GET/SET referentes aos atributos dessa classe.

Gostaria de saber se é “errado” do ponto de vista de Orientação ao Objeto fazer um GET pra variável autor da seguinte forma :

public Autor getAutor() {
return autor;
}

É assim que deve ser feito ou existe alguma forma melhor?

Obrigado,pessoal

7 Respostas

nicoweda

Esta certo…

Qual outra maneira vc tinha imaginado?

_

Então, é que um amigo meu disse que esse método é “pouco lógico”. Mas a explicação dele não me convenceu, por isso resolvi tirar a dúvida com vcs…

Realmente só consigo imaginar esse modo. Talvez se declarasse autor" como protected ao invés de private eu pudesse acessa-lo diretamente nas classes filhas, mas acho que isso quebraria o encapsulamento…

jPscoralicK

null

bcartaxo

jPscoralicK acho q vc se atrapalhou quanto a definição do modificador de acesso protected. O modificador de acesso protected tem visibilidade de pacote e para suas classe filhas.

Se você definir um atributo ou método como protected, todas as classe que pertecem ao mesmo pacote que a sua, e todas as classe filhas dessa sua classe terão acesso diretamente a sua variável. Você em muitos momentos estaria sim quebrando o encapsulamento.

Essas decisões de que modificador de acesso adotar são flexíveis e variam de caso para caso, porém a regra geral é ENCAPSULAR, private neles =PP

Nesse teu caso ao que me parece configura-se sim que você deve utilziar encapsulamento, já que está sendo definida uma classe de entidade básica.

_

O programa está assim :

Classe Autor

public class Autor {
	
	private String nomeAutor;
	private int anoNascimento;	

    public void setNomeAutor(String n){
    	nomeAutor = n;
    }
    
    public String getNomeAutor(){
    	return nomeAutor;
    }
    
    public void setAnoNascimento(int ano){
    	anoNascimento = ano;
    }    
    
    public int getAnoNascimento(){
    	return anoNascimento;
    }
}

Classe Livro

public class Livro {
	
	private String nomeLivro;
	private Autor autor = new Autor();
	
    public void setNomeLivro(String n){    
    	nomeLivro = n;
    }
    
    public String getNomeLivro(){
    	return nomeLivro;
    }    
    
    public Autor getAutor() {
    	return autor;
    }	
}

Rodando o programa

public class Programa {
	
	public static void main(String[] args){
		
		Livro livro = new Livro();
		
		livro.setNomeLivro("Java - Como Programar");
		livro.getAutor().setNomeAutor("Deitel");
		livro.getAutor().setAnoNascimento(1950);		
	}
}

É dessa maneira que devo fazer o acesso pra deixar o programa encapsulado corretamento?

Não sei se o nome que utilizei pro método que retorna a classe “autor” seja o mais correto (getAutor() ). Digo isso porque quando vou rodar o programa fica com um “get” seguido de um “set”. Pra mim, isso tem lógica, mas talvez exista uma grafia mais coerente… realmente não sei. Como vocês fazem esse tipo de acesso?

bcartaxo

Kra vc ta fazendo td certo. Inclusive a grafia correta do método getAutor está perfeita. Não que os métodos set e get não possam assumir o noem que vc quiser, porém em java existe um conceito chamado JavaBeans, que utiliza um determinado padrão de escrita de métodos e campos para os “beans”. Caso queira saber mais sobre JavaBeans segue o link:

http://java.sun.com/products/javabeans/docs/spec.html

_

acolon, muito obrigado pela ajuda. É sempre bom poder tirar esse tipo de dúvida, e o forum sempre foi a melhor solução.

Um abraço!

Criado 26 de maio de 2007
Ultima resposta 29 de mai. de 2007
Respostas 7
Participantes 4