Beruflich Dokumente
Kultur Dokumente
Classi, Oggetti e Metodi variabili, dati, strutture di dati, tipi di dati astratti, classi, oggetti, stato di un ogggetto e incapsulamento 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
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
public class NomeDellaClasse { // contenuto della classe } class NomeAltraClasse { // contenuto della classe }
Ingegneria del Software: Programmazione ad Oggetti 3
Classi
Definiscono un tipo non primitivo Tipo di dato astratto
int nomeVariabileIntera; char nomeVariabileCarattere; NomeDellaClasse nomeVariabileDellaClasse;
Oggetti
E` unistanza di una classe new e` listruzione che permette di creare un oggetto come istanza di una classe Creazione dinamica degli oggetti a run-time
NomeDellaClasse nomeVariabileDellaClasse;
creazione di un oggetto della classe NomeDellaClasse e assegnamento alla variabile nomeVariabileDellaClasse dichiarazione di variabile
Metodi
Richiamo di funzioni e invio di messaggi Permettono di agire su di un oggetto richiedendogli lesecuzione 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)
SI!
8
Es.: Contatore
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; } nome della classe
variabile intera privata, accessibile dallinterno della classe ma non visibile dallesterno
10
Costruttori
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)
11
12
Costruttori
public class Counter { public Counter() { // <-- devo renderlo esplicito se voglio // continuare ad usarlo } public Counter( int val){ Alternative inizializzazione c = val; //this.init (val); Costruttori //init(val); // il compilatore aggiuge in questo della classe Counter // caso "this" automaticamente } public void init(int val){ c = val; } this indica in questo caso public void incr(){ loggetto in costruzione c++; } public void decr(){ c--; } public int getVal(){ return c; } private int c; } Ingegneria del Software: Programmazione ad Oggetti 13
Costruttori
public class Circle { public Point center; public double r; // center of the circle // radius
public Circle(int x, int y, double r) { center = new Point(x,y); this.r = r; } public Circle(Point p, double r) { center = p; this.r = r; } public Circle(Circle c) { center = c.center; r = c.r; } public double circumference() { return 2*Math.PI*r; } public double area() { return Math.PI*r*r; } } Circle c = new Circle(new Point(2,2), 3.0); Circle a = new Circle(c); Ingegneria del Software: Programmazione ad Oggetti 14
Il metodo toString ()
E` il metodo che viene automaticamente richiamato per la conversione di un oggetto in una stringa da stampare Puo` essere ridefinito per adattarlo alle proprie esigenze
Il metodo toString ()
public class Counter { public Counter() { nomeContatore = " Contatore anonimo "; } public Counter(int val){ c = val; nomeContatore = " Contatore anonimo "; } public Counter(int val, String nome){ c = val; nomeContatore = nome; } [] overriding dellomonimo public void setName (String nome) { metodo nella classe Object nomeContatore = nome; } public String toString(){ return ("Valore contatore " + nomeContatore + ": " + c); } private int c; Un nome al contatore private String nomeContatore; }
15
16
Il metodo toString ()
public class Body { public long idNum; public String name = <unnamed> public Body orbits = null; private static long nextID = 0; public Body() { idNum = nextID++; } public Body(String name, Body orbitsAround) { this(); this.name = name; orbits = orbitsAround; } public toString() { String desc = idNum+ (+name+); if (orbits != null) desc += orbits +orbits.toString(); return desc; } } Body sun = new Body( Sol, null); Body earth = new Body(Earth sun); , System.out. println(Body +earth. toString()); Body 1 (Earth) orbits 0 (Sol) Ingegneria del Software: Programmazione ad Oggetti 17
Metodi e Parametri
Il passaggio dei parametri in un metodo avviene solo e sempre per valore Ad un metodo possono essere passati oggetti come parametri Attenzione! Gli oggetti sono in pratica puntatori quindi e` il puntatore che viene passato per valore non loggetto che rappresenta Array come parametri (gli array sono oggetti!)
18
Lo stato di un oggetto
Non solo variabili di tipo primitivo Puo` essere composto anche da istanze di altre classi (oggetti) Es.: Coppia di Contatori
class DoubleCounter { private Counter c1; private Counter c2; [] public DoubleCounter() { c1 = new Counter(); c2 = new Counter(); [] } } Ingegneria del Software: Programmazione ad Oggetti
20
Array di Oggetti
Gli elementi di un array possono essere oggetti qualsiasi Es.: un array di contatori
class ArrayOfCounters { private Counter[] counters; [] public ArrayOfCounters(int howMany) { counters = new Counter[howMany]; [] } }
} Ingegneria del Software: Programmazione ad Oggetti 21
Classi e Oggetti
Definizione di una classe
classmodifier class classname extends superclassname implements interface1, ..., interfaceN { varmodifier type inst-var1; varmodifier type inst-var2; varmodifier type inst-varN; methodmodifier type methodname1(parameter-list) { methodbody; } methodmodifier type methodname2(parameter-list) { methodbody; } methodmodifier type methodnameN (parameter-list) { methodbody; } Ingegneria del Software: Programmazione ad Oggetti
22