Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer...

72
Object-Oriented Programming (OOP) DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche Romina Eramo Tecnologie dei Linguaggi di Programmazione Romina Eramo Romina Eramo Romina Eramo Romina Eramo [email protected] http://www.di.univaq.it/romina.eramo/tlp

Transcript of Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer...

Page 1: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Object-Oriented Programming (OOP)

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Romina EramoRomina EramoRomina EramoRomina Eramo

[email protected]

http://www.di.univaq.it/romina.eramo/tlp

Page 2: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Roadmap

• Introduzione ai linguaggi di programmazione

• Principi base del paradigma OO

– Astrazione

– Oggetto e Classe

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– Oggetto e Classe

– Incapsulamento e Information Hiding

– Modularità

– Ereditarietà

– Polimorfismo

• Java vs C++

Page 3: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

I linguaggi di programmazione

• La programmazione può essere definita come la disciplina che demanda al calcolatore elettronico la soluzionesoluzionesoluzionesoluzione di un determinato problemaproblemaproblemaproblema

• Un linguaggio di programmazione è un insieme di

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Un linguaggio di programmazione è un insieme di parole, codici, e simboli che permettono al programmatore di dare istruzioni al istruzioni al istruzioni al istruzioni al calcolatorecalcolatorecalcolatorecalcolatore

• Diversi linguaggi di programmazione sono stati concepiti nel corso degli anni, ognuno con le proprie regole, o sintassi per scrivere tali istruzioni

Page 4: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

...verso i linguaggi ad alto livello

• Linguaggio macchina

– linguaggio in cui sono scritti programmi direttamente eseguibili dal calcolatore

• Linguaggio ad alto livello

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• 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

• l’interpretazione: traduzione in tempo reale

Page 5: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

...i livelli di astrazioni

• Tutti i linguaggi di programmazione forniscono astrazioniastrazioniastrazioniastrazioni– in linguaggio macchinalinguaggio macchinalinguaggio macchinalinguaggio 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 linguaggi a più alto livello linguaggi a più alto livello linguaggi a più alto livello si ottengono come semplice codifica a partire dal linguaggio macchina in un crescendo di astrazione

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

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à dell’astrazione 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

Page 6: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

...i livelli di astrazioni

• Tocca al programmatore stabilire

l’associazione fra il modello della macchina

(nello “spazio delle soluzioni”) e il modello del

problema che viene risolto (nello “spazio dei

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

problema che viene risolto (nello “spazio dei

problemi”)

• Anziché modellare una macchina per risolvere

il problema si può pensare di modellare il

problema

Page 7: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Paradigmi di programmazione

LinguaggioLinguaggioLinguaggioLinguaggio Modello Modello Modello Modello computazionalecomputazionalecomputazionalecomputazionale

In cosa consisteIn cosa consisteIn cosa consisteIn cosa consiste un programmaun programmaun programmaun programma Esempi Esempi Esempi Esempi

ImperativoImperativoImperativoImperativo Cambiamenti di stato della memoria della macchina

Sequenza di assegnazioni cheproducano lo stato finale (soluzione del problema)

Pascal, C

FunzionaleFunzionaleFunzionaleFunzionale Definizione edapplicazione di

Combinazioni di funzioni valutate per restituire un certo output

Lisp

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

applicazione di funzioni

per restituire un certo output

Logico Logico Logico Logico Predicati logici come specifiche eseguibili

Sequenza di asserzioni di fatti e regole eseguite per verificare il soddisfacimento del goal

Prolog

Ad oggettiAd oggettiAd oggettiAd oggetti Modello ad oggetti Progettazione e realizzazione di codice sotto forma di classi che interagiscono tra di loro

Java, C++

Page 8: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Storia dei linguaggi di programmazione

• FortranFortranFortranFortran (Formula translator)– 1954-1956 da John Backus presso IBM

ForTranForTranForTranForTran CobolCobolCobolCobolLispLispLispLispAlgolAlgolAlgolAlgol

BASICBASICBASICBASICSIMULA SIMULA SIMULA SIMULA 67676767

PascalPascalPascalPascalCCCCSmalltalkSmalltalkSmalltalkSmalltalk

JavaJavaJavaJavaModulaModulaModulaModula----2222AdaAdaAdaAdaC ++C ++C ++C ++

anni ‘50anni ‘50anni ‘50anni ‘50 anni ‘anni ‘anni ‘anni ‘60606060 anni ‘65anni ‘65anni ‘65anni ‘65 anni ‘70anni ‘70anni ‘70anni ‘70 anni ‘80anni ‘80anni ‘80anni ‘80 anni ‘95anni ‘95anni ‘95anni ‘95

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– 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

• CobolCobolCobolCobol– 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)

