15.06.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!