Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создавать классы, чтобы различать объекты (http://www.flasher.ru/forum/showthread.php?t=215604)

Appleman 05.06.2018 10:14

Создавать классы, чтобы различать объекты
 
Всем привет!

Продолжаю работать над системой предметов и инвентаря для своей игры. Возник такой вопрос. В этой теме часто приходилось читать что, мол, нужно "отстроить ботинки от рукавиц" (не дословная цитата, но смысл понятен).

Вопрос у меня такой. Если сейчас у меня есть (для тестов) куртка, сапоги и рукавицы, которые имеют полностью идентичные свойства и методы, имеет смысл делать для них отдельные подклассы? Самому пока не хочется. Мне представляется, что создание отдельного класса должно быть оправдано чем-то более значимым. Что думаете?

Спасибо.

undefined 05.06.2018 11:05

сделать интерфейс и вынести все что общее в него.

Appleman 05.06.2018 12:22

undefined, мне кажется, ты меня неправильно понял. У меня не просто что-то общее, у меня ВООБЩЕ ВСЁ будет общее. Потому и спрашиваю. Имеет ли смысл плодить классы EquipmentBoots, EquipmentCoat и EquipmentHat, если состав свойств и методов у них пока идентичные?

DEVORON 05.06.2018 12:38

Если не плодить классы, тогда, наверное, потребуется подход с внешними данными(кажется, у Вас БДшка) + парсеры, которые будут заполнять один объект(если он такой гибкий) и в нём будет некий идентификатор, представляющий его тип в игре - Boots/Coat/Hat

Appleman 05.06.2018 12:50

DEVORON, да, всё верно. Я именно об этом и спрашиваю. Какие плюсы/минусы от использования: а) отдельных классов и б) идентификаторов внутри единого класса.

undefined 05.06.2018 12:58

Цитата:

Какие плюсы/минусы от использования: а) отдельных классов и б) идентификаторов внутри единого класса.
отдельные классы дают бОльшую гибкость т.к. в случае если у шляпы,например, появится специфичное поведение будет место, куда это дописать.
В идеале должно быть так: все, что есть сейчас выносится в EquipmentItem, а в EquipmentBoots, EquipmentCoat и EquipmentHat оставляем пустые классы,отнаследованные от EquipmentItem.Ничего плохого в пустых классах нет, это называется маркерный интерфейс/класс.

СлаваRa 05.06.2018 13:08

Цитата:

Ничего плохого в пустых классах нет это называется маркерный интерфейс/класс.
Это называется плодить сущности. Если в отдельном классе нет потребности - он не нужен.
Да и вообще гадать о плюсах или минусах какого либо решения без четкой задачи - по-моему трата времени в пуступю, складывается впечатление, что автор полагает, что все знают его проект/архитектуру/задачи и т.п.

undefined 05.06.2018 13:39

согласен нужен/не нужен зависит от задачи.Например есть перс "голова профессора доуэля", который из амуниции можен надеть только шляпу :)

Appleman 05.06.2018 14:01

undefined, спасибо, взял на заметку.

Цитата:

Сообщение от СлаваRa (Сообщение 1205488)
Это называется плодить сущности. Если в отдельном классе нет потребности - он не нужен.
Да и вообще гадать о плюсах или минусах какого либо решения без четкой задачи - по-моему трата времени в пуступю, складывается впечатление, что автор полагает, что все знают его проект/архитектуру/задачи и т.п.

СлаваRa, автор поэтому и старается формулировать вопросы по возможности в как можно более принципиальном виде. Ведь помимо конкретных целей и задач существуют общие правила, примеры хорошей практики и т.п. Об этом и спрашиваю.

ZergMaster 05.06.2018 15:26

Цитата:

Сообщение от undefined (Сообщение 1205487)
отдельные классы дают бОльшую гибкость т.к. в случае если у шляпы,например, появится специфичное поведение будет место, куда это дописать.
В идеале должно быть так: все, что есть сейчас выносится в EquipmentItem, а в EquipmentBoots, EquipmentCoat и EquipmentHat оставляем пустые классы,отнаследованные от EquipmentItem.Ничего плохого в пустых классах нет, это называется маркерный интерфейс/класс.

Не могу согласиться.
Не вижу причин плодить сущности в том случае, если объекты полностью идентичны. То, что ты говоришь, называется ООП ради ООП.
Пока это возможно, надо делать
Код AS3:

var boots:EquipmentItem = new EquipmentItem('bootsImage', args...);
var coat:EquipmentItem = new EquipmentItem('coatImage', args...);

и тд..
И ТОЛЬКО в том случае, если у шляпы действительно появится специфическое поведение, тогда делаем класс
Код AS3:

class EquipmentHat extends EquipmentItem

Будьте проще


Часовой пояс GMT +4, время: 18:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.