Classi, Oggetti e Metodi - Dipartimento di Informatica

4 downloads 1480 Views 1MB Size Report
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() { //