Sei sulla pagina 1di 72

Object-Oriented Programming (OOP)

Romina Eramo
romina.eramo@univaq.it
http://www.di.univaq.it/romina.eramo/tlp
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

...verso i linguaggi ad alto livello


Linguaggio macchina
linguaggio in cui sono scritti programmi direttamente
eseguibili dal calcolatore

Linguaggio ad alto livello


linguaggio indipendente dall'hardware e pi "facile"
da utilizzare per il programmatore umano
richiede una traduzione in linguaggio macchina
la compilazione: traduzione che avviene una sola volta
linterpretazione: traduzione in tempo reale
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

...i livelli di astrazioni


Tutti i linguaggi di programmazione forniscono astrazioni
in linguaggio macchina sono definite l'insieme di istruzioni
fondamentali che un processore in grado di compiere e in cui i codici
di programmi da eseguire devono essere tradotti
i linguaggi a pi alto livello si ottengono come semplice codifica a
partire dal linguaggio macchina in un crescendo di astrazione

La complessit dei problemi che si in grado di risolvere


direttamente correlata al genere e alla qualit
dellastrazione considerata
Il linguaggio assembler una piccola astrazione della macchina
sottostante
I cosiddetti linguaggi imperativi (Fortran, BASIC, C) sono astrazioni
del linguaggio assembler anche se comunque continuano ad imporre di
pensare in termini di struttura del calcolatore invece che della
struttura del problema che si sta risolvendo
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

...i livelli di astrazioni


Tocca al programmatore stabilire
lassociazione fra il modello della macchina
(nello spazio delle soluzioni) e il modello del
problema che viene risolto (nello spazio dei
problemi)
Anzich modellare una macchina per risolvere
il problema si pu pensare di modellare il
problema
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Paradigmi di programmazione
Linguaggio

Modello
computazionale

In cosa consiste un programma

Imperativo Cambiamenti di

Esempi

Sequenza di assegnazioni che


stato della memoria producano lo stato finale
della macchina
(soluzione del problema)

Pascal, C

Funzionale

Definizione ed
applicazione di
funzioni

Combinazioni di funzioni valutate


per restituire un certo output

Lisp

Logico

Predicati logici
come specifiche
eseguibili

Sequenza di asserzioni di fatti e


regole eseguite per verificare il
soddisfacimento del goal

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Storia dei linguaggi di programmazione


ForTran

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

Fortran (Formula translator)


1954-1956 da John Backus presso IBM
espressioni esprimibili per mezzo di notazioni matematiche ordinarie
i+2*j)

primo linguaggio ad introdurre le variabili, cicli, procedure, etc.


nessun supporto per ricorsione e gestione implicita della memoria

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Storia dei linguaggi di programmazione


ForTran

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

1965 da John McCarthy


funzioni high-order
garbage collection
Successori del LISP: Miranda, ML, Haskell anche se non particolarmente usati

Algol
1958-1960 da un comitato internazionale di informatici
un migliore sistema dei tipi
prime strutture dati

Entrambi hanno ricorsione, funzioni e procedure


Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Storia dei linguaggi di programmazione


ForTran

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

BASIC 1964 Kemeny e Kurtz


Il primo linguaggio di programmazione pensato per uso personale
Semplice da imparare anche se limitato
Le versioni correnti del linguaggio non sono cos basic e semplici da
imparare

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

Storia dei linguaggi di programmazione


ForTran

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

Storia dei linguaggi di programmazione


ForTran

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

Storia dei linguaggi di programmazione


ForTran

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

Storia dei linguaggi di programmazione


ForTran

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

Computer Languages History


Per maggiori dettagli: http://www.levenez.com/lang/

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Jump star to OOP

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Perch OOP?

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Perch OOP?
Le componenti sono
replicabili

Nella vita reale le componenti


con funzionalit e specifiche
simili sono replicabili.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Perch OOP?
Fornire la struttura
e realizzare
prototipi

Nella vita reale pensiamo alla struttura


e produciamo modelli software e
sviluppiamo prototipi prima di ottenere
un'istanza effettiva.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Perch OOP?
Usa e getta

Nella vita reale usiamo le


componenti e una volta che
abbiamo finito con esse le
scartiamo.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Perch OOP?

Riuso di componenti

Nella vita reale la stessa componente


pu essere usata (riusata) per una
molteplicit di sistemi.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Perch OOP?
Sistema facile da
capire

Nella vita reale possiamo comprendere sistemi


complessi adottando un approccio top-down o
botton-up. Questo ci conduce verso piccoli oggetti.
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Cosa OOP?

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Cosa OOP?

L OOP (Object-oriented programming) un


paradigma di programmazione organizzato
attorno ad oggetti piuttosto che azioni
e dati piuttosto che logica
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Principi base del paradigma OO


Astrazione
Incapsulamento & Information Hiding
Modularit
Gerarchia
Polimorfismo

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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]

Unastrazione deve denotare le caratteristiche essenziali


di un oggetto contraddistinguendolo da tutti gli altri
oggetti e fornendo, in tal modo, dei confini concettuali ben
precisi relativamente alla prospettiva dellosservatore
[Grady Booch]
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

