17 grudnia 2008
Spis treści I Enkapsulacja 1 Enkapsulacja 2
Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja interfejsu 4 Które metody są wirtualne? Które metody nie są wirtualne? Metody czysto wirtualne (C++) == Metody abstrakcyjne (Java) Odwołanie do implementacji w klasie nadrzędnej 5
Spis treści Enkapsulacja 1 Enkapsulacja 2 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja interfejsu 4 Które metody są wirtualne? Które metody nie są wirtualne? Metody czysto wirtualne (C++) == Metody abstrakcyjne (Java) Odwołanie do implementacji w klasie nadrzędnej 5
Jeden z paradygmatów programowania obiektowego, Ukrywanie implementacji, Zapewnia bezpieczenstwo danych, Chroni klasę przed nieprawidłowym działaniem.
Słowo kluczowe class składowe: pola (zmienne) metody (komunikaty lub funkcje) konstruktor (wywołany przy tworzeniu) finalize (opcjonalne, wywoływane przy czyszczeniu po klasie)
Prosta definicja klasy składającej się z pól i metod: class ProstaKlasa { /*ciało klasy*/ int pole=0;//pole String s = new String( Zainicjalizowany );//pole int getfield()//metoda { /*ciało metody*/ return pole;} };
Słowo kluczowe static : class ProstaKlasa { /*ciało klasy*/ int pole=0;//pole String s = new String( Zainicjalizowany );//pole int getfield();//metoda { /*ciało metody*/ return pole;} int static zmiennastatyczna=99; static void plus1(){prostaklasa.zmiennastatyczna++;} };
Sposoby odwoływania się: do zmiennej statycznej: ProstaKlasa k=new ProstaKlasa(); k.zmiennastatyczna; ProstaKlasa.zmiennaStatyczna; do metody statycznej: k.plus1(); ProstaKlasa.plus1();
Specyfikatory dostępu: public (publiczny) private (prywatny) package acces (pakietowy) protected (chroniony) Używany przed każdym obiektem, do którego ma się odnosić.
Metody dostępowe get i set i dlaczego należy na nie uważać Dostęp do pól posiadają metody i one wykonują na nich operacje. Stąd nazwa: accesors/mutators lub get/set. Ważne jest kontrolowanie dostępu do zmiennych prywatnych. Aby nie umożliwić zwykłego dostępu publicznego.
Konwencja zapisu w wersji uproszczonej: nazwa powinna być zapisana jako jedno słowo, poszczególne słowa w nazwie zaczynają sie od wielkiej litery, pierwsza litera nazwy klasy powinna byc wielka, pierwsza litera nazwy metody powinna być mała, nazwy nie powinny być za długie, stosować estetyczne wcięcia.
Spis treści Enkapsulacja 1 Enkapsulacja 2 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja interfejsu 4 Które metody są wirtualne? Które metody nie są wirtualne? Metody czysto wirtualne (C++) == Metody abstrakcyjne (Java) Odwołanie do implementacji w klasie nadrzędnej 5
class A { int pole1=0; public int getpole(){return pole1;} } class B extends A { int pole2=1; public int getpole(){return pole2;} public int getpole2(){return super.getpole();} public int getpole3(){return pole1;} }
dziedziczenie po klasie Object, brak wielokrotnego dziedziczenia, wystepuje wielokrotne dziedziczenie interfejsów, zaleta większe bezpieczeństwo, wada mniejsza elastyczność.
Co się dziedziczy? Wszystko oprócz konstruktorów klasy nadrzędnej. Zachodzi dzięki temu rzutowanie w górę. Klasa dziedzisząca ma dostęp do wszystkich pól i metod z specyfikatorami dostępu public i protected. Jeżeli dodatkowo znajduje się w tym samy pakiecie co klasa nadrzędna, posiada pola i etody bez specyfikatora dostępu.
Traci się dostęp do zmiennych bez specyfikatora dostępu. Jeżeli klasa dziedziczy po klasie w innym pakiecie otrzymuje dostęp do składowych protected. Wszyscy mają dostęp do public.
Jak zablokować możliwość? Słowo kluczowe final: wykorzystanie dla metod unimozliwie przesłanianie klasa Object posiada kilka metod finalnych. wykorzystanie dla klas: uniemożliwienie dalszego dziedziczenia blokuje dostep do zmiennych protected
Spis treści Enkapsulacja 1 Enkapsulacja 2 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja interfejsu 4 Które metody są wirtualne? Które metody nie są wirtualne? Metody czysto wirtualne (C++) == Metody abstrakcyjne (Java) Odwołanie do implementacji w klasie nadrzędnej 5 Jak definuje się interfejs?
Jak definiuje się interfejs? Jak definuje się interfejs? [ w i d o c z n o s c ] i n t e r f a c e N a z w a I n t e r f e j s u [ extends i n n e i n t e r f e j s y ] { TypZwracany nazwametody ( [ argumenty ] ) ;... }
Spis treści Enkapsulacja 1 Enkapsulacja 2 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja interfejsu 4 Które metody są wirtualne? Które metody nie są wirtualne? Metody czysto wirtualne (C++) == Metody abstrakcyjne (Java) Odwołanie do implementacji w klasie nadrzędnej 5
Spis treści Enkapsulacja 1 Enkapsulacja 2 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja interfejsu 4 Które metody są wirtualne? Które metody nie są wirtualne? Metody czysto wirtualne (C++) == Metody abstrakcyjne (Java) Odwołanie do implementacji w klasie nadrzędnej 5