object-orientedprogramming (oop) · pdf file• php csi 3125, history, page 14. computer...
TRANSCRIPT
![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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/1.jpg)
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
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/2.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/3.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/4.jpg)
...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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/5.jpg)
...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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/6.jpg)
...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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/7.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/8.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/9.jpg)
• 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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/10.jpg)
• 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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/11.jpg)
• 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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/12.jpg)
• 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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/13.jpg)
• 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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/14.jpg)
• 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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/15.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/16.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/17.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/18.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/19.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/20.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/21.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/22.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/23.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/24.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/25.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/26.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/27.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/28.jpg)
• 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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/29.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/30.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/31.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/32.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/33.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/34.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/35.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/36.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/37.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/38.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/39.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/40.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/41.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/42.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/43.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/44.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/45.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/46.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/47.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/48.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/49.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/50.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/51.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/52.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/53.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/54.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/55.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/56.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/57.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/58.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/59.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/60.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/61.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/62.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/63.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/64.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/65.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/66.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/67.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/68.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/69.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/70.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/71.jpg)
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](https://reader033.vdocumenti.com/reader033/viewer/2022051201/5a728d6d7f8b9aa7538da8d8/html5/thumbnails/72.jpg)
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++