<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Real_Time_Object_Oriented_Modeling</id>
	<title>Real Time Object Oriented Modeling - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Real_Time_Object_Oriented_Modeling"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Real_Time_Object_Oriented_Modeling&amp;action=history"/>
	<updated>2026-05-20T10:45:57Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Real_Time_Object_Oriented_Modeling&amp;diff=2574733&amp;oldid=prev</id>
		<title>imported&gt;Thomas Dresler: Commonscat mit Helferlein hinzugefügt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Real_Time_Object_Oriented_Modeling&amp;diff=2574733&amp;oldid=prev"/>
		<updated>2026-02-07T21:42:50Z</updated>

		<summary type="html">&lt;p&gt;Commonscat mit &lt;a href=&quot;/index.php?title=Benutzer:Wurgl/8Schwestern&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:Wurgl/8Schwestern (Seite nicht vorhanden)&quot;&gt;Helferlein&lt;/a&gt; hinzugefügt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Real Time Object Oriented Modeling&amp;#039;&amp;#039;&amp;#039; (ROOM) ist eine [[domänenspezifische Sprache]].&lt;br /&gt;
&lt;br /&gt;
ROOM wurde Anfang der 90er zur [[Modell (Wissenschaft)#Informatik|Modellierung]] von [[Echtzeitsystem]]en entwickelt. Ursprünglich für den Bereich der mobilen Telekommunikation mit einem Fokus auf Einfachheit und Performanz entwickelt, lässt sich die ROOM-Sprache für beliebige [[Ereignis (Programmierung)|ereignisgetriebene]] Echtzeitsysteme nutzen.&lt;br /&gt;
&lt;br /&gt;
ROOM wird z.&amp;amp;nbsp;B. von den Werkzeugen [[ObjecTime Developer]] (kommerziell) und [[eTrice]]&amp;lt;ref&amp;gt;[https://www.eclipse.org/etrice/ eTrice - ROOM Open Source Tool]&amp;lt;/ref&amp;gt; (Open Source) unterstützt.&lt;br /&gt;
&lt;br /&gt;
Viele Grundkonzepte von ROOM sind in die Definition von [[UML2]] (Version 2 der [[UML]] mit Echtzeiterweiterungen) eingeflossen.&lt;br /&gt;
&lt;br /&gt;
== Konzepte und Grundbegriffe ==&lt;br /&gt;
ROOM ist eine Modellierungssprache zur Beschreibung von Softwaresystemen, die die vollständige [[Codegenerierung|Generierung des Programmcodes]] für das System aus dem Modell erlaubt. ROOM definiert dafür eine textuelle wie auch eine grafische Beschreibungssprache.&lt;br /&gt;
Typischerweise wird der generierte Code durch manuellen Code ergänzt, etwa für eine grafische Benutzeroberfläche ([[GUI]]).&lt;br /&gt;
Der Code wird dann gegen eine [[Laufzeitbibliothek]] kompiliert und gelinkt, die Basisklassen und grundlegende Dienste (wie etwa das Messaging) zur Verfügung stellt.&lt;br /&gt;
&lt;br /&gt;
ROOM kennt drei Aspekte eines Software-Systems: Struktur, Verhalten und Vererbung. Diese Aspekte sollen in den folgenden Abschnitten kurz erläutert werden.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
Die strukturelle Sicht ist in ROOM aus sogenannten &amp;#039;&amp;#039;Aktoren&amp;#039;&amp;#039; aufgebaut. Aktoren können mit anderen Aktoren über &amp;#039;&amp;#039;Ports&amp;#039;&amp;#039; kommunizieren.&lt;br /&gt;
Ports sind miteinander über &amp;#039;&amp;#039;Bindings&amp;#039;&amp;#039; verbunden. Aktoren tauschen über Ports und Bindings [[Nachrichtenaustausch|Nachrichten]] aus, die asynchron verschickt werden.&lt;br /&gt;
Jeder Port ist genau einem &amp;#039;&amp;#039;Protokoll&amp;#039;&amp;#039; zugeordnet. Ein Protokoll in ROOM definiert einen Satz von eingehenden und einen Satz von ausgehenden Nachrichten.&lt;br /&gt;
Bindings können nur Ports verbinden, die zum gleichen Protokoll gehören und die zueinander konjugiert sind. Das bedeutet, dass der eine Port die&lt;br /&gt;
eingehenden Nachrichten des Protokolls empfängt und die ausgehenden sendet. Dieser Port wird auch &amp;#039;&amp;#039;regulär&amp;#039;&amp;#039; genannt.&lt;br /&gt;
Sein Gegenüber, der &amp;#039;&amp;#039;konjugierte&amp;#039;&amp;#039; Port, empfängt die ausgehenden Nachrichten des Protokolls und sendet die eingehenden.&lt;br /&gt;
Somit vereint ein Port ein &amp;#039;&amp;#039;required&amp;#039;&amp;#039; und ein &amp;#039;&amp;#039;provided Interface&amp;#039;&amp;#039; in einer &amp;#039;&amp;#039;Rolle&amp;#039;&amp;#039; (da das gleiche Protokoll von mehreren Ports eines Aktors&lt;br /&gt;
verwendet werden kann).&lt;br /&gt;
&lt;br /&gt;
[[Datei:Structure of AnActorClass.jpg|mini|Beispiel eines Strukturdiagramms]]&lt;br /&gt;
&lt;br /&gt;
Ein Aktor kann auch andere Aktoren enthalten (als [[Komposition (Informatik)|Komposition]]). In ROOM werden diese &amp;#039;&amp;#039;Aktorreferenzen&amp;#039;&amp;#039; genannt. So können strukturelle Hierarchien&lt;br /&gt;
beliebiger Tiefe gebildet werden.&lt;br /&gt;
&lt;br /&gt;
Die Ports eines Aktors können Teil seines &amp;#039;&amp;#039;Interfaces&amp;#039;&amp;#039; (also außen sichtbar) oder Teil seiner Struktur (also von ihm selbst verwendet) oder beides sein.&lt;br /&gt;
Ports, die nur zum Interface gehören, werden &amp;#039;&amp;#039;Relay Ports&amp;#039;&amp;#039; genannt. Sie sind direkt mit dem Port eines Subaktors (einer Aktorreferenz) verknüpft.&lt;br /&gt;
Ports, die nur zur Struktur gehören, werden &amp;#039;&amp;#039;interne End Ports&amp;#039;&amp;#039; genannt.&lt;br /&gt;
Ports, die zu Struktur und Interface gehören, werden &amp;#039;&amp;#039;externe End Ports&amp;#039;&amp;#039; genannt.&lt;br /&gt;
&lt;br /&gt;
=== Verhalten ===&lt;br /&gt;
Jeder Aktor in ROOM besitzt ein Verhalten in Form eines hierarchischen [[Zustandsautomat]]en (engl. &amp;#039;&amp;#039;State Machine&amp;#039;&amp;#039;).&lt;br /&gt;
Ein Zustandsautomat ist ein [[gerichteter Graph]], der aus &amp;#039;&amp;#039;States&amp;#039;&amp;#039; genannten Knoten und &amp;#039;&amp;#039;Transitions&amp;#039;&amp;#039; genannten Kanten besteht.&lt;br /&gt;
Jeder State entspricht einem Zustand. Zustandswechsel können nur entlang einer Transition stattfinden.&lt;br /&gt;
Zustandswechsel werden ausgelöst durch eine an einem (internen oder externen) End Port eingehende Nachricht (die in diesem Zusammenhang auch &amp;#039;&amp;#039;Event&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Signal&amp;#039;&amp;#039; genannt wird).&lt;br /&gt;
Wird dieser sogenannte &amp;#039;&amp;#039;Trigger&amp;#039;&amp;#039; von der Transition spezifiziert, so &amp;#039;&amp;#039;feuert&amp;#039;&amp;#039; diese genau dann, wenn der Zustandsautomat sich im Ausgangszustand der Transition befindet.&lt;br /&gt;
Anschließend wechselt der Zustandsautomat in den Zielzustand der Transition.&lt;br /&gt;
&lt;br /&gt;
[[Datei:ROOM Behavior Diagram.jpg|mini|ROOM Verhaltensdiagramm (state machine)]]&lt;br /&gt;
&lt;br /&gt;
Dabei werden beim Zustandswechsel Codestücke ausgeführt, die der Programmierer/Modellierer an die States und Transitionen anhängt. Solche Codestücke werden in&lt;br /&gt;
einer &amp;#039;&amp;#039;Detail Level Language&amp;#039;&amp;#039;, meist der Zielsprache der Codegenerierung, verfasst.&lt;br /&gt;
Beim State unterscheidet man Entry und Exit Code. Bei einem Zustandswechsel wird zunächst der Exit Code des Ausgangszustands ausgeführt, dann der Action Code der&lt;br /&gt;
feuernden Transition und schließlich der Entry Code des Zielzustands.&lt;br /&gt;
Sehr häufig wird von solchen Code Stücken eine Nachricht über einen Port des Aktors gesendet.&lt;br /&gt;
&lt;br /&gt;
Weitere Elemente eines Zustandsautomaten sind die &amp;#039;&amp;#039;Choice Points&amp;#039;&amp;#039; und die &amp;#039;&amp;#039;Transition Points&amp;#039;&amp;#039;, auf die hier nicht weiter eingegangen werden soll.&lt;br /&gt;
&lt;br /&gt;
Ein Zustandsautomat kann weitere Hierarchieebenen einführen, in dem einzelne Zustände wieder einen Unter-Zustandsautomaten besitzen. Ähnlich wie bei der Struktur kann&lt;br /&gt;
dies bis zu beliebiger Tiefe fortgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Konzept in Zusammenhang ist schließlich noch das Ausführungsmodell der &amp;#039;&amp;#039;Run to Completion&amp;#039;&amp;#039;. Damit ist gemeint, dass ein Aktor eine&lt;br /&gt;
empfangene Nachricht vollständig verarbeitet, bevor er die nächste verarbeitet. Da die &amp;#039;&amp;#039;Run to Completion&amp;#039;&amp;#039; Semantik von der Ausführungsumgebung garantiert wird, muss sich&lt;br /&gt;
der Programmierer/Modellierer nicht separat um Synchronisierung und Thread-Sicherheit kümmern, obwohl mit ROOM implementierte Systeme hochgradig nebenläufig sein können.&lt;br /&gt;
&lt;br /&gt;
=== Vererbung ===&lt;br /&gt;
Wie jede [[objektorientierte Programmiersprache]] ist ROOM ein Klassenmodell. D.h. Aktoren sind [[Klasse (Objektorientierung)|Klassen]], die mehrfach als [[Objekt (Programmierung)|Objekte]]&lt;br /&gt;
instantiiert werden können. Jede einzelne Instanz einer Klasse kann dabei in einem anderen Zustand sein und auch mit anderen Instanzen derselben Klasse kommunizieren.&lt;br /&gt;
&lt;br /&gt;
ROOM kennt auch den Begriff der [[Vererbung (Programmierung)|Vererbung]] im Sinne einer Einfachvererbung. Das heißt, eine Aktorklasse kann von einer anderen (ihrer &amp;#039;&amp;#039;Basisklasse&amp;#039;&amp;#039;)&lt;br /&gt;
abgeleitet sein und erbt dabei alle Eigenschaften ihrer Basisklasse, also etwa Ports und Aktorreferenzen, aber auch den Zustandsautomat.&lt;br /&gt;
Der geerbte Zustandsautomat kann von der abgeleiteten Klasse um weitere Transitionen und Zustände erweitert werden.&lt;br /&gt;
&lt;br /&gt;
=== Layering ===&lt;br /&gt;
Ein letztes mächtiges Konzept in ROOM ist das sogenannte &amp;#039;&amp;#039;Layering&amp;#039;&amp;#039;. Damit ist eine vertikale Schichtung des Systems in Dienste und Nutzer dieser Dienste gemeint.&lt;br /&gt;
ROOM führt dafür die Begriffe &amp;#039;&amp;#039;Service Access Point&amp;#039;&amp;#039; (SAP) auf der Seite des Nutzers und &amp;#039;&amp;#039;Service Provision Point &amp;#039;&amp;#039; (SPP) auf der Bereitstellungsseite eines Dienstes ein.&lt;br /&gt;
Interessant ist dabei, dass SAPs nicht wie Ports explizit mit SPPs verbunden werden müssen. Vielmehr kann ein Aktor per &amp;#039;&amp;#039;Layer Connection&amp;#039;&amp;#039; an einen Dienst angebunden werden&lt;br /&gt;
und stellt diesen allen Subaktoren (rekursiv) zur Verfügung. Ansonsten sind Dienste und ihre Nutzer wie Ports mit Protokollen verknüpft und kommunizieren über&lt;br /&gt;
asynchron verschickte Nachrichten.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Bran Selic, Garth Gullekson, Paul T. Ward: &amp;#039;&amp;#039;Real-Time Object-Oriented Modeling&amp;#039;&amp;#039;, New York, John Wiley &amp;amp; Sons Inc, 1994, ISBN 978-0-471-59917-3&amp;lt;ref&amp;gt;[https://www.lehmanns.de/shop/mathematik-informatik/226929-9780471599173-real-time-object-oriented-modeling Englischsprachige Informationen zu ROOM und dem Buch &amp;quot;Real-Time Object-Oriented Modeling&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Neue Edition: Bran Selic, Garth Gullekson, Paul T. Ward: &amp;#039;&amp;#039;Real-Time Object-Oriented Modeling&amp;#039;&amp;#039;, Hamburg, MBSE4U, 2023, ISBN 978-3911081016&amp;lt;ref&amp;gt;[https://www.protos.de/knowledge-base/real-time-object-oriented-modeling-buch/ Informationen zum Erwerb der Neuauflage als Print oder kostenfreie PDF.Version des Buches &amp;quot;Real-Time Object-Oriented Modeling&amp;quot;] &amp;lt;/ref&amp;gt;&lt;br /&gt;
* Oliver Kaiser: „Echtzeitanforderungen zur Simulation technischer Produkte“, Herbert Utz Verlag, 2000, ISBN 3-89675-734-2&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Commonscat|Real-Time Object-Oriented Modeling|Real Time Object Oriented Modeling}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Softwaretechnik]]&lt;br /&gt;
[[Kategorie:Domänenspezifische Sprache]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Thomas Dresler</name></author>
	</entry>
</feed>