Concetti Oo Classe

1,646 views
1,599 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,646
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
53
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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>

×