Skidoo
29-12-2010, 22:27
Ciao a tutti..vado subito al sodo:
Leggendo in giro ho visto che c'è molta confusione fra aggregazione e composizione, definizioni sommarie che spesso non arrivano da nessuna parte..ho capito che l'aggregazione è un tipo particolare di relazione in cui le classi che costituiscono i componenti e la classe finale sono in una relazione particolare del tipo parte - intero e che, se l'oggetto intero (istanza della classe che fa da intero) viene distrutto, la parte continua ad esistere comunque..e qui di solito si trova l'esempio dell'automobile (intero) motore..gomme ecc (parti). Quello che non capisco è la differenza dalla composizione.. La definizione mi è più o meno chiara: "aggregazione più forte in cui l'istanza dell' oggetto "parte" può comporre un solo oggetto intero e in cui, in caso di distruzione dell'oggetto intero la parte non sopravvive autonomamente". Con oggetti reali sembra abbastanza semplice: tra Libro (intero) e una pagina (parte) c'è una relazione di composizione, distruggo il libro distruggo anche la pagina..ora io mi trovo a dover implementare in java un generatore di parser LR(1) in cui ci sono diversi concetti più astratti..ad esempio una grammatica è composta da più produzioni..quindi? secondo voi è un'aggregazione o una composizione? esempio se implemento la cosa in questo modo:
public class Grammar{
private ArrayList<Production> prods;
public Grammar() {
this.prods = new ArrayList<Production>();
}
public void addProd(Production p){
prods.add(p);
}
...
}
Questa in uml come dovrei modellarla? il passaggio del parametro a addProd è per riferimento..quindi io teoricamente l'oggetto production (parte) che passo ad addProd potrei utilizzarlo in qualche altra classe..non viene distrutto se distruggo l'oggetto grammar (intero)...quindi
mi sembrerebbe un'aggregazione. Però se invece di passare un parametro a una funzione per aggiungere una produzione alla grammatica inizializzassi le produzioni direttamente nella grammatica..cioè
public class Grammar{
private ArrayList<Production> prods;
private Production p1, p2;
public Grammar() {
prods = new ArrayList<Production>;
p1 = new Production(....);
p2 = new Production(....);
prods.add(p1);
prods.add(p2);
}
..
}
Qui se distruggo la grammatica distruggo anche le produzioni..quindi composizione?
Cioè da quello che mi pare di capire dipende tutto dall'implementazione? grazie a chiunque abbia la pazienza di rispondermi...esempi di implementazioni in java di uml sono ben accetti :Prrr: :D
Leggendo in giro ho visto che c'è molta confusione fra aggregazione e composizione, definizioni sommarie che spesso non arrivano da nessuna parte..ho capito che l'aggregazione è un tipo particolare di relazione in cui le classi che costituiscono i componenti e la classe finale sono in una relazione particolare del tipo parte - intero e che, se l'oggetto intero (istanza della classe che fa da intero) viene distrutto, la parte continua ad esistere comunque..e qui di solito si trova l'esempio dell'automobile (intero) motore..gomme ecc (parti). Quello che non capisco è la differenza dalla composizione.. La definizione mi è più o meno chiara: "aggregazione più forte in cui l'istanza dell' oggetto "parte" può comporre un solo oggetto intero e in cui, in caso di distruzione dell'oggetto intero la parte non sopravvive autonomamente". Con oggetti reali sembra abbastanza semplice: tra Libro (intero) e una pagina (parte) c'è una relazione di composizione, distruggo il libro distruggo anche la pagina..ora io mi trovo a dover implementare in java un generatore di parser LR(1) in cui ci sono diversi concetti più astratti..ad esempio una grammatica è composta da più produzioni..quindi? secondo voi è un'aggregazione o una composizione? esempio se implemento la cosa in questo modo:
public class Grammar{
private ArrayList<Production> prods;
public Grammar() {
this.prods = new ArrayList<Production>();
}
public void addProd(Production p){
prods.add(p);
}
...
}
Questa in uml come dovrei modellarla? il passaggio del parametro a addProd è per riferimento..quindi io teoricamente l'oggetto production (parte) che passo ad addProd potrei utilizzarlo in qualche altra classe..non viene distrutto se distruggo l'oggetto grammar (intero)...quindi
mi sembrerebbe un'aggregazione. Però se invece di passare un parametro a una funzione per aggiungere una produzione alla grammatica inizializzassi le produzioni direttamente nella grammatica..cioè
public class Grammar{
private ArrayList<Production> prods;
private Production p1, p2;
public Grammar() {
prods = new ArrayList<Production>;
p1 = new Production(....);
p2 = new Production(....);
prods.add(p1);
prods.add(p2);
}
..
}
Qui se distruggo la grammatica distruggo anche le produzioni..quindi composizione?
Cioè da quello che mi pare di capire dipende tutto dall'implementazione? grazie a chiunque abbia la pazienza di rispondermi...esempi di implementazioni in java di uml sono ben accetti :Prrr: :D