Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Concetti Oo Classe

1,788 views

Published on

  • Be the first to comment

Concetti Oo Classe

  1. 1. SECONDA PARTE INTRODUZIONE AI CONCETTI DELLA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI IL CONCETTO DI CLASSE II° Lezione per la IV A liceo tecnico – 17 ottobre 2008
  2. 2. LE CLASSI SONO STAMPINI DI OGGETTI <ul><li>La classe è uno stampino che crea oggetti </li></ul><ul><li>Pertanto gli oggetti sono creati dalle classi </li></ul><ul><li>Una classe è un tipo di dato di più alto livello </li></ul>
  3. 3. CREAZIONE DI OGGETTI CON LA CLASSE <ul><li>Per creare un numero intero o un numero decimale: </li></ul><ul><ul><li>int x; </li></ul></ul><ul><ul><li>float y; </li></ul></ul><ul><li>Allo stesso modo per creare un oggetto usando una classe predefinita: </li></ul><ul><ul><li>Persona persona; </li></ul></ul><ul><ul><li>new Persona(); </li></ul></ul><ul><li>Persona è la classe, persona (minuscola) è l’oggetto </li></ul>
  4. 4. ESEMPIO DI CLASSE PERSONA <ul><li>public class Persona{ </li></ul><ul><ul><li>private String nome; </li></ul></ul><ul><ul><li>private String indirizzo; </li></ul></ul><ul><ul><li>public String getNome(){ </li></ul></ul><ul><ul><ul><li>return nome; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>public void setNome(String n){ </li></ul></ul></ul><ul><ul><ul><li>nome=n; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>public String getIndirizzo(){ </li></ul></ul><ul><ul><ul><li>return nome; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>public void setIndirizzo(String ind){ </li></ul></ul></ul><ul><ul><ul><li>indirizzo=ind; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><li>} </li></ul>
  5. 5. LA CLASSE È UN NUOVO TIPO DI STRUTTURA <ul><li>La classe è una nuova struttura </li></ul><ul><li>Dentro la classe si incapsulano gli attributi e le funzioni </li></ul><ul><li>Per ottenere questo risultato, questa struttura ha una dichiarazione con la parola class seguita dal nome della classe Persona </li></ul><ul><li>Dopo la dichiarazione c’è il corpo della classe racchiuso tra una coppia di parentesi graffe {…} </li></ul><ul><li>Nel corpo della classe sono incapsulati: </li></ul><ul><ul><li>Tutti gli attributi della classe </li></ul></ul><ul><ul><li>Tutti i metodi (ossia il comportamento della classe) </li></ul></ul>
  6. 6. ATTRIBUTI DI UNA CLASSE <ul><li>Ogni classe definisce al suo interno gli attributi che servono a memorizzare lo stato (ossia i valori specifici) di ciascun oggetto instanziato da questa classe. </li></ul><ul><li>Nell’esempio precedente, la classe Persona definisce gli attributi nome e indirizzo </li></ul><ul><li>Quando un oggetto persona viene creato a questi attributi viene assegnato un valore preciso </li></ul><ul><li>Ad esempio nome=“Mario”,indirizzo=“via del gelato” </li></ul>
  7. 7. VISIBILITÀ E ACCESSO AD UN ATTRIBUTO <ul><li>Quando un attributo è definito public, altri oggetti possono immediatamente e direttamente accedere al suo valore </li></ul><ul><li>Quando invece un attributo è definito privato, gli altri oggetti non possono accedervi, ma solo l’oggetto che lo possiede può leggerne il valore e modificarlo </li></ul>
  8. 8. I METODI <ul><li>I metodi implementano il comportamento richiesto dalla classe </li></ul><ul><li>Ogni oggetto instanziato dalla sua classe ha i metodi definiti nella classe </li></ul><ul><li>I metodi possono implementare il comportamento che è richiesto dai messaggi inviati da altri oggetti </li></ul><ul><li>Oppure forniscono un fondamentale comportamento interno alla classe medesima </li></ul><ul><ul><li>In questo caso i metodi sono privati e non sono accessibili da altri oggetti. </li></ul></ul><ul><li>Nella classe Persona i comportamenti sono getNome(), setNome(), getIndirizzo(), setIndirizzo(). </li></ul><ul><li>Questi metodi permettono ad altri oggetti di ispezionare e modificare i valori degli attributi degli oggetti </li></ul><ul><li>In ogni caso, l’accesso ai valori degli attributi di un oggetto deve essere controllato dall’oggetto medesimo </li></ul><ul><li>Nessun oggetto dovrebbe direttamente modificare un attributo di un altro. </li></ul>
  9. 9. I MESSAGGI <ul><li>I messaggi rappresentano il meccanismo di comunicazione tra gli oggetti. </li></ul><ul><li>Ad esempio, quando un oggetto A invoca un metodo di un oggetto B, diciamo che l’oggetto A sta inviando un messaggio all’oggetto B. </li></ul><ul><li>La risposta dell’oggetto B è definita dal valore che restituisce. </li></ul><ul><li>Solo i metodi pubblici di un oggetto possono essere invocati da un altro oggetto </li></ul><ul><li>Ai metodi privati non si può inviare nessun messaggio </li></ul>
  10. 10. ESEMPIO DI MESSAGGIO <ul><li>public class Pagatore{ </li></ul><ul><ul><li>String nome; </li></ul></ul><ul><ul><li>public void messaggiPagatore(){ </li></ul></ul><ul><ul><ul><li>Persona p=new Persona(); </li></ul></ul></ul><ul><ul><ul><li>p.setNome(“Giovanni”); </li></ul></ul></ul><ul><ul><ul><li>String nome=p.getNome(); </li></ul></ul></ul><ul><ul><li>} </li></ul></ul>:Pagatore p :Persona new Persona() setNome(“Giovanni”) getNome()
  11. 11. UML PER MODELLIZZARE UNA CLASSE <ul><li>Unified Modeling Language </li></ul><ul><li>Una classe è un rettangolo con tre scomparti </li></ul><ul><ul><li>Nel primo in alto c’è il nome della classe </li></ul></ul><ul><ul><li>In quello intermedio ci sono gli attributi </li></ul></ul><ul><ul><li>In basso ci sono i metodi della classe </li></ul></ul>
  12. 12. INCAPSULAMENTO E DATA HIDING <ul><li>Un oggetto non deve rivelare tutti i suoi attributi e tutti i suoi comportamenti </li></ul><ul><li>Deve solo mastrare quell’interfaccia che gli altri oggetti devono usare per interagire con lui </li></ul><ul><li>Tutti quei dettagli che non sono pertinenti all’uso dell’oggetto devono essere nascosti agli altri </li></ul><ul><li>L’incapsulamento significa che un oggetto contiene sia i suoi attributi che i suoi comportamenti. </li></ul><ul><li>Il nascondere dei dati fa parte dell’incapsulamento </li></ul>
  13. 13. ESEMPIO INCAPSULAMENTO <ul><li>Un oggetto che calcola il quadrato di un numero deve fornire un’interfaccia affinchè altri oggetti possano ottenere il risultato del suo calcolo </li></ul><ul><li>Tuttavia non è necessario che siano resi disponibili, all’oggetto che richiede il risultato dell’operazione, gli attributi interni e l’algoritmo usato per calcolare il quadrato </li></ul><ul><li>a fondamento dell’incapsulamento sono i concetti: </li></ul><ul><ul><li>Interfaccia </li></ul></ul><ul><ul><li>Implementazione </li></ul></ul>
  14. 14. INTERFACCIA <ul><li>L’interfaccia definisce i mezzi fondamentali per la comunicazione tra oggetti </li></ul><ul><li>Ogni classe specifica le opportune interfacce per la instanziazione e l’operazione degli oggetti </li></ul><ul><li>Ogni operazione che l’oggetto fornisce deve essere richiesta con un messaggio inviato ad una delle interfacce che ha reso disponibili </li></ul><ul><li>Un interfaccia deve completamente descrivere come gli utenti di quella classe possono e devono interagire con essa </li></ul><ul><li>I metodi dell’interfaccia devono essere definiti public </li></ul>
  15. 15. INTERFACCIA: DATA HIDING <ul><li>Per attivare la protezione dei dati (data hiding), i loro attributi devono essere definiti private. </li></ul><ul><li>Pertanto gli attributi non sono mai parte dell’interfaccia </li></ul><ul><li>Solo i metodi pubblici fanno parte dell’interfaccia </li></ul><ul><li>Dichiarare un attributo pubblico frantuma il concetto di data hiding </li></ul>
  16. 16. ESEMPIO DI INTERFACCIA <ul><li>Il calcolo del quadrato di un numero </li></ul><ul><li>L’interfaccia è fatta da due pezzi: </li></ul><ul><ul><li>Come instanziare un oggetto Quadrato </li></ul></ul><ul><ul><li>Come inviare un valore numerico a questo oggetto ed ottenere in risposta il valore del suo quadrato </li></ul></ul>
  17. 17. ACCESSO AL VALORE DI UN ATTRIBUTO PRIVATO <ul><li>Se un oggetto vuole accedere ad un attributo, viene scritto un metodo (getter) che restituisce il valore di quell’attributo </li></ul><ul><li>In questo modo l’oggetto che contiene quell’attributo ne controlla l’accesso </li></ul><ul><li>Per la sicurezza non vogliamo che un codice non controllato possa modificare o conoscere dei dati quali passord ed informazioni personali </li></ul>
  18. 18. IMPLEMENTAZIONE <ul><li>L’interfaccia sono gli attributi e i metodi pubblici </li></ul><ul><li>Gli altri oggetti non devono vedere nessuna parte dell’implementazione </li></ul><ul><li>Un oggetto può, deve interagire con un altro oggetto solo il tramite delle interfacce della classe </li></ul><ul><li>In molti casi ci sono dei metodi che devono essere nascosti dichiarandoli private e pertanto questi non appartengono all’interfaccia </li></ul><ul><li>Nell’esempio del calcolo del quadrato, all’utente (un oggetto) non necessita sapere come è stato calcolato, ma di avere il risultato corretto </li></ul><ul><li>Pertanto l’implementazione può cambiare, ma se l’interfaccia non cambia, per l’oggetto utente non fa differenza alcuna e non deve modificare il suo codice </li></ul><ul><li>Ad esempio l’azienda che produce la calcolatrice può cambiare l’algoritmo del calcolo per renderlo più efficiente senza alterare il modo con cui è presentato nel display </li></ul>
  19. 19. IL PARADIGMA INTERFACCIA/IMPLEMENTAZIONE <ul><li>Il toast per funzionare richiede l’elettricità </li></ul><ul><li>Per ottenerla il suo cavo di alimentazione deve essere adattato alla presa elettrica </li></ul><ul><li>La presa elettrica è l’interfaccia </li></ul><ul><li>Ogni dispositivo per ottenere l’elettricità deve usare un cavo con un attacco che soddisfi le specifiche della presa elettrica </li></ul><ul><li>Questa è l’interfaccia tra la compagnia elettrica ed il toast ! </li></ul>
  20. 20. UN MODELLO DEL PARADIGMA INTERFACCIA/IMPLEMENTAZIONE <ul><li>Scriviamo una classe cha calcola i quadrati dei numeri interi </li></ul><ul><li>Nel disegno della classe, il segno (+) significa pubblico, quello (-) privato </li></ul><ul><li>Pertanto identifichiamo l’interfaccia dai metodi prefissi con il segno (+) </li></ul>
  21. 21. ESEMPIO CALCOLO DEI QUADRATI DEI NUMERI INTERI <ul><li>Bisogna fornire una interfaccia ed una separata implementazione </li></ul><ul><li>Occorre cioè fornire un modo all’utente di richiedere ed ottenere l’operazione del quadrato </li></ul><ul><li>Si deve anche scrivere l’implementazione cha calcola il quadrato, ma l’utente non deve saper nulla della sua specifica implementazione </li></ul><ul><li>public class intQuadrato{ </li></ul><ul><ul><li>private int quadratoValore </li></ul></ul><ul><ul><li>// interfaccia </li></ul></ul><ul><ul><li>public int getQuadrato(int value){ </li></ul></ul><ul><ul><ul><li>quadratoValore=calcolaQuadrato(value); </li></ul></ul></ul><ul><ul><ul><li>return quadratoValore; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>// implementazione privata </li></ul></ul></ul><ul><ul><ul><li>private int calcolaQuadrato(int value){ </li></ul></ul></ul><ul><ul><ul><li>return value*value; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>} </li></ul></ul>
  22. 22. I QUATTRO CONCETTI PIÙ IMPORTANTI DELLA OBJECT ORIENTED PROGRAMMING <ul><li>Encapsulation (incapsulamento) </li></ul><ul><li>Inheritance (ereditarietà) </li></ul><ul><li>Polymorphism (polimorfismo) </li></ul><ul><li>Composition (composizione) </li></ul><ul><li>Questi sono i concetti che devono essere assimilati prima di intraprendere uno studio dettagliato delle tecnologie di OOA, OOD, OOP </li></ul>

×