SlideShare une entreprise Scribd logo
1  sur  40
Java Programmazione ad oggetti Davide Ficano [email_address]
Di cosa parleremo ,[object Object],[object Object],[object Object],[object Object]
Caratteristiche della Programmazione strutturata /1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Caratteristiche della Programmazione strutturata /2 ,[object Object],[object Object],[object Object]
Concetti generali della OOP ,[object Object],[object Object],[object Object],[object Object]
Cosa è un oggetto ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Definiamo una entità Oggetto Animale ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Fido e Polly Stato e Comportamento Animale fido = new Cane(“Fido”); fido.muovi(); fido.parla(); // baubau // Verifico lo stato fido.getNome(); // Fido fido.getFame(); // poca fido.muovi(); fido.getFame(); // molta polly = new Pappagallo(“Polly”); polly.muovi(); // si muove sul trespolo non vola! polly.parla(); // mi chiamo pooolly // Verifico lo stato polly.getNome(); // Polly
Come sono legati stato e comportamento? Animale fido.muovi(); // Verifico lo stato fido.getFame(); // poca polly.muovi(); // Verifico lo stato polly.getFame(); ,[object Object],[object Object],[object Object],[object Object],[object Object]
Incapsulamento /1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Incapsulamento /2 ,[object Object],[object Object],[object Object]
Ereditarietà /1 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ereditarietà /2
Ereditarietà /3 L'ereditarietà può essere modellata secondo diversi livelli di precisione
Ereditarietà /4 ,[object Object],[object Object],* ereditare e derivare sono sinonimi in OOP
Ereditarietà /5 ,[object Object],[object Object],fido = new  Animale ("Fido")  invece di  fido = new  Cane ("Fido")‏ polly = new  Animale ("Polly")  invece di  polly = new  Pappagallo ("Polly")‏ Gli oggetti hanno caratteristiche  comuni  ma non sono uguali!! Fido corre più velocemente di Polly Polly può volare ed anche il suono emesso è diverso Il comportamento cambia e questo si chiama Polimorfismo
Polimorfismo /1 ,[object Object],[object Object],[object Object],[object Object]
Polimorfismo /2 ,[object Object],[object Object]
Relazioni tra classi ,[object Object],[object Object],[object Object],[object Object]
Relazioni / Associazione ,[object Object],[object Object],[object Object]
Relazioni / Aggregazione ,[object Object],[object Object],La differenza tra Associazione e Aggregazione è molto sottile spesso ci si limita a dire che una classe ha un attributo di un'altra e questo attributo può essere null oppure valorizzato
Relazioni / Specializzazione ,[object Object],[object Object],[object Object]
La fattoria degli animali in Java ,[object Object],[object Object],[object Object],[object Object],[object Object]
Definire un oggetto in Java ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],class  Animale { String  nome ; String getNome() { return   nome ; } void  setNome(String nuovoNome){ nome  = nuovoNome; } }
Metodi con nomi "speciali" class  Animale { String  nome ; String getNome() { return   nome ; } void  setNome(String nuovoNome){ nome  = nuovoNome; } } ,[object Object],[object Object],[object Object]
Getter e setter ,[object Object],[object Object],[object Object],[object Object],Un oggetto contenente  getters  e  setters  viene chiamato Java bean Si consiglia l'attenta lettura della  naming convention http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html
Istanze di oggetti ,[object Object],[object Object],Animale fido =  new  Animale(); ,[object Object],[object Object],[object Object]
Istanze e costruttori ,[object Object],[object Object],[object Object],[object Object],[object Object]
Esempi di costruttori public   class  Animale { } public   class  Animale { public  Animale() { } } Le classi sono identiche, quella a destra viene generata in fase di compilazione da Java. Attenzione! Non viene modificato il sorgente ma è la classe compilata che in assenza di un costruttore viene creata con quello di default public   class  Animale { public  Animale() { } public  Animale(String nome) { } public  Animale(String nome) { } } public   class  Animale { public  Animale() { } public  Animale(String nome) { } public  Animale(String nome, String razza) { } }
Information Hiding e violazione ,[object Object],public   class  ProvaAnimaleSenzaInformationHiding { public   static   void  main(String[] args) { Animale fido =  new  Animale(); fido. nome  =  "aaa" ; } } ,[object Object],[object Object]
Java ed i livelli di Information Hiding (IH)‏ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Esiste un quarto livello,  package,  ma non è si utile ai nostri scopi
Diminuiamo la visibilità class  Animale { String  nome ; String getNome() { return   nome ; } void  setNome(String nuovoNome){ nome  = nuovoNome; } } class  Animale { private  String  nome ; String getNome() { return   nome ; } void  setNome(String nuovoNome){ nome  = nuovoNome; } } Cosa cambia Con questa piccola modifica la classe xxx non compila più. Abbiamo impedito modifiche dirette al field 'nome' Anche  protected  avrebbe nascosto la visibilità. Domanda: Cosa avrebbe fatto invece  public ? Domanda: Come faccio a cambiare il nome adesso?
Best practices per l'information hiding ,[object Object],[object Object],[object Object],[object Object]
Overloading ,[object Object],[object Object],[object Object],public   class  Animale { public   void  muovi() { } public   void  muovi(double   centimetri) { } }
Esercizi – cosa sapere ,[object Object],[object Object],[object Object],[object Object],public   static   void  main(String[] args) { }
Esempio ,[object Object],[object Object],public   class  Animale { public  String getNome() { return   "Polly" ; } } public   class  TestAnimale { public   static   void  main(String[] args) { Animale animale =  new  Animale(); System. out .println(animale.getNome()); } }
Esercizio 1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classi Gatto e Canarino public   class  Gatto { private  String  nome ; public  Gatto(String nome) { this . nome  = nome; } public  String getNome() { return   nome ; } } public   class  Canarino { private  String  nome ; public  Canarino(String nome) { this . nome  = nome; } public  String getNome() { return   nome ; } }
Classe Fattoria public   class  Fattoria { private  Gatto  gatto ; private  Canarino  canarino ; public  Gatto getGatto() { return   gatto ; } public   void  setGatto(Gatto gatto) { this . gatto  = gatto; } public  Canarino getCanarino() { return   canarino ; } public   void  setCanarino(Canarino canarino) { this . canarino  = canarino; } public   void  stampaNomiAnimali() { System. out .println( gatto .getNome()); System. out .println( canarino .getNome()); } }
Classe testFattoria public   class  TestFattoria { public   static   void  main(String[] args) { Gatto gatto =  new  Gatto( "Silvestro" ); Canarino canarino =  new  Canarino( "Titti" ); Fattoria fattoria =  new  Fattoria(); fattoria.setGatto(gatto); fattoria.setCanarino(canarino); fattoria.stampaNomiAnimali(); } }

