Чи потрібно створити клас країни, який містить купу міст?
Звичайно.
Міста містять багато будівельних класів, більшість містять класи людей?
Звичайно.
Чи потрібно робити клас пошуку шляхів, до якого гравець може отримати доступ, щоб обійти його?
Звичайно.
Все, що ви запропонували вище, здається розумним. Це може бути не найкращим способом для вас у довгостроковій перспективі, але це добре. Ви, очевидно, має сенс знати, оскільки саме організаційна модель вперше прийшла до вас. Важливо, щоб ви взяли це і почали з нього реалізовувати. Ви почнете, як розпочати, переконуючись над цим початковим «паралічем дизайну», який часто наштовхує розробників на початку завдання, і (якщо він виявиться дефектом якимось чином) навчить вас речі або дві про плюси і мінуси саме цього підходу до проектування.
Ви, природно, взяли свої поняття в голову і згрупували їх у код за деякими простими правилами:
- Чи суттєво відрізняється ця концепція за поведінкою або за даними інших об'єктів, які я вже маю? (Країни та люди діляться дуже мало, якщо такі є значущими даними чи поведінкою, тому вони повинні бути представлені різними типами в грі).
- Мені навіть знадобиться маніпулювати цією концепцією в коді суттєво (якщо ваша гра стосується окремих людей, вам може знадобитися цей
Person
клас, але якщо гра піклується про них лише в сукупності, як і в попередніх версіях SimCity, ви може не знадобитися цього типу, а також випадків цього типу для створення карти 1: 1 для населення міста int populationCount
.
- Чи потрібна ця концепція держави ? Якщо це так, його слід якось інкапсулювати, що дозволяє мені зберігати цей стан (клас), а не купу вільних функцій. (Реалізація маршрутизації не має аналогічного об'єкту реального світу, але для цього потрібно відслідковувати дані, наприклад, які вузли на карті вже розглядалися, і це краще робити через клас, ніж зберігати його в купі прихованих глобалів і виконання самостійно функцій).
Хоча прості відповіді на ці запитання можуть вам дуже корисно, намагаючись вирішити, чи і як перетворити ментальну концепцію у вихідний код. Ви також можете прочитати про принципи SOLID об'єктно-орієнтованого дизайну.
Зауважте, що пропозиція системи суб'єкта / компонентів, зроблена в коментарях, також є коректним підходом, хоча я б тут не відхилявся, якщо ви не переобладнаєте свій проект на менший розмір (просто тому, що в одному проекті можуть бути дві нові великі проблеми бути занадто непростим і може погіршити освіту, яку ви в іншому випадку отримаєте, якщо зосередитися лише на одному). У моделі, орієнтованої на компоненти, "тип" у вищезазначених питаннях стає більш неявним: не конкретний тип у коді, а неявний тип, визначений колекцією компонентів, що утворюють ціле. Можуть застосовуватися ті самі керівні принципи.