Usando Composição

4 respostas
thiagolopes

Boa Tarde,

Estou com um pequeno problema de entendimento sobre o conceito de composição em java.Sei que tem um bom reuso de código , o famoso "tem um", mas como é que implementa isto ai? Vo colocar aqui mais ou menos um exemplo bem básico.
public class Porta{

         public void portaTeste(){
              System.out.println("Método da classe Porta");
}
}
//Segunda classe no mesmo pacote

public class Casa {
public Porta p1;

           public void casaTeste(){
               System.out.println("Metodo da classe casa");
}
}

//E no main

public class ClasseTeste{
            public static void main(String[] a){

        Casa a = new Casa();
        a.p1.casaTeste();
}

}

//Erro: NullPointExeption - Sei que este erro é devido ao objeto não esta referenciando ninguem, porém não estou conseguindo ver
//utilidade no uso de composição.Alguem teria um exemplo prático e explicação prática para este problema ?

4 Respostas

walissongpi

thiagolopes:
Boa Tarde,

Estou com um pequeno problema de entendimento sobre o conceito de composição em java.Sei que tem um bom reuso de código , o famoso "tem um", mas como é que implementa isto ai? Vo colocar aqui mais ou menos um exemplo bem básico.
public class Porta{

         public void portaTeste(){
              System.out.println("Método da classe Porta");
}
}
//Segunda classe no mesmo pacote

public class Casa {
public Porta p1;

           public void casaTeste(){
               System.out.println("Metodo da classe casa");
}
}

//E no main

public class ClasseTeste{
            public static void main(String[] a){

        Casa a = new Casa();
        a.p1.casaTeste();
}

}

//Erro: NullPointExeption - Sei que este erro é devido ao objeto não esta referenciando ninguem, porém não estou conseguindo ver
//utilidade no uso de composição.Alguem teria um exemplo prático e explicação prática para este problema ?


Simplismente pq vc chama um método para o objeto Porta (p1) que ainda não foi instanciado.

a.p1.casaTeste();

achei um tópico sobre isso: http://www.guj.com.br/posts/list/83004.java

thiagolopes

Ja li este topico , porem ainda nao estou conseguindo entender o exemplo. hehe mesmo assim muito obrigado amigo.

E

Crie um método construtor na classe Casa
e instancie o objeto da classe Porta:


public Casa()

{

super();

p1 = new Porta();

}

ngduran

Cordiais Saudações walissongpi,

Existe um erro de digitação na linha 20 do seu codigo postado.

public static void  main(String[] a){

depois da palavra String[] você digitou a letra “a” é o correto é “args” dessa forma a linha corrigida está abaixo:

public static void  main(String[] args){

O erro: NullPointExeption, se deve por querer utilizar uma referência a um objeto que ainda não existe. No seu caso a referência p1 na linha 23 do seu código.

Você deve primeiro instanciar um objeto e referência-lo a p1, depois disso poderá utiliza-lo.

Poderia ficar dessa forma

Casa a = new Casa();

        a.casaTeste();

        a.p1 = new Porta();

        a.p1.portaTeste();

Com relação a pergunta da utilidade no uso da composição:

Este exemplo do seu código é composição, na sua classe Casa você tem uma associação a um objeto do tipo Porta pela váriavel p1, é uma casa composta por apenas uma porta.

Um outro exemplo seria um empresa tem um endereço (digamos só um)
O obejto Empresa é responsável pelo objeto endereço assim tem-se a agregação composta (composição)

Composição e Herança são mecanismos para reutilização de código.
A composição estende uma classe pelo delegação de trabalho para outro objeto.
A herança estende atributos e métodos de uma classe.

A utilização de herança deixa seu código fortemente acoplado, ou seja uma mudança na super-classe refletira nas sub-classes.

Criado 20 de maio de 2010
Ultima resposta 22 de mai. de 2010
Respostas 4
Participantes 4