Języki programowania

Transkrypt

Języki programowania
Języki programowania
Laboratorium 3
6 listopada 2016
1
Cel ćwiczenia
Ćwiczenie ma na celu utrwalenie umiejętności tworzenia klas oraz zapoznanie
się z podstawowymi mechanizmami obiektowymi jak dziedziczenie klas oraz implementacja interfejsów. Ponadto przedstawione zostaną podstawowe informacje dotyczące modelowania klas z wykorzystaniem języka UML (podsumowanie
w pliku legenda.pdf).
2
Symulacja przyrody
Tematem jest prosta aplikacja konsolowa, która za pomocą zestawu kilkunastu
klas symuluje kilka dni z życia pewnego ekosystemu, w którym żyją rośliny
oraz zwierzęta zarówno roślinożerne jak i mięsożerne o określonych preferencjach
żywieniowych. Pliki wiekszości klas dostępne są na stronie. Klasy i interfejsy są
następujące (wszystkie są w pakiecie symulacja, diagram klas UML w pliku
diagram.pdf):
Aplikacja Podstawowa klasa. Zawiera metodę main(), która tworzy Swiat i symuluje 10 kolejnych dni.
Swiat Klasa, która przechowuje globalny poziom nasłonecznienia oraz listę organizmów i listę obszarów (ściślej są to listy referencji na odpowiednie
obiekty). Zapewnia także spójny generator liczb losowych dla pozostałych
klas. Dla uproszczenia dostępu wiele pól i metod tej klasy jest publicznych i statycznych. Posiada metodę do symulacji dnia, która ustala poziom nasłonecznienia na dany dzień oraz symuluje działanie wszystkich
organizmów.
Obszar Klasa, która przechowuje poziom wody w glebie oraz pomocniczą listę
organizmów będących aktualnie w danym obszarze (nie jest ona niezbędna).
Organizm Abstrakcyjna klasa bazowa wszystkich organizmów. Przechowuje
numer organizmu oraz obszar (referencję obszaru) do którego należy organizm. Definiuje gotową metodę zabij() oraz szereg abstrakcyjnych metod
jak czyZywy() oraz dzialaj().
ISamozywny Interfejs deklarujący metodę wykonajFotosynteze(), bazującą
na aktualnym poziomie nasłonecznienia i wody.
1
Roslina Abstrakcyjna klasa przechowująca liczbę liści (pędów) oraz kilka pomocniczych metod (w tym statyczną metodę tworzącą losową roślinę). Klasa ta (a właściwie jej klasy pochodne) implementują interfejs ISamozywny.
Dziedziczy po klasie Organizm.
ICudzozywny Interfejs deklarujący metodę zdobadzJedzenie(), bazującą na
liście organizmów danego obszaru.
IRuchomy Interfejs deklarujący metodę zmienObszar.
Zwierze Abstrakcyjna klasa przechowująca zdrowie i szybkość wzrostu glodu
oraz kilka pomocniczych metod (w tym statyczną metodę tworzącą losowe
zwierzę). Klasa ta (a właściwie jej klasy pochodne) implementuje interfejsy
ICudzozywny oraz IRuchomy. Dziedziczy po klasie Organizm.
Trawa Klasa konkretna dziedzicząca po klasie Roslina. Trawa umiera, gdy
liczba jej liści spadnie do zera.
Drzewo Klasa konkretna dziedzicząca po klasie Roslina. Drzewo nie umiera
nawet po stracie wszystkich liści.
Mysz Klasa konkretna dziedzicząca po klasie Zwierze. Zjada Trawe.
Owca Prawie identyczna jak Mysz.
Zyrafa Zjada zarówno Trawe jak i liście Drzew.
Kot Poluje na Myszy.
Wilk Poluje na Owce i Zyrafy.
3
Zadania do wykonania
1. Zaimplementuj brakującą klasę Mysz. Bazowe i maksymalne zdrowie 10,
tempo głodu 1, zjada Trawe (maksymalnie 3 jednostki na posiłek).
2. Zmodyfikuj klasę Wilk tak aby wilki nie zmieniały nigdy obszaru, do którego zostały na początku przydzielone.
3. Dodaj klasę ZmutowanaZyrafa, która będzie dziedziczyć po klasie Zyrafa
oraz zaimplementuje intefejs ISamozywny. Fotosynteza powinna odbywać
się pod koniec dnia żyrafy i odnawiać zdrowie w stopniu mniejszym niż
tempo głodu. Zwykłe i zmutowane Zyrafy powinny mieć odpowiednio po
10% i 5% szans na pojawienie się podczas losowania gatunku.
4. Tempo w jakim zwierzę staje się głodne jest takie samo dla całej klasy
(każda Owca robi się głodna tak samo szybko). Innymi słowy, chcielibyśmy,
aby pole tempoGlodu w klasie Zwierze było statyczne. Jak poprawnie
uzyskać taki efekt?
2