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

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

Transcript of Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

Page 1: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

Oggetti in C# - Lezione 2

Oggetti in C#Oggetti in C#

Lezione 2Lezione 2

Page 2: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

22

Oggetti in C# - Lezione 2

Classi e metodiClassi e metodi class Rectangle

{

int side1, side2; //lati del rettangolo

public Rectangle(int x , int y)

{

side1 = x; side2 = y;

} public int Area()

{

return (side1 * side2) ;

}}

In una classe è In una classe è possibile definire possibile definire delle funzioni che delle funzioni che svolgono compiti svolgono compiti e/o calcolie/o calcoli

In una classe è In una classe è possibile definire possibile definire delle funzioni che delle funzioni che svolgono compiti svolgono compiti e/o calcolie/o calcoli

Le funzioni interne alla Le funzioni interne alla classe sono detti classe sono detti metodimetodi. Un . Un metodo può essere privato o metodo può essere privato o pubblico.pubblico.

Le funzioni interne alla Le funzioni interne alla classe sono detti classe sono detti metodimetodi. Un . Un metodo può essere privato o metodo può essere privato o pubblico.pubblico.

Page 3: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

33

Oggetti in C# - Lezione 2

{

Rectangle R = new Rectangle(4 , 5);

x = R.Area(); //invocazione del metodo

}

Classi e metodiClassi e metodi

Un metodo Un metodo pubblico può pubblico può essere invocato essere invocato dall’esterno a dall’esterno a partire dall’istanza partire dall’istanza

Un metodo Un metodo pubblico può pubblico può essere invocato essere invocato dall’esterno a dall’esterno a partire dall’istanza partire dall’istanza

L’invocazione richiede prima L’invocazione richiede prima il nome dell’istanza, seguito il nome dell’istanza, seguito da un punto e dal nome del da un punto e dal nome del metodometodo

L’invocazione richiede prima L’invocazione richiede prima il nome dell’istanza, seguito il nome dell’istanza, seguito da un punto e dal nome del da un punto e dal nome del metodometodo

Page 4: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

44

Oggetti in C# - Lezione 2

Classi e metodiClassi e metodi partial class Rectangle

{

int side1, side2;

public Rectangle(int x , int y)

{

side1 = x; side2 = y;

}

public int Area()

{

return (side1 * side2) ;

}

}

partial class Rectangle

{

public void Set(int x , int y)

{

side1 = x; side2 = y;

}

public double Diagonal()

{

double x Math.Pow(side1 , 2);

double y Math.Pow(side2 , 2);

return Math.Sqrt(x + y);

}

}

Se una classe è Se una classe è lunga da definire è lunga da definire è possibile spezzarla possibile spezzarla in parti con la in parti con la parola parola partialpartial

Se una classe è Se una classe è lunga da definire è lunga da definire è possibile spezzarla possibile spezzarla in parti con la in parti con la parola parola partialpartial

L’importante è L’importante è evitareevitare di di usare due volte lo stesso usare due volte lo stesso nome di attributo (darebbe nome di attributo (darebbe errore)errore)

L’importante è L’importante è evitareevitare di di usare due volte lo stesso usare due volte lo stesso nome di attributo (darebbe nome di attributo (darebbe errore)errore)

Page 5: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

55

Oggetti in C# - Lezione 2

Classi e metodiClassi e metodi partial class Rectangle

{

public Boolean IsSquare()

{

if (side1 == side2)

return true;

else return false;

}

public Rectangle(int side)

{

side1 = side;

side2 = side;

}

}

Utilizzo dei metodi

{

. . .

Rectangle R1, R2 ;

R1 = new Rectangle(4,5);

int a = R1.Area();

double d = R1.Diagonal();

R1.Set(8 , 12);

R2 = new Rectangle(3);

if (R2.IsSquare())

r = 0;

. . .

}

Quando una classe Quando una classe definisce dei definisce dei metodi pubblici è metodi pubblici è possibile possibile invocarliinvocarli dall’istanza.dall’istanza.

Quando una classe Quando una classe definisce dei definisce dei metodi pubblici è metodi pubblici è possibile possibile invocarliinvocarli dall’istanza.dall’istanza.

