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
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();
}
:Pagatore p :Persona new 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
// interfaccia
public int getQuadrato(int value){
quadratoValore=calcolaQuadrato(value);
return quadratoValore;
}
// implementazione privata
private 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
0 comments
Post a comment