Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Компонентно-ориентированное программирование, Система компонентов сущности

Лекция



Привет, Вы узнаете о том , что такое компонентно-ориентированное программирование, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое компонентно-ориентированное программирование, система компонентов сущности, ecs , настоятельно рекомендую прочитать все из категории Разработка программного обеспечения и информационных систем.

Компонентная разработка программного обеспечения ( CBSE ), также называемая компонентной разработкой ( CBD ), представляет собой стиль разработки программного обеспечения, целью которого является создание программного обеспечения из слабосвязанных модульных компонентов. Он подчеркивает разделение задач между различными частями программной системы .

С момента создания первого программируемого компьютера в 1946 году программирование не сбавляло обороты. Требования к программам росли, а вместе с ними появлялись все более мощные языки и более революционные подходы программирования. Так и сейчас компонентно-ориентированное программирование начинает плавно, но уверенно вытеснять объектно-ориентированное. Необходимо определить объективные причины, по которым компонентно-ориентированное программирование в наше время набирает. все большую популярность.
Сейчас очень остро стоят задачи быстрой и слаженной разработки крупных и сложных продуктов. Любая программа должна иметь гибкую структуру и способность к исправлению и дополнению функциональности.
минимальные затраты ресурсов. Даже малейшая ошибка в вопросе выбора структуры или подхода программирования может привести к роковым последствиям при попытке исправить, изменить или добавить функциональность. Объектно-ориентированное программирование известно практически каждому программисту. Согласно этому подходу, программа – это совокупность объектов, содержащих набор базовых характеристик своих классов и взаимодействующих между собой. Вместе с этим Подход предлагает четыре базовые концепции: инкапсуляцию, наследование, полиморфизм и абстракцию. Это, безусловно,
отличные принципы с тысячами возможных реализаций

Определение и характеристики компонентов

Компонентно-ориентированное программирование (КОП) рассматривает программу как набор инкапсулированных компонентов,которые взаимодействуют с другими компонентами через контейнер. Каждый компонент является отдельной подпрограммой, котораяописывает только одну функциональность и предоставляет интерфейс доступа к себе. Контейнеры компонентов реализуютвзаимодействие компонентов и их функциональность. При этом компонентно-ориентированное программирование практическиисключает использование наследования и вносит новые концепции: интроспективность (способность само описания),
модульность, персистентность (способность сохранять и восстанавливать свое определенное состояние) и способность к многократномуиспользование одного и того же компонента .
При разработке крупных программных продуктов со сложной архитектурой у объектно-ориентированного программированияпоявляется ряд проблем. Компонентно-ориентированное программирование позволяет исправить эти недостатки ипривносит большую функциональность.
Взаимозависимость объектов и неувязка хрупкого базового класса. Так как КОП оперирует только независимыми между
собой компонентами и контейнерами, содержащими их экземпляры, отпадает необходимость в использованииподражание .
Недостаточный контроль информации. Опасность утечек памяти. Компоненты являются частью своихконтейнеров, поэтому при деструкции контейнера высвобождается память всех его компонентов .В зависимости от языка программирования и платформы. Согласно идеологии КОП, каждый компонент – это отдельная независимаяфункциональность, а значит, ее запросто можно выделить в отдельный модуль программы, который будет иметь определенный интерфейс.
доступа, но может быть скомпилирован на любом языке и платформе .Трудность организации архитектуры. Вся структура упрощается в набор контейнеров, к которым можно легко
подключать необходимые компоненты из доступного списка, создавая необходимую функциональность .Сложность контроля жизненного цикла объекта. Каждый компонент обладает способностью сохранять и восстанавливатьсобственное состояние и выгружать его .
В соответствии с компонентно-ориентированным программированием программа измельчена на большую совокупность модулей,что позволяет быстро и легко исправлять, видоизменять или дополнять функциональность .Итак, компонентно-ориентированное программирование исправляет большинство недостатков предшественника и привносит
много преимуществ, таких как легкая структурированность, исправление и дополняемость, что особенно важно в разработке
масштабных программных продуктов.

Отдельный компонент программного обеспечения — это пакет программного обеспечения , веб-служба , веб-ресурс или модуль , который инкапсулирует набор связанных функций или данных.

