Oggetti in C Lezione 2 Oggetti in C

  • Slides: 16
Download presentation
Oggetti in C# Lezione 2 Oggetti in C# - Lezione 2

Oggetti in C# Lezione 2 Oggetti in C# - Lezione 2

2 Classi e metodi class Rectangle { int side 1, side 2; //lati del

2 Classi e metodi class Rectangle { int side 1, side 2; //lati del rettangolo public Rectangle(int x , int y) { side 1 = x; side 2 = y; } public int Area() { return (side 1 * side 2) ; } } In una classe è possibile definire delle funzioni che svolgono compiti e/o calcoli Le funzioni interne alla classe sono detti metodi. Un metodo può essere privato o pubblico. Oggetti in C# - Lezione 2

3 Classi e metodi { Rectangle R = new Rectangle(4 , 5); x =

3 Classi e metodi { Rectangle R = new Rectangle(4 , 5); x = R. Area(); //invocazione del metodo } Un metodo pubblico può essere invocato dall’esterno a partire dall’istanza L’invocazione richiede prima il nome dell’istanza, seguito da un punto e dal nome del metodo Oggetti in C# - Lezione 2

4 Classi e metodi partial class Rectangle { int side 1, side 2; partial

4 Classi e metodi partial class Rectangle { int side 1, side 2; partial class Rectangle { public void Set(int x , int y) { side 1 = x; side 2 = y; } public Rectangle(int x , int y) { side 1 = x; side 2 = y; } public double Diagonal() { double x Math. Pow(side 1 , 2); double y Math. Pow(side 2 , 2); return Math. Sqrt(x + y); } public int Area() { return (side 1 * side 2) ; } } } Se una classe è lunga da definire è possibile spezzarla in parti con la parola partial L’importante è evitare di usare due volte lo stesso nome di attributo (darebbe errore) Oggetti in C# - Lezione 2

5 Classi e metodi partial class Rectangle { public Boolean Is. Square() { if

5 Classi e metodi partial class Rectangle { public Boolean Is. Square() { if (side 1 == side 2) return true; else return false; } public Rectangle(int side) { side 1 = side; side 2 = side; } Utilizzo dei metodi {. . . Rectangle R 1, R 2 ; R 1 = new Rectangle(4, 5); int a = R 1. Area(); double d = R 1. Diagonal(); R 1. Set(8 , 12); R 2 = new Rectangle(3); if (R 2. Is. Square()) r = 0; . . . } } Quando una classe definisce dei metodi pubblici è possibile invocarli dall’istanza. Prima occorre istanziare con un costruttore e poi si può invocare un metodo di istanza. Oggetti in C# - Lezione 2

6 Riepilogo • Una classe può avere costruttori, attributi e metodi • Gli attributi

6 Riepilogo • Una classe può avere costruttori, attributi e metodi • Gli attributi sono i dati dell’oggetto • I metodi sono i comportamenti dell’oggetto • Metodi e attributi possono essere sia pubblici che privati • I metodi pubblici possono essere invocati dall’esterno • Per invocare un metodo si scrive il nome dell’istanza, seguito dal punto, seguito dal nome del metodo (ed eventuali argomenti) Oggetti in C# - Lezione 2

7 Suggerimenti • In una buona programmazione per oggetti gli attributi di una classe

7 Suggerimenti • In una buona programmazione per oggetti gli attributi di una classe saranno privati • Si definiranno qindi metodi pubblici per l’accesso in lettura e scrittura • La classe fornirà poi costruttori pubblici e altri metodi pubblici per poterla rendere fruibile dall’esterno Oggetti in C# - Lezione 2

8 Esercizio • Si dichiari una classe Quadrato che abbia il lato come attributo

8 Esercizio • Si dichiari una classe Quadrato che abbia il lato come attributo privato • Definire un costruttore che prepari il lato del quadrato scelto dall’esterno • Definire i metodi per leggere e scrivere il lato del quadrato • Definire i metodi opportuni per ottenere l’area, il perimetro e la diagonale • Definire dei metodi per raddoppiare e per dimezzare il lato del quadrato Oggetti in C# - Lezione 2

9 Soluzione dell’esercizio class Square { private double side ; public Square (double x)

9 Soluzione dell’esercizio class Square { private double side ; public Square (double x) { //costruttore pubblico side = x; } public Set (double x) { //metodo pubblico scrittura side = x; } public double Get () { //metodo pubblico lettura return side ; } public double Area () { //metodo pubblico return side * side ; } public double Perimeter () { //metodo pubblico return 4 * side ; } public double Diagonal () { //metodo pubblico double d = 2 * side ; return Math. Sqrt(d) ; } public Stretch () { //metodo pubblico side = 0. 5 * side ; } public Grow () { //metodo pubblico side = 2 * side ; } }//fine classe Oggetti in C# - Lezione 2

10 Esercizio • Si dichiari una classe Rettangolo che abbia due lati come attributi

10 Esercizio • Si dichiari una classe Rettangolo che abbia due lati come attributi privati • Definire un costruttore che prepari i lati del rettangolo con parametri • Definire i metodi per leggere e scrivere i lati del rettangolo • Definire i metodi opportuni per ottenere l’area, il perimetro e la diagonale • Definire un metodo che dice se un rettangolo è un quadrato (ha ii due lati uguali) Oggetti in C# - Lezione 2

11 Osservazione In alcuni casi puoi notare che il metodo si invoca a partire

11 Osservazione In alcuni casi puoi notare che il metodo si invoca a partire dall’istanza, come abbiamo visto prima: • int a = R 1. Area(); • double d = R 1. Diagonal(); • R 1. Set(8 , 12); • R 2. Is. Square(); In altri casi però si invoca il metodo direttamente dalla classe, come nel caso di: • Math. Sqrt(18); Queste due invocazioni sono MOLTO DIVERSE I primi si riferiscono a metodi di istanza I secondi si riferiscono a metodi di classe Oggetti in C# - Lezione 2

12 Metodi statici class Rectangle { int side 1, side 2; static int num

12 Metodi statici class Rectangle { int side 1, side 2; static int num = 0; public Rectangle() { num++; } public int Area() { return (side 1 * side 2) ; } static public int Count() { return num ; } } Una classe può definire metodi ed attributi di istanza oppure statici (detti anche di classe). . . Utilizzo dei metodi { Rectangle R 1, R 2 ; int a = Rectangle. Count(); //renderà zero R 2 = new Rectangle(); int a = Rectangle. Count(); //renderà uno R 2. Rectangle. Count(); //errore di compilazione. . . } I metodi statici si invocano a partire dalla classe e NON dall’istanza; anche gli attributi si accedono dalla classe Oggetti in C# - Lezione 2

13 Attributi statici class Circle { private static int radius = 0; public static

13 Attributi statici class Circle { private static int radius = 0; public static int How. Many; public const double PIGRECO = 3. 14; public Circle() { num++; } public int Area() { return PIGRECO * (radius * radius ) ; } } Oltre ai metodi ci sono gli attributi statici (o di classe); v Gli attributi statici sono dati che appartengono alla classe e NON alle istanze v È possibile accedervi a partire dal nome della classe stessa, purché pubblico v Per esempio: int i = Rectangle. How. Many ; v È possibile accedervi in scrittura, purché pubblico v Per esempio: int Rectangle. How. Many = i ; v Un attributo costante è sempre statico ed è accessibile solo in lettura int i = Rectangle. PIGRECO ; Anche gli attributi si accedono dalla classe; le costanti sono casi particolari di attributi statici, invarianti Oggetti in C# - Lezione 2

14 Classi statiche public static class Math. Class { public const double PIGRECO =

14 Classi statiche public static class Math. Class { public const double PIGRECO = 3. 14; public const double NEPERO = 2, 7182845904523536 ; static public double Sin(double x) {. . . } static public double Log(double x) {. . . } static public double Sqrt(double x) { Una classe statica. . . ammette solo } attributi e metodi } statici Utilizzo dei metodi { Math. Class R 1, R 2 ; inutile double d = Math. Class. PIGRECO; double e = Math. Class. NEPERO; double z = Math. Class. Sin(3. 14) ; double y = Math. Class. Log(1) ; double r = Math. Class. Sqrt(9) ; } Una classe statica viene usata senza invocare costruttori, peraltro inutili. . . Oggetti in C# - Lezione 2

15 Parola riservata this class Rectangle { int x, y ; //lati del rettangolo

15 Parola riservata this class Rectangle { int x, y ; //lati del rettangolo public Rectangle(int x) { x = x; y = x; } Per esempio, qui si confondono i parametri con gli attributi; il parametro x copre in visibilità l’attributo Talvolta è utile specificare quandosi usano gli attributi; la parola this vuol dire QUESTA ISTANZA public Rectangle(int x , int y) { this. x = x; this. y = y; } Con this è possibile accedere a attributi (NON statici) nonostante la copertura di visibilità. . . } Oggetti in C# - Lezione 2

16 Esercizio • Si dichiari una classe Vector che incapsula un privato vettore di

16 Esercizio • Si dichiari una classe Vector che incapsula un privato vettore di interi • Preparare un costruttore che istanzi il vettore con un certo numero di celle (parametro) ciascuna inizializzata con un valore casuale • Preparare i metodi per restituire massimo, minimo e media dei valori del vettore • Preparare un metodo che dica quanto è lungo il vettore • Preparare un altro costruttore che assegna ad ogni cella il medesimo valore preso come parametro • Preparare un metodo che dica se il vettore è stato istanziato oppure no (usare un nuovo attributo tipo bool per saperlo) Oggetti in C# - Lezione 2