Contenu connexe

En vedette

Groovy e Domain Specific Languages
Groovy e Domain Specific LanguagesGroovy e Domain Specific Languages
Groovy e Domain Specific LanguagesTiziano Lattisi
 
(E book pdf) thinking in patterns with java
(E book   pdf) thinking in patterns with java(E book   pdf) thinking in patterns with java
(E book pdf) thinking in patterns with javaRaffaella D'angelo
 
АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"
АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"
АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"Expolink
 
(Ebook pdf) java programming language basics
(Ebook pdf)   java programming language basics(Ebook pdf)   java programming language basics
(Ebook pdf) java programming language basicsRaffaella D'angelo
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming LanguagePasquale Paola
 
Java e il paradigma a oggetti
Java e il paradigma a oggettiJava e il paradigma a oggetti
Java e il paradigma a oggetticinziabb
 
Java e il paradigma a oggetti v2
Java e il paradigma a oggetti v2Java e il paradigma a oggetti v2
Java e il paradigma a oggetti v2cinziabb
 
Python nel primo biennio della scuola superiore
Python nel primo biennio della scuola superiorePython nel primo biennio della scuola superiore
Python nel primo biennio della scuola superioreguestc11532
 
Programmazione a oggetti tramite la macchina del caffé (1/3)
Programmazione a oggetti tramite la macchina del caffé (1/3)Programmazione a oggetti tramite la macchina del caffé (1/3)
Programmazione a oggetti tramite la macchina del caffé (1/3)Marcello Missiroli
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggettiAnna_1969
 
Sviluppare applicazioni mobile native in html e java script
Sviluppare applicazioni mobile native in html e java scriptSviluppare applicazioni mobile native in html e java script
Sviluppare applicazioni mobile native in html e java scriptFabio Franzini
 
Tesina Maturità 2012-2013
Tesina Maturità 2012-2013 Tesina Maturità 2012-2013
Tesina Maturità 2012-2013 Michele Loda
 
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...Raffaella D'angelo
 
Domotica con Arduino - Tesina maturità
Domotica con Arduino - Tesina maturitàDomotica con Arduino - Tesina maturità
Domotica con Arduino - Tesina maturitàBhuwan Sharma
 

En vedette (20)

Groovy e Domain Specific Languages
Groovy e Domain Specific LanguagesGroovy e Domain Specific Languages
Groovy e Domain Specific Languages
 
(E book pdf) thinking in patterns with java
(E book   pdf) thinking in patterns with java(E book   pdf) thinking in patterns with java
(E book pdf) thinking in patterns with java
 
Pensiero Orientato Agli Oggetti
Pensiero Orientato Agli OggettiPensiero Orientato Agli Oggetti
Pensiero Orientato Agli Oggetti
 
АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"
АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"
АКТИВ. Владимир Иванов. "Как помочь Вини Пуху и сохранить рассудок"
 
