Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Carnielli Efrem: Programmazione a componenti<br />
Def<strong>in</strong>izione ed uso <strong>di</strong> classi, oggetti ed <strong>in</strong>terfacce<br />
vantaggio dell’ere<strong>di</strong>tarietà <strong>di</strong> classe è che viene creata staticamente a tempo <strong>di</strong><br />
compilazione ed è facile da usare. Lo svantaggio, oltre a quanto già visto, è <strong>in</strong>vece<br />
che la sottoclasse <strong>di</strong>viene <strong>di</strong>pendente dall’ implementazione della superclasse. Ciò<br />
rende <strong>di</strong>fficile il suo riutilizzo. Un modo per aggirare il problema è fare ere<strong>di</strong>tare<br />
solo da classi astratte. Un altro problema con l’ere<strong>di</strong>tarietà <strong>di</strong> classe è che<br />
l’implementazione ere<strong>di</strong>tata da una superclasse non può essere cambiata a runtime.<br />
In object composition, le funzionalità sono acquisite d<strong>in</strong>amicamente a run-time<br />
tramite i riferimenti ad altri oggetti. Il vantaggio <strong>di</strong> questo approccio è che le<br />
implementazioni possono essere rimpiazzate a run time. Questo è possibile perchè<br />
gli oggetti sono acceduti solo attraverso le loro <strong>in</strong>terfacce, così un oggetto può<br />
essere rimpiazzato con un altro per tutto il tempo che questi possiedono lo stesso<br />
tipo. In aggiunta, siccome ogni oggetto è def<strong>in</strong>ito <strong>in</strong> term<strong>in</strong>i <strong>di</strong> <strong>in</strong>terfacce oggetto,<br />
c’è meno <strong>di</strong>pendenza d’implementazione. Lo svantaggio della composizione è che<br />
il comportamento del sistema può essere <strong>di</strong>fficile da capire solo guardando il<br />
co<strong>di</strong>ce sorgente. Un sistema che utilizza l’object composition può essere<br />
estremamente d<strong>in</strong>amico tanto che, per arrivare a comprendere profondamente<br />
come gli oggetti cooperano tra <strong>di</strong> loro, può richiedere l’avvio del sistema<br />
In generale, l’object composition dovrebbe essere favorita rispetto l’ere<strong>di</strong>tarietà.<br />
Essa favorisce un m<strong>in</strong>or focus sulle classi e una ridotta gerarchia d’ ere<strong>di</strong>tarietà.<br />
Molti designer sovrausano l’ere<strong>di</strong>tarietà, ottenendo grosse strutture gerarchiche<br />
con le quali può <strong>di</strong>ventare <strong>di</strong>fficile trattare. Un’architettura basata sulla<br />
composizione <strong>di</strong> oggetti dovrebbe avere meno classi, ma più oggetti. Il<br />
comportamento <strong>di</strong> tale sistema <strong>di</strong>pende molto dalle <strong>in</strong>terrelazioni tra oggetti<br />
essendo poi def<strong>in</strong>iti <strong>in</strong> una particolare classe.<br />
Comunque l’ere<strong>di</strong>tarietà è ancora necessaria. Non si può <strong>in</strong>fatti ottenere sempre<br />
tutte le funzionalità desiderate assemblando componenti esistenti. L’ere<strong>di</strong>tarietà<br />
può essere usata per creare nuovi componenti che possono essere composti con i<br />
vecchi. In sostanza abbiamo bisogno <strong>di</strong> comb<strong>in</strong>are i due meto<strong>di</strong> assieme.<br />
7.8.3 Late b<strong>in</strong>d<strong>in</strong>g<br />
Late b<strong>in</strong>d<strong>in</strong>g significa collegamento ritardato.<br />
Supponiamo <strong>di</strong> avere un oggetto b istanza della classe B che implementa i meto<strong>di</strong><br />
f() e g() corrispondenti al seguente frammento <strong>di</strong> co<strong>di</strong>ce:<br />
f(...)<br />
f(...)<br />
return return g();<br />
g();<br />
}<br />
g(){ g(){<br />
g(){<br />
return return return 2;<br />
2;<br />
}<br />
186