Prima occorre istanziare con Prima occorre istanziare con un costruttore e poi si può un costruttore e poi si può invocare un metodo di invocare un metodo di istanzaistanza..

Prima occorre istanziare con Prima occorre istanziare con un costruttore e poi si può un costruttore e poi si può invocare un metodo di invocare un metodo di istanzaistanza..

Page 6: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

66

Oggetti in C# - Lezione 2

RiepilogoRiepilogo• Una classe può avere costruttori, attributi Una classe può avere costruttori, attributi

e metodie metodi• Gli attributi sono i dati dell’oggettoGli attributi sono i dati dell’oggetto• I metodi sono i comportamenti I metodi sono i comportamenti

dell’oggettodell’oggetto• Metodi e attributi possono essere sia Metodi e attributi possono essere sia

pubblici che privatipubblici che privati• I metodi pubblici possono I metodi pubblici possono

essere invocati dall’esternoessere invocati dall’esterno• Per invocare un metodo si scrive il nome Per invocare un metodo si scrive il nome

dell’istanza, seguito dal punto, seguito dal dell’istanza, seguito dal punto, seguito dal nome del metodo (ed eventuali nome del metodo (ed eventuali argomenti)argomenti)

Page 7: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

77

Oggetti in C# - Lezione 2

SuggerimentiSuggerimenti

• In una buona programmazione per In una buona programmazione per oggetti oggetti gli attributigli attributi di una classe di una classe saranno privatisaranno privati

• Si definiranno qindi Si definiranno qindi metodi pubblicimetodi pubblici per l’accesso in per l’accesso in letturalettura e e scritturascrittura

• La classe fornirà poi La classe fornirà poi costruttoricostruttori pubblicipubblici e altri e altri metodi pubblicimetodi pubblici per per poterla rendere fruibile poterla rendere fruibile dall’esternodall’esterno

Page 8: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

88

Oggetti in C# - Lezione 2

EsercizioEsercizio• Si dichiari una classe Quadrato che Si dichiari una classe Quadrato che

abbia il lato come attributo privatoabbia il lato come attributo privato• Definire un costruttore che prepari il lato Definire un costruttore che prepari il lato

del quadrato scelto dall’esternodel quadrato scelto dall’esterno• Definire i metodi per leggere e scrivere il Definire i metodi per leggere e scrivere il

lato del quadratolato del quadrato• Definire i metodi opportuni per ottenere Definire i metodi opportuni per ottenere

l’area, il perimetro e la diagonalel’area, il perimetro e la diagonale• Definire dei metodi per raddoppiare e Definire dei metodi per raddoppiare e

per dimezzare il lato del quadratoper dimezzare il lato del quadrato

Page 9: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

99

Oggetti in C# - Lezione 2