Компоненты взаимодействуют друг с другом через интерфейсы . Каждый компонент предоставляет интерфейс (называемый предоставленным интерфейсом ), через который его могут использовать другие компоненты. Когда компонент использует интерфейс другого компонента, этот интерфейс называется используемым интерфейсом.

На иллюстрациях UML в этой статье предоставленные интерфейсы представлены символами леденцов, а используемые интерфейсы представлены символами открытых сокетов.

Компонентно-ориентированное программирование, Система компонентов сущности

Простой пример нескольких программных компонентов, изображенный в гипотетической системе бронирования отпусков, представленной в UML 2.0.

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

Компоненты должны быть многоразовыми .

Компонентное тестирование юзабилити следует рассматривать, когда компоненты программного обеспечения напрямую взаимодействуют с пользователями.

Компоненты должны быть:

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

История

Идея о том, что программное обеспечение должно быть компонентным, то есть создаваться из готовых компонентов , впервые стала заметной в выступлении Дугласа Макилроя на конференции НАТО по разработке программного обеспечения в Гармише , Германия , в 1968 году под названием « Компоненты массового производства программного обеспечения» . Целью конференции было противодействовать так называемому программному кризису . Последующее включение Макилроем каналов и фильтров в операционную систему Unix стало первой реализацией инфраструктуры для этой идеи.

Брэд Кокс из Stepstone во многом определил современную концепцию программного компонента Он назвал их программными ИС и намеревался создать инфраструктуру и рынок для этих компонентов, изобретя язык программирования Objective-C . (Он резюмирует эту точку зрения в своей книге « Объектно-ориентированное программирование – эволюционный подход», 1986 г.)

Компоненты программного обеспечения используются в двух разных контекстах и ​​двух видах: i) использование компонентов как частей для создания одного исполняемого файла или ii) каждый исполняемый файл рассматривается как компонент в распределенной среде, где компоненты взаимодействуют друг с другом через Интернет или интранет. протоколы связи для IPC (межпроцессные коммуникации). Вышеупомянутое принадлежит к первому виду, а нижнее — к более позднему.

В начале 1990-х годов IBM пошла по этому пути, разработав свою системную объектную модель (SOM). В ответ Microsoft проложила путь к фактическому развертыванию компонентного программного обеспечения с помощью связывания и внедрения объектов (OLE) и объектной модели компонентов (COM). По состоянию на 2010 год существует множество успешных моделей программных компонентов.

Архитектура

Компьютер, на котором работает несколько программных компонентов, часто называют сервером приложений . Такое сочетание серверов приложений и программных компонентов обычно называют распределенными вычислениями . Об этом говорит сайт https://intellect.icu . Типичное реальное применение этого — например, в финансовых приложениях или бизнес-программах.

Модели компонентов

Модель компонента — это спецификация свойств компонента.

Примерами компонентных моделей являются: модель Enterprise JavaBeans (EJB), модель компонентных объектов (COM), модель .NET , модель компонентов X-MAN, и модель компонентов общей архитектуры брокера объектных запросов (CORBA).

