Copyright © 1997 Universita' di Firenze. All rights reserved.
Free license available.
|
|
|
La programmazione orientata agli oggetti è una filosofia di programmazione estremamente potente e vicina al programmatore. Essa consente di creare programmi che sopravvivono alle continue evoluzioni del sistema in cui sono immersi separando la parte implementativa dalla modellazione del problema. Si basa su una metodologia di sviluppo di tipo top_down, cioè risolve i problemi iniziando da livelli di astrazione maggiori, per giungere ai problemi più concreti legati all'implementazione. Gli elementi fondamentali di tale paradigma sono gli oggetti che vengono, in un primo momento definiti, descrivendone le caratteristiche, poi creati e allocati in memoria ed infine vengono usati in relazione l'uno con l'altro.
|
|
|
Alla luce di quanto detto precedentemente si capisce che la base di questa tecnica di programmazione è la struttura che ci permette di modellare entita' astratte . La classe è la struttura formale attraverso la quale si possono definire nuovi tipi di dati e le relazioni che intercorrono con le altre classi. Questa struttura è composta da due elementi: gli attributi, o variabili di istanza, che descrivono la struttura dati della classe e i metodi che operano sugli attributi secondo una certa "implementazione" e offrono sull'esterno una "interfaccia". Con il termine interfaccia si definisce un formalismo per individuare quali funzioni sono implementate e come, tali funzioni, vengono chiamate I dettagli dell' implementazione sono nascosti all'utente, il quale potra' interagire solo tramite l'interfaccia prestabilita.
|
|
|
La classe è è un modello astratto tramite ilquale vengono definite delle proprietà comuni ad una vasta categoria di oggetti, attraverso un processso notocome "classificazione". L'oggetto reale è "instanziato", e si può operare su di esso tramite la sua interfaccia, nel momento in cui si alloca lo spazio sufficiente in memoria, si inizializzano gli attributi e si carica il codice dei suoi metodiin accordo al modello della classe di appartenenza.
|
|
|
Gli oggetti che appartengono ad una stessa classe hanno comuni proprietà dal punto di vista semantico, cioè di significato ad alto livelllo; si tratta di variabili definte in differenti locazioni di memoria e quindi del tutto indipendenti: Si noti che due oggetti possono avere inizializzati nello stesso modo i propri attributi e restare tuttavia distinti, nello stesso modo in cui due variabili restano distinte da nomi simbolici diversi, anche se contengono lo stesso valore. Per esempio se si considerasse la classe delle persone su ogni oggetto persona si potrebbe distinguere il colore dei capelli, l'altezza o il peso. Tali valori sono detti membri e rappresentativole caratteristiche peculiari di una categoria. I membri di una classe possono essere di tipo "primitivo" (ex: int, float, boolean)ma anche riferimaenti a generiche classi. In questo caso inizializzare tale membro significa creare un'istanza della sua classe. La figura mostra che i metodi della classe contenitore possono accedere ai membri dell'oggetto contenuto soltanto tramite la sua interfaccia simbolica.
|
|
|
Data una classe è possibile costruire una nuova classe che sia
un'estensione della prima senza dover ridefinire gli attributi e i metodi
già implementati nella prima attraverso il meccanismo della derivazione.
Questa nuova classe è chiamata anche "classe derivata" o "sottoclasse"
della classe da cui eredita le sue caratteristiche. In pratica la classe
derivata ha i propri metodi e i propri attributi ed in piu' ereditaquelli
della sua superclasse e ciò avviene per tutte le ulteriori sottoclassi.
Per fare un esempio, si può immaginare di rappresentare con una
classe il concetto di "gatto" ed avere come sottoclasse il concetto di
gatto siamese. Questa tecnica è rappresentativa di come la programmazione
orientata agli oggetti si sviluppa in maniera top down dal concetto più
astratto al più concreto. Si noti come sia possibile limitare l'accesso
ai membri e metodi da parte di una classe derivata mediantel'uso dei cosiddetti
"modificatori" publico-privato-protetto.
|
|
|
Il polimorfismo è quel meccanismo che consente ad un'interfaccia
di essere utilizzata per una classe generale di azioni che, pur essendo
riferite ad oggetti differenti e pur avendo differenti implementazioni,
siano equivalenti dal punto di vista semantico. La specifica azione selezionata
è determinata dalla natura della situazione. Per spiegare meglio
questo concetto si consideri il seguente esempio nel mondo reale. La definizione
di polimorfismo può essere applicata al termostato. Se si desidera
raggiungere una data temperatura, ad esempio 25 gradi, non si deve fare
altro che impostarla sul termostato indipendentemente dal combustibile
usato o dal modo di funzionamento dell'impianto. Quindi tutti i termostati
svolgono la stessa funzione e offrono all'utente la stessa interfaccia,
anche se sono costruiti in maniera completamente diversa. Dal punto di
vista realizzativo si definisce "astratto" il metodo nella classe di base
e lo si implementa soltanto nelle classi derivate. Il giusto collegamento
è realizzato in modo dinamico.