Не позволяет ли множественное наследование решить все проблемы, с которыми сталкиваются системы сущностей?

Вопрос довольно объяснительный: не позволяет ли множественное наследование решить все проблемы, которые решают сущностные системы?

Я просто вспомнил термин, называемый «множественное наследование», и это, похоже, решает множество проблем, связанных с раздуванием, которые налагаются классическим наследованием.

9 голосов | спросил jcora 26 J000000Thursday12 2012, 21:45:25

2 ответа


9

Нет, множественное наследование не решает все те же проблемы, что и системы сущностей: системы сущностей и множественное наследование - две разные вещи. Вы можете создать систему сущностей с множественным наследованием или без нее, и аналогичным образом вы можете использовать множественное наследование без создания системы сущностей.

Традиционно системы с объектно-ориентированными объектами разрабатываются из-за желания отойти от тяжелого наследования в любой форме, нацеливаясь вместо этого на композицию . В этой поговорке достаточно литературы и обсуждений, например, в программисты SE или SO непосредственно , и это более важный вопрос почему , чтобы предпочесть композицию - это своего рода не по теме для разработки игр. Короче, однако, это подход, который, как правило, поддается улучшенной изменчивости и ремонтопригодности.

ответил Josh 27 J000000Friday12 2012, 05:14:43
1

Ответ Джоша потрясающий, но я бы хотел добавить:

Одной из самых крутых функций Entity /Component является способ управления данными, в котором каждая «вещь» в вашей игре создается и управляется. Из того, что я видел, когда у вас есть хорошая библиотека типов компонентов и систем, вы можете создать практически все, что с минимальными модификациями кода. (Примечание: минимально! = 0 )

Определяя свою игру с точки зрения поведения и предоставляя себе возможность изменять эти поведения «на лету» - во время выполнения, во время инициализации, загружая их из скрипта или базы данных и т. д. - вы открываете целый мир новых возможности. Хотите узнать, почему ваши тени не приземляются там, где вы ожидаете? Добавьте компонент камеры /POV к вашему свету.

Entity /component позволяет создавать все, что угодно, до тех пор, пока вы создали блоки.

Кроме того, множественное наследование вызывает ту же проблему, что и одиночное наследование. Когда вы добавляете атрибут или поведение в иерархии, он распространяется. Пока вы делаете глубокие иерархии, вы столкнетесь с ситуациями, когда вы несете лишний вес, дублируете код или разрешаете конфликты. Большинство из них можно избежать, когда вы представляете свою игру в качестве данных.

Я только начал играть с этим в последние несколько недель, но я впечатлен тем, насколько простыми вещами стали. Это не серебряная пуля. Я столкнулся с несколькими случаями, когда привязка лямбды к компоненту была самым чистым и наиболее целесообразным способом решения проблемы, но это довольно хороший образец, если вы можете это назвать.

В небольшом примечании: один из больших, скучных генераторов обслуживания в приложениях, ориентированных на данные (веб-сайты и т. д.), отображает иерархические объекты в реляционные базы данных. У нас много отличных решений, но в конечном итоге они предназначены для сглаживания иерархий. Вместо того, чтобы создавать свою модель, чтобы она служила цели приложения, вы заканчиваете компрометацию между эффективной иерархией и логическим реляционным представлением. Я занимался идеей перестройки довольно большой иерархии в одном из моих приложений в качестве системы сущностей /компонентов - выровнял иерархию и сделал базу данных Золотым стандартом для остальной части реализации - и это многообещающе.

Когда вы интегрируете такие возможности, как генерация динамического кода /кеширование кода, которые могут решать проблемы с производительностью, вы получаете быструю, гибкую логическую архитектуру, которая может намного лучше реализовать цель многократного использования ООП.

ответил 3Dave 18 AM00000020000001331 2012, 02:21:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132