Oggetti. Oggetti,, Classi. Classi e e Metodi. Metodi. • variabili, dati, strutture di dati
, tipi di dati astratti, classi, oggetti, stato di un ogggetto e incapsulamento.
Oggetti, Oggetti, Classi e Metodi Programmazione ad Oggetti
• variabili, dati, strutture di dati, tipi di dati astratti, classi, oggetti, stato di un ogggetto e incapsulamento
Classi, Oggetti e Metodi
• routine, sub-routine, procedure, funzioni e metodi • blocchi, moduli, istanze di classe, programmazione in-the-small e programmazione in-the-large Marco Botta Dipartimento di Informatica - Universita` degli Studi d i Torino C.so Svizzera, 185 - I-10149 Torino (Italy) e-mail: botta@d i.unito .it - URL: http://www.di.unito.it/~botta Slide design and content: Matteo Baldoni e-mail: baldoni @di.unito.it - URL: http://www.di.unito.it/~baldoni
Ingegneria del Software: Programmazione ad Oggetti
Classi
Classi
• Insieme di oggetti con struttura e comportamento simili • Classe pubblica (public) • Notazione: il nome di una classe e` un identificatore con prima lettera maiuscola
• Definiscono un tipo non primitivo • Tipo di dato astratto int nomeVariabileIntera; char nomeVariabileCarattere; NomeDellaClasse nomeVariabileDellaClasse;
public class NomeDellaClasse { // contenuto della classe }
Tipo non primitivo
class NomeAltraClasse { // contenuto della classe } Ingegneria del Software: Programmazione ad Oggetti
3
Oggetti
Nome della variabile di tipo “NomeDellaClasse ”
Ingegneria del Software: Programmazione ad Oggetti
4
Metodi
• E` un’istanza di una classe • new e` l’istruzione che permette di creare un oggetto come istanza di una classe • Creazione dinamica degli oggetti a run-time
• Richiamo di funzioni e invio di messaggi • Permettono di agire su di un oggetto richiedendogli l’esecuzione di una data operazione • Parametri (attuali e formali) • Passaggio per valore (vs passaggio per referenza) • public e private (controllo della visibilita` dei metodi) • Ricorsione (diretta e indiretta)
NomeDellaClasse nomeVariabileDellaClasse; creazione di un oggetto della classe NomeDellaClasse e assegnamento alla variabile nomeVariabileDellaClasse
2
dichiarazione di variabile
nomeVariabileDellaClasse = new NomeDellaClasse(); NomeDellaClasse nomeVariabileDellaClasse = new NomeDellaClasse(); Ingegneria del Software: Programmazione ad Oggetti
5
Ingegneria del Software: Programmazione ad Oggetti
6
1
Metodi: Metodi: definizione
Metodi: Metodi: definizione
• I metodi possono essere definiti solo all’interno di una classe • Per convenzione i loro identificatori incominciano sempre con una lettera minuscola
• Se non restituisce alcun valore allora si usa void al posto di TipoValoreRestituito • Possono non esserci parametri ma le parentesi ( e ) sono sempre necessarie • L’overloading degli identificatori di metodo e` risolto tramite il tipo dei suoi parametri (ma NON dell’eventuale valore restituito)
class … { TipoValoreRestituito nomeMetodo ( parametri ) { // corpo del metodo }
[…] int count() {[…]} long count() {[…]} NO! char count(int what) {[…]} […]
} Ingegneria del Software: Programmazione ad Oggetti
7
Metodi: Metodi: invio messaggi
public class Counter { public void init(int val){ c = val; } public void incr(){ c++; } public void decr(){ c--; } public int getVal(){ return c; } private int c; }
in genere modifica lo stato di oggettoUno
[…] oggettoUno.nomeMetodoDiOggettoUno(parametri); […] oggettoDue = oggettoUno.altroMetodoDiOggettoUno(parametri); […] deve essere del tipo restituito dal metodo altroMetodoDiOggettoUno
9
Esempio: Esempio: Point
8
nome della classe
variabile intera privata, accessibile dall’interno della classe ma non visibile dall’esterno
Ingegneria del Software: Programmazione ad Oggetti
10
Costruttori
constructor method class Point { int x, y; Point( int x, int y) { this.x = x; this.y = y; } double distance(int x , int y) { int dx = this.x - x; identifica l’oggetto corrente int dy = this.y - y; return Math.sqrt(dx *dx + d y*dy ); } double distance(Point p) { return distance(p.x, p.y); } }
Ingegneria del Software: Programmazione ad Oggetti
Ingegneria del Software: Programmazione ad Oggetti
Es.: Contatore
• Realizzano la comunicazione tra oggetti richiedendo l’esecuzione di un metodo
Ingegneria del Software: Programmazione ad Oggetti
SI!
11
• Permettono di inizializzare automaticamente un oggetto al momento della creazione • Hanno lo stesso nome della classe • Possono avere parametri • Possono esserci piu` costruttori per una stessa classe distinti dal tipo dei loro parametri • Non specificano il tipo del valore restituito (implicitamente dichiarato come un oggetto del tipo della classe di cui e` costruttore)
Ingegneria del Software: Programmazione ad Oggetti
12
2
Costruttori
Costruttori
public class Counter { public Counter() { //