Aula_13 agregação x composição

Embed Size (px)

Citation preview

Aula 13

AgregaoUFRPE

UFRPE

Demonstra que as informaes de uma classe precisam ser complementadas por uma outra classe. A parte pode existir sem o todo A agregao definida pelo relacionamento tem um . Herana

Agregao versus ComposioRicharlyson A. DEmery grupo: http://br.groups.yahoo.com/group/mpoo_uast contato: [email protected] envio atividades: [email protected]

J discutimos que os relacionamentos um so implementados por herana

Modelagem e Programao OO - Richarlyson DEmery

1/25

Modelagem e Programao OO - Richarlyson DEmery

3/25

SumrioUFRPE

Agregao - RepresentaoUFRPE

Agregao Composio

Como citado, a agregao implica em um relacionamento todo/parte.

Modelagem e Programao OO - Richarlyson DEmery

2/25

Modelagem e Programao OO - Richarlyson DEmery

Printed with FinePrint trial version - purchase at www.fineprint.com

24/25

O losango colocado nas linhas de associao da classe Carro indica que a classe Carro tem um relacionamento de agregao com as classes Porta e Motor.

Agregao - RepresentaoUFRPE

Agregao - ImplementaoUFRPE

Modelagem e Programao OO - Richarlyson DEmery

Agregao - ExemploUFRPE

O carro tem um motor e duas portas. Se analisarmos a frase a parte pode existir sem o todo Podemos concluir que as classes Porta e Motor podem existir sem a necessidade de Carro existir2

Modelagem e Programao OO - Richarlyson DEmery

Printed with FinePrint trial version - purchase at www.fineprint.com

2

A classe que tem o smbolo de agregao (o losango vazio) em sua extremidade de uma linha de associao o todo (nesse caso, Carro) e a classe na outra extremidade da linha da associao a parte (neste caso, as classes Porta e Motor)

Para ilustrar o exemplo de agregao, vejamos uma aplicao Java que far uso dos arquivos Motor.java Porta.java CarroAgregacao.java.

5/25

Modelagem e Programao OO - Richarlyson DEmery

7/25

Agregao - ImplementaoUFRPE

Motor.java/*Arquivo para Exemplo de Agregao e Composio em Java * Arquivo Motor.java */ public class Motor { double potencia; public Motor(double pot){ this.potencia=pot; } }

6/25

Modelagem e Programao OO - Richarlyson DEmery

8/25

Agregao - ImplementaoUFRPE

Agregao - ImplementaoUFRPE

Porta.java/* Arquivo para Exemplo de Agregao e Composio em Java *Arquivo Porta.java */ public class Porta { String cor; public Porta(String c){ this.cor=c; } }

Observe que se o objeto carro no existirCarroAgregacao carro = new CarroAgregacao("Passeio");

Ainda assim os objetos porta e motor existiroprivate static Porta pEsq = new Porta(azul); private static Porta pDir = new Porta(azul); private static Motor motor = new Motor(1.6);

Pois so instanciados independentemente!

Modelagem e Programao OO - Richarlyson DEmery

9/25

Modelagem e Programao OO - Richarlyson DEmery

11/25

Agregao - ImplementaoUFRPE

ComposioUFRPE

CarroAgregacao.java/*Exemplo de Agregao em Java Arquivo: CarroAgregacao.java */ public class CarroAgregacao { private private private private String static static static modeloCarro; Porta pErq = new Porta(azul); Porta pDir = new Porta(azul); Motor motor = new Motor(1.6);

um tipo de agregao, da mesma forma que na agregao, a composio tambm dada pelo relacionamento tem um. A figura abaixo ilustra um exemplo de composio:

public CarroAgregacao(String m){ this.modeloCarro=m; } public static void main(String [] args){ CarroAgregacao carro = new CarroAgregacao("Passeio"); System.out.println("Descrio do carro:\n + "Modelo: " + carro.modeloCarro + Cor da porta esquerda" + carro.pEsq.cor + "Potncia do motor" + carro.motor.potencia); } }

Modelagem e Programao OO - Richarlyson DEmery

10/25

Modelagem e Programao OO - Richarlyson DEmery

12/25

Printed with FinePrint trial version - purchase at www.fineprint.com

Composio - RepresentaoUFRPE

Composio - ImplementaoUFRPE

Quando o todo desaparece, todas as partes tambm desaparecem.Modelagem e Programao OO - Richarlyson DEmery 13/25 Modelagem e Programao OO - Richarlyson DEmery 15/25

Composio - RepresentaoUFRPE

Modelagem e Programao OO - Richarlyson DEmery

Printed with FinePrint trial version - purchase at www.fineprint.com

2

Se analisarmos a frase Quando o todo desaparece, todas as partes tambm desaparecem podemos concluir que se uma instncia (objeto) de Carro no existir, as instncias de variveis (atributos) das classes Porta e Motor tambm no existiro.

