La programmazione orientata agli oggetti è un paradigma di programmazione introdotto tra la seconda metà degli anni '50 e l'inizio degli anni '60 nei laboratori di ricerca e sviluppo del Massachusetts Institute of Technology. Particolarmente utile nel caso della definizione e creazione dell'interfaccia grafica di programmi e , la programmazione a oggetti permette di definire gli oggetti software e stabilirne le modalità di interazione e le relazioni di interdipendenza degli uni con gli altri. Tra i vantaggi che questo metodo di programmazione assicura troviamo il supporto alla modellazione degli oggetti naturali (bottoni, menu, cerchi e quadrati) all'interno dell'infrastruttura software; migliore gestione e manutenzione dei programmi di grandi dimensioni; favorire la modularità e il riuso del codice.
Tra i linguaggi di programmazione orientati agli oggetti più conosciuti troviamo C++, Objective-C, Smalltalk, Delphi, Java, C#, Perl, Python, Ruby e PHP.
La storia della programmazione a oggetti
La prima volta che le parole “oggetti” e “orientata” sono utilizzate nella loro accezione moderna si era, come accennato, sul finire degli anni '50. Negli ambienti del gruppo di lavoro sull'intelligenza artificiale i termini sono utilizzati per riferirsi all'identificazione degli oggetti del LISP (items nell'originale inglese) con alcune proprietà. Sempre dal MIT arriva, tra il 1960 e il 1961, il software di disegno assistito dall'elaboratore Sketchpad: si tratta di uno dei primi esempi di applicativi realizzati utilizzando i principi basilari della programmazione ad oggetti.
Il concetto formale di “oggetto” è introdotto a inizio anni '60 da alcuni sviluppatori del Norwegian Computing Center di Oslo all'interno del linguaggio di programmazione Simula 67. Per la prima volta, infatti, sono esplicitati i concetti di oggetto (o istanza), classe, sottoclassi, funzione virtuale, co-routine e simulazione di eventi discreti. Un decennio più tardi si registra un altro grande passo in avanti per lo sviluppo della programmazione orientata agli oggetti: il linguaggio Smalltalk, sviluppato da Alan Kay presso lo Xerox PARC, è il primo a fare ampio utilizzo degli oggetti e dei messaggi come base per la computazione e lo sviluppo del software. Sono gli stessi tecnici del PARC ad utilizzare per primi la dicitura object-oriented programming (programmazione orientata agli oggetti) per rimarcare l'uso pervasivo di questo paradigma.
Nel 1985 è il momento di Eiffel, linguaggio di programmazione focalizzato primariamente sulla qualità del software e il primo linguaggio di programmazione a oggetti “puro”. Il paradigma a oggetti prende sempre più piede e, a partire dalla prima metà degli anni '90, è tra i più utilizzati e studiati. Merito anche della massiccia diffusione dell'interfaccia grafica utente: la programmazione a oggetti, infatti, permette di collegare ogni oggetto visualizzato a schermo ad una determinata porzione di codice, rendendo lo sviluppo del programma più semplice e il codice stesso più “pulito”.
Le caratteristiche dei linguaggi di programmazione a oggetti
Pur nella loro eterogeneità, i linguaggi di programmazione a oggetti condividono caratteristiche comuni e fondanti. Innanzitutto, al di là della diatriba se sia meglio questo o quel linguaggio , bisogna ricordare che quello a oggetti è innanzitutto un modello di programmazione: serve a delineare linee guida per semplificare lo sviluppo di programmi dalla complessa interfaccia grafica. La modularità tipica dei linguaggi orientati agli oggetti, infatti, dà l'opportunità agli sviluppatori di riutilizzare – senza troppi problemi – intere porzioni di codice in programmi anche molto differenti tra loro.
Lo sviluppo di un programma non è più basato su variabili e codice: questi due elementi sono integrati all'interno degli oggetti o classi, costituiti da uno stato (collezione di variabili) e comportamento (collezione di istruzioni, behaviour in inglese). Le classi corrisponderanno a cose o oggetti esistenti nel mondo reale: un portale di e-commerce avrà classi come prodotti, utenti e carrello della spesa e supporterà comportamenti come effettua ordine, pagamento e offerte.
Gli obiettivi principali della programmazione orientata agli oggetti sono aumentare la comprensibilità del codice e facilitare la manutenzione e l'aggiornamento dei programmi.