Oggetti in C#
Lezione 2
Oggetti in C# - Lezione 2
Classi e metodi
2
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 è
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
Classi e metodi
3
{
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
Classi e metodi
4
partial class Rectangle
{
int side1, side2;
public Rectangle(int x , int y)
{
side1 = x; side2 = y;
}
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);
}
public int Area()
{
return (side1 * side2) ;
}
}
}
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
Classi e metodi
5
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
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
Riepilogo
6
• 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
Suggerimenti
7
• 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
Esercizio
8
• 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
Soluzione dell’esercizio
9
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 * 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
Esercizio
10
• 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
Osservazione
11
In alcuni casi puoi notare che il metodo si invoca a
partire dall’istanza, come abbiamo visto prima:
• int a = R1.Area();
• double d = R1.Diagonal();
• R1.Set(8 , 12);
• R2.IsSquare();
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
Metodi statici
12
class Rectangle
{
int side1, side2;
static int num = 0;
public Rectangle()
{
num++;
}
public int Area()
{
return (side1 * side2) ;
}
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 R1, R2 ;
int a = Rectangle.Count();
//renderà zero
R2 = new Rectangle();
int a = Rectangle.Count();
//renderà uno
R2.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
Attributi statici
13
class 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 ) ;
}
}
Oltre ai metodi ci
sono gli attributi
statici (o di classe);






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 ;
Anche gli attributi si accedono
dalla classe; le costanti sono casi
particolari di attributi statici,
invarianti
Oggetti in C# - Lezione 2
Classi statiche
14
public 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)
{
Una classe statica
. . .
ammette solo
}
attributi e metodi
}
statici
Utilizzo dei metodi
{
MathClass R1, R2 ;
inutile
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 statica viene
usata senza invocare
costruttori, peraltro
inutili. . .
Oggetti in C# - Lezione 2
Parola riservata this
15
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
Esercizio
16
• 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
Scarica

metodi