Система сущность-компонент
Система сущность-компонент
Сущность-Компонент-Система (ECS) — это шаблон архитектуры программного обеспечения, используемый преимущественно в разработке видеоигр для представления объектов игрового мира. ECS включает в себя сущности, идентифицируемые уникальным кодом. Компоненты — это данные, связанные с каждой сущностью (хранятся в памяти совместно), доступ к которым осуществляется через идентификатор. Наконец, системы работают с этими компонентами.
ECS следует принципу композиции вместо наследования, что означает, что каждая сущность определяется не иерархией типов, как в традиционном объектно-ориентированном программировании, а набором связанных с ней компонентов. Системы действуют глобально на все сущности, обладающие компонентами, необходимыми для работы данной системы.
Хотя эта архитектура чаще всего применяется в разработке видеоигр, ECS может быть полезен и в других областях, таких как компьютерное моделирование, системы реального времени или автоматизированное проектирование.
Характеристики[править | править код]
Архитектура ECS объединяет идеи, уже устоявшиеся в информатике и теории языков программирования. Например, компоненты можно рассматривать как частный случай миксинов, существующих во многих языках программирования. Компоненты представляют собой специализированный вариант подхода делегирования в целом и протокола метаобъектов.
Сущность: Сущность представляет собой элемент общего назначения. В контексте игрового движка, например, каждый базовый объект игры представлен сущностью. Обычно она состоит только из уникального идентификатора. В реализациях часто используется простое целое число.
Компонент: Компонент характеризует сущность в определённом аспекте и содержит данные, необходимые для моделирования этого аспекта. Например, каждый игровой объект, который может получать урон, может иметь компонент «Здоровье», связанный с сущностью. В реализациях обычно используются структуры, классы или массивы.
Система: Система — это процесс, который воздействует на все сущности с нужными компонентами. Например, физический движок может запрашивать все сущности с компонентами массы, скорости и позиции, а затем итерировать по результатам, выполняя физические расчёты над соответствующими компонентами каждой сущности.
Поведение сущности можно изменять во время выполнения с помощью систем, которые добавляют, удаляют или модифицируют компоненты. Это устраняет проблемы неоднозначности, характерные для глубоких и сложных иерархий наследования в традиционном объектно-ориентированном программировании, которые трудно понимать, поддерживать и расширять. Подходы ECS хорошо сочетаются с методами проектирования, ориентированными на данные, и часто используются совместно с ними. Данные всех экземпляров компонента хранятся в памяти последовательно, что обеспечивает эффективный доступ для систем, работающих с множеством сущностей.
См. также[править | править код]
- Модель–вид–контроллер
- Наблюдатель (шаблон проектирования)
- Стратегия (шаблон проектирования)
- Реляционная модель
Ссылки[править | править код]
Категория:Шаблоны проектирования Категория:Архитектурные шаблоны (информатика)