Scaricare la presentazione
PubblicatoMacario Fedele Modificato 10 anni fa
1
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1
2
L’idea degli oggetti Una classe è una categoria di “cose” o di “soggetti” Una classe è un tipo base da cui dichiarare elementi Per esempio Automobile, Cane o Persona Per esempio Rex, Pluto e Lassie sono tutti elementi di Cane Oggetti in C# - Lezione 1
3
Classi e istanze { R = new Rectangle(); } class Rectangle {
int side1, side2; //lati del rettangolo } Utilizzo della classe { Rectangle R ; R = new Rectangle(); } Dichiarazione della classe La creazione dell’oggetto è corretta La classe è un tipo di dato La variabile di tipo classe è detta istanza Oggetti in C# - Lezione 1
4
È una variabile riferimento Ogni variabile punta a una istanza
Punti di vista Classe È il tipo di dato Come il progetto di una casa, non è la casa stessa. . . Definisce però come sarà costruita tutta la struttura In alcuni casi può memorizzare dei dati, ma non di istanza Istanza È una porzione di memoria, allocata in heap, che cusodisce i dati. È’ l’oggetto vero e proprio: deve essere istanziato prima di essere usato. Variabile istanza È una variabile riferimento Ogni variabile punta a una istanza Oggetti in C# - Lezione 1
5
Classi e attributi { R = new Rectangle(); R.side1 = 12;
class Rectangle { int side1, side2; //lati del rettangolo } Utilizzo della classe { Rectangle R ; R = new Rectangle(); R.side1 = 12; int x = R.side2; } errore Le variabili interne alla classe sono detti attributi L’accesso agli attributi è errato Le variabili interne sono private ovvero non raggiungibili dall’esterno L’errore c’è perché gli attributi sono privati Oggetti in C# - Lezione 1
6
Attributi 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; } errore Le parti interne alla classe possono essere pubbliche o private L’accesso al colore è corretto perché pubblico Quelle pubbliche possono essere accessibili dall’esterno L’accesso ad attivo invece è errato, perché privato Oggetti in C# - Lezione 1
7
Attributi 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; } errore Se non si esplicita, si presuppone che le parti siano private Di solito è preferibile nascondere parti all’esterno. Questo impedisce errori ed evita violazioni di accesso. Ci sono altri modi per accedere all’oggetto Questo meccanismo è detto incapsulamento Oggetti in C# - Lezione 1
8
Costruttori della classe
class Rectangle { int side1, side2; public Rectangle() //costruttore vuoto } Utilizzo della classe { Rectangle R ; R = new Rectangle(); } Il costruttore si usa con l’operatore new Una classe deve avere un costruttore Il costruttore serve per creare istanze della classe, ed ha il suo stesso nome Il costruttore alloca memoria per l’istanza e rende l’indirizzo Oggetti in C# - Lezione 1
9
Costruttori della classe
class 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; } errore Non è possibile usare l’istanza senza invocare prima il costruttore Una classe può avere più costruttori Il sistema avverte che non c’è nessuna struttura associata alla variabile I costruttori devono avere qualche differenza ma lo stesso nome Oggetti in C# - Lezione 1
10
Costruttori 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); } Il sistema riconosce quale costruttore usare dai parametri Una classe può avere molti costruttori; si dice overload del costruttore. Overload vuole dire sovraccarico Il secondo costruttore ha un parametro di tipo int Oggetti in C# - Lezione 1
11
Costruttori della classe
class Rectangle { private int _s1, _s2; private Rectangle (int x, int y) { _s1 = x; _s2 = y; } } Utilizzo della classe { Rectangle R ; R = new Rectangle(); } Non è possibile usare l’istanza senza invocare prima il costruttore È possibile avere costruttori privati Ma se nessun costruttore è più pubblico ho problemi Ma questo impedisce di essere invocati dall’esterno! Oggetti in C# - Lezione 1
12
Riepilogo Classe è un tipo di dato oggetto
Istanza è la variabile di tipo oggetto Ogni classe ha un costruttore; se non esplicito il sistema ne associa uno in automatico Il costruttore serve per allocare memoria per le istanze Il costruttore è omonimo della classe È possibile l’overload dei costruttori Le parti dell’oggetto possono essere private o pubbliche; se non si specifica nessuna opzione si presuppone siano private Il meccanismo di parti private è detto incapsulamento Oggetti in C# - Lezione 1
13
Esercizio Si dichiari una classe Vector che incapsula un vettore di interi Preparare un costruttore che inserisca in ogni cella uno stesso numero, passato per parametro Preparare un costruttore che inserisca in ogni cella un valore casuale Scrivere un uso di sue istanze Oggetti in C# - Lezione 1
14
Assegnazioni tra istanze
class 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 ; //condivisione R2.y = 7 ; R1 e R2 condividono lo stesso spazio; modificare una implica modificare l’altra R1 R2 x = 2 y = 3 Le istanze sono tipi riferimento; sono allocate nello heap L’assegnazione tra istanze implica la condivisione dei dati; l’assegnazione tra attributi non sempre 7 Oggetti in C# - Lezione 1
15
Assegnazioni tra istanze
class 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 ; x = 2 y = 3 R1 x = 2 y = 3 R2 7 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! Ogni volta che si invoca un costruttore si alloca memoria nello heap, ma l’indirizzo della struttura che l’istanza conserva sta nello stack Oggetti in C# - Lezione 1
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.