Oggetti in C# - Lezione 1
Oggetti in C#Oggetti in C#
Lezione 1Lezione 1
22
Oggetti in C# - Lezione 1
LL’’idea degli oggettiidea degli oggetti
Una classe è Una classe è una categoria di una categoria di “cose” o di “cose” o di “soggetti”“soggetti”
Una classe è Una classe è una categoria di una categoria di “cose” o di “cose” o di “soggetti”“soggetti”
Per esempio Per esempio Automobile, Automobile, Cane o PersonaCane o Persona
Per esempio Per esempio Automobile, Automobile, Cane o PersonaCane o Persona
Una classe è un tipo Una classe è un tipo base da cui dichiarare base da cui dichiarare elementielementi
Una classe è un tipo Una classe è un tipo base da cui dichiarare base da cui dichiarare elementielementi
Per esempio Per esempio Rex, Pluto e Rex, Pluto e Lassie sono tutti Lassie sono tutti elementi di elementi di CaneCane
Per esempio Per esempio Rex, Pluto e Rex, Pluto e Lassie sono tutti Lassie sono tutti elementi di elementi di CaneCane
33
Oggetti in C# - Lezione 1
Classi e istanzeClassi e istanze class Rectangle
{
int side1, side2;
//lati del rettangolo
}
Utilizzo della classe
{
Rectangle R ;
R = new Rectangle();
}
Dichiarazione Dichiarazione della classedella classeDichiarazione Dichiarazione della classedella classe
La La classeclasse è è un tipo di datoun tipo di datoLa La classeclasse è è un tipo di datoun tipo di dato
La creazione La creazione dell’oggetto è dell’oggetto è correttacorretta
La creazione La creazione dell’oggetto è dell’oggetto è correttacorretta
La variabile di La variabile di tipo classe è tipo classe è detta detta istanzaistanza
La variabile di La variabile di tipo classe è tipo classe è detta detta istanzaistanza
44
Oggetti in C# - Lezione 1
Punti di vistaPunti di vistaClasseClasse
È il tipo di datoCome il progetto di una casa, non è la
casa stessa. . . Definisce però come sarà costruita tutta la
strutturaIn alcuni casi può
memorizzare dei dati, ma non di istanza
VariabileVariabileistanzaistanza
È una È una variabile variabile
riferimentoriferimento
Ogni Ogni variabile variabile
punta a una punta a una istanzaistanza
IstanzaIstanzaÈ una porzione di memoria, allocata
in heap, che cusodisce i dati.
È’ l’oggetto vero e proprio: deve
essere istanziato prima di essere
usato.
55
Oggetti in C# - Lezione 1
Classi e attributiClassi e attributi class Rectangle
{
int side1, side2;
//lati del rettangolo
}
Utilizzo della classe
{
Rectangle R ;
R = new Rectangle();
R.side1 = 12;
int x = R.side2;
}Le variabili Le variabili interne alla interne alla classe sono detti classe sono detti attributiattributi
Le variabili Le variabili interne alla interne alla classe sono detti classe sono detti attributiattributi Le variabili Le variabili
interne sono interne sono privateprivate ovvero ovvero non raggiungibili non raggiungibili dall’esternodall’esterno
Le variabili Le variabili interne sono interne sono privateprivate ovvero ovvero non raggiungibili non raggiungibili dall’esternodall’esterno
L’accesso agli L’accesso agli attributi è erratoattributi è erratoL’accesso agli L’accesso agli attributi è erratoattributi è errato
L’errore c’è L’errore c’è perché gli perché gli attributi sono attributi sono privatiprivati
L’errore c’è L’errore c’è perché gli perché gli attributi sono attributi sono privatiprivati
erroreerrore
66
Oggetti in C# - Lezione 1
Attributi privati e pubbliciAttributi privati e pubblici class Rectangle
{
int side1, side2;
public string Colore;
private Boolean attivo;
}
Utilizzo della classe
{
Rectangle R ;
R = new Rectangle();
R.Colore = “rosso";
R.attivo = true;
}Le parti interne alla Le parti interne alla classe possono essere classe possono essere pubblichepubbliche o o privateprivate
Le parti interne alla Le parti interne alla classe possono essere classe possono essere pubblichepubbliche o o privateprivate
Quelle Quelle pubblichepubbliche possono essere possono essere accessibili accessibili dall’esternodall’esterno
Quelle Quelle pubblichepubbliche possono essere possono essere accessibili accessibili dall’esternodall’esterno
L’accesso al L’accesso al colore è corretto colore è corretto perché perché pubblicopubblico
L’accesso al L’accesso al colore è corretto colore è corretto perché perché pubblicopubblico
L’accesso ad L’accesso ad attivo invece è attivo invece è errato, perché errato, perché privatoprivato
L’accesso ad L’accesso ad attivo invece è attivo invece è errato, perché errato, perché privatoprivato
erroreerrore
77
Oggetti in C# - Lezione 1
Attributi privati e pubbliciAttributi privati e pubblici class Rectangle
{
int side1, side2;
public string Colore;
private Boolean attivo;
}
Utilizzo della classe
{
Rectangle R ;
R = new Rectangle();
R.side1 = 13;
R.attivo = true;
}Se non si esplicita, si Se non si esplicita, si presuppone che le presuppone che le parti siano privateparti siano private
Se non si esplicita, si Se non si esplicita, si presuppone che le presuppone che le parti siano privateparti siano private
Questo Questo meccanismo è meccanismo è detto detto incapsulamentoincapsulamento
Questo Questo meccanismo è meccanismo è detto detto incapsulamentoincapsulamento
Di solito è preferibile Di solito è preferibile nascondere parti nascondere parti all’esterno. Questo all’esterno. Questo impedisce errori ed impedisce errori ed evita violazioni di evita violazioni di accesso. Ci sono altri accesso. Ci sono altri modi per accedere modi per accedere all’oggettoall’oggetto
Di solito è preferibile Di solito è preferibile nascondere parti nascondere parti all’esterno. Questo all’esterno. Questo impedisce errori ed impedisce errori ed evita violazioni di evita violazioni di accesso. Ci sono altri accesso. Ci sono altri modi per accedere modi per accedere all’oggettoall’oggetto
erroreerrore
88
Oggetti in C# - Lezione 1
Costruttori della classeCostruttori della classe class Rectangle
{
int side1, side2;
public Rectangle()
{
//costruttore vuoto
}
}
Utilizzo della classe
{
Rectangle R ;
R = new Rectangle();
}
Una classe Una classe devedeve avere un avere un costruttorecostruttore
Una classe Una classe devedeve avere un avere un costruttorecostruttore
Il costruttore Il costruttore serve per creare serve per creare istanze della istanze della classe, ed ha il classe, ed ha il suo suo stesso nomestesso nome
Il costruttore Il costruttore serve per creare serve per creare istanze della istanze della classe, ed ha il classe, ed ha il suo suo stesso nomestesso nome
Il costruttore si usa Il costruttore si usa con l’operatore con l’operatore newnewIl costruttore si usa Il costruttore si usa con l’operatore con l’operatore newnew
Il costruttore Il costruttore alloca memoriaalloca memoria per l’istanza e per l’istanza e rende l’indirizzorende l’indirizzo
Il costruttore Il costruttore alloca memoriaalloca memoria per l’istanza e per l’istanza e rende l’indirizzorende l’indirizzo
99
Oggetti in C# - Lezione 1
Costruttori della classeCostruttori della classeclass Rectangle
{
public int side1, side2;
public Rectangle()
{ }
public Rectangle (int x, int
y)
{ side1 = x;
side2 = y; }
}
Utilizzo della classe
{
Rectangle R ;
R.side1 = 17 ;
int i = R.side2;
}
Una classe può Una classe può avere più avere più costruttoricostruttori
Una classe può Una classe può avere più avere più costruttoricostruttori I costruttori I costruttori
devono avere devono avere qualche qualche differenza ma lo differenza ma lo stesso nomestesso nome
I costruttori I costruttori devono avere devono avere qualche qualche differenza ma lo differenza ma lo stesso nomestesso nome
Non è possibile usare Non è possibile usare l’istanza senza l’istanza senza invocare prima il invocare prima il costruttorecostruttore
Non è possibile usare Non è possibile usare l’istanza senza l’istanza senza invocare prima il invocare prima il costruttorecostruttoreIl sistema Il sistema avverteavverte
che non c’è che non c’è nessuna struttura nessuna struttura associata alla associata alla variabilevariabile
Il sistema Il sistema avverteavverte che non c’è che non c’è nessuna struttura nessuna struttura associata alla associata alla variabilevariabile
erroreerrore
1010
Oggetti in C# - Lezione 1
Costruttori della classeCostruttori della classe class Rectangle
{
int side1, side2;
public Rectangle()
{
//costruttore vuoto
}
public Rectangle(int x)
{
side = x ;
}
}
Utilizzo della classe
{
Rectangle R1, R2;
R1 = new Rectangle();
R2 = new Rectangle(13);
}
Una classe può Una classe può avere avere molti molti costruttoricostruttori; si dice ; si dice overload del overload del costruttore.costruttore.OverloadOverload vuole dire vuole dire
sovraccaricosovraccarico
Una classe può Una classe può avere avere molti molti costruttoricostruttori; si dice ; si dice overload del overload del costruttore.costruttore.OverloadOverload vuole dire vuole dire
sovraccaricosovraccarico
Il sistema riconosce Il sistema riconosce quale costruttore quale costruttore usare dai parametriusare dai parametri
Il sistema riconosce Il sistema riconosce quale costruttore quale costruttore usare dai parametriusare dai parametri
Il secondo Il secondo costruttore ha un costruttore ha un parametro di tipo parametro di tipo intint
Il secondo Il secondo costruttore ha un costruttore ha un parametro di tipo parametro di tipo intint
1111
Oggetti in C# - Lezione 1
Costruttori della classeCostruttori della classeclass Rectangle
{
private int _s1, _s2;
private Rectangle
(int x, int y)
{ _s1 = x;
_s2 = y; }
}
Utilizzo della classe
{
Rectangle R ;
R = new Rectangle();
}
È possibile È possibile avere avere costruttori costruttori privatiprivati
È possibile È possibile avere avere costruttori costruttori privatiprivati
Ma questo Ma questo impedisceimpedisce di di essere invocati essere invocati dall’dall’esternoesterno!!
Ma questo Ma questo impedisceimpedisce di di essere invocati essere invocati dall’dall’esternoesterno!!
Non è possibile usare Non è possibile usare l’istanza senza l’istanza senza invocare prima il invocare prima il costruttorecostruttore
Non è possibile usare Non è possibile usare l’istanza senza l’istanza senza invocare prima il invocare prima il costruttorecostruttore
Ma se nessun Ma se nessun costruttore è più costruttore è più pubblico ho pubblico ho problemiproblemi
Ma se nessun Ma se nessun costruttore è più costruttore è più pubblico ho pubblico ho problemiproblemi
1212
Oggetti in C# - Lezione 1
RiepilogoRiepilogo• ClasseClasse è un tipo di dato oggetto è un tipo di dato oggetto• IstanzaIstanza è la variabile di tipo oggetto è la variabile di tipo oggetto• Ogni classe ha un Ogni classe ha un costruttorecostruttore; se non esplicito ; se non esplicito
il sistema ne associa uno in automaticoil sistema ne associa uno in automatico• Il Il costruttorecostruttore serve per allocare memoria per le serve per allocare memoria per le
istanzeistanze• Il costruttore è Il costruttore è omonimoomonimo della classe della classe• È possibile È possibile l’overloadl’overload dei costruttori dei costruttori• Le parti dell’oggetto possono essere Le parti dell’oggetto possono essere privateprivate o o
pubblichepubbliche; se non si specifica nessuna opzione ; se non si specifica nessuna opzione si presuppone siano privatesi presuppone siano private
• Il meccanismo di parti private è detto Il meccanismo di parti private è detto incapsulamentoincapsulamento
1313
Oggetti in C# - Lezione 1
EsercizioEsercizio
• Si dichiari una classe Si dichiari una classe VectorVector che che incapsula un vettore di interiincapsula un vettore di interi
• Preparare un Preparare un costruttorecostruttore che che inserisca in ogni cella uno stesso inserisca in ogni cella uno stesso numero, passato per parametronumero, passato per parametro
• Preparare un costruttore che Preparare un costruttore che inserisca in ogni cella un valore inserisca in ogni cella un valore casualecasuale
• Scrivere un uso di sue istanzeScrivere un uso di sue istanze
1414
Oggetti in C# - Lezione 1
Assegnazioni tra istanzeAssegnazioni tra istanzeclass Rectangle { public int x, y; public Boolean visible ; public Rectangle
(int x , int y)
{ this.x = x ; this.y = y ; visible = true ;
}}
Rectangle R1, R2 ;R1 = new Rectangle(2 , 3);R2 = R1 ; //condivisioneR2.y = 7 ;
Le istanze sono tipi Le istanze sono tipi riferimento; sono riferimento; sono
allocate nello heapallocate nello heap
Le istanze sono tipi Le istanze sono tipi riferimento; sono riferimento; sono
allocate nello heapallocate nello heap
L’assegnazione tra istanze L’assegnazione tra istanze implica la condivisione implica la condivisione dei dati; l’assegnazione dei dati; l’assegnazione tra attributi non sempretra attributi non sempre
L’assegnazione tra istanze L’assegnazione tra istanze implica la condivisione implica la condivisione dei dati; l’assegnazione dei dati; l’assegnazione tra attributi non sempretra attributi non sempre
x = 2x = 2y = y = 33
R1R1R2R2
R1 e R2 condividono lo R1 e R2 condividono lo stesso spazio; modificare una stesso spazio; modificare una
implica modificare l’altraimplica modificare l’altra
77
1515
Oggetti in C# - Lezione 1
Assegnazioni tra istanzeAssegnazioni tra istanzeclass Rectangle { public int x, y; public Boolean visible ; public Rectangle
(int x , int y)
{ this.x = x ; this.y = y ; visible = true ;
}}
Rectangle R1, R2 ;R1 = new Rectangle(2 , 3);R2 = new Rectangle(2 , 3);R2.y = 7 ;
Ogni volta che si invoca un costruttore si alloca memoria nello heap, ma l’indirizzo della struttura
che l’istanza conserva sta nello stack
Ogni volta che si invoca un costruttore si alloca memoria nello heap, ma l’indirizzo della struttura
che l’istanza conserva sta nello stack
Se due istanze sono costruite distintamente allora ciascuna avrà il suo
spazio di memoria; in questo caso la modifica di una NON coinvolge l’altra; una assegnazione tra istanze fa perdere
l’oggetto costruito in precedenza!
Se due istanze sono costruite distintamente allora ciascuna avrà il suo
spazio di memoria; in questo caso la modifica di una NON coinvolge l’altra; una assegnazione tra istanze fa perdere
l’oggetto costruito in precedenza!
x = 2x = 2y = 3y = 3R1R1
R2R2
77
x = 2x = 2y = y = 33
Top Related