Технологии

  • Бизнес-объектные технологии
    • Ньюи
  • Компонентные программные среды для конкретных областей
    • Расширенная структура компонентов
    • Структура моделирования системы Земли (ESMF)
    • MASH IoT-платформа для управления активами
    • Компонентная модель KOALA, разработанная для программного обеспечения в бытовой электронике
    • Веб: React , [10] : 4–6  Vue.js
    • Архитектура программных коммуникаций (JTRS SCA)
  • Компонентно-ориентированное программирование
    • Пакеты в соответствии с определением сервисной платформы OSGi.
    • Объектная модель компонентов (OCX/ActiveX/COM) и DCOM от Microsoft
    • TASCS - Центр технологий SciDAC для передового программного обеспечения для научных компонентов
    • Эйфелев язык программирования
    • Enterprise JavaBeans от Sun Microsystems (теперь Oracle )
    • Программирование на основе потока
    • Модель фрактальных компонентов из ObjectWeb
    • Компонентная среда MidCOM для Midgard и PHP
    • Оберон , Component Pascal и построитель компонентов BlackBox
    • Метод rCOS для проектирования на основе моделей на основе моделей от UNU-IIST
    • Система компонентов SOFA от ObjectWeb
    • Пространство System.ComponentModelимен в Microsoft .NET
    • Unity, разработанный Unity Technologies
    • Unreal Engine, разработанный Epic Games.
    • UNO из офисного пакета OpenOffice.org
    • VCL и CLX от Borland и аналогичная бесплатная библиотека LCL .
    • XPCOM от Mozilla Foundation
  • Технологии составных документов
    • Активные документы в системе Oberon и конструкторе компонентов BlackBox
    • KParts , технология составных документов KDE .
    • Связывание и внедрение объектов (OLE)
    • OpenDoc
  • Компоненты программного обеспечения для распределенных вычислений
    • Удаленное взаимодействие .NET от Microsoft
    • Распределенный протокол 9P , разработанный для Plan 9 и используемый Inferno и другими системами.
    • CORBA и компонентная модель CORBA от группы управления объектами
    • D-Bus от организации freedesktop.org
    • DCOM и более поздние версии COM (и COM+) от Microsoft
    • DSOM и SOM от IBM (сейчас сняты с продажи)
    • Лед из ZeroC
    • Java EE от Sun
    • Компики [11] от SICS
    • Универсальные сетевые объекты (UNO) из OpenOffice.org
    • Веб-сервисы
      • ОТДЫХ
    • Zope от Zope Corporation
    • AXCIOMA (компонентная среда для распределенных, работающих в реальном времени и встроенных систем) от Remedy IT.
    • COHORTE — кроссплатформенная среда выполнения для выполнения и управления устойчивыми и надежными распределенными сервис-ориентированными компонентными приложениями от isandlaTech .
    • Модель обслуживания DX-MAN
  • Общее программирование подчеркивает отделение алгоритмов от представления данных.
  • Языки описания интерфейса (IDL)
    • Определения открытого сервисного интерфейса (OSID)
    • Часть COM и CORBA
    • Платформонезависимый язык моделирования компонентов
    • SIDL — язык определения научного интерфейса
      • Часть системы совместимости языков научного программирования Babel (SIDL и Babel — основные технологии CCA и Центра SciDAC TASCS — см. выше).
    • SOAP IDL от Консорциума World Wide Web (W3C)
    • ВДДКС
    • XML-RPC , предшественник SOAP.
  • Платформы компонентов инверсии управления (IoC) и Plain Old C++/Java Object (POCO/POJO)
  • Трубы и фильтры
    • Операционная система Юникс

Система сущностных компонентов ( ECS )

Система сущностных компонентов ( ECS ) — это архитектурный шаблон программного обеспечения , который чаще всего используется при разработке видеоигр для представления объектов игрового мира. ECS включает в себя объекты , состоящие из компонентов данных, и системы , которые работают с компонентами объектов.

ECS следует принципу композиции, а не наследования , что означает, что каждая сущность определяется не иерархией типов, а связанными с ней компонентами. Системы действуют глобально по всем объектам, имеющим необходимые компоненты.

Однако из-за двусмысленности английского языка общепринятая интерпретация названия заключается в том, что ECS — это система, состоящая из объектов и компонентов. Например, в выступлении на GDC 2013 года Скотт Билас сравнивает объектную систему C++ и свою новую систему пользовательских компонентов. Это согласуется с традиционным использованием системного термина в общей системной инженерии с использованием объектной системы Common Lisp и системы типов в качестве примеров.

ECS сочетает в себе ортогональные, устоявшиеся идеи общей информатики и теории языков программирования . Например, компоненты можно рассматривать как идиому примеси в различных языках программирования. Компоненты представляют собой особый случай в рамках общего подхода делегирования (объектно-ориентированного программирования) и метаобъектного протокола . То есть любая полная компонентная объектная система может быть выражена с помощью шаблонов и модели эмпатии в рамках видения объектно-ориентированного программирования Орландского договора .

Сущность : Сущность представляет собой объект общего назначения. Например, в контексте игрового движка каждый грубый игровой объект представлен как сущность. Обычно он состоит только из уникального идентификатора. Реализации обычно используют для этого простое целое число.

Компонент : компонент помечает объект как обладающий определенным аспектом и содержит данные, необходимые для моделирования этого аспекта. Например, каждый игровой объект, который может получить урон, может иметь компонент «Здоровье», связанный с его сущностью. Реализации обычно используют структуры , классы или ассоциативные массивы .

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

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

