Katedra Inżynierii Wiedzy laborki 7 i 8
Klasy abstrakcyjne klasa abstrakcyjna pozwala wymusić implementację metody; klasa oznaczona jest jako abstrakcyjna, jeżeli przynajmniej jedna metoda jest abstrakcyjna; nie można utworzyć instancji klasy abstrakcyjnej; metody abstrakcyjne nie zawierają kodu; klasa może zawierać metody oraz metody abstrakcyjne; klasa pochodna od klasy abstrakcyjnej może korzystać z metod jej klasy (słowo base).
Rysunek: Klasa abstrakcyjna
Rysunek: Klasa pochodna musi implementować metodę abstrakcyjną
Rysunek: Wywołanie metod z obiektu implementującego metody abstrakcyjne
Rysunek: Prosty interfejs
Rysunek: Dziedziczenie wielokrotne - 2 interfejsy
Rysunek: Dziedziczenie po interfejsie
Rysunek: Tworzymy prostą klasę
Rysunek: Użycie operatora is
Rysunek: Klasa implementująca interfejs
Rysunek: Sprawdzamy, czy jest to obiekt utworzony jako obiekt klasy implementującej wybrany interfejs
Zadanie 1 Przygotuj klasę abstrakcyjną Bryla posiadająca pole: nazwa. Dodatkowo klasa ta powinna posiadać abstrakcyną metody: ObliczObjetosc(), ObliczPowierzchnie(). Utwórz dwie klasy dziedziczące po powyższej klasie abstrakcyjnej: Szescian oraz Stozek. Szescian powinien zawierać dodatkowe pole: a oznaczające długość krawędzi. Natomiast Stozek powinien zawierać dodatkowe pola: wysokosc, promienpodstawy. Obydwie klasy powinny implementować metody ObliczObjetosc i ObliczPowierzchnie.
Zadanie 2 cz.1 Dana jest klasa Biblioteka zawierająca następujące pola: string nazwa, Pracownik kierownik oraz pole statyczne typu int zbior równe 23000. Dodatkowo klasa zawiera dwie tablice: Ksiazka[] ksiegozbior (o wielkości 23000); Ksiazka[] wypozyczone (o wielkości 1000). Klasa Pracownik dziedziczy po abstrakcyjnej klasie Osoba. Klasa Osoba zawiera pola: string imie, string nazwisko, int stazpracy, float pensja oraz konstruktor z czterema parametrami inicjalizującymi wszystkie pola klasy. Klasa Osoba zawiera abstrakcyjną metodę GodzinyPobytu() - która to powinna wypisywać godziny pobytu 8 16 jeżeli bieżący dzień miesiąca jest parzysty, lub 9 17 jeżeli bieżący dzień miesiąca jest nieparzysty. Dodatkowo w każdy ostatni dzień miesiąca 10 18 (skorzystaj z klasy DateTime i właściwości Now).
Zadanie 2 cz.2 Klasa Ksiazka zawiera pola: string autor, string tytul, int nrkatalogowy, string gatunek (tylko 3 możliwe, dowolne gatunki), bool wypozyczona (true oznacza, że książka jest wypożyczona). Klasa Biblioteka musi implementować interfejs isortuj zawierający dwie metody: WypiszPosortowane() oraz WypiszGatunkami(). WypiszPosortowane() powinno być metodą bez parametrów, która nie zwraca żadnej wartości, wypisującą na ekranie posortowany księgozbiór: sortujemy najpierw po autorze, potem po gatunku, na końcu po tytule (sortowanie po 3 kluczach jednocześnie). Natomiast WypiszGatunkami() powinno działać jak wyżej, ale umożliwiać sortowanie tylko i wyłącznie po gatunkach. Uwaga, w obydwu przypadkach sortujemy tylko książki, które nie są wypożyczone.
Zadanie 2 cz.3 Klasa Ksiazka powinna zawierać metodę void UstawJakoWypozyczona() - która zmienia pole wypozyczona na true. Natomiast klasa Biblioteka powinna zawierać metodę int UstawWypozyczone(int[] numery) - która dla ksiażek o numerach katalogowych takich, jak w tablicy numery zmienia wartości książek z tablicy ksiegozbior na wypożyczone oraz w tablicy wypozyczone dopisuje książki oznaczone wcześniej jako wypożyczone. Metoda zwraca 0, jeżeli wszystko przebiegło pomyślnie, lub -1 jeżeli w tablicy wypozyczone osiągnięto limit tysiąca wypożyczonych książek.
Zagadnienia na kolokwium definicja klasy, pola i metody klasy; użycie public, protected oraz private - w kontekście dziedziczenia; konstruktor domyślny, konstruktor z parametrami, konstruktor kopiujący; przesłanianie i przeciążanie metod; dziedziczenie; klasy abstrakcyjne; interfejsy i dziedziczenie wielokrotne.