programmazione ii - lezione 1 - di.unipi.itdaniele/teaching/pr2-10/pr2-01.pdf · 2 introduzione a...
TRANSCRIPT
Programmazione II
Lezione 1
Daniele Sgandurra
19/10/2010
1/39 Programmazione II Lezione 1 19/10/2010
Sommario
1 IntroduzioneStruttura del CorsoObiettiviInfo
2 Cenni StoriciEvoluzione dei Linguaggi
2/39 Programmazione II Lezione 1 19/10/2010
Introduzione
Parte I
Introduzione
3/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Programmazione II
Programmazione II.
9 CFU.
72 ore (36 lezioni).1 Linguaggi di programmazione (28 ore).2 Introduzione a Java (20 ore).3 Metodologie di programmazione (24 ore).
4/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Parte 1: Linguaggi di Programmazione
Argomenti:
Macchine astratte, compilazione, interpretazione.
Sintassi, semantica.
Tipi di dato.
Espressioni e comandi.
Blocchi, ambiente e scoping.
Memoria.
Sottoprogrammi.
Strutture di controllo.
Oggetti e classi.
Passaggio di parametri.
5/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Testo di Riferimento
Linguaggi di programmazione: principi e paradigmi. MaurizioGabbrielli, Simone Martini. McGraw-Hill Italia (prima edizione2006, seconda edizione 2010?).
6/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Parte 2: Introduzione a Java
Argomenti:
Concetti base, classi, oggetti, compilazione, esecuzione.
Speci�catore accesso, overloading, ereditarietà.
Gerarchie di tipi, classi astratte, interfacce, risoluzione dei nomi, tipiprimitivi.
Iteratori, eccezioni, generics.
Laboratorio.
7/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Testo di Riferimento
Core Java 2. Vol. 1: Fondamenti. Horstmann Cay S.; Cornell Gary.Pearson Italia (2005).
8/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Parte 3: Metodologie di Programmazione
Argomenti:
Astrazioni.
Astrazioni procedurali.
Eccezioni.
Astrazione sui dati.
Iteratori.
Gerarchie di tipi.
Polimor�smo.
9/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Testo di Riferimento
Program Development in Java: Abstraction, Speci�cation, andObject-Oriented Design. Barbara Liskov, John Guttag.Addison-Wesley Professional (2000).
10/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Obiettivi
�Computer science is no more aboutcomputers than astronomy is abouttelescopes�. (Edsger Wybe Dijkstra,1930-2002; premio Turing 1972).
�A good programming language is aconceptual universe for thinking aboutprogramming. (Alan Jay Perlis,1922-1990; primo premio Turing1966).
11/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Obiettivi Parte Prima
Conoscere i paradigmi comuni a centinaia di linguaggi.
Imparare cosa sia importante nei linguaggi di programmazione.
Stretta connessione tra progettazione e implementazione di unlinguaggio.
Come i costrutti linguistici possono essere implementati e illoro relativo costo:
tradeo�.
Aspetti architetturali che possono in�uenzare la progettazionee l'implementazione.
12/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Obiettivi Parte Seconda
Conoscere il nucleo di Java.
Programmazione ad oggetti.
Saper progettare e sviluppare programmi in Java.
13/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Obiettivi Parte Terza
Speci�ca, implementazione, dimostrazioni.
Programmazione come decomposizione guidata da astrazioni.
Meccanismi di astrazione: parametrizzazione, speci�ca.
Tipi di astrazione: procedure, tipi di dato astratti, iterazioneastratta, gerarchie di tipi.
Metodologie di programmazione orientata ad oggetti(esempli�cate tramite Java).
Programmi robusti e facili da mantenere.
14/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Orario
9-10 10-11 11-12 12-13
Lun
Mar PR2 (LAB1) PR2 (LAB1)
Mer
Gio
Ven PR2 (LAB2) PR2 (LAB2) PR2 (LAB2) PR2 (LAB2)
15/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Modalità Esame
Esame = prova scritta + orale.
L'orale deve essere sostenuto nella stessa sessione dello scritto.
Ammissione all'orale con votazione ≥ 15 nello scritto.
2 prove intermedie (compitini) che possono sostituire la provascritta.
16/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Consigli
Seguire il corso mantenendosi al passo con il programma.
Partecipare (attivamente) alle esercitazioni e al laboratorio.
Sostenere le prove intermedie.
17/39 Programmazione II Lezione 1 19/10/2010
IntroduzioneStruttura del CorsoObiettiviInfo
Sito Web e Contatti
Sito web (under construction):http://www.di.unipi.it/~daniele/teaching/pr2-10/
Contatto e-mail: [email protected].
Oggetto delle e-mail nella forma: [PR2]: oggetto.
Ricevimento su appuntamento: da concordare via e-mail.
18/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici
Parte II
Cenni Storici
19/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Primi Calcolatori
1941: Z3. �Primo calcolatore totalmente programmabile e automatico�:
Konrad Zuse.
1944: Mark I. �Primo calcolatore digitale automatico�:
IBM e Harvard University (Howard Hathaway Aiken).
1946: ENIAC. �Primo computer elettronico general-purpose�:
J. Presper Eckert e John Mauchly (University of Pennsylvania);in�uenzato dal seminario di Von Neumann sull'EDVAC.
1949: EDSAC. �Primo computer elettronico a programma memorizzato�:
costruito dal gruppo di Maurice Wilkes all'università di Cambridge;in�uenzato dall'ENIAC.
20/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Z3 e Mark I
21/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
ENIAC e EDSAC
22/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Generazione dei Linguaggi
Per programmare queste macchine si usavano linguaggi macchina:
basso livello;codi�ca in binario delle operazioni e meccanismi di calcolo dellamacchina stessa;istruzioni elementari: somma, load, store;linguaggi di prima generazione (1GL).
Richiesti formalismi più lontani dal linguaggio macchina e più �vicini� al
linguaggio naturale:
primo passo: linguaggi assembly;rappresentazioni simboliche del linguaggio macchina;assemblatore (assembler): traduzione in linguaggio macchina;linguaggi di seconda generazione (2GL).
Anni '50: linguaggi di alto livello:
linguaggi astratti: prescindono dalle caratteristiche �siche deicalcolatori;linguaggi di terza generazione (3GL).
23/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Evoluzione
Anni '50-'60:
L'architettura hardware in�uenza direttamente i linguaggi: es. goto.
Obiettivo principale: e�cienza.
�Programmers cheap, machines expensive: keep the machine busy!�.
�I think there is a world market for about �ve computers� (attribuita aThomas J. Watson, 1943, presidente IBM).
24/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Evoluzione
Oggi:
Compilazione di programmi scritti in maniera e�ciente.
Connessione diretta tra software design e linguaggio:
incapsulamento;ereditarietà.
Software engineering.
�Programmers expensive, machines cheap: keep theprogrammers busy!�.
25/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Anni '40-'50, '50-'60
Anni '40-'50: linguaggio macchina e assembly.Anni '50-'60: primi linguaggi di alto livello:
FORTRAN (Backus 1957): per calcolo numerico-scienti�co (FORmulaTRANslator); uso di notazione matematica in espressioni.
ALGOL (Naur 1958): progettato come linguaggio universale peresprimere algoritmi (ALGOrithmic Language). Passaggio parametri pernome; blocchi; grammatica BNF (Backus Naur Form); ricorsione;gestione dinamica della memoria.
LISP (McCarthy 1959): per intelligenza arti�ciale (LISt Processor);funzioni di ordine superiore.
COBOL (1959): per applicazioni commerciali (COmmon BusinessOriented Language).
SIMULA (1962): primo linguaggio con classi e oggetti.
PL/I (IBM 1964): tentativo di creare un linguaggio multiuso(Fortran=applicazioni scienti�che, COBOL=applicazioni commerciali).Programmazione strutturata e ricorsione. Scarso successo.
26/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Anni '70
Pascal (Wirth): basato su ALGOL. Portabilità: P-code (codiceintermedio). Linguaggio strutturato a blocchi; funzioni e blocchi annidati.De�nizione di nuovi tipi.
C (Dennis Ritchie): evoluzione del B (a sua volta del BCPL);programmazione di sistema (Unix). E�cienza. Notevole successo.
Smalltalk (Alan Kay): strumenti di incapsulamento e information-hiding;nozione di classe e oggetto; regole di visibilità.
ML: linguaggio funzionale; nato come Meta Linguaggio per sistemasemi-automatico di dimostrazione di proprietà di programmi.
Prolog: uso della logica come base di un linguaggio di programmazione.
27/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Anni '80-'90
ADA (Ichbiah): bando di gara del Dipartimento della Difesa degli USAper un linguaggio per sviluppare programmi di dimensioni elevate (ede�nire un linguaggio standard). Include tutto ciò che si conosceva altempo (anche concorrenza); stato dell'arte dell'ingegneria del software;compilatori certi�cati!
Nome in onore di Augusta Ada Byron (Ada Lovelace, �glia di Lord
Byron):riconobbe le macchine di Babbage (macchina analitica) comestrumenti programmabili;prima programmatrice: algoritmo per il calcolo dei numeri diBernoulli.
28/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Anni '80-'90
C++ (Bjarne Stroustrup, 1986): �C più classi ed ereditarietà�.Programmazione ad oggetti; uso dei template (polimor�smoparametrico); funzioni virtuali; ereditarietà multipla.
Java (SUN, James Gosling): altamente portabile (�Write once, runanywhere�); Java Virtual Machine e bytecode; type-safety (controllo a trelivelli: compilatore, bytecode, interprete); sand-box; garbage-collector;caricamento dinamico delle classi.
29/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Classi�cazione dei Linguaggi
Imperativi
von Neumann: Fortran, Pascal, Basic, C;orientati agli oggetti: Smalltalk, Ei�el, C++;linguaggi di scripting: Perl, Python, JavaScript, PHP.
Dichiarativi
funzionali: Scheme, ML, pure Lisp, FP;logici, basati su vincoli: Prolog, VisiCalc, RPG.
30/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Linguaggi Imperativi
Basati sulla nozione di stato:
insieme di locazioni di memoria con valori.
Le istruzioni sono comandi (statements) che cambiano lostato:
es: assegnamento (y=y+2;)
C, Pascal, FORTRAN, COBOL.
Linguaggi orientati agli oggetti (Java, C++, Smalltalk):
incapsulamento;ereditarietà.
31/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Linguaggi Dichiarativi
Basati sulla nozione di funzione o relazione.
Le istruzioni sono dichiarazioni di nuovi valori, in modo diretto, oppure
per composizione di funzioni o relazioni:
(fun(x). x+2)3
Linguaggi funzionali (Lisp, Scheme, ML, Haskell):
basati sulla nozione di funzione;risultato del programma = valore esplicito di un'espressione;applicazione e de�nizione di funzioni;ricorsione;programmare = costruire la funzione che calcola il risultato.
32/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Linguaggi Dichiarativi
Linguaggi logici (Prolog, CLP):
basati sul relazioni;risultato = valore di alcune variabili determinato da alcune relazioni;istruzioni = implicazioni logiche fra formule;programmare = speci�care la relazione che de�nisce il valore dellevariabili di interesse.
33/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Diagramma Temporale Principali Linguaggi
34/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Popolarità Linguaggi di Programmazione
35/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Andamento a Lungo Termine dei Linguaggi Top Ten
36/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Perché Così Tanti Linguaggi?
Evoluzione: nel tempo abbiamo imparato metodi migliori perfare alcune cose.
Fattori socio-economici: interessi proprietari, vantaggicommerciali.
Linguaggi �special purposes�: es., C per programmazione disistema.
Preferenze personali: chi preferisce programmare in C++, chilo odia.
37/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Perché un Linguaggio Ha Successo?
Potere espressivo: meccanismi di astrazione.
Facilità di utilizzo: BASIC, Pascal, LOGO, Scheme.
Facilità di implementazione: BASIC, Forth.
Buoni compilatori: Fortran (codice veloce, piccolo).
Sponsor: COBOL, PL/1, Ada, Visual Basic.
Open source: C.
38/39 Programmazione II Lezione 1 19/10/2010
Cenni Storici Evoluzione dei Linguaggi
Riferimenti
[1] Linguaggi di programmazione: principi e paradigmi (Cap 13).
Maurizio Gabbrielli, Simone Martini.
[2] History of Programming Languages.
http://oreilly.com/news/graphics/prog_lang_poster.pdf
39/39 Programmazione II Lezione 1 19/10/2010