Storia e sviluppo dei
Linguaggi di
Programmazione
Seminario a cura di
Paolo Liberati
•Il linguaggio nasce dal programmatore
•Il primo programmatore della storia è una donna:
Lady Augusta Ada Byron,
contessa di Lovelace
(1815 – 1852)
Insigne matematica, collabora con
Charles Babbage, che all’università
di Cambridge ha progettato
l’”Analytical Engine”.
Nel 1843 scrive per lui il famoso
articolo in cui suggerisce il
linguaggio di programmazione per
far calcolare a tale macchina i
numeri di Bernoulli.
In suo onore l’US-DoD, nel 1979,
chiamerà ADA il linguaggio di
programmazione ad alto livello che
viene ancor oggi usato nella sua
versione object-oriented, “ADA 95”.
Si apre l’era dell’informatica…
 Anni ’40: linguaggio macchina e Assembly
Agli albori dell’informatica l’unico linguaggio
disponibile era il linguaggio macchina,
consistente nella comunicazione diretta tra il
programmatore ed il calcolatore in codice
binario.
L’estrema difficoltà a realizzare programmi anche
minimamente complessi portò presto alla creazione
del linguaggio Assembly, che semplicemente
associa mnemonici letterali alle sequenze di bit.
Si apre l’era dell’informatica…
 Anni ’40: linguaggio macchina e Assembly
 Anni ’50: ForTran e AlgoL, calcolo scientifico
Con l’aumentare del progresso tecnologico si ha
la necessità di disporre di linguaggi adatti alla
creazione di programmi per il calcolo matematico
e scientifico.
Nascono così, grazie a John Backus, il ForTran e
l’AlgoL, primi linguaggi ad “alto livello”, in
quanto permettono un’astrazione maggiore da parte
del programmatore nella scrittura del codice.
Si apre l’era dell’informatica…
 Anni ’40: linguaggio macchina e Assembly
 Anni ’50: ForTran e AlgoL, calcolo scientifico
 1960: CoBOL, programmi di gestione aziendale
Nel tentativo di implementare un primitivo
concetto di portabilità, il CoBOL viene ideato
per applicazioni nei campi dell'amministrazione e
del commercio, per l'organizzazione dei dati e la
manipolazione dei file.
Si apre l’era dell’informatica…
 Anni ’40: linguaggio macchina e Assembly
 Anni ’50: ForTran e AlgoL, calcolo scientifico
 1960: CoBOL, programmi di gestione aziendale
 1964: BASIC, general purpose per principianti
La diffusione a macchia d’olio dei primi
microcomputer fece la fortuna di questo
linguaggio distribuito “in bundle”.
Destinato a facilitare la programmazione anche
agli utenti meno esperti, il BASIC è un
linguaggio semplice da imparare e da utilizzare.
Pur essendo un linguaggio portabile e di alto
livello, trova il suo limite nel fatto di essere
non strutturato.
Si apre l’era dell’informatica…
 Anni ’40: linguaggio macchina e Assembly
 Anni ’50: ForTran e AlgoL, calcolo scientifico
 1960: CoBOL, programmi di gestione aziendale
 1964: BASIC, general purpose per principianti
 1967: SimULA, primo linguaggio object-oriented
Originariamente progettato per la creazione di
simulazioni discrete, non ha avuto una grande
diffusione, ma la sua importanza risiede
nell’essere stato il precursore della
programmazione orientata agli oggetti,
introducendo il concetto di “classe”.
Si apre l’era dell’informatica…
 Anni ’40: linguaggio macchina e Assembly
 Anni ’50: ForTran e AlgoL, calcolo scientifico
 1960: CoBOL, programmi di gestione aziendale
 1964: BASIC, general purpose per principianti
 1967: SimULA, primo linguaggio object-oriented
 1970: Pascal, ideato a fini didattici
Il principio chiave di questo linguaggio di
programmazione è l'ordine, raggiunto tramite un forte
concetto di tipizzazione dei dati, il controllo delle
dichiarazioni e la programmazione strutturata.
Il Pascal viene sviluppato come strumento di
insegnamento.
Si apre l’era dell’informatica…
 Anni ’40: linguaggio macchina e Assembly
 Anni ’50: ForTran e AlgoL, calcolo scientifico
 1960: CoBOL, programmi di gestione aziendale
 1964: BASIC, general purpose per principianti
 1967: SimULA, primo linguaggio object-oriented
 1970: Pascal, ideato a fini didattici
 1972: linguaggio C
