Analisi orientata agli oggetti
La nuova proposta di una analisi orientata agli oggetti cerca di conciliare i due mondi, quello delle funzioni e quello dei dati.
Per creare un modello che unisca le due visioni bisogna partire da un nuovo concetto: loggetto.
Un oggetto, nel mondo reale, è una qualunque cosa che prendiamo in considerazione. Per descriverla possiamo usare varie forme, come elencare le parti di cui è composta o raccontare come si comporta.
Per esempio una automobile è un mezzo di trasporto in grado di trasportare in media quattro persone. E composta di una carrozzeria, un motore e quattro ruote. Per fare un viaggio in macchina bisogna accendere il motore e quindi guidare sfruttando il volante, i pedali dellacceleratore, del freno e della frizione e la leva del cambio.
La mia macchina ha la targa "PD856732".
Ecco quindi identificata la via per unire le visioni: un oggetto è descritto sia da dei dati (modello, motore, targa), sia da delle procedure (guida, fai il pieno, parcheggia).
I dati vengono normalmente detti attributi, le procedure metodi. Un oggetto è costituito in modo indivisibile da questi due aspetti.
Ogni oggetto appartiene ad una ben determinata classe. La classe identifica lo schema di rappresentazione delloggetto, il singolo oggetto è una istanza della classe.
Nellesempio precedente ho parlato della classe delle "automobili" e delloggetto "la mia automobile".
Restando sempre nel campo motoristico possiamo introdurre il concetto di ereditarietà: descrivendo la classe delle automobili ho detto che sono dei mezzi di trasporto, cioè sono un particolare tipo di mezzo di trasporto.
Ho quindi evidenziato che la classe delle automobili ha tutte le caratteristiche dei mezzi di trasporto, più quelle particolari che la riguardano.
Per esempio tutti i mezzi di trasporto si spostano da un punto ad un altro e prevedono un meccanismo atto al movimento; le automobili hanno le ruote, gli aerei le ali, i treni le ruote su rotaia.
Sono così introdotti i concetti di classe, sottoclasse ed ereditarietà.
Ogni classe può avere delle sottoclassi, cioè delle classi che derivano dalla classe superiore ereditandone tutte le caratteristiche (metodi ed attributi) e aggiungendone delle proprie.

Nella figura precedente vediamo una classe principale, dei mezzi di trasporto; da questa derivano immediatamente la classe degli aerei e quella dei mezzi su ruota; questultima si specializza in automobili e camion.
Gli attributi della classe dei mezzi di trasporto sono velocità e carburante utilizzato, perchè per ogni mezzo vogliamo memorizzare queste due informazioni, sia che si tratti di un automobile che di un aereo o un camion.
Ogni mezzo ha poi un metodo, "vai da ...a", perchè vogliamo poter spostare qualunque mezzo da un posto ad un altro.
Gli aerei hanno come loro attributi tutti quelli che ereditano dalla classe superiore, più le informazioni sul numero dei motori e dei passeggeri che sono in grado di trasportare. Per quanto riguarda i metodi vediamo che hanno "decolla" ed "atterra"; non avrebbe alcun senso infatti parlare di decollo per le auto o i camion, in quanto solo gli aerei sono in grado di volare!
Tutti gli oggetti comunicano tra loro, scambiandosi dei messaggi. Un oggetto può chiedere un servizio al un altro oggetto per raggiungere un particolare scopo.
Restiamo negli esempi motoristici.
Per guidare una macchina devo muovere il volante. In realtà per far girare la macchina bisogna cambiare la direzione delle ruote, e i meccanismi che stanno tra il volante e queste mi permettono di raggiungere il risultato che desidero. In effetti sarebbe assurdo dover scendere dal posto di guida per spostare le ruote ad ogni curva che incontriamo.
Girando il volante io chiedo alloggetto macchina di fornirmi un servizio, cioè di muoversi in una precisa direzione. Attraverso il volante mando il messaggio, ma sono i meccanismi dellautomobile che poi attuano loperazione fisica necessaria.
Alcune macchine sono dotate di servosterzo, altre no; indipendentemente da questo, tutte le macchine girano le ruote quando gira il volante.
Questultima considerazione porta ad un altra caratterizzazione degli oggetti: i meccanismi sono nascosti allinterno delloggetto stesso ed io posso comunicare solo attraverso le opportune interfacce. La struttura interna delloggetto è sempre nascosta.
In effetti tutti sappiamo che lo sterzo si compone di ingranaggi, aste e cremagliere, ma credo che solo i meccanici e gli appassionati li abbiano effettivamente visti.
Il fatto che le strutture interne degli oggetti siano "private" permette di cambiare i meccanismi senza alterare tutto quello sta attorno, basta rispettare le interfacce.
Se mi accorgo che lo sterzo è pesante, posso aggiungere il servosterzo. Dopo guiderò come ho sempre fatto, solo con un pò di fatica in meno.
Se imparo a guidare un mezzo con il volante, poi so guidare tutti i mezzi di trasporto con volante, siano questi auto, camion o trattori; riesco cioè ad usare lo stesso "metodo" con tutti gli oggetti della stessa classe o delle sottoclassi derivate.