29.01.2015 Views

Download dell'intero lavoro - Provincia di Torino

Download dell'intero lavoro - Provincia di Torino

Download dell'intero lavoro - Provincia di Torino

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

classe <strong>di</strong> considerarsi erede <strong>di</strong> un'altra, detta classe padre o genitore (parent class), con una<br />

<strong>di</strong>chiarazione che possiamo assumere del tipo:<br />

classe ere<strong>di</strong>ta da <br />

...<br />

Così facendo la classe , detta classe figlia (o classe derivata), ere<strong>di</strong>ta tutte le proprietà della<br />

specificata : tutti gli attributi e i meto<strong>di</strong> (anche quelli nascosti).<br />

Sono state proposte varie notazioni grafiche per rappresentare una relazione <strong>di</strong> ere<strong>di</strong>tarietà tra classi.<br />

Una delle più semplici è la seguente, in cui la relazione è rappresentata da un arco <strong>di</strong>retto dalla<br />

classe figlia alla classe padre. Rappresentando l'insieme delle relazioni <strong>di</strong> questo genere si ottiene il<br />

grafo <strong>di</strong> ere<strong>di</strong>tarietà<br />

Da un punto <strong>di</strong> vista pratico si può ere<strong>di</strong>tare da qualsiasi classe, a patto <strong>di</strong> non introdurre cicli nel<br />

grafo <strong>di</strong> ere<strong>di</strong>tarietà. Tuttavia, come suggerito dai nomi delle classi della figura, da un punto <strong>di</strong> vista<br />

metodologico è opportuno e consigliato ere<strong>di</strong>tare X da Y solo quando si è certi che tra Y e X<br />

esiste una relazione Y IS-A X ("Y è un X"), o in altri termini, quando la classe figlia è una<br />

specializzazione <strong>di</strong> quella padre.<br />

Oltre a ere<strong>di</strong>tare, la classe figlia può:<br />

• aggiungere propri attributi o meto<strong>di</strong><br />

• ridefinire (overri<strong>di</strong>ng) meto<strong>di</strong> ere<strong>di</strong>tati<br />

In questo caso il metodo ere<strong>di</strong>tato (metodo precursore) e quello ridefinito hanno lo stesso nome. I<br />

linguaggi devono pre<strong>di</strong>sporre meccanismi linguistici opportuni per consentire all'implementatore<br />

della classe <strong>di</strong> accedere ai precursori <strong>di</strong> un metodo <strong>di</strong> qualsiasi livello. Si intende che gli utenti della<br />

classe si riferiranno a quello ridefinito.<br />

Si osservi che per ogni classe rimane definito l'insieme dei sui <strong>di</strong>scendenti (supertipi) e dei sui<br />

<strong>di</strong>scendenti (sottotipi).<br />

Molti linguaggi ad oggetti consentono solo l'ere<strong>di</strong>tarietà semplice: ogni classe ha al massimo un<br />

padre. La classificazione degli oggetti è quin<strong>di</strong> strettamente gerarchica.<br />

Se esiste un'unica ra<strong>di</strong>ce questa ha nomi come Object o ANY.<br />

I linguaggi ad oggetti più evoluti consentono l'ere<strong>di</strong>tarietà multipla: cioè la possibilità per una<br />

classe <strong>di</strong> ere<strong>di</strong>tare da più <strong>di</strong> una classe (cioè <strong>di</strong> avere più padri). Sorgono però problemi non banali<br />

<strong>di</strong> ere<strong>di</strong>tarietà ripetuta: esiste cioè la possibilità <strong>di</strong> ere<strong>di</strong>tare più <strong>di</strong> un metodo con lo stesso nome e<br />

occorre risolvere in qualche modo le ambiguità che si vengono a creare.<br />

6

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

Saved successfully!

Ooh no, something went wrong!