Page 9: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

• LispLispLispLisp– 1965 da John McCarthy

Storia dei linguaggi di programmazioneForTranForTranForTranForTran CobolCobolCobolCobol

LispLispLispLispAlgolAlgolAlgolAlgol

BASICBASICBASICBASICSIMULA 67SIMULA 67SIMULA 67SIMULA 67

PascalPascalPascalPascalCCCCSmalltalkSmalltalkSmalltalkSmalltalk

JavaJavaJavaJavaModulaModulaModulaModula----2222AdaAdaAdaAdaC ++C ++C ++C ++

anni ‘50anni ‘50anni ‘50anni ‘50 anni ‘60anni ‘60anni ‘60anni ‘60 anni ‘65anni ‘65anni ‘65anni ‘65 anni ‘anni ‘anni ‘anni ‘70707070 anni ‘80anni ‘80anni ‘80anni ‘80 anni ‘95anni ‘95anni ‘95anni ‘95

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– 1965 da John McCarthy– funzioni high-order– garbage collection– Successori del LISP: Miranda, ML, Haskell anche se non particolarmente usati

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

• Entrambi hanno ricorsione, funzioni e procedure

Page 10: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

• BASIC 1964 BASIC 1964 BASIC 1964 BASIC 1964 KemenyKemenyKemenyKemeny e e e e KurtzKurtzKurtzKurtz– Il primo linguaggio di programmazione pensato per uso personale

Storia dei linguaggi di programmazioneForTranForTranForTranForTran CobolCobolCobolCobol

LispLispLispLispAlgolAlgolAlgolAlgol

BASICBASICBASICBASICSIMULA 67SIMULA 67SIMULA 67SIMULA 67

PascalPascalPascalPascalCCCCSmalltalkSmalltalkSmalltalkSmalltalk

JavaJavaJavaJavaModulaModulaModulaModula----2222AdaAdaAdaAdaC ++C ++C ++C ++

anni ‘50anni ‘50anni ‘50anni ‘50 anni ‘60anni ‘60anni ‘60anni ‘60 anni ‘65anni ‘65anni ‘65anni ‘65 anni ‘70anni ‘70anni ‘70anni ‘70 anni ‘anni ‘anni ‘anni ‘80808080 anni ‘95anni ‘95anni ‘95anni ‘95

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– 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 67SIMULA 67SIMULA 67SIMULA 67– Estensione di Algol 60 progettato per la simulazione di processi concorrenti– Introduce i concetti base dell’object oriented: classe ed incapsulamento– Predecessore di Smalltalk e C++

CSI 3125, History, page 10

Page 11: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

• PascalPascalPascalPascal– Successore di Algol 60.

Storia dei linguaggi di programmazioneForTranForTranForTranForTran CobolCobolCobolCobol

LispLispLispLispAlgolAlgolAlgolAlgol

BASICBASICBASICBASICSIMULA 67SIMULA 67SIMULA 67SIMULA 67

PascalPascalPascalPascalCCCCSmalltalkSmalltalkSmalltalkSmalltalk

JavaJavaJavaJavaModulaModulaModulaModula----2222AdaAdaAdaAdaC ++C ++C ++C ++

anni ‘anni ‘anni ‘anni ‘50505050 anni ‘60anni ‘60anni ‘60anni ‘60 anni ‘65anni ‘65anni ‘65anni ‘65 anni ‘70anni ‘70anni ‘70anni ‘70 anni ‘80anni ‘80anni ‘80anni ‘80 anni ‘anni ‘anni ‘anni ‘95959595

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– Successore di Algol 60.– Ottimo linguaggio per introdurre la programmazione strutturata– Un buon primo linguaggio da imparare

• ModulaModulaModulaModula----2222– Successore di Pascal – Meccanismi per gestire la concorrenza (più processi in parallelo)

• AdaAdaAdaAda– Progettato per supportare in maniera efficace la concorrenza– Ci sono due standard: Ada 83 (l’originale), and Ada 95