2

Assim como a agregao a composio representado por um losango, porm preenchido, colocado nas linhas de associao da classe Carro indica que a classe Carro tem um relacionamento de composio com as classes Porta e Motor.

Para ilustrar o exemplo de composio, vejamos uma aplicao Java que far uso dos arquivos Motor.java Mesmo arquivo da agregao Porta.java Mesmo arquivo da agregao CarroComposicao.java.

Composio - ImplementaoUFRPE

/* Exemplo de Composio em Java Arquivo: CarroComposicao.java public class CarroComposicao { private String modeloCarro; private static Porta pEsq, pDir; private static Motor motor; public CarroComposicao (String m, String c, double p){ this.modeloCarro = m; pEsq = new Porta(c); pDir = new Porta(c); motor = new Motor(p); }

*/

public static void main(String [] args){ CarroComposicao carro = new CarroComposicao("Passeio", azul, 1.6); System.out.println("Decrio do carro:\n + "Modelo: " + carro.modeloCarro + Cor da porta esquerda: + carro.pEsq.cor + "Potncia do motor: " + carro.motor.potencia); } }14/25 Modelagem e Programao OO - Richarlyson DEmery 16/25

Composio - ImplementaoUFRPE

Discusso: Agregao versus Composio

UFRPE

Observe que se o objeto carro no existirCarroAgregacao carro = new CarroAgregacao("Passeio");

os objetos porta e motor TAMBM NO existiro, pois s passam existir quando carro instanciado!

Na Agregao podemos observar que ainda que a instncia da classe Carro (objeto carro) no existisse os objetos porta e motor ainda existiriam, pois foram instanciados independente da criao do objeto carro, ou seja: A parte pode existir sem o todo.

Modelagem e Programao OO - Richarlyson DEmery

17/25

Modelagem e Programao OO - Richarlyson DEmery

19/25

Discusso: Agregao versus Composio

UFRPE

Discusso: Agregao versus ComposioLogo se substituirmos as linhas de comando:

UFRPE

System.out.println("Nmero de portas" + carro.porta.numPortas); System.out.println("Potncia do motor" + carro.motor.potencia);

No relacionamento por agregao ou por composio podemos destacar que a diferena est basicamente nas regras de criao dos objetos.

por:System.out.println("Nmero de portas" + porta.numPortas); System.out.println("Potncia do motor" + motor.potencia);

os atributos cor e potencia ainda sero exibidos no console. Isso porque, como explicado, os objetos porta e motor continuam existindo independente do objeto carro existir.Modelagem e Programao OO - Richarlyson DEmery 18/25 Modelagem e Programao OO - Richarlyson DEmery 20/25

Printed with FinePrint trial version - purchase at www.fineprint.com

Discusso: Agregao versus Composio

UFRPE

Discusso: Agregao versus Composio

UFRPE

Na Composio podemos observar que a classe CarroComposicao contm as variveis de instncia (atributos) modeloCarro, porta e motor. O atributo porta uma referncia para a classe Porta, assim como motor uma referncia para Motor, que por sua vez contm as variveis de instncia cor e potencia, respectivamente. Isso mostra que uma classe pode conter referncias para objetos de outras classes. O mtodo construtor CarroComposicao recebe trs parmetros m, c e p, no qual o parmetro c passado para o mtodo construtor Porta, com o objetivo de inicializar o objeto porta, da mesma forma que o parmetro p passado para Motor com o objetivo de inicializar o objeto motor.

1 2 3

4

Modelagem e Programao OO - Richarlyson DEmery

21/25

Modelagem e Programao OO - Richarlyson DEmery

23/25

Discusso: Agregao versus Composio

UFRPE

Discusso: Agregao versus ComposioVejamos:

UFRPE

E dessa forma no ser possvel acessar os atributos de Porta e Motor sem que o objeto carro tenha sido instanciado (diferentemente da agregao), ou seja: Quando o todo desaparece, todas as partes tambm desaparecem. Com o auxlio do IDE Eclipse podemos perceber que ao compilar a aplicao CarroComposicao.java no possvel acessar os objetos porta e motor:

1 o objeto carro no foi instanciado; 2 o objeto porta no pode ser acessado; 3 o objeto motor no pode ser acessado; 4 Exceo gerada pelo fato dos objetos porta e motor no terem sido instanciados.

Modelagem e Programao OO - Richarlyson DEmery

22/25

Modelagem e Programao OO - Richarlyson DEmery

24/25

Printed with FinePrint trial version - purchase at www.fineprint.com

UFRPE

FIMRicharlyson DEmery [email protected]

Modelagem e Programao OO - Richarlyson DEmery

25/25

Printed with FinePrint trial version - purchase at www.fineprint.com