Компонентно-ориентированное программирование, Система компонентов сущности

Простой макет системы Entity Component.

пример простой реализации Entity-Component-System (ECS) на JacvaScript:

// Классы компонентов
class PositionComponent {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
}

class RenderComponent {
    render() {
        console.log("Rendering entity...");
    }
}

// Класс Сущности
class Entity {
    constructor(id) {
        this.id = id;
        this.components = {};
    }

    addComponent(component) {
        this.components[component.constructor.name] = component;
    }

    removeComponent(componentName) {
        delete this.components[componentName];
    }
}

// Класс Системы
class RenderingSystem {
    renderEntity(entity) {
        if (entity.components['RenderComponent']) {
            const renderComponent = entity.components['RenderComponent'];
            renderComponent.render();
        }
    }
}

// Пример использования
const entity = new Entity(1);
entity.addComponent(new PositionComponent(10, 20));
entity.addComponent(new RenderComponent());

const system = new RenderingSystem();
system.renderEntity(entity);

Этот пример демонстрирует основные концепции ECS:

  1. Компоненты - классы, которые содержат данные и/или логику для конкретных аспектов поведения сущности (например, позиция, отрисовка).
  2. Сущность - объект, который представляет сущность в игровом мире. Сущность может иметь один или несколько компонентов.
  3. Система - класс, который обрабатывает сущности, выполняя определенные действия над компонентами этих сущностей (например, отрисовка).

В данном примере система RenderingSystem проверяет, есть ли у сущности компонент отрисовки (RenderComponent), и если да, то выполняет его метод render().

В Unity инспектор (Inspector) - это интерфейсное окно, которое позволяет вам просматривать и редактировать свойства и компоненты объектов в вашей сцене или проекте. Он является важной частью редактора Unity и предоставляет удобный способ настройки объектов и компонентов без необходимости изменения кода.

С точки зрения компонентно-ориентированного программирования (Component-Oriented Programming) и Entity Component System (ECS) в Unity, инспектор играет роль визуализации и редактирования компонентов, которые составляют сущности в вашей игре.

В ECS парадигме в Unity:

  1. Компоненты представляют собой небольшие модули, которые содержат данные и/или логику для конкретных аспектов поведения сущности.
  2. Сущности (Entities) - это просто контейнеры, которые содержат компоненты. Они обычно не содержат никакой собственной логики, а просто служат для объединения компонентов.
  3. Системы (Systems) - это классы, которые выполняют операции над сущностями, обрабатывая их компоненты.

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

Компонентно-ориентированное программирование, Система компонентов сущности

Компонентно-ориентированное программирование, Система компонентов сущности

История

В 1998 году Thief: The Dark Project впервые представил ECS. Позже этот движок использовался в его продолжении, а также в System Shock 2 .

В 2007 году команда, работавшая над Operation Flashpoint: Dragon Rising, экспериментировала с проектами ECS, в том числе вдохновленными Bilas/ Dungeon Siege , а Адам Мартин позже написал подробный отчет о дизайне ECS, включая определения базовой терминологии и концепций. ] В частности, работа Мартина популяризировала идеи систем как первоклассных элементов, сущностей как идентификаторов, компонентов как необработанных данных и кода, хранящегося в системах, а не в компонентах или сущностях.

В 2015 году Apple Inc. представила GameplayKit — инфраструктуру API для разработки игр для iOS , macOS и tvOS , включающую реализацию ECS.

В августе 2018 года Сандер Мертенс создал популярную платформу ECS flecs .

В октябре 2018 года компания Unity выпустила демо-версию мегаполиса, в которой использовался технологический стек, построенный на ECS. В нем было 100 000 аудиоисточников — по одному на каждую машину, неоновую вывеску и т. д. — создавая большой и сложный звуковой ландшафт.

Вариации

Структура данных разных ECS может различаться, а также определение компонентов, то, как они связаны с сущностями и как системы получают доступ к компонентам сущностей.

ECS Мартина

Популярная серия блогов Адама Мартина определяет то, что он считает архитектурой Entity Component System:

