La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Oggetti in C# - Lezione 1 Oggetti in C# Lezione 1.

Presentazioni simili


Presentazione sul tema: "Oggetti in C# - Lezione 1 Oggetti in C# Lezione 1."— Transcript della presentazione:

1 Oggetti in C# - Lezione 1 Oggetti in C# Lezione 1

2 2 Oggetti in C# - Lezione 1 L ’ idea degli oggetti Una classe è una categoria di “cose” o di “soggetti” Per esempio Automobile, Cane o Persona Una classe è un tipo base da cui dichiarare elementi Per esempio Rex, Pluto e Lassie sono tutti elementi di Cane

3 3 Oggetti in C# - Lezione 1 Classi e istanze class Rectangle { int side1, side2; //lati del rettangolo } Utilizzo della classe { Rectangle R ; R = new Rectangle (); } Dichiarazione della classe La classe è un tipo di dato La creazione dell’oggetto è corretta La variabile di tipo classe è detta istanza

4 4 Oggetti in C# - Lezione 1 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 Variabile istanza È una variabile riferimento Ogni variabile punta a una 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.

5 5 Oggetti in C# - Lezione 1 Classi 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 interne alla classe sono detti attributi Le variabili interne sono private ovvero non raggiungibili dall’esterno L’accesso agli attributi è errato L’errore c’è perché gli attributi sono privati errore

6 6 Oggetti in C# - Lezione 1 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; } Le parti interne alla classe possono essere pubbliche o private Quelle pubbliche possono essere accessibili dall’esterno L’accesso al colore è corretto perché pubblico L’accesso ad attivo invece è errato, perché privato errore

7 7 Oggetti in C# - Lezione 1 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; } Se non si esplicita, si presuppone che le parti siano private Questo meccanismo è detto incapsulamento Di solito è preferibile nascondere parti all’esterno. Questo impedisce errori ed evita violazioni di accesso. Ci sono altri modi per accedere all’oggetto errore

8 8 Oggetti in C# - Lezione 1 Costruttori della classe class Rectangle { int side1, side2; public Rectangle() { //costruttore vuoto } Utilizzo della classe { Rectangle R ; R = new Rectangle (); } Una classe deve avere un costruttore Il costruttore serve per creare istanze della classe, ed ha il suo stesso nome Il costruttore si usa con l’operatore new Il costruttore alloca memoria per l’istanza e rende l’indirizzo

9 9 Oggetti in C# - Lezione 1 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; } Una classe può avere più costruttori I costruttori devono avere qualche differenza ma lo stesso nome Non è possibile usare l’istanza senza invocare prima il costruttore Il sistema avverte che non c’è nessuna struttura associata alla variabile errore

10 10 Oggetti in C# - Lezione 1 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); } Una classe può avere molti costruttori; si dice overload del costruttore. Overload vuole dire sovraccarico Una classe può avere molti costruttori; si dice overload del costruttore. Overload vuole dire sovraccarico Il sistema riconosce quale costruttore usare dai parametri Il secondo costruttore ha un parametro di tipo int

11 11 Oggetti in C# - Lezione 1 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 (); } È possibile avere costruttori privati Ma questo impedisce di essere invocati dall’esterno! Non è possibile usare l’istanza senza invocare prima il costruttore Ma se nessun costruttore è più pubblico ho problemi

12 12 Oggetti in C# - Lezione 1 Riepilogo Classe è un tipo di dato oggettoClasse è un tipo di dato oggetto Istanza è la variabile di tipo oggettoIstanza è la variabile di tipo oggetto Ogni classe ha un costruttore; se non esplicito il sistema ne associa uno in automaticoOgni classe ha un costruttore; se non esplicito il sistema ne associa uno in automatico Il costruttore serve per allocare memoria per le istanzeIl costruttore serve per allocare memoria per le istanze Il costruttore è omonimo della classeIl costruttore è omonimo della classe È possibile l’overload dei costruttoriÈ possibile l’overload dei costruttori Le parti dell’oggetto possono essere private o pubbliche; se non si specifica nessuna opzione si presuppone siano privateLe parti dell’oggetto possono essere private o pubbliche; se non si specifica nessuna opzione si presuppone siano private Il meccanismo di parti private è detto incapsulamentoIl meccanismo di parti private è detto incapsulamento

13 13 Oggetti in C# - Lezione 1 Esercizio Si dichiari una classe Vector che incapsula un vettore di interiSi dichiari una classe Vector che incapsula un vettore di interi Preparare un costruttore che inserisca in ogni cella uno stesso numero, passato per parametroPreparare un costruttore che inserisca in ogni cella uno stesso numero, passato per parametro Preparare un costruttore che inserisca in ogni cella un valore casualePreparare un costruttore che inserisca in ogni cella un valore casuale Scrivere un uso di sue istanzeScrivere un uso di sue istanze

14 14 Oggetti in C# - Lezione 1 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 ; Le istanze sono tipi riferimento; sono allocate nello heap L’assegnazione tra istanze implica la condivisione dei dati; l’assegnazione tra attributi non sempre x = 2 y = 3 R1 R2 R1 e R2 condividono lo stesso spazio; modificare una implica modificare l’altra 7

15 15 Oggetti in C# - Lezione 1 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 ; 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! x = 2 y = 3 R1 R2 7 x = 2 y = 3


Scaricare ppt "Oggetti in C# - Lezione 1 Oggetti in C# Lezione 1."

Presentazioni simili


Annunci Google