2. Oggetti e classi

Un oggetto (software) un'entità dotata di:

· identità, che permette quindi sempre di distinguere un oggetto da un altro (un "numero di serie")

· stato, quindi in grado di "ricordare" qualcosa

 

· comportamento, che si traduce nella possibilità di osservare (in tutto o in parte) lo stato e/o di  modificare lo stato, tramite l'invocazione dei metodi sull'oggetto.

Un modo corretto di pensare ad un oggetto rappresentato nella seguente figura:

  I blocchi P1, P2,  ...  ed  F1, F2, ...  rappresentano i "meccanismi interni" dell'oggetto: in pratica sono dei sottoprogrammi (i metodi) che realizzano le operazioni   previste dall'oggetto. Seguendo una metodologia di progetto ampiamente condivisa  [Meyer97] i metodi vengono spesso divisi in  in due categorie:

· comandi,   cioè metodi che modificano lo stato dell'oggetto. Sono procedure proprie, cioè che non restituiscono valori ma che producono degli effetti collaterali, generalmente limitati allo stato locale dell'oggetto.

· osservatori ( queries),  cioè metodi che  si limitano ad osservare lo stato dell'oggetto. Sono procedure di tipo funzionale che restituiscono un valore ottenuto come elaborazione (solitamente molto semplice) dello stato corrente dell'oggetto.

Questa separazione, anche se può comportare qualche inefficienza, favorisce in genere la leggibilità e la trasparenza referenziale del codice.

Per creare gli oggetti la tecnica pi seguita quella di definire prima una classe, ciò uno schema di creazione che definisca i possibili stati e i comportamenti, e di invocare un'operazione di istanziazione della classe, detta costruttore o creatore, che determina univocamente l'identità di un oggetto e che ne stabilisce lo stato iniziale. Una possibile sintassi di creazione (per linguaggi tipati) potrebbe essere:

   variabile   nuovo [ nome_costruttore ( parametri_attuali_se_previsti ) ]

In pratica una classe sarà definita da un nome a cui viene associato un elenco di  costruttoriattributi e metodi, che collettivamente chiameremo proprietà della classe. Nei linguaggi OOP tipati, la definizione di una classe comporta generalmente anche quella di un tipo con lo stesso nome.
Si ammette che dall'elenco possano mancare i costruttori: in tal caso viene usato implicitamente un costruttore di default (senza parametri).

Per accedere al valore di un attributo o per invocare  un metodo su un oggetto la maggior parte dei linguaggi fa uso della notazione punto:

espressione_oggetto.nome_attributo
espressione_oggetto.nome_metodo( eventuali_parametri_attuali_se_previsti )