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