Il C segna un’importante svolta nella storia della
programmazione: definito a ragione “il linguaggio di più basso
livello tra quelli ad alto livello”, unisce potenza,
portabilità e facilità di utilizzo ad una notevole
flessibilità e possibilità di controllo. La sue
caratteristiche strutturali, tali da consentire
un’implementazione algoritmica chiara, elegante ed efficiente,
ne fanno un linguaggio per programmatori professionisti.
…gli anni dell’object-oriented programming…
Con il modello di programmazione orientato agli oggetti, si
ha la possibilità di creare classi di oggetti contenenti sia
una struttura dati caratterizzante che i metodi per poter
operare su di essa.
I tre meccanismi fondamentali comuni a tutti i linguaggi OOP
sono:
 Incapsulazione
 Polimorfismo
 Ereditarietà
È la proprietà che consente la
creazione delle entità oggetto, che
attraverso di essa sono protette da
accessi
esterni
daconsente
parte diad
altre
È l’attributo
che
porzioni
del programma.
un’interfaccia
del programma di essere
utilizzata per una classe generale di
azioni, che corrispondono ai metodi
È
il processo
al quale un
degli
oggetti grazie
di appartenenza.
oggetto acquisisce le proprietà di un
altro oggetto di classificazione più
generica.
…gli anni dell’object-oriented programming…
 1979: Ada, per grandi progetti in ambienti critici
