Temat: Tworzenie obiektu. Definiowanie pól klasy. Hermetyzacja

Transkrypt

Temat: Tworzenie obiektu. Definiowanie pól klasy. Hermetyzacja
Temat: Tworzenie obiektu. Definiowanie pól klasy. Hermetyzacja.
Elementy
statyczne
klasy.
Inicjalizacja
obiektu
-
konstruktory klasy.
1. Tworzenie obiektu
Powstanie nowej instancji (obiektu) pewnej klasy nast puje po wywołanie operatora
new na rzecz referencji do obiektu tej e klasy.
1
class Klasa {
...............
}
// Deklaracja referencji.
Klasa zmienna;
// Obiektu nie ma jeszcze w pami ci.
zmienna=new Klasa(); // Powstanie obiektu (instancji )
// klasy Klasa
2. Definiowanie pól klasy
•
W ciele klasy zawarte s definicje metod i pól. Definicja pola ma nast puj c
posta ogóln :
[modyfikatory]
•
Pola klasy mog
typ_pola
identyfikator_pola;
by , tak jak metody, zdefiniowane z modyfikatorami:
private, protected, public, static. Ponadto, pola klasy mog by typu const
lub readonly.
•
Pole klasy mo e mie nadan warto
przy okazji definicji tego pola.
Przykład 1
Definicja pola klasy
class K{
int x=10;
// definicja pola x klasy K
void f()
//definicja metody f klasy K
{
Console.WriteLine("Wywołanie metody f");
x = 2;
}
}
2
• Pola typu readonly po pierwszym ustawieniu nie mog by zmienione.
Ustawienie warto ci danych typu readonly odbywa si w trakcie wykonania
programu.
• Dane typu const
po pierwszym ustawieniu nie mog
by
zmienione.
Ustawienie warto ci danych typu const odbywa si w trakcie kompilacji
programu.
• Dane typu readonly i const s domy lnie ustawione na zero, false albo null.
• Dane typu readonly mog by ustawiane jawnie przy ich definicji w klasie
albo w konstruktorze (Poj cie konstruktora b dzie wyja nione w dalszej cz ci
wykładu).
• Dane typu const musz by ustawiane przy ich definicji.
Przykład 2
class Test{
readonly int a=10;
readonly int c;
const int b=20;
const int d; // bł d !!!
public void f()
{
c=5;
d=10; // bł d !!!
a=5; // bł d !!!
b=100; // bł d !!!
}
3
}
3. Hermetyzacja
Czas wyja ni znaczenie modyfikatorów dost pu private i public. Znaczenie
modyfikatora protected poznamy na kolejnym wykładzie.
Modyfikatory dost pu s
wa ne tylko wtedy, gdy w programie jest
zdefiniowana wi cej ni jedna klasa, gdy okre laj one dost p do elementów
zdefiniowanych w jednej klasie z poziomy innej klasy.
•
Je eli pole x klasy K jest typu private to ma do tego pola dost p (mo e u ywa
tego pola) ka da metoda klasy K.
adna z metod spoza klasy K nie ma
dost pu do pola x.
O polu typu private mówimy, e jest prywatnym polem klasy.
•
Je eli pole x klasy K jest typu public to ma do tego pola dost p (mo e u ywa
tego pola) ka da metoda klasy K i dodatkowo ka da metoda spoza klasy K.
O polu typu public mówimy, e jest publicznym polem klasy K.
•
Je eli metoda f klasy K jest typu private to mo e j wywoła ka da metoda
klasy K. adna z metod spoza klasy K nie mo e wywoła metody f.
O metodzie typu private mówimy, e jest prywatn metod klasy K.
•
Je eli metoda f klasy K jest typu public, to mo e j wywoła ka da metoda
klasy K i dodatkowo ka da metoda spoza klasy K. O metodzie typu public
mówimy, e jest publiczn metod klasy K.
4
Przykład 3
Dost p do publicznych elementów klasy
class K{
public int x;
public void f()
{
Console.WriteLine("Wywołanie metody f");
x = 2;
}
}
class Program{
static void Main()
{
K O=new K();
O.x=5;// dost p do publicznego pola x z obiektu O
O.f();// wywołanie publicznej metody f na rzecz O
f(); // bł d !!!
x = 2;
// bł d !!!
}
}
Przykład 4
Dost p do prywatnych elementów klasy
class K{
private int x;
private void f()
{
Console.WriteLine("Wywołanie metody f");
x = 2;
}
}
class Program{
static void Main()
{
K O=new K();
O.x=2; // bł d !!!
O.f(); // bł d !!!
f(); // bł d !!!
x = 2;
// bł d !!!
}
5
}
• Modyfikator private jest domy lny, czyli je eli w definicji metody lub pola
nie wyst puje aden modyfikator dost pu, wówczas pole to lub metoda jest
prywatne.
Pytanie:
Po co ukrywa (czyli stosowa modyfikator private) pola i
metody klasy?
Odpowied :
W celu ochrony danych i metod klasy przed dost pem przez
nieupowa nion metod innej klasy. Hermetyzacja (enkapsulacja)
jest kontrolowanym dost p do danych i procesów zamkni tych w
klasie. Kontrola dost pu jest realizowana poprzez publiczne
metody, które
w swojej realizacji sprawdzaj
poprawno
dost pu do danych i metod prywatnych.
Przykład 5
Enkapsulacja
class Pralka{
private int temperatura;
public void UstawTemperature(int t)
{
if (t > 30 && t <= 100) temperatura = t;
else temperatura = 30;
}
}
class Program{
static void Main()
{
Pralka P=new Pralka();
P.temperatura=200; // bł d !!!
P.UstawTemperature(200);
P.UstawTemperature(60);
}
}}
6
4. Statyczne elementy klasy
Znaczenie słowa static:
•
Je eli pole x jest zdefiniowane w klasie K z modyfikatorem static, to poza
klas mo e by ono u yte na rzecz klasy K, o ile dodatkowo pole to jest
publiczne.
•
Je eli metoda f jest zdefiniowana w klasie K z modyfikatorem static, to poza
klas mo e by ona wywołana na rzecz klasy K, o ile dodatkowo jest to
metoda publiczna.
•
Je eli pole x nie jest zdefiniowane w klasie K z modyfikatorem static, to poza
klas mo e by ono u yte na rzecz obiektu klasy K, o ile dodatkowo pole to
jest publiczne.
•
Je eli metoda f nie jest zdefiniowana w klasie K z modyfikatorem static, to
poza klas mo e by wywołana na rzecz obiektu klasy K, o ile dodatkowo jest
to metoda publiczna.
•
Wła cicielem składników statycznych klasy jest klasa, a składników
niestatecznych obiekty tej klasy.
Przykład 6
Dost p do publicznych statycznych elementów klasy
class K{
public static int x;
public static void f()
{
Console.WriteLine("Wywołanie metody f");
x = 2;
}
}
class Program{
static void Main()
7
{
K.x=5; // dost p do publicznego statycznego pola x
K.f(); // wywołanie publicznej statycznej metody f
f(); // bł d !!!
x = 2;
// bł d !!!
}
}
Przykład 7
Dost p do prywatnych statycznych elementów klasy
class K{
private static int x;
private static void f()
{
Console.WriteLine("Wywołanie metody f");
x = 2;
}
}
class Program{
static void Main()
{
K.x=2; // bł d !!!
K.f(); // bł d !!!
f(); // bł d !!!
x = 2;
// bł d !!!
}
}
5.
Inicjalizacja obiektu – konstruktory klasy
• Konstruktory s specjalnymi metodami, które inicjalizuj obiekty, kiedy
te powstaj .
• Nawet je eli w klasie nie zostanie zadeklarowany jawnie konstruktor, to
wygenerowany zostanie dla tej klasy konstruktor domy lny.
• Konstruktor to metoda, która wywołuje si
automatycznie, kiedy
wywoływany jest operator new.
8
Własno ci konstruktora :
• jest metod publiczn ,
• nazywa si tak samo jak klasa,
• jest zawsze typu void, ale słowa void nie piszemy
Przykład 8
Klasa z konstruktorem
class Konto{
double stan;
void Wplata(double ile)
{
if (ile>0) stan+=ile;
}
void Wyplata(double ile)
{
if (stan-ile>0) stan-=ile;
else if (ile>0) stan-=stan;
}
public Konto( )
{
stan=0;
}
static void Main()
{
Konto K =new Konto( ); // wywołanie konstruktora
}
9
• Konstruktor domy lny to konstruktor bez parametrów.
• Niezdefiniowany konstruktor domy lny ustawia dane składowe na zero,
false albo null.
• Je eli ustawienia domy lne automatycznie wygenerowanego konstruktora
domy lnego nie s odpowiednie, to nale y go zdefiniowa jawnie.
• Konstruktor domy lny inicjalizuje tylko niestatyczne dane składowe.
Przykład 9
Konstruktor domy lny
class Data
{
private int rok, mc, dd;
}
class Test
{
static void Main( )
{
Data kiedy = new Data( ); // wywołanie niejawnego
// konstruktora
// domy lnego
}
}
10
• Konstruktory s metodami, które mo na przeci a .
• Konstruktory przeci one maj te same nazwy i ró ne sygnatury.
• Dzi ki konstruktorom domy lnym mo na inicjalizowa obiekty ró nymi
sposobami
• Je eli w klasie jest zdefiniowany konstruktor, to kompilator nie generuje
konstruktora domy lnego
Przykład 10
Przeci anie konstruktorów
class Przeciazanie
{
public Przeciazanie() { }
public Przeciazanie(int x) {
}
static void Main()
{
Przeciazanie first = new Przeciazanie();
Przeciazanie second = new Przeciazanie(42);
}
}
11

Podobne dokumenty