Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

26
Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione

Transcript of Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

Page 1: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

Storia e sviluppo dei

Seminario a cura di

Paolo Liberati

Linguaggi di Programmazione

Page 2: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

•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”.

Page 3: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

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.

Page 4: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

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

Page 5: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

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.

Page 6: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

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.

Page 7: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

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”.

Page 8: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

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

1970: Pascal, ideato a fini didattici

1967: SimULA, primo linguaggio object-oriented

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.

Page 9: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

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

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.

1967: SimULA, primo linguaggio object-oriented

Page 10: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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 da parte di altre porzioni del programma.È l’attributo che consente ad un’interfaccia del programma di essere utilizzata per una classe generale di azioni, che corrispondono ai metodi degli oggetti di appartenenza.È il processo grazie al quale un oggetto acquisisce le proprietà di un altro oggetto di classificazione più generica.

Page 11: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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).

Page 12: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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++.

Page 13: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 14: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 15: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 16: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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

La programmazione orientata agli oggetti vede il suo vero sviluppo dagli anni ’80, riprendendo concetti di base già implementati anni prima in linguaggi ad uso dedicato.

Le ragioni del successo dell’OOP vanno ricercate nell’efficienza derivante dalla definizione di classi di oggetti virtuali che ottimizzano il codice, rendendone riutilizzabili le componenti grazie ai concetti chiave di incapsulamento, ereditarietà e polimorfismo.

Page 17: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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 oggetti, che comunicano liberamente tra loro, ma che per comunicare con l’esterno devono servirsi dell’interfaccia del componente, risultando così protetti e organizzati in una struttura interna invisibile dal di fuori.

La comunicazione tra componenti può essere definita in termini di componente client e componente server.

L’interfaccia di un componente deve essere separata dalla sua implementazione, in modo che il client dipenda solo dall’interfaccia del server; questa si compone di tante interfacce oggetto, ognuna delle quali racchiude il set di messaggi inviabili ad un certo oggetto.

La relazione tra oggetti e interfacce è comunque di tipo molti-a-molti.

Ogni tipo usato nella definizione dei messaggi deve essere definito nell’interfaccia di un componente.

In un linguaggio COP deve essere possibile specificare un componente senza doverlo implementare, e successivamente richiederlo al sistema attraverso le specifiche date.

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.

Page 18: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 19: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 20: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 21: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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

Perché la programmazione orientata ai componenti?

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.

Page 22: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…l’aspect-oriented programming è in arrivo!

La programmazione orientata agli aspetti rappresenta un ulteriore sviluppo dell’OOP e si basa sul concetto chiave 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

OBJECT

ORIENTED

ASPECT

ORIENTED

Page 23: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 24: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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.

Page 25: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

…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’aspect-oriented 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.

Page 26: Storia e sviluppo dei Seminario a cura di Paolo Liberati Linguaggi di Programmazione.

UNIVERSITÀ DEGLI STUDI DI CAMERINOFacoltà di Scienze Matematiche, Fisiche e Naturali

Corso di Laurea in Informatica

Dipartimento di Matematica e Informatica

FINE