Classi e Oggetti

Molti di voi saranno ormai familiari con il termine "oggetto", tuttavia dare una definizione rigorosa di cosa si intenda con oggetto o classe nella terminologia OOA e' tutt'altro che semplice, specialmente senza eccedere in formalismo.
La definizione di oggetto e classe qui presentata e' volutamente informale; nel corso delle puntate, torneremo quando necessario sulla definizione per arricchirla ed approfondire alcuni aspetti.

Da un punto di vista "filosofico" un oggetto (dal latino "cio' che e' posto innanzi") e' considerato cio' che ci sta di fronte, a cui miriamo, che consideriamo in una qualche attivita'. Nell'ambito delle metodologie object-oriented, si considera un oggetto una entita' autonoma che ha un suo stato interno e che interagisce con il mondo circostante attraverso una interfaccia prestabilita. Piu' precisamente, i principi basilari del paradigma object oriented sono:

- astrazione: un "oggetto" astrae le caratteristiche salienti dal mondo reale per modellare i soli aspetti rilevanti per il sistema informativo.

- incapsulazione: un oggetto e' visto dall'esterno come un'entita' monolitica; non e' permesso conoscere o alterare la struttura o lo stato interno dell'oggetto, se non richiedendo all'oggetto stesso di farlo. Gli oggetti (o meglio, come vedremo, le classi) esportano o rendono pubblici una serie di metodi (funzioni) che permettono l'interazione con altri oggetti. Nei primi modelli della programmazione object oriented, era comune dire che gli oggetti comunicano tramite messaggi (rompendo quindi il legame con le funzioni, elementi tipici della programmazione strutturata), che potevano o meno essere gestiti. Attualmente tale visione, che ha serie implicazioni per i linguaggi basati su di essa, e' passata un po' in secondo piano rispetto al modello dei metodi.

- classi: ogni oggetto e' un'istanza di una classe. La classe definisce le proprieta' generali di tutti gli oggetti che vi appartengono. Ad esempio, la classe "tavolo" definisce le caratteristiche comuni a tutti i tavoli esistenti, mentre "il mio tavolo" e' un oggetto, istanza della classe.

- ereditarieta' (spesso si usa l'equivalente termine inglese, inheritance): le varie classi possono formare una tassonomia di classificazione, ovvero ad esempio e' possibile modellare il concetto che "un gatto e' un mammifero" ereditando la classe "gatto" dalla classe "mammifero". A livello dei linguaggi OOP, l'ereditarieta' puo' essere singola (come nell'esempio dato) oppure multipla ("un gatto e' un mammifero", "un gatto e' un carnivoro"). L'ereditarieta' e' usata piu' raramente a livello di analisi rispetto al design ed all'implementazione, per ragioni che vedremo in seguito.

- polimorfismo: e' un concetto strettamente legato all'esistenza dell'ereditarieta', raramente presente a livello di analisi dei requisiti. Una classe derivata puo' ridefinire i metodi (ovvero le funzioni proprie della classe) della classe genitore. Poiche' un oggetto di classe derivata e', per definizione, anche un oggetto della classe genitore, cio' significa che un metodo invocato su un oggetto di classe genitore puo' in effetti avere risultati diversi.

  Torna all'articolo

Reader's Map
Molti visitatori che hanno letto
questo articolo hanno letto anche: