Celem laboratorium jest wykorzystanie modelu obiektowego Javy do rozwiązania prostego zadania. Studenci mają w tym celu wykorzystać wcześniej zaimplementowane klasy, dzięki czemu kod rozwiązujący zadanie jest znacznie zwięźlejszy i idiomatyczny (wyrażony w języku domeny).
Najważniejsze zadania:
- Stworzenie klasy
Animal
. - Stworzenie klasy
OptionsParser
. - Testy integracyjne.
- Początkowe wartości obiektu można określić albo w konstruktorze, albo bezpośrednio przypisując je do pól, np.
class Animal {
private Vector2d position = new Vector2d(2,2);
}
- Wykorzystaj definicje klas
Vector2d
,MapDirection
orazMoveDirection
z laboratorium 2. - Utwórz klasę
Animal
, która:- określa początkową orientację zwierzęcia jako
NORTH
, - określa początkowe położenie zwierzęcia na mapie jako
Vector2d(2,2)
(przyjmij, że zwierzę znajduje się w pierwszej ćwiartce układu współrzędnych, a północ jest tożsama z kierunkiem wyznaczanym przez rosnące wartości na osi OY), - definiuje metodę
toString()
, która w reprezentacji łańcuchowej zawiera informacje o położeniu zwierzęcia (pozycję oraz orientację), - definiuje metodą
boolean isAt(Vector2d position)
, która zwraca prawdę, jeśli zwierzę znajduje się na pozycjiposition
. - definuje swoje pola jako prywatne.
- określa początkową orientację zwierzęcia jako
- Utwórz lub zmodyfikuj klasę
World
, która w metodziemain
stworzy zwierzę i wyświetli w konsoli jego pozycję. - Dodaj do klasy
Animal
metodęmove(MoveDirection direction)
, która:
- Dla kierunków
RIGHT
iLEFT
zmienia orientację zwierzęcia na mapie, np. kiedy zwierzę jest w pozycjiNORTH
a zmiana kierunku toRIGHT
to orientacja zwierzęcia powinna wynosićEAST
. - Dla kierunków
FORWARD
iBACKWARD
zmienia pozycję zwierzęcia o 1 pole, uwzględniając jego orientację, np. kiedy zwierzę jest na pozycji(2,2)
i jego orientacja toNORTH
, to po ruchuFORWARD
jego pozycja to(2,3)
. - Uniemożliwia wyjechanie poza mapę, która ustalona jest od pozycji
(0,0)
do pozycji(4,4)
(pięć na pięć pól). W sytuacji, w której zwierzę miałoby wyjść poza mapę, wywołaniemove
nie ma żadnego skutku.
- W metodzie
main
dodaj wywołania, które przetestują poprawność implementacji, np. po ciągu wywołań:RIGHT, FORWARD, FORWARD, FORWARD
pozycja zwierzęcia powinna wynosić(4,2)
a orientacjaEAST
. - Utwórz klasę
OptionsParser
a w niej metodęparse
, która:- akceptuje tablicę łańcuchów znaków,
- zwraca tablicę kierunków ruchu
MoveDirection
, - zamienia łańcuchy
f
orazforward
na kierunekMoveDirection.FORWARD
,b
orazbackward
na kierunekMoveDirection.BACKWARD
, itd. - dla nieznanych kierunków nie umieszcza ich w tablicy wynikowej (tablica wynikowa powinna zawierać wyłącznie prawidłowe kierunki).
- Zmodyfikuj metodę
main
tak, aby korzystając z klasyOptionsParser
umożliwiała sterowanie zwierzęciem. - Przetestuj zachowanie zwierzęcia dla różnych danych wejściowych.
- Napisz testy integracyjne weryfiujące poprawność implementacji. Uwzględnij:
- czy zwierzę ma właściwą orientację,
- czy zwierzę przemieszcza się na właściwe pozycje,
- czy zwierzę nie wychodzi poza mapę,
- czy dane wejściowe podane jako tablica łańcuchów znaków są poprawnie interpretowane.
- Odpowiedz na pytanie: jak zaimplementować mechanizm, który wyklucza pojawienie się dwóch zwierząt w tym samym miejscu.
- Otaguj gotowe rozwiązanie jako lab3.