Pages: [1]   Go Down
Print
Author Topic: aggragazione e composizione  (Read 3983 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Giovi89
Apprendista Forumista
**
Offline Offline

Posts: 273


« on: 28-01-2009, 14:22:56 »

Salve a tutti,
volevo essere chiarito la differenza tra aggregazione e composizione applicate ai diagramimi uml.....come si implementano nella stesura del codice? come se fossero delle classi normali oppure mettendo qualche parola chiave come extends o altro...Huh?? Grazie anticipate..
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #1 on: 28-01-2009, 15:55:48 »

http://forum.sdai.unict.it/index.php?topic=1058.msg6306#msg6306
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #2 on: 28-01-2009, 18:21:31 »

Ah, ok. Sisi, ora ricordo cosa sia l'aggregazione (grazie al tuo post in questo forum).

E mi ricordo anche dove è che avevo appreso per primo il significato dei termini aggregazione e composizione.
Purtropo in Java, per gli oggetti, non esiste il concetto di composizione.

È più facile vederlo in C++, dove una variabile può essere vista come di tipo istanza di qualcosa oppure puntatore/riferimento a istanza di qualcosa, ove qualcosa è un'area di memoria adibita a un certo scopo.

In questo codice si vede bene la differenza:
Code:
typedef class CMiaAltraClasse
{
private:
int m_valori [];
public:
//dichiarazione di costruttore
CMiaAltraClasse (int a, int b, int c);
} CMiaAltraClasse, * PCMiaAltraClasse;

//definizione del costruttore di CMiaAltraClasse
CMiaAltraClasse::CMiaAltraClasse (int a, int b, int c)
{
m_valori [0] = a;
m_valori [1] = b;
m_valori [2] = c;
}

typedef class CMiaClasse
{
public:
int m_a;
CMiaAltraClasse  m_classe_composta (1, 2, 3); //quest'oggetto esiste da questo istante e coincide col suo nome (m_classe_composta non è un riferimento che può essere assegnato a una nuova istanza di CMiaAltraClasse)
CMiaAltraClasse* m_classe_aggregata; //è solo un puntatore: l'oggetto vero non esiste finché non si fa un "new" oppure a m_classe_aggregata non si assegna un riferimento ad altra CMiaAltraClasse
//dichiarazione di costruttore
CMiaCLasse ();
} CMiaClasse, * PCMiaClasse;

//definizione del costruttore di CMiaClasse
CMiaClasse::CMiaClasse ()
{
m_classe_aggregata = new CMiaClasse (4, 5, 6);
}

Il tempo di vita di m_classe_aggregata (che è appunto aggregata) dipenderà da quando noi richiameremo una certa istruzione precisa delete di C++ che elimina fisicamente l'oggetto e rilascia la memoria allocata per esso, mentre il tempo di vita di m_classe_composta (che non è una variabile che punta a un oggetto CMiaAltraClasse, ma è proprio lei stessa un oggetto CMiaAltraClasse!) coincide col tempo di vita della classe che la contiene.

In parole povere, un oggetto che è "aggregato" nell'istanza di un oggetto di classe (anche diversa), vive indipendentemente dall'oggetto a cui è aggregato, ma è comunque "referenziata" (diciamo così) dalla prima.

Un oggetto che invece "compone" l'oggetto di una classe necessariamente diversa, vive assieme all'oggetto in cui viene creato, o ancora meglio, vive nello "scope" (campo di visibilità) di codice in cui viene creato.
(se avessi creato un oggetto composto dentro un for, fuori dal for non sarebbe più esistito e si sarebbe proprio distrutto fisicamente, non come in Java in cui devo aspettare un fantomatico garbage collector  nono, sempre che nessun'altro lo referenzi ... -ancora peggio-).

Ciò che ha detto Fr3d3R!K vi è sufficiente per comprendere la differenza tra i due termini, ma non è esaustivo (non per colpa sua, ma proprio per la natura slegata degli oggetti in Java), poiché UML è "generale" e non language-dependant  nono.

Spero di non aver ingenerato ulteriore confusione con questa breve deviazione sul linguaggio C++ .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #3 on: 29-01-2009, 11:49:04 »

io non ho citato il C/C++ perchè in questo corso (purtroppo) non viene trattato, ho voluto fare un esempio semplice e chiaro considerando solo il java. Figurati che sono sempre stato contro la scelta di avere i puntatori "nascosti" in java, non studiarli non ha permesso ad un collega (non ricordo chi) di capire bene la differenza tra clonare un oggetto e copiare il riferimento. Insomma sono tra i fan del C! yoh boh pray
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #4 on: 01-02-2009, 11:43:48 »

Scusa una domanda quando dobbiamo implementare le classi in codice java a differenza se c'è composizione o aggregazione dobbiamo usare extends oppure non centra niente?
Logged
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #5 on: 01-02-2009, 15:09:28 »

Penso che in entrambi i casi non centri nulla, qualcuno confermi.
Logged
ciccio
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 143



« Reply #6 on: 01-02-2009, 15:14:34 »

Penso che in entrambi i casi non centri nulla, qualcuno confermi.
Logged

"Non importa quanto vai piano, l' importante è che non ti fermi" (CONFUCIO)
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #7 on: 01-02-2009, 15:53:15 »

non centra niente  [Emoticon] Asd extends si utilizza quando una classe eredita da un'altra!
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Blonic
Forumista
***
Offline Offline

Gender: Male
Posts: 868



WWW
« Reply #8 on: 01-02-2009, 16:37:41 »

Con aggregazione e composizione si intende che una classe è "un pezzo" di un'altra

Vedi l'esempio della macchina: le classi "ruota", "motore", "sportello", "parabrezza" hanno tutte una relazione di aggregazione con la classe "Automobile".
La differenza fra aggregazione e composizione è che nella seconda si implica anche che se non esistesse la classe "automobile" (nell'esempio) non esisterebbe neanche la sottoclasse composta.

Se non sbaglio è così, qualcuno confermi.
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #9 on: 02-02-2009, 01:33:05 »

La differenza fra aggregazione e composizione è che nella seconda si implica anche che se non esistesse la classe "automobile" (nell'esempio) non esisterebbe neanche la sottoclasse composta.
Correggo questa tua descrizione con:
Quote
La differenza fra aggregazione e composizione è che nella seconda si implica anche che in ogni relazione di composizione se non esistesse una istanza della classe "Automobile""ruota" (nell'esempio) non esisterebbe neanche una istanza della sottoclasse composta "Automobile" .
Ricordando che la sola differenza tra oggetto della classe componente e oggetto della classe composta è che (a meno di altre relazioni a noi non note) un oggetto della classe "componente" potrebbe esistere indipendentemente da un oggetto della classe "composta", mentre un oggetto della classe "composta" implica --> che esista un oggetto della classe "componente" (perché il "componente" appunto "la compone").
 
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #10 on: 02-02-2009, 01:42:16 »

Un esempio migliore di quello dell'automobile (che si presta a facili ironie specie se si abita a Librino) poiché potrebbero esistere automobili senza parabrezza o senza ruote , è quello di una parete di mattoni e i mattoni.

Considerando di descrivere i due oggetti con le classi rispettivamente PareteDiMattoni e Mattone risulta chiaro che una istanza della classe Mattone (cioè un "mattone") può esistere tranquillamente da qualsiasi parte nell'universo senza altre costrizioni, mentre una istanza della classe PareteDiMattoni (cioè una "parete di mattoni") non può esistere senza istanze della classe Mattone (cioè senza "mattoni").
In più (e questo mette in risalto la natura "componitiva" della relazione tra PareteDiMattoni e Mattone, piuttosto che di quella aggregativa), se ho una istanza della classe PareteDiMattoni (cio è una "parete di mattoni") ho sempre e sicuramente (costrizione "forte" che suggerisce l'implicazione) delle istanze della classe Mattoni (cioè dei "mattoni").
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: