Вопрос об объектно-ориентированном проектировании с Ruby

Мы используем Поджигателей console.log, console.time и console.timeEnd (я думаю), много.

Firebug также имеет созданный в профилировщике.

6
задан Rayne 15 October 2009 в 16:23
поделиться

2 ответа

Вы на правильном пути, но зашли слишком далеко, что является частой ошибкой новичков с ООП. Каждое свойство не должно , а быть отдельным классом; все они должны быть экземплярами класса Property. Я бы сделал классы с атрибутами в следующих строках:

9
ответ дан 8 December 2019 в 18:38
поделиться

Классы для пробелов, вероятно, неплохая идея; но давайте посмотрим, почему это так.

Если бы вы писали это на процедурном языке, где было бы большинство операторов 'if' и 'switch'? Они будут определять, что случилось с каждым игроком, когда тот приземлился на клетке. В объектно-ориентированном стиле мы хотим предотвратить как можно больше операторов if / switch и заменить их полиморфизмом. Итак, очевидно, что если мы создадим много производных от Space, мы предотвратим появление большого количества операторов if / switch.

Но прежде чем мы сделаем такой шаг, давайте посмотрим на метафору игры. В игре все про город. Адреса, улицы, коммунальные службы, общественные работы, тюрьмы и т. Д. Каждый квадрат на доске обозначает какое-то место в городе. Действительно, игроки путешествуют по городу, оплачивая аренду (или какое-либо другое действие), где бы они ни приземлились.

Итак, давайте назовем пространства CityBlocks. У каждого CityBlock есть адрес, например «Boardwalk», «Electric Company» или «Community Chest». Существуют ли разные типы объектов CityBlock? Или мы должны просто рассматривать CityBlocks как места, которые имеют определенный вид Зонирования?

Мне вроде как. | CityBlock | ----> | ZoningOrdinance |

Теперь у нас может быть несколько различных производных от ZoningOrdinance. Это паттерн «Стратегия». Мне больше нравится гибкость, которую это дает нам, и разделение «где» и «что», которое это дает.

Вам также понадобится класс Game, который понимает правила игры в кости, жетоны, FreeParking, Passing Go и т. Д. Этот класс будет управлять игроками и вызывать методы CityBlock. CityBlock будет вызывать методы в ZoningOrdinance.

В любом случае, это один путь ...

4
ответ дан 8 December 2019 в 18:38
поделиться