Por favor gente, estou com uma tremenda duvida. Como passar objetos como parametros de uma classe para outra? Por exemplo eu tenho um classe empresa e uma endereço que contem todos as informações relativas a endereço, com logradouro, bairro, etc. Como fazer para passar para classe empresa um objeto endereço com todos seus métodos e atributos como parametro, ao invés de ficar passando o logradouro, o bairro, a cidade, ou seja passar um por um pra classe empresa. Gostaria de saber como empacotá-los e mandar todos métodos e atributos referentes a classe endereço de uma só vez, pra poder economizar código, reutilizar o mesmo e deixar minha aplicação completamente orientada a objetos, pois tenho dificuldade as vezes de identificar se minha aplicação esta sendo construida com caracteristicas de OO ou com caracteristicas de programação estruturada.
Basta voce passar um objeto do tipo que voce deseja ao inves de passar item por item… por exemplo:
// exemplo podrao mas simples pra simplificar
class Empresa
{
public Empresa(String nome, Endereco e)
{
}
public String getNome()
{
....
}
public Endereco getEndereco()
{
...
}
....
}
class Endereco
{
private String rua;
private String cidade;
...
public Endereco(String rua, String cidade)
{
..
}
....
}
public class ProgramaTeste
{
public static void main(String args[])
{
...
Endereco end = new Endereco("Nome rua", "Cidade");
Empresa emp = new Empresa("Minha empresa", end);
...
}
}
Note que criamos um objeto do tipo Endereco e depois passamos ele como parametro para o objeto do tipo Empresa … era isso que voce queria?
[]'s
Rafael Steil
Olá colegas,
Apenas complementando, ao passar qualquer tipo de objeto como parametro você precisa estar ciente que o parametro é passado por referência e não por valor!
Por exemplo, quando passamos um valor int, long ou outro tipo primitivo como parametro, o que é passado na verdade é uma cópia do valor daquele objeto, isto significa que se você alterar o valor do parametro, a variável original não será afetada.
Exemplo:
public class Teste {
int a = 5;
public void imprime(int a) {
a = 10;
System.out.println(a);
System.out.println(this.a); // Variável membro
}
public static void main(String args[]) {
Teste t = new Teste();
t.imprime(t.a);
}
}
Com objetos a história é diferente, uma vez que não é o objeto que é armazenado na variável, e sim uma referência à ele. É como se a variável contivesse um “valor de identificação” que aponta para um objeto na memória. Logo, uma cópia deste valor de identificação é passada pelo parametro e não uma cópia do objeto em si! Isto significa que alterações dentro do objeto IRÃO afetar o objeto original.
Exemplo:
class Endereco {
int cep;
Endereco(int cep) {
this.cep = cep;
}
public int getCEP() {
return cep;
}
public void setCEP(int c) {
this.cep = c;
}
public void setOutroCEP(Endereco e) {
e.setCEP(8888888);
}
public static void main(String args[]) {
Endereco e = new Endereco(78456000) ;
Endereco outro = new Endereco(92454140);
e.setOutroCEP(outro);
System.out.println(outro.getCEP());
}
}
Note que o CEP dentro da variável “outro” foi modificado dentro do método setOutroCEP().
Bom, espero ter contribuído.
Abraços!
Carlos H.
É mais ou menos isso, por exemplo eu tenho uma classe que monta os campos dos cadastros e eu não sei pegar os dados dos campos por outra classe. Eu precisava pegar os dados por outra classe, tipo, o getText dos campos teria que ficar fora da classe da tela de cadastro.
Eu tenho uma dúvida, em Java é verdade que não existe passagem por referencia , é sempre por valor, até mesmo objetos, porque se passa o valor do endereço de memória do objeto.
Um abraço.
Alexandre Araújo
Olha… passagem por referência é justamente isto, é lógico que sempre há um valor específico sendo passado, estamos falando de algo que é processado em um componente eletrônico e uma referência à um objeto é sem dúvida um valor (afinal, não podem haver referência LITERALMENTE “on the fly”) que aponta para um objeto, acontece que quando se fala em passagem por referência e passagem por valor, o foco na verdade é um pouco mais em cima:
- Passagem por valor: O que é passado é uma cópia do parametro, isto significa que alterações à esta cópia NÃO alteram o valor original.
- Passagem por referência: É passado um valor que aponta para o objeto passado como parâmetro, isto significa que alterações no parametro passado estão na verdade alterando diretamente o “objeto original”.
Portanto, java tem sim, passagem por referência!
[quote=“Carlos H”]Olha… passagem por referência é justamente isto,
…
- Passagem por referência: É passado um valor que aponta para o objeto passado como parâmetro, isto significa que alterações no parametro passado estão na verdade alterando diretamente o “objeto original”.
Portanto, java tem sim, passagem por referência![/quote]
Oi carlos
Java nao tem nao passagem por refencia. Entendo seu ponto, mas isto eh passagem por valor de endereco de memoria.
Passagem por referencia, seria algo que aconteceria assim:
public static void metodo(Endereco e) {
e = new Endereco("rua do sao nunca");
}
static void main .... {
Endereco x = new Endereco("Rua Paulo");
metodo(x);
print(x);
}
Concorda que isso, em java, nao vai mudar nada e vai imprimir “Paulo”, Se imprimisse “sao nunca”, seria por referencia, pois ai teria passado o valor do endereco do X por referencia, fazendo com que se o X for mudado (nao o objeto q X aponta, o endereco em si), ele sera mudado fora do metodo tambem.
C# tem passagem por referencia, assim como C e C++. java nao.
Oooooooooops!
É verdade mesmo Paulo… sorry!
Mas parando pra pensar, existem diversos materiais que divulgam uma idéia errada do que realmente é passagem por referência (acredito que minha própria confusão tenha vindo daí)…