Da: An object oriented tower of Babel di M.L. Nelson


Esiste molta confusione su cosa significhi OOP anche se gli esperti concordano sull'importanza di questa metodologia di approccio ai problemi.
Come punto di partenza per una discussione sui termini utilizzati in oop proponiamo le seguenti definizioni di Wegner del 1987.

object oriented = objects + classes + inheritance

Il rischio che si corre definendo i singoli termini della definizione è la circolarità; infatti un object è definito come istanza di una class e una class è definita come la descrizione di oggetti simili.
Vediamo allora altre definizioni:

object: un insieme di variabili che si possono manipolare esclusivamente attraverso un insieme di metodi (procedure) definite esclusivamente per questo scopo.

class: descrizione di oggetti simili.

Le variabili che compongono un oggetto sono divise in due categorie: variabili di classe e variabili di istanze.
Una class variable è condivisa come nome e come contenuto tra tutte le istanze di una classe.
Una instance variable è condivisa come nome tra tutte le istanze della classe ma ognuna ha la propria versione locale della variabile.
Questa divisione tra le variabili non è comunque necessaria ad un linguaggio per poter essere definito oo.

I metodi sono le procedure o le operazioni definite sugli oggetti.
Un messaggio è un segnale che viene inviato ad un oggetto per richiedere un particolare metodo.
In teoria si può dire che l'unico strumento per accedere ad un oggetto o a una delle sue variabili è inviando un messaggio.
Inheritance è definito come un meccanismo per condividere codice. Ci permette di definire una nuova classe basandosi sulla definizione di una classe esistente senza trascrivere il codice.
Spesso si dice che inheritance è una relazione di tipo "is a" poiché una classe A è ottenuta da una classe B ( A is a B ). Inheritance è l'unico nuovo contributo del paradigma orientato agli oggetti.

Altri termini.

In alcuni linguaggi si utilizza il termine slot al posto di variabile. Similmente flavor è utilizzato al posto di class. Altre volte al posto di class si utilizza type.

L'incapsulazione è il modo per nascondere informazioni. Permette di effettuare cambiamenti nell'implementazione di un sistema con conseguente minime per l'utente finale. Se oltre all'incapsulazione si impedisce l'accesso diretto alle variabili si crea un oggetto. In questo caso l'unico modo per poter accedere ad una variabile è inviare un messaggio all'oggetto. Quindi l'utente di un oggetto non ha la necessità di conoscerne l'implementazione ma solo i metodi per accedere alle particolari variabili. I metodi sono spesso chiamati interfaccia esterne.

Un linguaggio può essere definito object oriented se permette incapsulazione ed inheritance.

Incapsulazione senza inheritance è nient'altro che ADT. Da sola l'incapsulazione non è sufficiente per poter definire un linguaggio come OOP. Allo stesso modo inheritance senza incapsulazione nonè oop perchè un utente può accedere ai dati direttamente, senza i metodi.