OO modella il sistema utilizzando lastrazione (es. classi)


Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

suoi termini propri, invece che nei termini del


computer sul quale verr computata la soluzione

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Cos una classe


Una classe rappresenta una particolare categoria di
oggetti e definisce un tipo di dato per un determinato
oggetto ad essa appartenente
Una classe caratterizzata da propriet (attributi),
comportamento (operazioni), relazioni e semantica
comuni agli oggetti che la classe descrive
Seguendo il principio OO dellastrazione:
Enfatizza caratteristiche rilevanti
Sopprime le altre caratteristiche
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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()

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

Es.: Ferrari di Schumacher, Ferrari di Barrichello, Mio


computer
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Relazione tra classe e oggetto


Classe una definizione astratta di un
oggetto
Definisce la struttura e il comportamento di
ogni oggetto nella classe
Serve come template per creare oggetti
Oggetti sono raggruppati in classi

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Oggetto e interfaccia
Nome del tipo
Interfaccia

Le richieste che si possono fare ad un oggetto sono definite


dalla sua interfaccia ed il tipo a determinare linterfaccia
Il codice deputato a soddisfare tali richieste, insieme con i
dati nascosti, costituisce limplementazione delloggetto
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Incapsulamento & Information Hiding


La localizzazione fisica di caratteristiche (es.
propriet, comportamento) in una singola
scatola nera che nasconde limplementazione
(e le relative decisioni di design) dietro una
interfaccia pubblica
[Dizionario di Object Technology Firesmith, Eykholt 1995]

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Incapsulamento & Information Hiding


L'information hiding il principio teorico su cui si basa la
tecnica dell'incapsulamento
Information Hiding
I dettagli implementativi di una classe - o di un costrutto di altro
tipo (oggetto, modulo, ecc) - sono nascosti all'utente
Le scelte interne di design e gli effetti che eventuali cambiamenti di
tali decisioni comportano sono nascoste ai possibili client
(utilizzatori)

Incapsulamento
Un oggetto contiene ("incapsula") al suo interno gli attributi (dati) e i
metodi (procedure) che agiscono su di essi

L incapsulamento una facility del linguaggio mentre


linformation hiding un principio di design
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Incapsulamento & Information Hiding


L'incapsulamento riduce il costo da pagare per
correggere gli errori in fase di sviluppo di un
programma
Un'errata decisione presa nell'implementazione di un
singolo modulo non deve ripercuotersi sull'intero
progetto, ma deve essere corretta modificando
soltanto quel modulo
Deve essere modificato solo il modulo errato e non i
moduli clienti, che interagiranno con il modulo
incapsulato soltanto attraverso interfacce
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Incapsulamento & Information Hiding


In generale i programmatori si distinguono in creatori
di classe e programmatori client
Lobiettivo del programmatore client mettere insieme
una serie di classi per sviluppare rapidamente le
applicazioni
Lobiettivo del creatore di classi costruire una classe
che mostra al programmatore client soltanto quello che
necessario, mantenendo nascosto tutto il resto

Se tutti i membri di una classe fossero disponibili a


tutti, un programmatore client potrebbe fare
qualsiasi cosa con quella classe e non vi sarebbe cos
modo di imporre delle regole
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Incapsulamento e Information Hiding


Esempio
Sistema che identifica un punto sulla superficie
terrestre e offre funzionalit per determinare la
distanza (distance) e la rotta (heading) tra due
punti

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Esempio: prima soluzione


public class Position {
public double latitude;
public double longitude;
}
public class PositionUtility {
public static double distance( Position pos1, Position pos2 ) {
//Calculate and return the distance between the specified
positions
}
public static double heading( Position pos1, Position pos2 ) {
//Calculate and return the heading from pos1 to pos2.
}
}

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Esempio: prima soluzione


Position myHouse = new Position();
myHouse.latitude = 36.538611;
myHouse.longitude = -121.797500;

Position coffeeShop = new Position();


coffeeShop.latitude = 36.539722;
coffeeShop.longitude = -121.907222;

double distance = PositionUtility.distance( myHouse, coffeeShop );


double heading

= PositionUtility.heading( myHouse, coffeeShop );

