Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Romina Eramo
romina.eramo@univaq.it
http://www.di.univaq.it/romina.eramo/tlp
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Roadmap
Introduzione ai linguaggi di programmazione
Principi base del paradigma OO
Astrazione
Oggetto e Classe
Incapsulamento e Information Hiding
Modularit
Ereditariet
Polimorfismo
Java vs C++
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
I linguaggi di programmazione
La programmazione pu essere definita come la
disciplina che demanda al calcolatore elettronico la
soluzione di un determinato problema
Un linguaggio di programmazione un insieme di
parole, codici, e simboli che permettono al
programmatore di dare istruzioni al calcolatore
Diversi linguaggi di programmazione sono stati
concepiti nel corso degli anni, ognuno con le proprie
regole, o sintassi per scrivere tali istruzioni
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Paradigmi di programmazione
Linguaggio
Modello
computazionale
Imperativo Cambiamenti di
Esempi
Pascal, C
Funzionale
Definizione ed
applicazione di
funzioni
Lisp
Logico
Predicati logici
come specifiche
eseguibili
Prolog
Ad oggetti
Modello ad oggetti
Progettazione e realizzazione di
codice sotto forma di classi che
interagiscono tra di loro
Java,
C++
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
anni 50
Cobol
Lisp
Algol
anni 60
60
BASIC
Pascal
C
Smalltalk
SIMULA 67
anni 65
anni 70
ModulaModula-2
Ada
C ++
anni 80
Java
anni 95
Cobol
1959 da Grace Murray Hopper
applicazioni finanziarie
sintassi definita in modo da rendere la scrittura di istruzioni simile alla
scrittura di frasi nel linguaggio naturale
e.g., add 1 to x giving y (y = x+1)
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
anni 50
Cobol
Lisp
Algol
anni 60
BASIC
SIMULA 67
anni 65
Pascal
C
Smalltalk
anni 70
70
ModulaModula-2
Ada
C ++
Java
anni 80
anni 95
Lisp
Algol
1958-1960 da un comitato internazionale di informatici
un migliore sistema dei tipi
prime strutture dati
anni 50
Cobol
Lisp
Algol
anni 60
BASIC
SIMULA 67
anni 65
Pascal
C
Smalltalk
anni 70
ModulaModula-2
Ada
C ++
anni 80
80
Java
anni 95
SIMULA 67
Estensione di Algol 60 progettato per la simulazione di processi concorrenti
Introduce i concetti base dellobject oriented: classe ed incapsulamento
Predecessore di Smalltalk e C++
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento
Ingegneria
CSI 3125,
History,dipage
10e
Scienze dellInformazione e Matematiche
anni 50
50
Cobol
Lisp
Algol
anni 60
BASIC
SIMULA 67
anni 65
Pascal
C
Smalltalk
anni 70
ModulaModula-2
Ada
C ++
anni 80
Java
anni 95
95
Pascal
Successore di Algol 60.
Ottimo linguaggio per introdurre la programmazione strutturata
Un buon primo linguaggio da imparare
ModulaModula-2
Successore di Pascal
Meccanismi per gestire la concorrenza (pi processi in parallelo)
Ada
Progettato per supportare in maniera efficace la concorrenza
Ci sono due standard: Ada 83 (loriginale), and Ada 95
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento
Ingegneria
CSI 3125,
History,dipage
11e
Scienze dellInformazione e Matematiche
anni 50
Cobol
Lisp
Algol
anni 60
BASIC
SIMULA 67
anni 65
Pascal
C
Smalltalk
anni 70
ModulaModula-2
Ada
C ++
anni 80
80
Java
anni 95
C
Il linguaggio di implementazione di Unix
Pericoloso se non usato opportunamente: non raccomandato per
i programmatori inesperti
Relativamente di basso livello
Smalltalk
Linguaggio di programmazione object-oriented pi pulito di
Java e molto pi pulito di C++
Viene fornito con uninterfaccia grafica ed un ambiente di
programmazione integrato
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento
Ingegneria
CSI 3125,
History,dipage
12e
Scienze dellInformazione e Matematiche
anni 50
Cobol
Lisp
Algol
anni 60
60
BASIC
SIMULA 67
anni 65
Pascal
C
Smalltalk
anni 70
ModulaModula-2
Ada
C ++
Java
anni 80
anni 95
95
C++
Estensione object-oriented del linguaggio imperativo C
Sintassi complicata con difficile semantica
Molto richiesto
Java
Rielaborazione del C++
Full object orientation (anche se non ai livelli di Smalltalk)
Progettato per la programmazione Internet programming, anche se generalpurpose
Solitamente considerato essere lento
Forse il prossimo standard de-facto
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento
Ingegneria
CSI 3125,
History,dipage
13e
Scienze dellInformazione e Matematiche
anni 50
Cobol
Lisp
Algol
anni 60
60
BASIC
SIMULA 67
anni 65
Pascal
C
Smalltalk
anni 70
ModulaModula-2
Ada
C ++
anni 80
Java
anni 95
Linguaggi di Scripting
Text processing:
Perl
Python
Web programming
JavaScript
PHP
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
DISIM - Dipartimento
Ingegneria
CSI 3125,
History,dipage
14e
Scienze dellInformazione e Matematiche
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Perch OOP?
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Perch OOP?
Portare lo sviluppo
software vicino alla
vita reale
Nella vita reale abbiamo a che
fare con oggetti.
Vogliamo trattare con il software
allo stesso modo.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Perch OOP?
Separazione di
concetti
Nella
vita
reale
non
ci
preoccupiamo di come un oggetto
fatto o di cosa contiene. Ci
limitiamo ad usarlo.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Perch OOP?
Le componenti sono
replicabili
Perch OOP?
Sviluppo di
componenti in
parti distinte
Nella vita reale gli sviluppatori di una
componente non si preoccupano dellintero
sistema, o di come le sue componenti saranno
usate nellintero sistema.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Perch OOP?
Fornire la struttura
e realizzare
prototipi
Perch OOP?
Usa e getta
Perch OOP?
Riuso di componenti
Perch OOP?
Sistema facile da
capire
Cosa OOP?
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Cosa OOP?
Cosa OOP?
LOOP prevede di raggruppare in ununica
entit classe sia le strutture dati che le
procedure che operano su di esse, creando un
oggetto software dotato di propriet
(dati
dati)
procedure)
dati e metodi (procedure
procedure che operano sui
dati delloggetto stesso
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Astrazione
Qualsiasi modello include gli aspetti pi importanti o
essenziali di qualcosa mentre ignora i dettagli meno
importanti, immateriali. Il risultato di rimuovere le
differenze ed enfatizzare gli aspetti comuni
[Dizionario di Object Technology Firesmith, Eykholt 1995]
Astrazione
Utilizzata per gestire la complessit di un
programma concentrandosi sulle caratteristiche
essenziali di unentit che la distingue dalle altre
Applicata per decomporre sistemi software complessi in
componenti pi piccoli e semplici che possono essere
gestiti con maggiore facilit ed efficienza
E dipendente dal dominio e dalla prospettiva, cio quello
che importante in un contesto potrebbe non esserlo in
un altro
per esempio, la macchina per un venditore diversa da quella di
un progettista
Astrazione
Lapproccio orientato agli oggetti mette a disposizione
strumenti con i quali il programmatore pu
rappresentare elementi nello spazio dei problemi
La rappresentazione sufficientemente generalizzata
da non vincolare il programmatore a occuparsi
soltanto di un determinato tipo di problemi
Gli oggetti sono elementi che si trovano nello spazio
dei problemi e le loro rappresentazioni nello spazio
delle soluzioni
LOOP permette quindi di descrivere il problema nei
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Esempio di classe
Nome
Corso
Propriet
Nome, Luogo, Durata, Crediti, Inizio, Fine
Comportamento
Aggiunta studente
Cancellazione studente
Verifica se pieno
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Course
name
location
duration
startDate
endDate
addStudent()
dropStudent()
isFull()
Caratteristiche di un approccio OO
Alan Kay ha riepilogato 5 caratteristiche essenziali di
Smalltalk (primo linguaggio OOP di successo)
1. Ogni cosa un oggetto
2. Un programma un insieme di oggetti che si dicono
lun laltro che cosa fare inviandosi messaggi
3. Ogni oggetto ha la sua memoria formata da altri
oggetti
4. Ogni oggetto ha un tipo
5. Tutti gli oggetti di un determinato tipo possono
ricevere gli stessi messaggi
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Cos un oggetto
Informalmente rappresenta
Entit fisica: trattore
Entit concettuale: processo chimico
Oppure entit software: lista, coda...
Formalmente
Manifestazione concreta di unastrazione
Entit con un confine e unidentit ben definite che incapsula stato e
comportamento
Istanza di una classe
Un oggetto possiede...
Stato
Possibile condizione nel quale loggetto potrebbe esistere e
generalmente cambia nel tempo
Implementato mediante propriet (attributi) con valori, e
collegamenti ad altri oggetti
Comportamento
Determina come un oggetto agisce e reagisce alle richieste di un altro
oggetto
Rappresentato dallinsieme di messaggi a cui pu rispondere
(operazioni)
Identit
Rende possibile la distinzione tra due oggetti anche se hanno lo stesso
stato e lo stesso valore nei suoi attributi
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Oggetto e interfaccia
Nome del tipo
Interfaccia
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Incapsulamento
Un oggetto contiene ("incapsula") al suo interno gli attributi (dati) e i
metodi (procedure) che agiscono su di essi
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Considerazioni
Dati (espressi mediante Position) ed operazioni
(espresse mediante PositionUtility) sono separati!!!
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
the
}
public double heading( Position position ) {
//Calculate and return the heading from this object to
specified position.
the
}
public double latitude;
public double longitude;
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
= 36.538611;
myHouse.longitude = -121.797500;
= 36.539722;
coffeeShop.longitude = -121.907222;
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Modularit
La decomposizione fisica e logica di cose (es.
responsabilit e software) in gruppi piccoli e
semplici (es. requisiti e classi rispettivamente)
che incrementa il raggiungimento degli
obiettivi dellingegneria del software
[Dizionario di Object Technology Firesmith, Eykholt 1995]
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Modularit
Un modulo pu essere definito come un componente di un pi
vasto sistema, che opera in quel sistema indipendentemente
dalle operazioni di altri componenti
per gestire la complessit, si pu suddividere qualcosa che
complesso in pezzi pi piccoli e quindi pi maneggevoli
Modularit
O.O. modella la modularit con package , components
e subsystem
Un package un namespace che organizza un insieme di
classi ed interfacce corrispondenti
Concettualmente un package simile ad una directory
nel file system. Possiamo quindi memorizzare file
HTML in una directory, immagini in unaltra, e script in
unaltra ancora
Tipicamente, sistemi complessi consistono di migliaia
di classi, ha quindi senso organizzare le classi e le
interfacce in package
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Ereditariet
Qualsiasi graduatoria (ranking) o ordine di
astrazione in una struttura ad albero
[Dizionario di Object Technology Firesmith, Eykholt 1995]
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Ereditariet
OO utilizza classi per raggruppare dati e
funzionalit in concetti e lereditariet per
organizzare tali concetti in base ad un certo
ordine
esempi: complessit, responsabilit
Ereditariet
Maggiore Astrazione
Mammifero
Cetaceo
Minore Astrazione
Delfino
Balena
Gatto
Felino
Leopardo
Leone
Ereditariet
Classe base
Classe derivata
Ereditariet
superclasse
classe genitore
classe superiore
Classe base
Classe derivata
sottoclasse
classe figlia
classe ereditata
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Esempio di ereditariet
Shape
draw()
erase()
mode()
getColor()
setColor()
Circle
Square
Triangle
Ereditariet
Quando si eredita da un tipo esistente, il tipo
nuovo duplica linterfaccia della classe base
tutti i messaggi inviabili a oggetti della classe base
possono esserlo anche a oggetti della classe derivata
Ereditariet
Ci sono due modi per differenziare la nuova classe
derivata dalla classe base originale
1. Si aggiungono nuovi metodi alla classe derivata
(estensione
estensione della classe)
Shape
draw()
erase()
mode()
getColor()
setColor()
Circle
Square
Triangle
flipVertical()
flipHorizontal()
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Ereditariet
Ci sono due modi per differenziare la nuova classe
derivata dalla classe base originale
2. Si cambia il comportamento di un metodo della classe
base mediante la sovrascrittura del metodo
(overridding
overridding)
overridding
Shape
draw()
erase()
mode()
getColor()
setColor()
Circle
draw()
erase()
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Square
draw()
erase()
Triangle
draw()
erase()
DISIM - Dipartimento di Ingegneria e
Scienze dellInformazione e Matematiche
Polimorfismo
Linguaggi procedurali (esempio Pascal) basati su
idea che procedure e funzioni, e i loro operandi,
hanno un unico tipo
Tali linguaggi sono detti monomorphic , cio ogni
valore e variabile pu avere uno ed un solo tipo
Linguaggi O.O. sono detti polymorphic , cio i
valori e le variabili possono avere pi di un tipo
Dal greco polymorphos avere molte forme
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Polimorfismo
void doStuff(Shape s) {
s.erase();
// ...
s.draw();
}
Polimorfismo
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
Polimorfismo
Shape s = null;
if (x <= 3) {
s = new Circle();
} else {
s = new Triangle();
}
s.draw();
quadrato o triagolo...
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Polimorfismo
Shape s = null;
if (x <= 3) {
s = new Circle();
} else {
s = new Triangle();
}
s.draw();
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Java vs C++
Sia C++ che Java sono linguaggi ibridi
Un linguaggio ibrido permette molteplici stili di
programmazione
per esempio, OO/procedurale
Java vs C++
Java non supporta le strutture (struct
(struct),
struct), le unioni
(union)
(union)
sono rese inutili dalla presenza delle classi
Java non supporta pi i puntatori
sono stati eliminati poich sono la maggior causa degli
errori in C/C++
Java non supporta le funzioni
essendo un linguaggio orientato agli oggetti, Java forza i
programmatori a considerare le funzioni come metodi
della classe
Romina Eramo
Tecnologie dei Linguaggi di Programmazione
Java vs C++
Java non supporta il preprocessore, il typedef e i files header
Java fornisce funzionalit simili ma con un maggior controllo
Java non supporta il coercion automatico
si riferisce alla conversione implicita di tipi di dato che alcune
volte si verifica in C e C++
Java non permette loverloading
loverloading degli operatori
Per esempio, possibile definire funzioni che ridefiniscono la somma
(+) e la moltiplicazione (*) fra due oggetti:
operatori in overload : a+b*c
chiamata di funzioni specifiche : somma(a,moltiplica
somma moltiplica(b,c))
moltiplica
Java vs C++
Java ha una classe String come parte del package java.lang
questo differisce dallarray di caratteri terminante con null del C
e C++
Java gestisce gli argomenti della linea di comando in modo
diverso dal C o C++
In C++
void main(int argc, char *argv[]){
. . .
}//end main function
In Java
public static void main(String[] args){
. . .
}//end main method
Romina Eramo
Tecnologie dei Linguaggi di Programmazione