Pur non nascendo orientato agli oggetti, l'Ada è un linguaggio ad
alto livello di tipo strutturato fortemente tipizzato che consente
di creare programmi modulari, facilmente manutenibili; permette,
inoltre, di manipolare dati astratti e definire unità di
programmazione generalizzate, ossia indipendenti dai tipi di dato in
input, e di gestire processi concorrenti.
L'organizzazione del linguaggio è completata da procedure e
funzioni, blocchi e "package" (questi ultimi permettono di
raggruppare subroutine e dati in un'unica struttura).
…gli anni dell’object-oriented programming…
 1979: Ada, per grandi progetti in ambienti critici
 1983: C++, estensione object-oriented del C
L’essenza del C++ è stata concepita con lo scopo di permettere ai
programmatori di comprendere e gestire programmi più estesi e
complessi.
Le sue funzionalità orientate agli oggetti consentono di strutturare
i programmi con maggiore chiarezza, estendibilità e facilità di
manutenzione senza alcuna perdita di efficienza, e realizzare
sistemi software di altissime prestazioni.
Il C++ rappresenta senza dubbio uno strumento utile e sempre più
utilizzato nel mondo del software industriale. È un linguaggio
solido, maturo e adatto alla realizzazione di qualsiasi tipo di
applicazione: da quelle real time a quelle che operano su basi di
dati, da applicazioni per utenti finali a sistemi operativi.
Statisticamente, mentre si svolge questo seminario, 5 persone
diventano nuovi programmatori C++.
…gli anni dell’object-oriented programming…
 1979: Ada, per grandi progetti in ambienti critici
 1983: C++, estensione object-oriented del C
 1991: VisualBasic, parziale OOP in ambiente grafico
Sebbene questo linguaggio, evoluzione del BASIC, sia stato criticato
nelle sue prime versioni perché un po’ limitato nelle funzionalità
rispetto ai suoi contemporanei, col tempo è risultato essere un
prodotto molto versatile, e viene oggi largamente utilizzato.
I suoi innovativi punti di forza sono sostanzialmente due:
innanzitutto la progettazione ora può avvenire in un più comodo
ambiente visuale, tecnologia che ha influenzato le successive
release per gli ambienti di tutti i linguaggi più diffusi; in
secondo luogo viene introdotto il concetto di programmazione “ad
eventi” (event driven), ovvero l’elemento base è l’azione
dell’utente sul sistema, considerata in base ad uno schema
temporale. Queste caratteristiche rendono il linguaggio facile da
usare ma, nello stesso tempo, potente e flessibile.
…gli anni dell’object-oriented programming…
 1979: Ada, per grandi progetti in ambienti critici
 1983: C++, estensione object-oriented del C
 1991: VisualBasic, parziale OOP in ambiente grafico
 1995: Java, molto portabile, orientato al web
L’entusiasmante peculiarità di Java risale alla sua indipendenza
dalla piattaforma di utilizzo, il che ne fa un linguaggio
essenzialmente nato per la grande rete Internet, che poi si è esteso
a tutti i livelli di applicazione.
La sua grande portabilità deriva dal sistema di compilazione, che
non produce codice macchina, come negli altri linguaggi di
programmazione, bensì codice chiamato Bytecode, che poi verrà
interpretato dalla Java Virtual Machine propria del sistema
operativo di destinazione.
…gli anni dell’object-oriented programming…
 1979: Ada, per grandi progetti in ambienti critici
 1983: C++, estensione object-oriented del C
 1991: VisualBasic, parziale OOP in ambiente grafico
 1995: Java, molto portabile, orientato al web
 1996: Delphi, evoluzione visuale del Pascal con OOP
Con il Delphi è stato introdotto il concetto di sviluppo visuale e
orientato alla gestione degli eventi come nel Visual Basic, senza
perdere però i vantaggi della compilazione Pascal.
Nonostante esistessero già precedenti versioni del Pascal orientate
agli oggetti, il Delphi segna un punto di svolta per questo
linguaggio, restituendone una versione completamente rivista ed
ottimizzata per lo sviluppo di applicativi in ambiente 32-bit.
…gli anni dell’object-oriented programming…
 1979: Ada, per grandi progetti in ambienti critici
 1983: C++, estensione object-oriented del C
 1991: VisualBasic, parziale OOP in ambiente grafico
 1995: Java, molto portabile, orientato al web
 1996: Delphi, evoluzione visuale del Pascal con OOP
…oggi, component-oriented programming…
La programmazione orientata ai componenti, che si è molto
sviluppata in questi ultimi anni, rappresenta
l'evoluzione naturale del modello object-oriented.
Il concetto di “componente” unisce un piccolo gruppo di
La comunicazione tra componenti può essere definita in
oggetti, che comunicano liberamente tra loro, ma che per
termini di componente client e componente server.
comunicare con l’esterno devono servirsi dell’interfaccia
L’interfaccia
dirisultando
un componente
essere
separata dalla
del componente,
cosìdeve
protetti
e organizzati
in
sua
implementazione,
in modo che il
client
dipenda solo
una
interna
fuori.
Ognistruttura
tipo usato
nella invisibile
definizionedal
deidi
messaggi
deve
dall’interfaccia del server; questa si compone di tante
essere definito nell’interfaccia di un componente.
interfacce oggetto, ognuna delle quali racchiude il set
In
linguaggio
COP deve
essere
di un
messaggi
inviabili
ad un
certopossibile
oggetto. specificare un
componente senza doverlo implementare, e successivamente
La relazione tra oggetti e interfacce è comunque di tipo
richiederlo al sistema attraverso le specifiche date.
molti-a-molti.
Ogni implementazione di un componente può usare altri
componenti. In media un buon componente usa dai 3 ai 6
altri componenti.
Il numero di classi all’interno va dalle 5 alle 10.
…oggi, component-oriented programming…
 2000: C#, successore orientato ai componenti del C++
Il C# è il primo linguaggio component-oriented basato
su C/C++; esso consente di applicare a qualsiasi
oggetto metadati con definizione del tipo ed
estensibili, in linea con quanto previsto dal modello
COP. L'architetto di un progetto può definire attributi
specifici di un dominio, quindi applicarli a qualunque
classe di elementi del linguaggio, interfacce e così
via.
Il linguaggio migliora la produttività dello
sviluppatore, che può esaminare mediante
programmazione gli attributi di ogni elemento,
eliminando quegli errori di programmazione che incidono
sull'aumento dei costi di sviluppo.
…oggi, component-oriented programming…
 2000: C#, successore orientato ai componenti del C++
 2001: ComponentJ, linguaggio COP basato sul Java
ComponentJ è un linguaggio di programmazione basato su
Java che modella la rappresentazione e la manipolazione
dei componenti in un contesto orientato agli oggetti e
imperativo.
I componenti sono le unità di programmazione che
vengono definite usando moduli base nelle operazioni di
composizione (costrutti espliciti del linguaggio che
combinano gli elementi esistenti in uno più grande).
I componenti risultanti possono essere instanziati
chiamando gli oggetti e usati in un linguaggio
imperativo.
…oggi, component-oriented programming…
 2000: C#, successore orientato ai componenti del C++
 2001: ComponentJ, linguaggio COP basato sul Java
 2002: ACOEL, COP sperimentale basato sul Java
Linguaggio ancora in fase di standardizzazione, ACOEL è
un altro esempio di component-oriented programming
basato sul potente linguaggio Java.
ACOEL si modella su due punti fondamentali: usa ibridi
per configurare i servizi forniti da un componente
senza mostrare la sua implementazione interna, e
aggiunge un supporto per i tipi virtuali e le relazioni
dei sottotipi tra i componenti.
…oggi, component-oriented programming…
 2000: C#, successore orientato ai componenti del C++

Perché
la
programmazione
2001: ComponentJ, linguaggio COP basato sul Java
orientata ai componenti?
 2002: ACOEL, COP sperimentale basato sul Java
La programmazione COP nasce per superare i problemi che
l’OOP presenta nella realizzazione di progetti molto
estesi. Questi problemi sono simili a quelli che resero
necessario il passaggio dalla semplice programmazione
strutturata all’object-oriented, ma per progetti
enormemente più grandi.
La confusione generata dall’interazione di un grande
numero oggetti viene superata modellando un ulteriore
raggruppamento: è nato il concetto di componente.
…l’aspect-oriented programming è in arrivo!
La programmazione orientata agli aspetti rappresenta un
ulteriore sviluppo dell’OOP e si basa sul concetto chiave A
S
della “separazione dei compiti”.
Gli “aspetti” saranno le porzioni di codice trasversale,
scritto in modo chiaro e concentrato in un unico punto,
che le varie classi coinvolte dovranno includere e/o
eseguire per l'espletamento di un determinato compito.
Esempio
P
E
C
T
O
R
B
I
J
E
N
C
T
E
O
D
R
I
E
N
T
E
D
…l’aspect-oriented programming è in arrivo!
 2002: AspectJ, estensione integrata AOP del Java
AspectJ è un linguaggio aspect-oriented in continuità
con il Java, compatibile con la Virtual Machine che
caratterizza questo linguaggio. È stato progettato per
essere semplice da imparare e da usare ed è dotato di
licenza open source.
Supporta una modularizzazione chiara dei compiti
trasversalmente incrociati, concernente in: controllo e
manipolazione degli errori, sincronizzazione, risposte
che tengono conto del contesto, ottimizzazione delle
prestazioni, monitorizzazione e logging, supporto per
il debug, protocolli multioggetto.
…l’aspect-oriented programming è in arrivo!
 2002: AspectJ, estensione integrata AOP del Java
 2002: ArchJava, basato sul Java, sperimentale
ArchJava ha un’implementazione strettamente collegata
all’architettura software, per garantire che la
comunicazione a controllo di flusso sia conforme alle
specifiche strutturali.
A differenza dei tradizionali linguaggi OOP, è dotato
di apposite strutture per la modellizzazione dei nuovi
concetti di programmazione, supportando una effettiva
razionalizzazione dei modelli che tiene conto del ciclo
di vita del codice.
ArchJava può essere considerato un linguaggio di
programmazione orientato agli aspetti con un supporto
per la separazione dei compiti strutturali da quelli
procedurali.
…l’aspect-oriented programming è in arrivo!
 2002: AspectJ, estensione integrata AOP del Java
 2002: ArchJava, basato sul Java, sperimentale
 2003: AspectC++, sarà un’estensione AOP del C++
Con il progetto AspectC++, ancora in corso di
sperimentazione, si avrà finalmente la possibilità di
estendere i nuovi funzionali concetti dell’aspectoriented programming al mondo C/C++.
Il linguaggio sta nascendo come estensione del C++ e,
sebbene siano stati già rilasciati i primi prototipi,
una versione ufficiale è prevista in uscita solo per i
primi mesi dell’anno venturo.
UNIVERSITÀ DEGLI STUDI DI CAMERINO
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica
Dipartimento di Matematica e Informatica
Scarica

seminario