CSI 3125, History, page 11

Page 12: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

• CCCC– Il linguaggio di implementazione di Unix

Storia dei linguaggi di programmazioneForTranForTranForTranForTran CobolCobolCobolCobol

LispLispLispLispAlgolAlgolAlgolAlgol

BASICBASICBASICBASICSIMULA 67SIMULA 67SIMULA 67SIMULA 67

PascalPascalPascalPascalCCCCSmalltalkSmalltalkSmalltalkSmalltalk

JavaJavaJavaJavaModulaModulaModulaModula----2222AdaAdaAdaAdaC ++C ++C ++C ++

anni ‘50anni ‘50anni ‘50anni ‘50 anni ‘60anni ‘60anni ‘60anni ‘60 anni ‘65anni ‘65anni ‘65anni ‘65 anni ‘70anni ‘70anni ‘70anni ‘70 anni ‘anni ‘anni ‘anni ‘80808080 anni ‘95anni ‘95anni ‘95anni ‘95

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– Il linguaggio di implementazione di Unix– Pericoloso se non usato opportunamente: non raccomandato per

i programmatori inesperti– Relativamente di basso livello

• SmalltalkSmalltalkSmalltalkSmalltalk– Linguaggio di programmazione object-oriented più pulito di

Java e molto più pulito di C++– Viene fornito con un’interfaccia grafica ed un ambiente di

programmazione integrato

CSI 3125, History, page 12

Page 13: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

• C++C++C++C++– Estensione object-oriented del linguaggio imperativo C– Sintassi complicata con difficile semantica

Storia dei linguaggi di programmazioneForTranForTranForTranForTran CobolCobolCobolCobol

LispLispLispLispAlgolAlgolAlgolAlgol

BASICBASICBASICBASICSIMULA 67SIMULA 67SIMULA 67SIMULA 67

PascalPascalPascalPascalCCCCSmalltalkSmalltalkSmalltalkSmalltalk

JavaJavaJavaJavaModulaModulaModulaModula----2222AdaAdaAdaAdaC ++C ++C ++C ++

anni ‘50anni ‘50anni ‘50anni ‘50 anni ‘anni ‘anni ‘anni ‘60606060 anni ‘65anni ‘65anni ‘65anni ‘65 anni ‘70anni ‘70anni ‘70anni ‘70 anni ‘80anni ‘80anni ‘80anni ‘80 anni ‘anni ‘anni ‘anni ‘95959595

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– Sintassi complicata con difficile semantica– Molto richiesto

• JavaJavaJavaJava– Rielaborazione del C++– Full object orientation (anche se non ai livelli di Smalltalk)– Progettato per la programmazione Internet programming, anche se general-

purpose– Solitamente è considerato essere lento– Forse il prossimo standard de-facto

CSI 3125, History, page 13

Page 14: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

• Linguaggi di ScriptingLinguaggi di ScriptingLinguaggi di ScriptingLinguaggi di Scripting

Storia dei linguaggi di programmazioneForTranForTranForTranForTran CobolCobolCobolCobol

LispLispLispLispAlgolAlgolAlgolAlgol

BASICBASICBASICBASICSIMULA 67SIMULA 67SIMULA 67SIMULA 67

PascalPascalPascalPascalCCCCSmalltalkSmalltalkSmalltalkSmalltalk

JavaJavaJavaJavaModulaModulaModulaModula----2222AdaAdaAdaAdaC ++C ++C ++C ++

anni ‘50anni ‘50anni ‘50anni ‘50 anni ‘anni ‘anni ‘anni ‘60606060 anni ‘65anni ‘65anni ‘65anni ‘65 anni ‘70anni ‘70anni ‘70anni ‘70 anni ‘80anni ‘80anni ‘80anni ‘80 anni ‘95anni ‘95anni ‘95anni ‘95

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– Text processing:• Perl• Python

– Web programming• JavaScript• PHP

CSI 3125, History, page 14

Page 15: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Computer Languages History

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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Page 16: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Jump star to OOP

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Page 17: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Page 18: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Portare lo sviluppo software vicino alla vita reale

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

vita reale

Nella vita reale abbiamo a chefare con oggetti.Vogliamo trattare con il softwareallo stesso modo.

