Я опубликовал не так давно диаграмму классов для приложения, которое я делаю. Получил несколько полезных советов и принялся за работу. Конечно, дизайн — это сложно! В любом случае, я сделал версию 2.0, но столкнулся с другими вещами. Может быть, кто-нибудь может дать указатели, комментарии или советы относительно моей диаграммы классов :-)
Сначала у меня была «Скорость» в SomeInterface как часть абстрактного класса Sprite. Поразмыслив, я понял, что это не лучшее место для «Скорости». Не очень хорошо было то, что я не смог дать правильное имя интерфейсу и не знал, куда поместить «Скорость» в разделе «Атрибуты» или «Операции», поскольку это свойство...
Каждый объект (Пуля, Захватчик, Корабль) движется со своей скоростью, поэтому я добавил «Скорость» в интерфейс. Все объекты наследуются от суперкласса Sprite и переопределяют только метод Update(). Абстрактный класс Bullet ничего не делает с методом Update, полученным от Sprite, он просто показывает, что он получил его оттуда. Я не знаю, правильный ли это способ, или я должен оставить его и показывать только в классах, которые его переопределяют?
Еще одна проблема, с которой я не знаю, как справиться, это анимация, которую делают захватчики. Я получил следующие свойства: SheetSize, FrameSize и CurrentFrame. Лист содержит изображения пришельцев (например, флип-книгу), FrameSize предназначен для выбора только кадра на листе, а CurrentFrame... ну, содержит текущий кадр. Поскольку Корабль и Пуля не анимируются, эти свойства для них бесполезны. Куда их положить?
Наконец, я не знал, где реализовать IBulletBehavior. Сначала у меня было каждое поведение пули, реализующее IBulletBehavior, но я переключился на то, чтобы позволить реализовать его абстрактному классу Bullet. Есть ли какое-то правило, которое говорит, какой из них взять?