Объектно-ориентированное моделирование в реальном времени
Объектно-ориентированное моделирование в реальном времени ( ROOM ) — это предметно-ориентированный язык .
ROOM был разработан в начале 1990-х годов для моделирования систем реального времени . [1] Первоначально основное внимание уделялось телекоммуникациям , хотя ROOM можно применять к любой системе реального времени, управляемой событиями.
ROOM поддерживался разработчиком ObjecTime (коммерческим) и теперь реализован официальным проектом Eclipse eTrice. [2]
Когда UML2 был определен (версия 2 UML с расширениями реального времени), были приняты многие элементы ROOM.
Концепции и ключевые понятия ROOM
[ редактировать ]ROOM — это язык моделирования для определения программных систем. Это позволяет полностью генерировать код для всей системы на основе модели. ROOM поставляется как с текстовыми, так и с графическими обозначениями. Обычно сгенерированный код сопровождается написанным вручную кодом, например, для графических пользовательских интерфейсов ( GUI ). Код компилируется и связывается с библиотекой времени выполнения, которая предоставляет базовые классы и базовые службы (например, обмен сообщениями).
ROOM описывает программную систему по трем измерениям: структура, поведение и наследование. В следующих разделах эти три аспекта будут объяснены более подробно.
Структура
[ редактировать ]Структурный вид в ROOM состоит из актеров или капсул . Актеры могут общаться друг с другом, используя порты . Эти порты соединены привязками . Актеры обмениваются сообщениями асинхронно через порты и привязки. Каждому порту уникальный протокол назначен . Протокол в ROOM определяет набор исходящих и набор входящих сообщений. Порты могут быть связаны привязкой, если они принадлежат одному протоколу и сопряжены друг с другом. Это означает, что один порт отправляет исходящие сообщения протокола и принимает входящие. Этот порт называется обычным портом. Его одноранговый порт, сопряженный порт, принимает исходящие сообщения и отправляет входящие сообщения протокола. Другими словами, порт — это комбинация требуемого и предоставленного интерфейса в роли (поскольку один и тот же протокол может использоваться несколькими портами актора).

Актер может содержать других актеров (как композицию ). В ROOM они называются ссылками на актеров или ссылками на актеров для краткости . Это позволяет создавать структурные иерархии произвольной глубины.
Порты субъекта могут быть частью его интерфейса (видимыми снаружи) или частью его структуры (используемыми самим собой) или и тем, и другим. Порты, являющиеся только частью интерфейса, называются портами ретрансляции . Они напрямую подключены к порту субактера (они делегируют субактору). Порты, являющиеся частью структуры, называются внутренними конечными портами . Порты, которые принадлежат как структуре, так и интерфейсу, называются внешними конечными портами .
Поведение
[ редактировать ]У каждого актера в ROOM есть поведение, которое определяется посредством иерархического конечного автомата или, для краткости, просто конечного автомата. Конечный автомат — это ориентированный граф, состоящий из узлов, называемых состояниями , и ребер, называемых переходами . Переходы между состояниями инициируются входящими сообщениями из внутреннего или внешнего конечного порта. В этом контексте сообщения иногда также называют событиями или сигналами . Если переход определяет определенный триггер, то говорят, что он срабатывает, если конечный автомат находится в исходном состоянии перехода и поступает сообщение типа, указанного триггером. После этого состояние изменяется на целевое состояние перехода.

Во время изменения состояния выполняются определенные фрагменты кода. Программист (или разработчик моделей) может привязывать их к состояниям и переходам. В ROOM этот код написан на так называемом языке уровня детализации , обычно на целевом языке генерации кода. Состояние может иметь код входа и код выхода . При изменении состояния сначала выполняется код выхода исходного состояния. Затем выполняется код действия перехода запуска и, наконец, код входа целевого состояния. Типичная часть этих кодов — отправка сообщений через порты субъекта.
Конечные автоматы в ROOM также имеют графическую нотацию, аналогичную диаграммам состояний UML . Пример показан на схеме в этом разделе.
Конечный автомат также может иметь иерархию в том смысле, что состояния могут иметь подгосударственные автоматы. Подобно структуре, ее можно расширить на произвольную глубину. За подробностями семантики иерархических конечных автоматов мы обращаемся к оригинальной книге. [3]
Важным понятием в контексте конечных автоматов является модель выполнения « до завершения» . Это означает, что актор полностью обрабатывает сообщение, прежде чем принять следующее сообщение. Поскольку семантика выполнения до завершения гарантируется средой выполнения, программисту/разработчику моделей не приходится иметь дело с классической синхронизацией потоков. И это несмотря на то, что типичные ROOM-системы высококонкурентны из-за асинхронной связи. И, возможно, стоит подчеркнуть, что асинхронная природа систем ROOM не случайна, а отражает внутреннюю асинхронность, например, машины, управляемой программным обеспечением. Определенно, это требует другого мышления, отличного от того, которое необходимо для функционального программирования синхронных систем. Но после небольшого привыкания станет очевидно, что асинхронно взаимодействующие конечные автоматы идеально подходят для управляющего программного обеспечения.
Наследование
[ редактировать ]Как и другие объектно-ориентированные языки программирования, ROOM использует концепцию классов . Актеры — это классы, экземпляры которых могут быть созданы как объекты в системе несколько раз. Конечно, каждый экземпляр класса актера отслеживает свое собственное состояние и может взаимодействовать с другими экземплярами того же (и других) классов.
Подобно другим современным языкам программирования, ROOM позволяет наследовать классы актеров. Это единое наследование, поскольку класс актера может быть производным от другого класса актера (его базового класса ). Он наследует все функции базового класса, такие как порты и ссылки на актеров, а также конечный автомат. Производный класс актера может добавлять дополнительные состояния и переходы к унаследованному.
Многослойность
[ редактировать ]Последняя мощная концепция ROOM — это многоуровневость . Это понятие относится к вертикальным уровням программной системы, состоящим из сервисов и их клиентов. ROOM вводит понятия точки доступа к услугам (SAP) для клиентской стороны и точки предоставления услуг (SPP) для серверной стороны. С точки зрения реализации субъекта SAP и SPP работают как порты. Как и порты, они связаны с протоколом. Но кроме портов их не нужно (и даже нельзя) привязывать явно. Скорее, актер привязан к конкретной службе посредством соединения уровня , и эта привязка службы рекурсивно распространяется на всех субактеров этого актера. Эта концепция очень похожа на внедрение зависимостей .
Литература
[ редактировать ]- Бран Селич, Гарт Галлексон, Пол Т. Уорд: «Объектно-ориентированное моделирование в реальном времени», Нью-Йорк, John Wiley & Sons Inc, 1994, ISBN 978-0-471-59917-3 [1]
- Новое издание: Бран Селич, Гарт Галлексон, Пол Т. Уорд: «Объектно-ориентированное моделирование в реальном времени», Гамбург, MBSE4U, 2023 г., ISBN 978-3911081016
Ссылки
[ редактировать ]- ^ Jump up to: а б Краткое содержание книги «Объектно-ориентированное моделирование в реальном времени»
- ^ eTrice - Инструмент с открытым исходным кодом ROOM
- ^ Бран Селич, Гарт Галлексон, Пол Т. Уорд: «Объектно-ориентированное моделирование в реальном времени», Нью-Йорк, John Wiley & Sons Inc, 1994, ISBN 978-0-471-59917-3
Внешние ссылки
[ редактировать ]СМИ, связанные с объектно-ориентированным моделированием в реальном времени , на Викискладе?