Page 19: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Separazione di concetti

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Nella vita reale non cipreoccupiamo di come un oggettoè fatto o di cosa contiene. Cilimitiamo ad usarlo.

Page 20: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Le componenti sono replicabili

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Nella vita reale le componenticon funzionalità e specifichesimili sono replicabili.

Page 21: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Sviluppo di componenti in parti distinte

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

parti distinte

Nella vita reale gli sviluppatori di unacomponente non si preoccupano dell’interosistema, o di come le sue componenti sarannousate nell’intero sistema.

Page 22: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Fornire la struttura e realizzare prototipi

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Nella vita reale pensiamo alla strutturae produciamo modelli software esviluppiamo prototipi prima di ottenereun'istanza effettiva.

Page 23: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Usa e getta

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Nella vita reale usiamo lecomponenti e una volta cheabbiamo finito con esse lescartiamo.

Page 24: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Riuso di componenti

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Nella vita reale la stessa componentepuò essere usata (riusata) per unamolteplicità di sistemi.

Page 25: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Perchè OOP?

Sistema facile da capire

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Nella vita reale possiamo comprendere sistemicomplessi adottando un approccio top-down obotton-up. Questo ci conduce verso piccoli oggetti.

Page 26: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Cosa è OOP?

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Page 27: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Cosa è OOP?

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

L’ OOP (Object-oriented programming) è un paradigma di programmazione organizzato attorno ad “oggetti” “oggetti” “oggetti” “oggetti” piuttosto che “azioni” “azioni” “azioni” “azioni” e “dati” “dati” “dati” “dati” piuttosto che ““““logica”logica”logica”logica”

Page 28: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

• L’OOP prevede di raggruppare in un’unica entità “classeclasseclasseclasse” sia le strutture dati che le procedure che operano su di esse, creando un “oggetto” “oggetto” “oggetto” “oggetto” software dotato di proprietà

Cosa è OOP?

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

“oggetto” “oggetto” “oggetto” “oggetto” software dotato di proprietà (datidatidatidati) e metodi (procedureprocedureprocedureprocedure) che operano sui dati dell’oggetto stesso

Page 29: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Principi base del paradigma OO

• Astrazione

• Incapsulamento & Information Hiding

• Modularità

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Gerarchia

• Polimorfismo

Page 30: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

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]

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

[Dizionario di Object Technology – Firesmith, Eykholt 1995]

“Un’astrazione 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 dell’osservatore”

[Grady Booch]

Page 31: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Astrazione

• Utilizzata per gestire gestire gestire gestire la complessità la complessità la complessità la complessità di un programma concentrandosi sulle caratteristiche essenziali di un’entità che la distingue dalle altre

• Applicata per decomporre sistemi software complessi in componenti più piccoli e semplici componenti più piccoli e semplici componenti più piccoli e semplici componenti più piccoli e semplici che possono essere gestiti con maggiore facilità ed efficienza

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

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 l’astrazione (es. classi)

Page 32: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Astrazione

• L’approccio orientato agli oggetti mette a disposizione strumenti con i quali il programmatore può rappresentare elementi nello spazio dei problemirappresentare elementi nello spazio dei problemirappresentare elementi nello spazio dei problemirappresentare elementi nello spazio dei problemi

• La rappresentazione è sufficientemente generalizzata da non vincolare il programmatore a occuparsi soltanto di un determinato tipo di problemideterminato tipo di problemideterminato tipo di problemideterminato tipo di problemi

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

da non vincolare il programmatore a occuparsi soltanto di un determinato tipo di problemideterminato tipo di problemideterminato tipo di problemideterminato tipo di problemi

• Gli oggetti sono elementi che si trovano nello spazio spazio spazio spazio dei problemidei problemidei problemidei problemi e le loro rappresentazioni nello spazio spazio spazio spazio delle soluzionidelle soluzionidelle soluzionidelle soluzioni

• L’OOP permette quindi di descrivere il problema nei suoi termini propri, invece che nei termini del computer sul quale verrà computata la soluzione

Page 33: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Cos’è una classe

• Una classe rappresenta una particolare categoria di categoria di categoria di categoria di oggettioggettioggettioggetti e definisce un tipo di dato tipo di dato tipo di dato tipo di dato per un determinato oggetto ad essa appartenente

