La
programmazione tradizionale si è sempre basata sull’utilizzo di
strutture dati e su funzioni e procedure. Questo metodo di sviluppo
del software viene detto funzionale, con esso si organizza un intero
programma in moduli che raccolgono gruppi di funzioni. Ogni funzione
accede ad uno o più gruppi di dati. I metodi di
sviluppo funzionale hanno pero’ notevoli debolezze:
- A causa deglistretti
legami tra le funzioni e i dati, si arriva ad un punto in cui ogni
modifica software provoca degli effetti collaterali su altri moduli
con enormi difficolta di debug della applicazione.
- Difficolta’ di
riutilizzo del software. Ogni volta che si vuole riciclare una
funzione bisogna apportare delle modifiche strutturali per adeguarla
alla nuova applicazione.
Questo approccio porta ad un modo nuovo di concepire un programma: il software è ora costituito da un insieme di entità interagenti, ciascuna provvista di una struttura dati e dell’insieme di operazioni che l’oggetto è in grado di effettuare su quella struttura. Poiché ciascun oggetto incapsula i propri dati e ne difende l’accesso diretto da parte del mondo esterno, si è certi che cambiamenti del mondo esterno non influenzeranno l’oggetto o il suo comportamento.
D’altra parte per utilizzare un oggetto basta conoscere che dati esso immagazzina e che operazioni esso fornisce per operare su questi dati, senza curarsi dell’effettiva realizzazione interna dell’oggetto stesso. Questo nuovo modo di sviluppare programmi software è più vicino alla nostra realtà quotidiana. Pensiamo ad un oggetto del mondo reale, ad esempio una automobile.
Una automobile ha un insieme di caratteristiche, Inoltre essa dispone di operazioni da svolgere esclusivamente con essa, ad esempio:
- accensione.
- cambio della marcia.
- parcheggio.
La parte del programma che fa uso di un oggetto si chiama client. Un linguaggio di programmazione è definito ad oggetti quando permette di implementare tre meccanismi usando la sintassi nativa del linguaggio:
- incapsulamento
- ereditarietà
- polimorfismo
STORIA
Il primo linguaggio di
programmazione orientato agli oggetti fu il Simula (1967), seguito
negli anni settanta da Smalltalk e da varie estensioni del Lisp.
Negli anni ottanta sono state create estensioni orientate ad oggetti
del linguaggio C, e di altri linguaggi. Negli anni novanta è
diventato il paradigma dominante, per cui gran parte dei linguaggi di
programmazione erano o nativamente orientati agli oggetti o avevano
una estensione in tal senso. Linguaggi che supportano solo il
paradigma di programmazione orientata agli oggetti sono Smalltalk ed
Eiffel. Più spesso si incontra una realizzazione non esclusiva del
paradigma di programmazione orientata agli oggetti, come in C++,
Java, Delphi, Python, C#, Visual Basic .NET, Perl, PHP.
CLASSI
E OGGETTI
- attributi (analoghi ai
membri di un record) cioè delle variabili e/o costanti che
definiscono le caratteristiche o proprietà degli oggetti
instanziabili invocando la classe; i valori inizializzati degli
attributi sono ottenuti attraverso il cosiddetto costruttore;
- metodi (procedure che
operano sugli attributi);
Un oggetto è una istanza di una classe. Esso è dotato di tutti gli attributi e i metodi definiti dalla classe, ed agisce come un fornitore di "messaggi" che il codice eseguibile del programma può attivare su richiesta. Inviare un messaggio ad un oggetto si dice, in gergo, invocare un metodo su quell'oggetto. Il metodo riceve come parametro l'oggetto su cui è stato invocato, che può essere referenziato tramite una parola-chiave o una sintassi apposita, anche se è passato come parametro implicito; per esempio, in C++, in Java, e in C# si usa la parola-chiave this , mentre in Smalltalk, in Objective-C, Python e in Ruby si usa la parola-chiave self. Dal punto di vista del calcolatore, ogni oggetto è identificato da una certa zona di memoria, nella quale sono memorizzati gli attributi, e il valore di questi ultimi determina lo stato interno dell'oggetto. Istanziare un oggetto vuol dire allocare memoria ed eventualmente inizializzarla secondo le specifiche definite dalla classe. Molti linguaggi forniscono un supporto per l'inizializzazione automatica di un oggetto, con uno o più metodi speciali, detti costruttori. Analogamente, la fine della vita di un oggetto può essere gestita con un metodo detto distruttore.
Nessun commento:
Posta un commento