4. Die Bildschirm-Elemente

Physische Elemente

ohne Zustand:

  • Punkte (und Ecken ) als Angriffspunkte für Linien und Vektoren

  • ungerichtete Linien als ungerichtete Verbindungen zwischen den Punkten

  • gerichtete Linien als gerichtete Verbindungen zwischen den Punkten

  • Marken (Detektoren), die logische Signale erzeugen. Sie liegen immer auf Linien

  • mit Zustand, der von Meldungen (logischen Elementen) beeinflusst werden kann:

  • Marken (Aktoren), welche Teilnehmer beeinflussen können

  • Weichen mit den Weichenstellungen (hier nicht behandelt)

  • Signale (Ampeln)

  • mit zeitabhängigem Zustand:

  • Teilnehmer (bewegliche Marken), die auf der Topologie verkehren (hier nicht behandelt)

  • Logische Elemente

    ohne Zustand:

  • Knoten für den Zusammenfluss und das Verteilen von Meldungen ( und )

  • Meldewege als gerichtete Verbindungen für den Meldungsfluss

  • mit Zustand:

  • Knöpfe zur Erzeugung von Meldungen (Sender ) und zu ihrer Aufnahme (Empfänger )

  • Rahmen zur Beherbergung von Knöpfen und zur Weiterverarbeitung von Meldungen, entweder von den Knöpfen erhalten oder direkt von einem steuernden Element in codierter Form. Die Meldungen werden entweder an einen Knopf weitergeleitet oder aber an ein gesteuertes Element, wiederum in codierter Form

  • Filter (Rechenvorschriften), welche Meldungen analysieren und weiterverarbeiten (verteilen, verzögern)

     

  • Zeitelemente (hier nicht behandelt):

  • Event-Glied mit einem Zeitpunkt und einer auszulösenden Reaktion in diesem Zeitpunkt

  • Temporäre Elemente (hier nicht behandelt):

  • Referenz-Glied, welches zum Erstellen einer Referenz-Kette benötigt wird, meist eine Auswahl von Gliedern (wie: alle Glieder, die von der Maus berührt werden)

  • Trajektorie, welche das Fahrverhalten eines Teilnehmers für einen bestimmten Abschnitt beinhaltet

  • Im Folgenden sollen alle Elemente etwas genauer vorgestellt werden, bezüglich ihres Bauplanes und ihres Verhaltens. Für den Bauplan werden wir in den Tabellen Nummer, Zweck, Zugriffs-Methode und ein Attribut für jedes Feld des Gliedes aufführen (sowie einen möglichen Kommentar). Das Attribut bezeichnet die Art des Feldes mit einem fortlaufenden Index innerhalb der Art. Als Art kommen

  • G für gespeichert (das Feld steht im Klartext da und ist von keinem anderen Feld abhängig),

  • R für Relation (der Inhalt des Feldes wird über eine Verknüpfung ermittelt),

  • B für berechnet (das Feld berechnet sich aus anderen Feldern) und

  • N für Nebenkette (das Feld referenziert auf eine lokale Nebenkette) vor.

  • Für berechnete Felder wird weiter in Klammern angegeben, aus welchen Feldern sie sich errechnen.

    4.1 Punkte

    Folgende drei Klassen werden hier vorgestellt:

  • GliedPunkt als allgemeines, punktförmiges Objekt,

  • GliedPuEck (Unterklasse von GliedPunkt) als Punkt oder Ecke auf einer physischen Verbindung und

  • GliedKnoten (Unterklasse von GliedPunkt) als Punkt oder Ecke auf einer logischen Verbindung (für Meldewege).

  • Ein Punkt ist ein ein-dimensionales Objekt. Je nach seinem Grad kann er bestimmte Eigenschaften haben:

  • Grad 1: der Punkt ist am Ende einer Linie, er stellt implizit eine Senke dar, in welcher die Teilnehmer verschwinden, da sie das System verlassen.

  • Grad 2: der Punkt ist eine sogenannte Ecke, er befindet sich auf einem Linienzug. Wird er gelöscht, so löscht er nicht die beiden angrenzenden Linien, sondern er verbindet sie zu einer einzigen, bevor er sich löscht. Ein Punkt kann nur zur Ecke werden, wenn die beiden angrenzenden Linien (bzw. Vektoren) nicht unterschiedlich gerichtet sind.

  • Grad 3 und grösser: im Punkt laufen Linien aus verschiedenen Richtungen zusammen. Wird er gelöscht, so löscht er automatisch auch alle angreifenden Linien (im Gegensatz zu seiner Form als Ecke). Er verknüpft Vektoren oder auch Linien. Bei nur einem wegführenden Vektor ist seine innere Topologie definiert, sonst muss er vor jeglicher Simulation in eine Weiche umgewandelt werden, damit die Verknüpfung der Linien eindeutig ist.

  • Ein Knoten nimmt dieselben Funktionen für logische Verbindungen wahr. Er verteilt grundsätzlich Meldungen von allen ankommenden Pfaden (Meldewegen) auf alle abgehenden Pfade; er kann deshalb auch nicht in eine Weiche mit innerer Topologie umgewandelt werden.

    Folgende Felder beschreiben einen Punkt:

    Nummer

    Zweck

    Methode

    Attribut

    Bemerkungen

    1

    Koordinaten

    koordinaten

    G1

    2

    Grad

    (grad)

    F1 bzw. G2

    G2, wenn erzwungene Ecke

  • Die Koordinaten bestimmen, wo der Punkt auf dem Bildschirm liegt.

  • Der Grad gibt darüber Auskunft, wie viele Linien am Punkt angreifen. Das bedingt, dass dem Punkt durch eine Add Notification gemeldet wird, wenn eine neue Linie definiert wird, die an ihm angreifen soll. Ebenfalls über eine Delete Notification muss dem Punkt das Entfernen der Linie mitgeteilt werden.

  • Da der Punkt bei seinem Löschen ein anderes Verhalten zeigt, wenn er eine Ecke ist (wenn nur zwei Linien an ihm angreifen, die nicht gegeneinander gerichtet sind), als wenn er ein normaler Punkt ist, muss es auch möglich sein, eine Ecke temporär in einen Punkt umzuwandeln, wenn man die beiden angreifenden Linien des Punkten mitsamt dem Punkt löschen möchte. Das äussert sich darin, dass dem Grad der Wert "nil" zugewiesen wird. Er verliert dadurch sein F-Attribut.

    Punkt-Indizes

    Sie ordnen die Koordinaten der Reihe nach; sie dienen nur zum schnelleren Auffinden eines Punktes auf dem Bildschirm, sind also nicht unique; verschiedene Punkt dürfen übereinander liegen.

    Dafür müssen wir ein Ordnungsprinzip für Punkte definieren: Punkt A ist kleiner als Punkt B, wenn

    Ax < Bx oder Ay < By gilt. Wir führen deshalb einen Index in x- und einen in y-Richtung ein.

    Folgende Felder definieren den Index für einen Punkt:

    Nummer

    Zweck

    Methode

    Attribut

    Bemerkungen

    1

    Koordinaten

    koordinaten

    G1

    nicht gespeichert

    Wie in [2] erwähnt, haben auch die referenzierenden Werte eines Index Standardbande:

    (a) on add notify after

    (b) on delete cascade

    (c) on change notify after

    (d) koordinaten

    Punkt-Index Punkt

    (e) on delete ignore

    (f) on change restrict

    (g) koordinaten

    Die Add Rule (a) wird immer beim Einfügen in die Kette berücksichtigt. Ändert sich der Wert eine Eintrages, so muss der Index benachrichtigt werden, damit er den Referenz-Eintrag neu einordnen kann (c). Ein Index wird normalerweise nicht gelöscht. Ist dies trotzdem einmal der Fall, so interessiert es die referenzierten Glieder nicht: (e) bis (g).

    4.2 Linien

    Die folgenden Klassen werden hier eingeführt:

  • GliedLinie als allgemeine Oberklasse, welche ein linienförmiges graphisches Objekt definiert, welches an beiden Enden von einem Punkt begrenzt ist.

  • GliedVektor (eine Unterklasse von GliedLinie) als Klasse, welche eine gerichtete Linie darstellt.

  • GliedVektorPhys als Unterklasse von GliedVektor, die einen physischen Vektor darstellt (auf welchem Teilnehmer zirkulieren können).

  • GliedMeldeweg als weitere Unterklasse von GliedVektor, die einen logischen Vektor darstellt (auf welchem Meldungen verschickt werden können).

  • GliedAdja (eine Unterklasse von GliedLinie) als Linie, welche nur die Adjazenz zweier Punkte repräsentiert (zwei Punkte einander zuordnet); diese Klasse wird für die Weichen benötigt..

  • Eine Linie ist ein Objekt, das zwei Punkte miteinander verbindet. Sie kann ungerichtet sein oder gerichtet (dann auch Vektor genannt). Auf die verschiedenen Aufgaben der Vektoren wollen wir speziell noch im nächsten Abschnitt eingehen, obwohl sich Vektoren speichermässig nicht von den Linien unterscheiden.

    Folgende Felder definieren eine Linie:

    Nummer

    Zweck

    Methode

    Attribut

    Bemerkungen

    1

    Anfangspunkt

    anfang

    R1

    2

    Endpunkt

    ende

    R2

    3

    Strecke

    strecke

    B1(R1,R2)

    nicht gespeichert

    4

    angezeigte Strecke

    streckeDisp

    B2(R1,R2)

    nicht gespeichert

    5

    Länge

    laenge

    B3(B1)

    6

    Gültigkeit

    gueltigkeit

    G1

    7

    ...nur für

    nur

    G2

    8

    vmax

    vmax

    G3

  • Anfangs- und Endpunkt zeigen je auf ein Element vom Typ Punkt. Sie bestimmen, von wo nach wo die Linie geht, welche zwei Punkte sie miteinander verbindet.

  • Strecke ist eine andere Darstellungsart von Anfangs- und Endpunkt, zusammengefasst zu einem einzigen Objekt. Dieses Feld wird benötigt, damit eine Marke darauf referenzieren kann.

  • die angezeigte Strecke kann vom Wert des Feldes Strecke abweichen, wenn einer der Endpunkte (oder beide) eine Weiche ist. In einem solchen Fall hört, durch die Darstellung der Weiche bedingt, die Linie etwas vor dem Punkt auf. Um das Datenmodell sauber zu halten, muss deshalb ein Objekt vom Typ Punkt eine Zugriffsmethode "koordinaten" bereitstellen, welche für die Berechnung des Feldes Strecke benutzt werden kann, und eine weitere Methode "angriffspunkt: fuerLinie", welche die gesuchten Werte für das Feld der angezeigten Strecke liefert. Im Fall eines reinen Punktes (oder einer Ecke) sind die beiden Methoden gleich.

  • die Länge der Strecke (nicht der angezeigten Strecke) ist wichtig für die Lage von relativ zur Strecke positionierten Marken.

  • die Gültigkeit bezieht sich auf die Selektivität einer Linie nur für Teilnehmer mit einer gewissen Identifikation (so wie in [1] eingeführt).

  • ebenfalls das Feld "...nur für" legt die Selektivität fest: ob die Linie für alle Teilnehmer, welche im Feld "Gültigkeit" aufgeführt sind, unsichtbar sein soll, oder ob sie nur für sie sichtbar sein soll.

  • vmax bestimmt die maximale Geschwindigkeit, mit welcher ein Teilnehmer auf dieser Linie verkehren darf.

  • Zwei Relationen sind im Bauplan definiert, sie zeigen beide auf ein Glied vom Typ Punkt. Da ein Punkt Bescheid wissen möchte, wieviele Linien an ihm angreifen, muss eine Add Notification geschickt werden, wenn eine neue Linie definiert wird (a).

    Wird ein Punkt gelöscht, so wird auch die Linie gelöscht (b). Wird ein Punkt verschoben, so muss er dies der Linie melden (c), damit sie ihre Bildschirmdarstellung anpassen kann (und auch ihre Länge). Als Information über einen Punkt interessieren nur seine Koordinaten (d). Wird eine Linie gelöscht, so muss dies dem Punkt mitgeteilt werden (e), damit er seinen Grad anpassen kann. Wird eine Linie verschoben (diese Funktion soll aus Gründen des Komforts vorgesehen werden), so verschieben sich dadurch die Koordinaten der beiden Endpunkte. Da die Punkte nichts gegen einen solchen Eingriff in ihre Datenhoheit einzuwenden haben (denn eigentlich hat eine Linie nichts an ihren Endpunkten herumzuschieben), muss so etwas den Punkten mitgeteilt werden (f). Was einen Punkt von der Linie interessiert, sind seine Koordinaten (g). Da eine Linie nicht im Bauplan des Punkte vorkommt, ist in diese Richtung auch keine Add Rule vorzusehen.

    (a) on add notify before and after

    (b) on delete cascade and notify before

    (c) on change notify before and after

    (d) koordinaten

    Linie Punkt

    (e) on delete notify before

    (f) on change set value

    (g) anfang bzw. ende

    Linien-Index

    Er dient hauptsächlich zur Vermeidung von doppelt geführten Linien. Darum muss er unique sein. Da Linien ungerichtet sind, muss dem auch der Index Rechnung tragen und die Punkte nicht der Reihe nach als Referenz-Wert zusammensetzen, sondern der Grösse nach geordnet. Das Ordnungsprinzip (welcher Punkt von beiden ist grösser?) ist so gewählt, dass zuerst die x-Koordinaten der Punkte verglichen werden, und wenn diese gleich sind, die y-Koordinaten.

    Für den Index aller Unterklassen, die gerichtete Linien darstellen, kann dieser zusätzliche Aufwand entfallen.

    Folgende Felder definieren den Index einer Linie:

    Nummer

    Zweck

    Methode

    Attribut

    Bemerkungen

    1

    Anfangspunkt

    anfang

    R1

    nicht gespeichert

    2

    Endpunkt

    ende

    R2

    nicht gespeichert

    3

    Referenz-Wert

    ref

    B1(R1,R2)

    nicht gespeichert

    (a) on add weigh and notify after

    (b) on delete cascade

    (c) on change weigh and notify after

    (d) (anfang, ende)

    Linien-Index Linie

    (e) on delete ignore

    (f) on change restrict

    (g) (anfang, ende)

    Wird eine Linie neu definiert, so muss beim Erstellen des Indexeintrages überprüft werden, ob sie erlaubt ist (a). Ist sie erlaubt, so muss anschliessend der Indexeintrag generiert werden (darum notify after). Wird einer der beiden Endpunkte verschoben, so darf dadurch nicht eine Doppeltführung der Linie entstehen (c). Die Relation zeigt auf beide Endpunkte der Linie gleichzeitig (d).