• Una classe è caratterizzata da proprietàproprietàproprietàproprietà (attributi),

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Una classe è caratterizzata da proprietàproprietàproprietàproprietà (attributi), comportamentocomportamentocomportamentocomportamento (operazioni), relazioni relazioni relazioni relazioni e semantica semantica semantica semantica comuni agli oggetti che la classe descrive

• Seguendo il principio OO dell’astrazione:

– Enfatizza caratteristiche rilevanti

– Sopprime le altre caratteristiche

Page 34: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Esempio di classe

• Nome– Corso

• Proprietà– Nome, Luogo, Durata, Crediti, Inizio, Fine

• Comportamento

Course

namelocationdurationstartDate

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Comportamento– Aggiunta studente

– Cancellazione studente

– Verifica se è pieno

startDateendDate

addStudent()dropStudent()isFull()

Page 35: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

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 l’un l’altro che cosa fare inviandosi messaggiinviandosi messaggiinviandosi messaggiinviandosi messaggi

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

l’un l’altro che cosa fare inviandosi messaggiinviandosi messaggiinviandosi messaggiinviandosi 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

Page 36: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Cos’è un oggetto

• Informalmente rappresenta– Entità fisica: trattore

– Entità concettuale: processo chimico

– Oppure entità software: lista, coda...

• Formalmente

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Formalmente– Manifestazione concreta di un’astrazione

– Entità con un confine e un’identità ben definite che incapsula stato e comportamento

– IstanzaIstanzaIstanzaIstanza di una classe

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

Page 37: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Un oggetto possiede...

• StatoStatoStatoStato– Possibile condizione nel quale l’oggetto potrebbe esistere e

generalmente cambia nel tempo– Implementato mediante proprietà (attributi) con valori, e

collegamenti ad altri oggetti

• ComportamentoComportamentoComportamentoComportamento

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• ComportamentoComportamentoComportamentoComportamento– Determina come un oggetto agisce e reagisce alle richieste di un altro

oggetto– Rappresentato dall’insieme di messaggi a cui può rispondere

(operazioni)

• IdentitàIdentitàIdentitàIdentità– Rende possibile la distinzione tra due oggetti anche se hanno lo stesso

stato e lo stesso valore nei suoi attributi

Page 38: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Relazione tra classe e oggetto

• Classe è una definizione astratta di un oggetto

• Definisce la struttura e il comportamento di ogni oggetto nella classe

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

ogni oggetto nella classe

• Serve come template per creare oggetti

• Oggetti sono raggruppati in classi

Page 39: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Oggetto e interfaccia

Nome del Nome del Nome del Nome del tipotipotipotipo

InterfacciaInterfacciaInterfacciaInterfaccia

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Le richieste che si possono fare ad un oggetto sono definite dalla sua interfaccia ed è il tipo a determinare l’interfaccia

• Il codice deputato a soddisfare tali richieste, insieme con idati nascosti, costituisce l’implementazione dell’oggetto

Page 40: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Incapsulamento & Information Hiding

“La localizzazione fisica di caratteristiche (es. proprietà, comportamento) in una singola

scatola nera che nasconde l’implementazione (e le relative decisioni di design) dietro una

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

(e le relative decisioni di design) dietro una interfaccia pubblica”

[Dizionario di Object Technology – Firesmith, Eykholt 1995]

Page 41: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Incapsulamento & Information Hiding

• L'information hiding è il principio teorico principio teorico principio teorico principio teorico su cui si basa la tecnicatecnicatecnicatecnica dell'incapsulamento

• Information Information Information Information HidingHidingHidingHiding

– 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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– Le scelte interne di design e gli effetti che eventuali cambiamenti di tali decisioni comportano sono nascoste ai possibili client (utilizzatori)

• IncapsulamentoIncapsulamentoIncapsulamentoIncapsulamento

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

– L’ incapsulamento è una facilityfacilityfacilityfacility del linguaggio mentre l’information hiding è un principio di designprincipio di designprincipio di designprincipio di design

Page 42: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Incapsulamento & Information Hiding

• L'incapsulamento riduce il costoriduce il costoriduce il costoriduce 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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

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

Page 43: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Incapsulamento & Information Hiding

• In generale i programmatori si distinguono in creatori creatori creatori creatori di classedi classedi classedi classe e programmatori clientprogrammatori clientprogrammatori clientprogrammatori client– L’obiettivo del programmatore client programmatore client programmatore client programmatore client è mettere insieme