Сущность состоит только из идентификатора для доступа к компонентам. Обычной практикой является использование уникального идентификатора для каждого объекта. Это не является обязательным требованием, но имеет ряд преимуществ:

  • На сущность можно ссылаться, используя идентификатор вместо указателя. Это более надежно, так как позволяет уничтожить объект, не оставляя висящих указателей.
  • Это помогает сохранить состояние извне. Когда состояние загружается снова, нет необходимости восстанавливать указатели.
  • При необходимости данные можно перетасовать в памяти.
  • Идентификаторы объектов можно использовать при общении по сети для уникальной идентификации объекта.

Некоторых из этих преимуществ можно также достичь с помощью интеллектуальных указателей .

Внутри компонентов нет игрового кода (поведения). Компоненты не обязательно должны быть физически расположены вместе с объектом, но их должно быть легко найти и получить к ним доступ с помощью объекта.

«Каждая система работает непрерывно (как если бы каждая система имела свой собственный частный поток) и выполняет глобальные действия над каждой сущностью, которая имеет компонент или компоненты, соответствующие запросу этой системы».

Игровой движок Unity

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

Аппарат ECS

Apparatus — это сторонняя реализация ECS для Unreal Engine , которая привнесла некоторые дополнительные функции в общую парадигму ECS. Одной из таких функций является поддержка иерархии типов компонентов. Каждый компонент может иметь базовый тип компонента (или базовый класс), как в ООП . Затем система может выполнить запрос к базовому классу и получить соответствие всех его потомков в результирующем выборе сущностей. Это может быть очень полезно для реализации некоторой общей логики в наборе различных компонентов и добавляет дополнительное измерение в парадигму.

ФЛЕКС

Flecs — это быстрая и легкая реализация ECS для C и C++, которая позволяет создавать игры и симуляции с миллионами объектов.

Общие шаблоны использования ECS

Обычный способ передачи данных между системами — хранить данные в компонентах, а затем обеспечивать последовательный доступ каждой системы к компоненту. Например, положение объекта может регулярно обновляться. Эта позиция затем используется другими системами. Если разных нечастых событий много, в одном или нескольких компонентах понадобится много флагов. В этом случае системам придется отслеживать эти флаги на каждой итерации, что может оказаться неэффективным. Решением может быть использование шаблона наблюдателя . Все системы, зависящие от события, подписываются на него. Таким образом, действие события будет выполнено только один раз, когда оно произойдет, и никакой опрос не требуется.

В архитектуре ECS нет проблем с проблемами зависимостей, обычно встречающимися в объектно-ориентированном программировании , поскольку компоненты представляют собой простые сегменты данных и не имеют зависимостей. Каждая система обычно запрашивает набор компонентов, которые должен иметь объект, чтобы система могла с ним работать. Например, система рендеринга может зарегистрировать модель, преобразование и рисуемые компоненты. При запуске система будет выполнять свою логику на любом объекте, имеющем все эти компоненты. Другие сущности просто пропускаются, и нет необходимости в сложных деревьях зависимостей. Однако это может быть местом, где скрываются ошибки, поскольку распространение значений из одной системы в другую через компоненты может оказаться затруднительным для отладки. ECS может использоваться там, где необходимо привязать несвязанные данные к заданному сроку службы.

Архитектура ECS использует композицию, а не деревья наследования. Сущность обычно состоит из идентификатора и списка прикрепленных к нему компонентов. Любой игровой объект можно создать, добавив к сущности правильные компоненты. Это позволяет разработчику легко добавлять функции одного объекта к другому без каких-либо проблем с зависимостями. Например, к сущности игрока может быть добавлен компонент пули , и тогда он будет соответствовать требованиям, которым должна управлять некоторая система BulletHandler , что может привести к тому, что игрок нанесет ущерб вещам, наткнувшись на них.

Преимущества использования ECS для хранения состояния игры были провозглашены многими разработчиками игр, такими как Адам Мартин. Хорошим примером являются сообщения в блоге Ричарда Лорда, в которых он обсуждает преимущества и то, почему системы хранения игровых данных, разработанные ECS, так полезны. [10]

Использование вне игр

Хотя архитектура ECS в основном используется при разработке видеоигр, она может быть полезна и в других областях.

Вау!! 😲 Ты еще не читал? Это зря!

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

создано: 2024-02-20
обновлено: 2024-02-21
132265



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Разработка программного обеспечения и информационных систем

Термины: Разработка программного обеспечения и информационных систем