13 czerwca 2011

Projektowanie ekstremalne

Opiszę ten sposób projektowania na przykładzie klonu Master of Orion.

Jest to projektowanie funkcyjne schodzące od najbardziej ogólnych obiektów do obiektów coraz głębiej położonych. Ten typ projektowania można określić grafem lasu, w którym korzenie to najbardziej ogólne klasy. Liście stanowią podstawowe wartości zmiennych obiektów.
Przykładowo, w pniu będą klasy Galaktyki i Rasy, zaś dalej następuje cały ciąg powiązanych ze sobą klas.
Galaktyka składa się z systemów gwiazdowych Star. Każda ma własną nazwę. Ze Star odchodzi krawędź na liść „Nazwa gwiazdy”.
Do każdego układu gwiezdnego można przypisać statek kosmiczny, potwora, traktując je przy inicjacji analogicznie jak kolejną planetę. Owszem, mają inne własności, lecz uaktywniają się one tylko na określone żądanie. To podejście narzuca ograniczenie na liczność statków wyprodukowaną przez Rasę, związaną z ich ekspansją, jak w Ascendancy.
No dobrze, ale ja nie chcę jednego statku na układ dla jednej Rasy! W takim przypadku klasę statków umieszczamy jako obiekt w klasie Rasa, wskazując tylko Planetę Układu, przy którym statek powstaje, aby z niej czerpać surowce. I mamy jednostki jak w Civilization.

To było przypisanie. Każdy obiekt może zawierać wiele obiektów różnych typów. Sam najczęściej zawiera się w innym. Przy projektowaniu zastanawiamy się, jakie zależności spełnia Obiekt, jak jest położony w strukturze. Po utworzeniu prototypu umieszczamy go we właściwej części drzewa. Na raz zajmujemy się dokładnie jednym obiektem.

Kiedy już wiemy, gdzie jest obiekt, co jest jego przodkami, zatrzymajmy się na chwilę, ignorując jego potomków, jego prawidłowe działanie. Sprawdzamy, czy takie rozmieszczenie nie psuje powstałej struktury. Najtrudniejsze jest zachowywanie widoczności z innymi gałęziami drzewa, aby obiekt widział inne istotne dla siebie obiekty, przekazywał im informacje. Dobrze, gdy mają wspólnego przodka. A kiedy nie mają, potrzebują wskaźnik na odpowiedni węzeł drzewa w swojej budowie.

Dopiero kiedy struktura jest zachowywana, można przystąpić do wprowadzania działań, co obiekt robi, jak to robi. Są to rzeczy, które klasycznie robi się na samym początku. Zaś przy kłopotach część pracy klasycznej idzie do kosza. Przy podejściu ekstremalnym wystarczy odszukać w kodzie właściwy fragment klas bazowych i podpiąć się. Wywołanie nastąpi przy działaniach na tamtych klasach, o ile wszystkie warunki inicjacyjne zostaną spełnione.