una serie di classi per sviluppare rapidamente le applicazioni

L’obiettivo del creatore di classicreatore di classicreatore di classicreatore di classi è costruire una classe

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– L’obiettivo del creatore di classicreatore di classicreatore di classicreatore 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

Page 44: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Incapsulamento e Information Hiding

• Esempio

– Sistema che identifica un punto sulla superficie terrestre e offre funzionalità per determinare la distanzadistanzadistanzadistanza (distance) e la rottarottarottarotta (heading) tra due

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

distanzadistanzadistanzadistanza (distance) e la rottarottarottarotta (heading) tra due punti

Page 45: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Esempio: prima soluzione

public class Position {

public double latitude;public double longitude;

}

public class PositionUtility {

public static double distance( Position pos1, Position pos2 ) {

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

//Calculate and return the distance between the specifiedpositions

}

public static double heading( Position pos1, Position pos2 ) {

//Calculate and return the heading from pos1 to pos2.

}

}

Page 46: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Esempio: prima soluzione

Position myHouse = new Position();

myHouse.latitude = 36.538611;

myHouse.longitude = -121.797500;

Position coffeeShop = new Position();

coffeeShop.latitude = 36.539722;

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

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 +

Page 47: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

distance of 6.0873776351893385 at a heading of

270.7547022304523 degrees.

Page 48: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

ConsiderazioniConsiderazioniConsiderazioniConsiderazioni

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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Page 49: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Esempio: seconda soluzione

