Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
168 KAPITEL 7. OBJEKTORIENTIERTE MODELLE<br />
Sequence<br />
...<br />
...<br />
SequenceValue<br />
Kommunikation:<br />
write (Stream)<br />
read (Stream)<br />
Konstruktion:<br />
SequenceValue ()<br />
SequenceValue (Stream)<br />
values<br />
*<br />
1<br />
homeSequence<br />
SequenceValueLetter<br />
{abstract}<br />
* letterRef<br />
Zeitliche Einordnung:<br />
grabTime: TimeAbs<br />
supplyTime: TimePointAbs<br />
0..1 cycleTime: TimeAbs<br />
<strong>Daten</strong>charakteristik:<br />
validityTime: TimePointRel<br />
defined: bool<br />
typeName: string<br />
typeID: enum<br />
Referenzzähler:<br />
refCounter: integer<br />
Kommunikation:<br />
write (Stream)<br />
SequenceValue<br />
Konstruktion:<br />
SequenceValue ()<br />
*<br />
supplyFunctor<br />
1<br />
*<br />
dataValue<br />
...<br />
...<br />
1<br />
Functor<br />
...<br />
...<br />
<br />
Abbildung 7.3: Klassendiagramm <strong>für</strong> ËÕÙÒ ÎÐÙ aus der Implementierungssicht in C++.<br />
der Objekte zu erhalten, ein Kopieren häufig nicht möglich ist. Da <strong>die</strong>se Objekte veralten <strong>und</strong><br />
ihr Speicherbereich <strong>für</strong> neue dynamische Objekte benötigt wird, müssen sie schließlich gelöscht<br />
werden, wobei <strong>die</strong> nicht triviale Frage zu beantworten ist, wann genau <strong>die</strong>s geschehen kann.<br />
Mit Hilfe des Envelope-Letter-Idioms wird <strong>die</strong>s <strong>für</strong> <strong>die</strong> Sequenzwerte folgendermaßen gelöst.<br />
Jeder Sequenzwert wird durch genau eine Letter-Instanz: ËÕÙÒ ÎÐÙÄØØÖ repräsentiert,<br />
<strong>die</strong>se ist mit einem Referenzzähler ausgestattet. Objekte, <strong>die</strong> einen Sequenzwert referenzieren,<br />
halten eine lokale ËÕÙÒ ÎÐÙ-Instanz. Diese nimmt in dem Anwendungsmuster <strong>die</strong><br />
Envelope-Funktion ein. Bei Zuweisungen <strong>und</strong> Kopien wird der Referenzzähler des entsprechenden<br />
Letter-Objekts erhöht, überschriebene oder gelöschte Sequenzwertreferenzen vermindern<br />
den Zähler des referenzierten Letter-Objekts. Wird der Sequenzwert durch kein Objekt mehr<br />
referenziert, ist der Zähler Null <strong>und</strong> das Letter-Objekt kann gelöscht werden.<br />
7.3.2 Das Objektmodell<br />
Attribute <strong>und</strong> Objektreferenzen<br />
Die Einbindung konkreter <strong>Daten</strong> in eine Sequenzwertinstanz erfolgt über <strong>die</strong> Instanzvariable<br />
ØÎÐÙ ØÌÝÔ. In Abhängigkeit von der Art der Typbehandlung der verwendeten Programmiersprache<br />
(Typbindung zur Compile- oder zur Laufzeit, Verfügbarkeit expliziter Typinformationen<br />
zur Laufzeit, usw.) kann <strong>die</strong>s zu unterschiedlichen Implementierungsvarianten<br />
führen, worauf hier jedoch nicht näher eingegangen werden soll.<br />
Die von der Sequenzwertklasse verwalteten Attribute <strong>die</strong>nen in erster Linie der zeitlichen<br />
Einordnung der <strong>Daten</strong>. Für viele Aufgaben ist es wichtig, den Bezug der <strong>Daten</strong> zur Realzeit zu<br />
bewahren <strong>und</strong> <strong>für</strong> deren Auswertung zusammen mit den <strong>Daten</strong>werten bereitzustellen, so z.B.