SlideShare a Scribd company logo
1 of 43
PRINCIPI DELLA OOP Ereditarietà e polimorfismo
Ereditarietà e specializzazione ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ereditarietà - 1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classe base Animale public   class  Animale { private  String  nome ; public  Animale(String nomeProprio) { nome  = nomeProprio; } public  String getNome() { return   nome ; } public  void muoviti() { ……………………………… } public  void mangia() { ……………………………… } public  String parla() { return   "???”  //come parla un animale generico????; }} Come si muove, come mangia e come parla un animale generico? Costruttore : inizializza lo stato di un oggetto assegnando dei valori alle proprietà Metodo d’accesso : restituisce il nome dell’animale
Fido e Cocorito - 1  Animale Animale fido = new Animale(“Fido”); fido.muoviti(); fido.parla();  fido.mangia() fido.muoviti();  Animale coco = new Animale(“cocorito”); coco.muoviti(); coco.parla();  coco.mangia(); coco.muoviti();  Tra gli animali possiamo avere cani, pappagalli e altri con diverso comportamento Fido e Cocorito sono entrambi animali, e quindi possono mangiare, muoversi e parlare, ma non nello stesso modo.  Come risolvere il problema?? dovrebbe fare baubau dovrebbe dire  “ mi chiamo cooocorrito”
Fido e Cocorito - 2  Pappagallo Cane fido = new Cane(“Fido”); fido.muoviti(); fido.parla(); // baubau fido.mangia() fido.muoviti();  Animale coco = new Animale(“cocorito”); coco.muoviti(); coco.parla(); // mi chiamo cooocorrito coco.mangia(); coco.muoviti();  Posso creare due classi, una classe Cane e una classe Pappagallo Cane Per entrambe le classi definisco gli stessi attributi e gli stessi metodi
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Ereditarietà /2 Si tratta degli stessi attributi e metodi della classe Animale!  Devo duplicarlo in Cane e in Papagallo??
Ereditarietà /3 Questo diagramma indica che Cane e Pappagallo  derivano dalla classe Animale dalla quale ereditano attributi e metodi; in Java si dice che “estendono” la classe Animale Superclasse Classi derivate  Cane Pappagallo Animale -nome +getNome() +muoviti() +mangia() +parla()
Classe specializzata Cane ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Relazioni / Specializzazione ,[object Object],[object Object],[object Object]
Relazione “is a” ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Test 1: si tratta di ereditarietà? ,[object Object],[object Object],[object Object]
Risposta al test 1 ,[object Object],[object Object]
Test 2: si tratta di ereditarietà? ,[object Object],[object Object]
Risposta al test 2 ,[object Object],[object Object],[object Object]
Test 3 : si tratta di ereditarietà? ,[object Object]
Risposta al test 3 ,[object Object],[object Object]
L’ereditarietà nel mondo reale ,[object Object],[object Object],[object Object]
L’ereditarietà nel mondo reale ,[object Object],[object Object],[object Object],[object Object]
Ereditarietà e polimorfismo/1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Override ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],I metodi della classe base sono stati  ridefiniti , anche se hanno conservato stesso nome e stessa definizione (parametri e restituzione) Questo tipo di polimorfismo è detto  override Puoi fare qualcosa di analogo anche per la classe Pappagallo. Prova da solo!!
Ereditarietà / 4 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ereditarietà /5 ,[object Object]
Polimorfismo /1 ,[object Object],[object Object],[object Object]
Polimorfismo / 2 ,[object Object],[object Object],[object Object],[object Object]
Riferimenti polimorfi/ 1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Riferimento Oggetto
Riferimenti polimorfi/2 ,[object Object],[object Object],[object Object]
Riferimenti polimorfi/3 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Operatore instanceof ,[object Object],Animale fido =  new  Cane( "Fido" ); if  (fido  instanceof  Gatto) { System. out .println( "Fido è un gatto" ); }  else   if  (fido  instanceof  Cane) { System. out .println( "Fido è un cane" ); }
Classi e metodi astratte /1  ,[object Object],[object Object],[object Object],[object Object],[object Object]
Classi e metodi astratti /2 ,[object Object],[object Object],[object Object],[object Object]
Classi e metodi astratti /3 ,[object Object],public   abstract class  Animale { ………………… .. ………………… .. public abstract  String parla();  //manca il corpo public abstract  String muoviti();  //manca il corpo public abstract  String mangia();  //manca il corpo ………………………… .. }
Classe Object /1 ,[object Object],[object Object],[object Object],public   class  Animale  extends  Object { ………………………… . } public   class  Animale { …………………… . } ,[object Object]
Classe Object /2 ,[object Object],[object Object],public   class  Object { // Verifica se due oggetti sono uguali public   boolean   equals (Object obj) { } // Converte un oggetto in stringa public  String  toString () { } }
Ereditarietà singola e interfacce /1 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ereditarietà singola e interfacce /2 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Interfacce/1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Interfacce/2 public   class  Cane  extends  Animale  implements  OggettiNatanti { ... ... public   boolean  nuota() { return   true ; } } public   class  Pappagallo  extends  Animale  implements  OggettiVolanti{ ... ... public   boolean  vola() { return   true ; }  }
Implementazione di interfacce ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Esercizio 1.1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Esercizio 1.2 ,[object Object],[object Object],[object Object]
Esercizio 2.1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Esercizio 2.2 ,[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6DEEPAK KHETAWAT
 
Understanding react hooks
Understanding react hooksUnderstanding react hooks
Understanding react hooksSamundra khatri
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEMAccunity Software
 
無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享Win Yu
 
Time-Based Blind SQL Injection
Time-Based Blind SQL InjectionTime-Based Blind SQL Injection
Time-Based Blind SQL Injectionmatt_presson
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggettiLorena Rojas
 
Hot C++: Rvalue References And Move Semantics
Hot C++: Rvalue References And Move SemanticsHot C++: Rvalue References And Move Semantics
Hot C++: Rvalue References And Move SemanticsAndrey Upadyshev
 
Understanding react hooks
Understanding react hooksUnderstanding react hooks
Understanding react hooksMaulik Shah
 
Basics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdfBasics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdfKnoldus Inc.
 
C# conventions & good practices
C# conventions & good practicesC# conventions & good practices
C# conventions & good practicesTan Tran
 
Adobe AEM core components
Adobe AEM core componentsAdobe AEM core components
Adobe AEM core componentsLokesh BS
 
AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template LanguageGabriel Walt
 
Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Asim Rais Siddiqui
 
Introduction to Python - Part Two
Introduction to Python - Part TwoIntroduction to Python - Part Two
Introduction to Python - Part Twoamiable_indian
 
The Art of Metaprogramming in Java
The Art of Metaprogramming in Java  The Art of Metaprogramming in Java
The Art of Metaprogramming in Java Abdelmonaim Remani
 

What's hot (20)

Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
 
Understanding react hooks
Understanding react hooksUnderstanding react hooks
Understanding react hooks
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEM
 
無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享
 
Time-Based Blind SQL Injection
Time-Based Blind SQL InjectionTime-Based Blind SQL Injection
Time-Based Blind SQL Injection
 
HR Handbook.pdf
HR Handbook.pdfHR Handbook.pdf
HR Handbook.pdf
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
Hot C++: Rvalue References And Move Semantics
Hot C++: Rvalue References And Move SemanticsHot C++: Rvalue References And Move Semantics
Hot C++: Rvalue References And Move Semantics
 
Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
Clean code
Clean codeClean code
Clean code
 
Understanding react hooks
Understanding react hooksUnderstanding react hooks
Understanding react hooks
 
Basics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdfBasics of React Hooks.pptx.pdf
Basics of React Hooks.pptx.pdf
 
C# conventions & good practices
C# conventions & good practicesC# conventions & good practices
C# conventions & good practices
 
Adobe AEM core components
Adobe AEM core componentsAdobe AEM core components
Adobe AEM core components
 
Clean code
Clean codeClean code
Clean code
 
AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template Language
 
Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#Coding Standards & Best Practices for iOS/C#
Coding Standards & Best Practices for iOS/C#
 
Introduction to Python - Part Two
Introduction to Python - Part TwoIntroduction to Python - Part Two
Introduction to Python - Part Two
 
The Art of Metaprogramming in Java
The Art of Metaprogramming in Java  The Art of Metaprogramming in Java
The Art of Metaprogramming in Java
 
Clean code
Clean codeClean code
Clean code
 

Similar to Principi della oop - Ereditarietà e polimorfismo

Similar to Principi della oop - Ereditarietà e polimorfismo (6)

Ereditarietà E Polimorfismo
Ereditarietà E PolimorfismoEreditarietà E Polimorfismo
Ereditarietà E Polimorfismo
 
Java 01
Java 01Java 01
Java 01
 
Java 02
Java 02Java 02
Java 02
 
TOP: Taxonomies on Protege
TOP: Taxonomies on ProtegeTOP: Taxonomies on Protege
TOP: Taxonomies on Protege
 
Metodi Per Riutilizzare Programmi Oo
Metodi Per Riutilizzare Programmi OoMetodi Per Riutilizzare Programmi Oo
Metodi Per Riutilizzare Programmi Oo
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 

Recently uploaded

Ticonzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, contentTiconzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, contentPierLuigi Albini
 
Lo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice ImpressLo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice ImpressSalvatore Cianciabella
 
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCOa scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCODamiano Orru
 
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...Roberto Scano
 
Stati Uniti PPT geografia power point..
Stati Uniti  PPT geografia power point..Stati Uniti  PPT geografia power point..
Stati Uniti PPT geografia power point..vendettimattia2010
 
Powerpoint tesi di laurea
Powerpoint tesi di laurea Powerpoint tesi di laurea
Powerpoint tesi di laurea Valentina Ottini
 
MyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitoriMyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitorimarketing983206
 
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...Roberto Scano
 
AccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domaniAccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domaniRoberto Scano
 
Ostia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'EuropaOstia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'EuropaMarina Lo Blundo
 

Recently uploaded (10)

Ticonzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, contentTiconzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, content
 
Lo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice ImpressLo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice Impress
 
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCOa scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
 
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
 
Stati Uniti PPT geografia power point..
Stati Uniti  PPT geografia power point..Stati Uniti  PPT geografia power point..
Stati Uniti PPT geografia power point..
 
Powerpoint tesi di laurea
Powerpoint tesi di laurea Powerpoint tesi di laurea
Powerpoint tesi di laurea
 
MyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitoriMyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitori
 
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
 
AccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domaniAccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domani
 
Ostia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'EuropaOstia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'Europa
 

Principi della oop - Ereditarietà e polimorfismo

  • 1. PRINCIPI DELLA OOP Ereditarietà e polimorfismo
  • 2.
  • 3.
  • 4. Classe base Animale public class Animale { private String nome ; public Animale(String nomeProprio) { nome = nomeProprio; } public String getNome() { return nome ; } public void muoviti() { ……………………………… } public void mangia() { ……………………………… } public String parla() { return "???” //come parla un animale generico????; }} Come si muove, come mangia e come parla un animale generico? Costruttore : inizializza lo stato di un oggetto assegnando dei valori alle proprietà Metodo d’accesso : restituisce il nome dell’animale
  • 5. Fido e Cocorito - 1 Animale Animale fido = new Animale(“Fido”); fido.muoviti(); fido.parla(); fido.mangia() fido.muoviti(); Animale coco = new Animale(“cocorito”); coco.muoviti(); coco.parla(); coco.mangia(); coco.muoviti(); Tra gli animali possiamo avere cani, pappagalli e altri con diverso comportamento Fido e Cocorito sono entrambi animali, e quindi possono mangiare, muoversi e parlare, ma non nello stesso modo. Come risolvere il problema?? dovrebbe fare baubau dovrebbe dire “ mi chiamo cooocorrito”
  • 6. Fido e Cocorito - 2 Pappagallo Cane fido = new Cane(“Fido”); fido.muoviti(); fido.parla(); // baubau fido.mangia() fido.muoviti(); Animale coco = new Animale(“cocorito”); coco.muoviti(); coco.parla(); // mi chiamo cooocorrito coco.mangia(); coco.muoviti(); Posso creare due classi, una classe Cane e una classe Pappagallo Cane Per entrambe le classi definisco gli stessi attributi e gli stessi metodi
  • 7.
  • 8. Ereditarietà /3 Questo diagramma indica che Cane e Pappagallo derivano dalla classe Animale dalla quale ereditano attributi e metodi; in Java si dice che “estendono” la classe Animale Superclasse Classi derivate Cane Pappagallo Animale -nome +getNome() +muoviti() +mangia() +parla()
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38. Interfacce/2 public class Cane extends Animale implements OggettiNatanti { ... ... public boolean nuota() { return true ; } } public class Pappagallo extends Animale implements OggettiVolanti{ ... ... public boolean vola() { return true ; } }
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.