public class Position {

public double distance( Position position ) {

//Calculate and return the distance from this object to the specific position.

}

public double heading( Position position ) {

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

public double heading( Position position ) {

//Calculate and return the heading from this object to the specified position.

}

public double latitude;

public double longitude;

}

Page 50: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Esempio: seconda soluzione

Position myHouse = new Position();

myHouse.latitude = 36.538611;

myHouse.longitude = -121.797500;

Position coffeeShop = new Position();

coffeeShop.latitude = 36.539722;

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

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.");

Page 51: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

che incrementa il raggiungimento degli

obiettivi dell’ingegneria del software”

[Dizionario di Object Technology – Firesmith, Eykholt 1995]

Page 52: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Modularità

• Un modulomodulomodulomodulo 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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• 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 packagepackagepackagepackage, componenticomponenticomponenticomponenti e subsystemsubsystemsubsystemsubsystem

– package, componenti e subsystem possono essere usati come blocchi per altri sistemi

Page 53: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Modularità

• O.O. modella la modularità con packagepackagepackagepackage, , , , componentse subsystem

• Un package è un namespacenamespacenamespacenamespace che organizza un insieme di classi ed interfacce corrispondenti

• Concettualmente un package è simile ad una directory

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Concettualmente un package è simile ad una directory nel file system. Possiamo quindi memorizzare file HTML in una directory, immagini in un’altra, e script in un’altra ancora

• Tipicamente, sistemi complessi consistono di migliaia di classi, ha quindi senso organizzare le classi e le interfacce in package

Page 54: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Ereditarietà

“Qualsiasi graduatoria (ranking) o ordine di astrazione in una struttura ad albero”

[Dizionario di Object Technology – Firesmith, Eykholt 1995]

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

[Dizionario di Object Technology – Firesmith, Eykholt 1995]

Page 55: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Ereditarietà

• OO utilizza classi per raggruppare dati e funzionalità in concetticoncetticoncetticoncetti e l’ereditarietà per organizzare tali concetti in base ad un certo certo certo certo ordine ordine ordine ordine

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

ordine ordine ordine ordine

– esempi: complessità, responsabilità

• L’ereditarietà permette di descrive differenzedifferenzedifferenzedifferenze o variazionivariazionivariazionivariazioni di un particolare concetto

– la classe originale viene replicata e arricchita con aggiunte e modifiche

Page 56: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Ereditarietà

Mammifero

Felino

Maggiore Astrazione

Cetaceo

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

Gatto Leopardo LeoneMinore Astrazione BalenaDelfino

FratelliFratelliFratelliFratelli hanno stesso livello di astrazionehanno stesso livello di astrazionehanno stesso livello di astrazionehanno stesso livello di astrazione

Page 57: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Ereditarietà

Classe base

Classe derivata

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• 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

• L’ereditarietà esprime questa similarità fra tipi utilizzando i concetti di tipi base tipi base tipi base tipi base e tipi derivatitipi derivatitipi derivatitipi derivati

• Un tipo base contiene tutte le caratteristiche e i comportamenti che sono condivisi dai tipi che da esso derivano

Page 58: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Ereditarietà

Classe base

Classe derivata

superclasse

classe superioreclasse genitore

classe ereditata

sottoclasseclasse figlia

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Con l’ereditarietà la classe base viene “clonata” “clonata” “clonata” “clonata” e vengono poi eseguite aggiunte e modifiche sulla replica

• Se la classe base viene modificata, la classe derivata riflette tali cambiamenti

Page 59: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Esempio di ereditarietàShapeShapeShapeShape

draw()erase()mode()getColor()setColor()

CircleCircleCircleCircle SquareSquareSquareSquare TriangleTriangleTriangleTriangle

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• I tipi derivati (CircleCircleCircleCircle, SquareSquareSquareSquare, TriangleTriangleTriangleTriangle) possono avere ulteriori caratteristiche e comportamenti di quello base (ShapeShapeShapeShape)

• Alcuni comportamenti possono essere diversi– per esempio, se si vuole calcolare l’area di una forma geometrica

• La gerarchia dei tipi incorpora sia le somiglianze che le differenze fra le forme geometriche

CircleCircleCircleCircle SquareSquareSquareSquare TriangleTriangleTriangleTriangle

Page 60: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Ereditarietà

• Quando si eredita da un tipo esistente, il tipo nuovo duplica l’interfaccia della classe base

– tutti i messaggi inviabili a oggetti della classe base possono esserlo anche a oggetti della classe derivata

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

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 basestesso tipo della classe basestesso tipo della classe basestesso tipo della classe base

– nell’esempio precedente: “un cerchio è una forma geometrica”

Page 61: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Ereditarietà

• Ci sono due modi per differenziare la nuova classe derivata dalla classe base originale

1. Si aggiungono nuovi metodi alla classe derivata (estensioneestensioneestensioneestensione della classe)

ShapeShapeShapeShape

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

ShapeShapeShapeShape

draw()erase()mode()getColor()setColor()

CircleCircleCircleCircle SquareSquareSquareSquare TriangleTriangleTriangleTriangle

flipVertical()flipHorizontal()

Page 62: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

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 la sovrascrittura del metodo la sovrascrittura del metodo la sovrascrittura del metodo (overriddingoverriddingoverriddingoverridding)

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

(overriddingoverriddingoverriddingoverridding)ShapeShapeShapeShape

draw()erase()mode()getColor()setColor()

CircleCircleCircleCircle SquareSquareSquareSquare TriangleTriangleTriangleTriangle

draw()erase()

draw()erase()

draw()erase()

Page 63: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Polimorfismo

• Linguaggi procedurali (esempio Pascal) basati su idea che procedure e funzioni, e i loro operandi, hanno un unico tipo

• Tali linguaggi sono detti monomorphicmonomorphicmonomorphicmonomorphic, cioè ogni valore e variabile può avere uno ed un solo tipo

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Tali linguaggi sono detti monomorphicmonomorphicmonomorphicmonomorphic, cioè ogni valore e variabile può avere uno ed un solo tipo

• Linguaggi O.O. sono detti polymorphicpolymorphicpolymorphicpolymorphic, cioè i valori e le variabili possono avere più di un tipo

• Dal greco polymorphos “avere molte forme”“avere molte forme”“avere molte forme”“avere molte forme”

Page 64: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Polimorfismo

void doStuff(Shape s) {

s.erase();

// ...

s.draw();

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

}

• Questo metodo parla con qualunque Shape, quindi è indipendente dal tipo di oggetto che sta disegnando e cancellando

Page 65: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Polimorfismo

Circle c = new Circle();

Triangle t = new Triangle();

Line l = new Line();

doStuff(c);

doStuff(t);

doStuff(l);

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• La chiamata a doStuff()funziona automaticamente in modo corretto, indipendentemente dal tipo esatto dell’oggetto

• Questo è reso possibile dal late late late late bindingbindingbindingbinding

– quando si invia un messaggio ad un oggetto, il codice che viene chiamato non è determinato fino al momento dell’esecuzione

Page 66: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Polimorfismo

Shape s = null;

if (x <= 3) {

s = new Circle();

} else {

s = new Triangle();

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

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

Page 67: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Polimorfismo

Shape s = null;

if (x <= 3) {

s = new Circle();

} else {

s = new Triangle();

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

s = new Triangle();

}

s.draw();

…Posso invocare il metodo draw()?Compile time

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

Page 68: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– 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

Page 69: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Java vs C++

• Sia C++ che Java sono linguaggi ibridiibridiibridiibridi

• Un linguaggio ibrido permette molteplici stili di programmazione

– per esempio, OO/procedurale

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

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• La ragione per cui C++ è ibrido è quella di garantire la compatibilità all’indietro 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 solosolosolosolo programmazione orientata agli oggetti

Page 70: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Java vs C++

• Java non supporta le strutture (Java non supporta le strutture (Java non supporta le strutture (Java non supporta le strutture (structstructstructstruct), le unioni ), le unioni ), le unioni ), le unioni (union(union(union(union) ) ) ) sono rese inutili dalla presenza delle classi

• Java non supporta più i Java non supporta più i Java non supporta più i Java non supporta più i puntatori puntatori puntatori puntatori

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Java non supporta più i Java non supporta più i Java non supporta più i Java non supporta più i puntatori puntatori puntatori puntatori sono stati eliminati poiché sono la maggior causa degli errori in C/C++

• Java Java Java Java non supporta le non supporta le non supporta le non supporta le funzioni funzioni funzioni funzioni essendo un linguaggio orientato agli oggetti, Java forza i programmatori a considerare le funzioni come metodi della classe

Page 71: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Java vs C++

• Java non supporta il preprocessore, il Java non supporta il preprocessore, il Java non supporta il preprocessore, il Java non supporta il preprocessore, il typedeftypedeftypedeftypedef e i e i e i e i filesfilesfilesfiles headerheaderheaderheaderJava fornisce funzionalità simili ma con un maggior controllo

• Java Java Java Java non supporta il non supporta il non supporta il non supporta il coercioncoercioncoercioncoercion automaticoautomaticoautomaticoautomaticosi riferisce alla conversione implicita di tipi di dato che alcune volte si verifica in C e C++

Java non permette l’Java non permette l’overloadingoverloading degli operatoridegli operatori

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

• Java non permette l’Java non permette l’Java non permette l’Java non permette l’overloadingoverloadingoverloadingoverloading degli operatoridegli operatoridegli operatoridegli 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 : sommasommasommasomma(a,moltiplicamoltiplicamoltiplicamoltiplica(b,c))

• Java non supporta l’ereditarietà multiplaJava non supporta l’ereditarietà multiplaJava non supporta l’ereditarietà multiplaJava non supporta l’ereditarietà multiplaè una caratteristica del C++ che permette di derivare una classe da più classi base

Page 72: Object-OrientedProgramming (OOP) · PDF file• PHP CSI 3125, History, page 14. Computer LanguagesHistory ... Perchè OOP? Sviluppo di componenti in parti distinte DISIM -Dipartimento

Java vs C++

• Java ha una classe Java ha una classe Java ha una classe Java ha una classe StringStringStringString come parte del package come parte del package come parte del package come parte del package java.langjava.langjava.langjava.langquesto differisce dall’array di caratteri terminante con null del C e C++

• Java gestisce gli argomenti della linea di comando in modo Java gestisce gli argomenti della linea di comando in modo Java gestisce gli argomenti della linea di comando in modo Java gestisce gli argomenti della linea di comando in modo diverso dal C o C++diverso dal C o C++diverso dal C o C++diverso dal C o C++– In C++

DISIM - Dipartimento di Ingegneria e Scienze dell’Informazione e Matematiche

Romina EramoTecnologie dei Linguaggi di Programmazione

– In C++ void main(int argc, char *argv[]){ . . . }//end main function

– In Javapublic static void main(String[] args){ . . . }//end main method

• Java ha un sistema automatico per allocare e liberare la Java ha un sistema automatico per allocare e liberare la Java ha un sistema automatico per allocare e liberare la Java ha un sistema automatico per allocare e liberare la memoria (memoria (memoria (memoria (garbagegarbagegarbagegarbage collectioncollectioncollectioncollection))))non è necessario utilizzare funzioni di allocazione e deallocazionedella memoria come in C e C++