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