Показать сообщение отдельно
Старый 27.06.2018, 13:21
RedHead90 вне форума Посмотреть профиль Отправить личное сообщение для RedHead90 Найти все сообщения от RedHead90
  № 9  
Ответить с цитированием
RedHead90

Регистрация: Apr 2018
Сообщений: 42
ZergMaster, а я и не утверждал, что ECS отменяет наследование. Хотя, в данном конкретном случае можно организовать все так:

класс Character - это узел;
классы CharacterNPC и CharacterPlayer его наследники, но их различия всего в одной строке (ссылке на частные компоненты);
классы NPC и Player - компоненты, не имеющие общих корней и описывающие все те данные, что присущи лишь одной из сущностей.

Код AS3:
class Character extends Node {
    var commonComponent_1;
    var commonComponent_2;
    ...
    var commonComponent_N;
}
 
class CharacterPlayer extends  Character {
    var player:Player;
}
 
class CharacterNPC extends  Character {
    var npc:NPC;
}
Т.е. наследование есть, но оно номинально.

Добавлено через 56 минут
Вообще, я сейчас прочитал все то, что написал и понял, что не совсем верно изложил свои мысли. Вся эта писанина относится не к выбору между наследованием и композицией(ECS), а именно к затронутой автором проблеме раздутого класса и способах её решения. Тут были предложены варианты решения через цепочку наследования. Я же предложил решение через композицию. Но, естественно, говоря "композиция", я имею в виду "композиция и наследование". Как мне кажется, если решать "проблему раздутого класса" чисто с помощью цепочки наследования, то мы получим некое разросшееся дерево, с высокой глубиной и при этом один корень будет иметь 2-3 класса. А если решать через ECS, то у нас будет несколько маленьких деревьев с одним корнем и одним поколением наследников. Разросшееся дерево в этом случае может получиться только у цепочки узлов, но это настолько маленькие классы, что запутаться в таком дереве будет очень сложно.


Последний раз редактировалось RedHead90; 27.06.2018 в 14:19.