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