Atributos do tipo Objeto Classe

Olá pessoal,

Sou novato por aqui, no universo Java e em OOP, e pior, novato no mundo da programação em geral tb rsrs. Estou começando um curso Java básico e gostaria de tirar uma dúvida com vcs, pode ser em poucas palavras mesmo, precisaria apenas de uma luz se possível, a respeito:

1 - Relacionamento entre classes. Qual a finalidade de ter um atributo que contenha o tipo de outra classe, por ex…

class Pessoa{
  Endereco endereco;
  Pessoa(Endereco e){
...
  }
}

2 - Que tipo deve ser usado qdo for passar valor a esse parâmetro do construtor do tipo “Endereço”. Algum tipo primitivo?

Uma dúvida simples pra vocês que já têm uma boa bagagem, mas realmente seria de graaaande ajuda para mim.

Obrigado.

Ola,

A vantagem de se ter esta estrutura é a facilidade de diagramação, UML, e manutenção… a definição de uma arquitetura… bom, enfim, acho que tudo de melhor, vc consegue pensar em objetos e em ações… acho melhor.
Em relação a se ter atributos com tipos de outras classes… em OO tudo são objetos, então se vc quer ter atributos… eles serão objetos, isto serve pra vc conseguir estruturar melhor seu programa, seguindo o exemplo que vc deu, considere os dois cenários:

Cenario 1:[code]
public class Pessoa{
private String logradouro;
private String UF;
private String pais;
private String numero;
private String compl;

private String nome;
private String cpf;
private String RG;

…[/code]

Cenário 2:

[code]
public class Endereco{
private String logradouro;
private String UF;
private String pais;
private String numero;
private String compl;

}

public class Pessoa{
private Endereco endereco;

private String nome;
private String cpf;
private String RG;
…[/code]

Pense da seguinte forma… no cenário 1 esta tudo definido na classe Pessoa, mas pessoa tem atributos que não são diretamente relacionadas a ela… tudo bem, uma pessoa mora numa casa que tem um logradouro… via que volta que dei pra chegar no relacionamento pessoa->logradouro?

No cenario 2 acho que este relacionamento fica melhor estruturado… não acha?

Em relação a segunda pergunta, o tipo que vc deve usar para passar no construtor de Pessoa é um Endereco.

Bom, espero ter ajudado.

Opa, e como ajudou Bruno, realmente fica bem mais estruturado mesmo!!
Mas ok, deve-se passar ao construtor um parâmetro do tipo Endereço.

Me corrijam se estiver errado, então eu crio em outra classe um objeto Endereço…

Endereço end = new Endereço();

…ai passo a referência “end” como parâmetro?

Pessoa p = new Pessoa(end);

se for isso, e não for pedir muito, poderiam me dar um exemplo prático simples de passagem de parâmetros ao construtor?

Ola,
É isto mesmo, sacou legal.

Passar parametros para o construtor é isto mesmo… vc pode incluir mais parametros, tipo, comentamos que a classe pessoa tinha o atributo nome, então vc pode adicionar um construtor que receba mais este parametro:

[code]
public class Pessoa{

public Pessoa(Endereco end, String nome){
this.endereco = end;
this.nome = nome;
}

}


Endereco end = new Endereco();
Pessoa p = new Pessoa(end, “Jose”);
…[/code]

opa entendi perfeitamente a lógica, mas não querendo me estender muito… ainda tenho dúvida prática, quanto à finalidade de passar a referência “Endereco”. Em qual ocasião prática eu passaria a referência (end)?

Como o atributo “Endereco enderenco” entra na classe “Pessoa” para tornar mais performático e estruturado, substituindo de certa forma todos os atributos (da classe Endereco) que caso contrário precisariam ser recolados na classe Pessoa, imagino que a referência “end” passado como parâmetro no construtor, substitua todos os atributos da classe Endereco, retornando dessa forma (logradouro, UF, etc…), seria isso?

Obrigado pela paciência até agora^^

[quote=stone010]opa entendi perfeitamente a lógica, mas não querendo me estender muito… ainda tenho dúvida prática, quanto à finalidade de passar a referência “Endereco”. Em qual ocasião prática eu passaria a referência (end)?

Como o atributo “Endereco enderenco” entra na classe “Pessoa” para tornar mais performático e estruturado, substituindo de certa forma todos os atributos (da classe Endereco) que caso contrário precisariam ser recolados na classe Pessoa, imagino que a referência “end” passado como parâmetro no construtor, substitua todos os atributos da classe Endereco, retornando dessa forma (logradouro, UF, etc…), seria isso?

Obrigado pela paciência até agora^^[/quote]

Exatamente isto, passando a referencia Endereco vc não precisa ficar passando para a classe Pessoa coisas que não são dela… assim o codigo fica muito melhor… “só dê a Cesar o que é de Cesar”, saca?

hahaha… boa analogia…

Pode parecer que não, mas já deu uma tremenda clareada aki pro meu lado, Bruno. Vou continuar estudando e espero voltar com dúvidas avançadas e menos simpáticas na próxima ^^

Abraços!!

Blz, boa sorte ae nos estudos.