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 costruttori, attributi 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_attributoespressione_oggetto.nome_metodo( eventuali_parametri_attuali_se_previsti ) |