Soluzione dellSoluzione dell’’esercizioesercizioclass Square class Square {{

private double side ;private double side ;

public public SquareSquare (double x) (double x) { {

//costruttore pubblico//costruttore pubblico

side = x;side = x;

}}

public public SetSet (double x) (double x) { {

//metodo pubblico scrittura//metodo pubblico scrittura

side = x;side = x;

}}

public double public double GetGet () () { {

//metodo pubblico lettura//metodo pubblico lettura

return side ;return side ;

}}

public double public double AreaArea () () { {

//metodo pubblico//metodo pubblico

return side * side ;return side * side ;

}}

public double public double PerimeterPerimeter () () { {

//metodo pubblico//metodo pubblico

return 4 * side ;return 4 * side ;

}}

public double public double DiagonalDiagonal () () { {

//metodo pubblico//metodo pubblico

double d = 2 * side * side ;double d = 2 * side * side ;

return Math.Sqrt(d) ;return Math.Sqrt(d) ;

}}

public public Stretch Stretch () () { {

//metodo pubblico//metodo pubblico

side = 0.5 * side ;side = 0.5 * side ;

}}

public public Grow Grow () () { {

//metodo pubblico//metodo pubblico

side = 2 * side ;side = 2 * side ;

}}

}//fine classe}//fine classe

Page 10: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

1010

Oggetti in C# - Lezione 2

EsercizioEsercizio• Si dichiari una classe Rettangolo che Si dichiari una classe Rettangolo che

abbia due lati come attributi privatiabbia due lati come attributi privati• Definire un costruttore che prepari i lati Definire un costruttore che prepari i lati

del rettangolo con parametri del rettangolo con parametri • Definire i metodi per leggere e scrivere i Definire i metodi per leggere e scrivere i

lati del rettangololati del rettangolo• Definire i metodi opportuni per ottenere Definire i metodi opportuni per ottenere

l’area, il perimetro e la diagonalel’area, il perimetro e la diagonale• Definire un metodo che dice se un Definire un metodo che dice se un

rettangolo è un quadrato (ha ii due lati rettangolo è un quadrato (ha ii due lati uguali)uguali)

Page 11: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

1111

Oggetti in C# - Lezione 2

OsservazioneOsservazioneIn alcuni casi puoi notare che il metodo si invoca a In alcuni casi puoi notare che il metodo si invoca a

partire dall’istanza, come abbiamo visto prima:partire dall’istanza, come abbiamo visto prima:• int a = R1.Area();int a = R1.Area();• double d = R1.Diagonal();double d = R1.Diagonal();• R1.Set(8 , 12);R1.Set(8 , 12);• R2.IsSquare();R2.IsSquare();

In altri casi però si invoca il metodo direttamente In altri casi però si invoca il metodo direttamente dalla classe, come nel caso di:dalla classe, come nel caso di:

• Math.Sqrt(18);Math.Sqrt(18);

Queste due invocazioni sono MOLTO DIVERSEQueste due invocazioni sono MOLTO DIVERSEI primi si riferiscono a metodi di istanzaI primi si riferiscono a metodi di istanzaI secondi si riferiscono a metodi di classeI secondi si riferiscono a metodi di classe

Page 12: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

1212

Oggetti in C# - Lezione 2

Metodi Metodi staticistaticiclass Rectangle

{

int side1, side2;

static int num = 0;

public Rectangle()

{

num++;

}

public int Area()

{

return (side1 * side2) ;

}

static public int Count()

{

return num ;

}

}

Utilizzo dei metodi

{

Rectangle R1, R2 ;

int a = Rectangle.Count();

//renderà zero

R2 = new Rectangle();

int a = Rectangle.Count();

//renderà uno

R2.Rectangle.Count();

//errore di compilazione

. . .

}

Una classe può Una classe può definire metodi ed definire metodi ed attributi di istanza attributi di istanza oppure oppure staticistatici (detti (detti anche di classe). . . anche di classe). . .

Una classe può Una classe può definire metodi ed definire metodi ed attributi di istanza attributi di istanza oppure oppure staticistatici (detti (detti anche di classe). . . anche di classe). . .

I I metodi staticimetodi statici si invocano a si invocano a partire dalla classe e NON partire dalla classe e NON dall’istanza; anche gli dall’istanza; anche gli attributi si accedono dalla attributi si accedono dalla classeclasse

I I metodi staticimetodi statici si invocano a si invocano a partire dalla classe e NON partire dalla classe e NON dall’istanza; anche gli dall’istanza; anche gli attributi si accedono dalla attributi si accedono dalla classeclasse

Page 13: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

1313

Oggetti in C# - Lezione 2

Attributi Attributi staticistaticiclass Circle

{

private static int radius = 0;

public static int HowMany;

public const double PIGRECO = 3.14;

public Circle()

{

num++;

}

public int Area()

{

return PIGRECO * (radius * radius ) ;

}

}

Gli attributi statici sono dati che appartengono alla classe e NON alle istanze

È possibile accedervi a partire dal nome della classe stessa, purché pubblico

Per esempio:int i = Rectangle.HowMany ;

È possibile accedervi in scrittura, purché pubblico

Per esempio:int Rectangle.HowMany = i ;

Un attributo costante è sempre statico ed è accessibile solo in lettura int i = Rectangle.PIGRECO ;

Oltre ai metodi ci Oltre ai metodi ci sono gli attributi sono gli attributi statici (o di classe); statici (o di classe);

Oltre ai metodi ci Oltre ai metodi ci sono gli attributi sono gli attributi statici (o di classe); statici (o di classe);

Anche gli attributi si Anche gli attributi si accedono dalla classe; le accedono dalla classe; le costanti sono casi particolari costanti sono casi particolari di attributi statici, invariantidi attributi statici, invarianti

Anche gli attributi si Anche gli attributi si accedono dalla classe; le accedono dalla classe; le costanti sono casi particolari costanti sono casi particolari di attributi statici, invariantidi attributi statici, invarianti

Page 14: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

1414

Oggetti in C# - Lezione 2

Classi Classi statichestatichepublic static class MathClass

{

public const double PIGRECO = 3.14;

public const double NEPERO = 2,71828182845904523536 ;

static public double Sin(double x)

{

. . .

}

static public double Log(double x)

{

. . .

}

static public double Sqrt(double x)

{

. . .

}

}

Utilizzo dei metodi

{

MathClass R1, R2 ;

double d = MathClass.PIGRECO;

double e = MathClass.NEPERO;

double z = MathClass.Sin(3.14) ;

double y = MathClass.Log(1) ;

double r = MathClass.Sqrt(9) ;

}

Una classe Una classe statica ammette statica ammette solo attributi e solo attributi e metodi staticimetodi statici

Una classe Una classe statica ammette statica ammette solo attributi e solo attributi e metodi staticimetodi statici

Una classe statica Una classe statica viene usata senza viene usata senza invocare costruttori, invocare costruttori, peraltro inutili. . . peraltro inutili. . .

Una classe statica Una classe statica viene usata senza viene usata senza invocare costruttori, invocare costruttori, peraltro inutili. . . peraltro inutili. . .

inutileinutile

Page 15: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

1515

Oggetti in C# - Lezione 2

Parola riservata Parola riservata thisthis class Rectangle {

int x, y ; //lati del rettangolo

public Rectangle(int x)

{

x = x;

y = x;

} public Rectangle(int x , int y)

{

this.x = x;

this.y = y;

}}

Talvolta è Talvolta è utile utile specificare specificare quandosi quandosi usano gli usano gli attributi; la attributi; la parola this parola this vuol dire vuol dire QUESTA QUESTA ISTANZAISTANZA

Talvolta è Talvolta è utile utile specificare specificare quandosi quandosi usano gli usano gli attributi; la attributi; la parola this parola this vuol dire vuol dire QUESTA QUESTA ISTANZAISTANZA

Con this è possibile accedere Con this è possibile accedere a attributi (NON statici) a attributi (NON statici) nonostante la copertura di nonostante la copertura di visibilità . . . visibilità . . .

Con this è possibile accedere Con this è possibile accedere a attributi (NON statici) a attributi (NON statici) nonostante la copertura di nonostante la copertura di visibilità . . . visibilità . . .

Per esempio, qui si Per esempio, qui si confondono i parametri confondono i parametri con gli attributi; con gli attributi; il il parametro x copre in parametro x copre in visibilità l’attributovisibilità l’attributo

Per esempio, qui si Per esempio, qui si confondono i parametri confondono i parametri con gli attributi; con gli attributi; il il parametro x copre in parametro x copre in visibilità l’attributovisibilità l’attributo

Page 16: Oggetti in C# - Lezione 2 Oggetti in C# Lezione 2.

1616

Oggetti in C# - Lezione 2

EsercizioEsercizio• Si dichiari una classe Vector che incapsula un Si dichiari una classe Vector che incapsula un

privato vettore di interiprivato vettore di interi• Preparare un costruttore che istanzi il vettore Preparare un costruttore che istanzi il vettore

con un certo numero di celle (parametro) con un certo numero di celle (parametro) ciascuna inizializzata con un valore casualeciascuna inizializzata con un valore casuale

• Preparare i metodi per restituire massimo, Preparare i metodi per restituire massimo, minimo e media dei valori del vettoreminimo e media dei valori del vettore

• Preparare un metodo che dica quanto è lungo il Preparare un metodo che dica quanto è lungo il vettore vettore

• Preparare un altro costruttore che assegna ad Preparare un altro costruttore che assegna ad ogni cella il medesimo valore preso come ogni cella il medesimo valore preso come parametroparametro

• Preparare un metodo che dica se il vettore è Preparare un metodo che dica se il vettore è stato istanziato oppure no (usare un nuovo stato istanziato oppure no (usare un nuovo attributo tipo bool per saperlo)attributo tipo bool per saperlo)