System.out.println("From my house at (" + myHouse.latitude + ", " +


myHouse.longitude + ") to the coffee shop at (" +
coffeeShop.latitude + ", " + coffeeShop.longitude + ") is a
distance of " + distance + " at a heading of " + heading +
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Esempio: prima soluzione


OUTPUT
From my house at (36.538611, -121.7975) to the
coffee shop at (36.539722, -121.907222) is
distance of 6.0873776351893385 at a heading of
270.7547022304523 degrees.

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Considerazioni
Dati (espressi mediante Position) ed operazioni
(espresse mediante PositionUtility) sono separati!!!

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Esempio: seconda soluzione


public class Position {
public double distance( Position position ) {
//Calculate and return the distance from this object to
specific position.

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Esempio: seconda soluzione


Position myHouse = new Position();
myHouse.latitude

= 36.538611;

myHouse.longitude = -121.797500;

Position coffeeShop = new Position();


coffeeShop.latitude

= 36.539722;

coffeeShop.longitude = -121.907222;

double distance = myHouse.distance( coffeeShop );


double heading = myHouse.heading( coffeeShop );

System.out.println("From my house at (" + myHouse.latitude + ", " +


myHouse.longitude + ") to the coffee shop at (" + coffeeShop.latitude +
", " + coffeeShop.longitude + ") is a distance of " + distance + " at a
heading of " + heading + " degrees.");

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

La modularit viene utilizzato su diversi livelli di astrazione


frazionamento di un programma non solo in funzioni, ma a livello
superiore in oggetti

Gli oggetti possono essere raggruppati in package,


package
componenti e subsystem
package, componenti e subsystem possono essere usati come blocchi
per altri sistemi
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

Lereditariet permette di descrive differenze o


variazioni di un particolare concetto
la classe originale viene replicata e arricchita con
aggiunte e modifiche
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Ereditariet
Maggiore Astrazione

Mammifero

Cetaceo

Minore Astrazione

Delfino

Balena

Gatto

Felino

Leopardo

Leone

Fratelli hanno stesso livello di astrazione


Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Ereditariet
Classe base

Classe derivata

Due tipi possono condividere caratteristiche e comportamenti,


ma un tipo pu contenere pi caratteristiche di un altro,
gestire pi messaggi o trattarli in modo diverso
Lereditariet esprime questa similarit fra tipi utilizzando i
concetti di tipi base e tipi derivati
Un tipo base contiene tutte le caratteristiche e i
comportamenti che sono condivisi dai tipi che da esso derivano
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Ereditariet
superclasse

classe genitore
classe superiore

Classe base

Classe derivata

sottoclasse

classe figlia
classe ereditata

Con lereditariet la classe base viene clonata e vengono


poi eseguite aggiunte e modifiche sulla replica
Se la classe base viene modificata, la classe derivata riflette
tali cambiamenti

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Esempio di ereditariet
Shape
draw()
erase()
mode()
getColor()
setColor()

Circle

Square

Triangle

I tipi derivati (Circle


Circle,
Circle Square,
Square Triangle)
Triangle possono avere ulteriori
caratteristiche e comportamenti di quello base (Shape
Shape)
Shape
Alcuni comportamenti possono essere diversi
per esempio, se si vuole calcolare larea di una forma geometrica

La gerarchia dei tipi incorpora sia le somiglianze che le


differenze fra le forme geometriche
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

Poich il tipo di una classe identificato dai


messaggi possibile inviare, la classe derivata
dello stesso tipo della classe base
nellesempio precedente: un cerchio una forma
geometrica
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Polimorfismo
void doStuff(Shape s) {
s.erase();
// ...
s.draw();
}

Questo metodo parla con qualunque Shape, quindi


indipendente dal tipo di oggetto che sta disegnando
e cancellando
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Polimorfismo
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);

La chiamata a doStuff()funziona automaticamente in modo


corretto, indipendentemente dal tipo esatto delloggetto
Questo reso possibile dal late binding
quando si invia un messaggio ad un oggetto, il codice che viene
chiamato non determinato fino al momento dellesecuzione
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Polimorfismo

Shape s = null;
if (x <= 3) {
s = new Circle();
} else {
s = new Triangle();
}
s.draw();

draw() pu essere applicato indifferentemente a un cerchio,

quadrato o triagolo...

In fase di compilazione, il compilatore non pu sapere quale


parte di codice sar in esecuzione

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Polimorfismo

Shape s = null;
if (x <= 3) {
s = new Circle();
} else {
s = new Triangle();
}
s.draw();

Posso invocare il metodo draw()?


Compile time
Quale metodo draw() deve essere invocato?
Run-time

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Punti di forza dell OO


Singolo paradigma
Facilita il riuso di codice e di architetture
Modelli riflettono maggiormente la realt
Descrizione pi accurata dei dati e processi
Decomposizione basata su partizionamento naturale
Pi facile da comprendere e mantenere
Stabilit
Piccolo cambiamento nei requisiti non significa
massicci cambiamenti nel sistema durante lo sviluppo
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Java vs C++
Sia C++ che Java sono linguaggi ibridi
Un linguaggio ibrido permette molteplici stili di
programmazione
per esempio, OO/procedurale

La ragione per cui C++ ibrido quella di garantire la


compatibilit allindietro con il linguaggio C
C++ comprende molte delle caratteristiche indesiderabili di C, il
che pu rendere alcuni aspetti del C++ eccessivamente complicati

Java presuppone che si voglia fare solo programmazione


orientata agli oggetti
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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 non supporta lereditariet multipla


una caratteristica del C++ che permette di derivare una classe da
pi classi base
Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

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

Java ha un sistema automatico per allocare e liberare la


memoria (garbage
(garbage collection)
collection)
non necessario utilizzare funzioni di allocazione e deallocazione
della memoria come in C e C++

Romina Eramo
Tecnologie dei Linguaggi di Programmazione

DISIM - Dipartimento di Ingegneria e


Scienze dellInformazione e Matematiche

Potrebbero piacerti anche