(Ebook pdf) java programming language basics
(Ebook pdf)   java programming language basics(Ebook pdf)   java programming language basics
(Ebook pdf) java programming language basics
 
Linguaggio di programmazione java - Scheda corso LEN
Linguaggio di programmazione java - Scheda corso LENLinguaggio di programmazione java - Scheda corso LEN
Linguaggio di programmazione java - Scheda corso LEN
 
Java
JavaJava
Java
 
OOP Java
OOP JavaOOP Java
OOP Java
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming Language
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
Java e il paradigma a oggetti
Java e il paradigma a oggettiJava e il paradigma a oggetti
Java e il paradigma a oggetti
 
Java e il paradigma a oggetti v2
Java e il paradigma a oggetti v2Java e il paradigma a oggetti v2
Java e il paradigma a oggetti v2
 
Python nel primo biennio della scuola superiore
Python nel primo biennio della scuola superiorePython nel primo biennio della scuola superiore
Python nel primo biennio della scuola superiore
 
Programmazione a oggetti tramite la macchina del caffé (1/3)
Programmazione a oggetti tramite la macchina del caffé (1/3)Programmazione a oggetti tramite la macchina del caffé (1/3)
Programmazione a oggetti tramite la macchina del caffé (1/3)
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
Sviluppare applicazioni mobile native in html e java script
Sviluppare applicazioni mobile native in html e java scriptSviluppare applicazioni mobile native in html e java script
Sviluppare applicazioni mobile native in html e java script
 
Tesina Maturità 2012-2013
Tesina Maturità 2012-2013 Tesina Maturità 2012-2013
Tesina Maturità 2012-2013
 
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
 
Domotica con Arduino - Tesina maturità
Domotica con Arduino - Tesina maturitàDomotica con Arduino - Tesina maturità
Domotica con Arduino - Tesina maturità
 

Dernier

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 

Dernier (9)

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 

Java 01

  • 1. Java Programmazione ad oggetti Davide Ficano [email_address]
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. Fido e Polly Stato e Comportamento Animale fido = new Cane(“Fido”); fido.muovi(); fido.parla(); // baubau // Verifico lo stato fido.getNome(); // Fido fido.getFame(); // poca fido.muovi(); fido.getFame(); // molta polly = new Pappagallo(“Polly”); polly.muovi(); // si muove sul trespolo non vola! polly.parla(); // mi chiamo pooolly // Verifico lo stato polly.getNome(); // Polly
  • 9.
  • 10.
  • 11.
  • 12.
  • 14. Ereditarietà /3 L'ereditarietà può essere modellata secondo diversi livelli di precisione
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29. Esempi di costruttori public class Animale { } public class Animale { public Animale() { } } Le classi sono identiche, quella a destra viene generata in fase di compilazione da Java. Attenzione! Non viene modificato il sorgente ma è la classe compilata che in assenza di un costruttore viene creata con quello di default public class Animale { public Animale() { } public Animale(String nome) { } public Animale(String nome) { } } public class Animale { public Animale() { } public Animale(String nome) { } public Animale(String nome, String razza) { } }
  • 30.
  • 31.
  • 32. Diminuiamo la visibilità class Animale { String nome ; String getNome() { return nome ; } void setNome(String nuovoNome){ nome = nuovoNome; } } class Animale { private String nome ; String getNome() { return nome ; } void setNome(String nuovoNome){ nome = nuovoNome; } } Cosa cambia Con questa piccola modifica la classe xxx non compila più. Abbiamo impedito modifiche dirette al field 'nome' Anche protected avrebbe nascosto la visibilità. Domanda: Cosa avrebbe fatto invece public ? Domanda: Come faccio a cambiare il nome adesso?
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38. Classi Gatto e Canarino public class Gatto { private String nome ; public Gatto(String nome) { this . nome = nome; } public String getNome() { return nome ; } } public class Canarino { private String nome ; public Canarino(String nome) { this . nome = nome; } public String getNome() { return nome ; } }
  • 39. Classe Fattoria public class Fattoria { private Gatto gatto ; private Canarino canarino ; public Gatto getGatto() { return gatto ; } public void setGatto(Gatto gatto) { this . gatto = gatto; } public Canarino getCanarino() { return canarino ; } public void setCanarino(Canarino canarino) { this . canarino = canarino; } public void stampaNomiAnimali() { System. out .println( gatto .getNome()); System. out .println( canarino .getNome()); } }
  • 40. Classe testFattoria public class TestFattoria { public static void main(String[] args) { Gatto gatto = new Gatto( "Silvestro" ); Canarino canarino = new Canarino( "Titti" ); Fattoria fattoria = new Fattoria(); fattoria.setGatto(gatto); fattoria.setCanarino(canarino); fattoria.stampaNomiAnimali(); } }