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