Eine Fußgänger-Ampel zum Überqueren einer Straße wird durch Knopfdruck von rot auf grün geschaltet und damit gleichzeitig eine Auto-Ampel von grün auf rot.
Eine Ampelschaltung ist ein Beispiel für Beziehungen und Referenzen zwischen Objekten:
Beziehungen (Assoziationen) zwischen Objekten
Attribute und Methoden eines Objekts (genutztes Objekt) können in anderen Objekten (nutzendes Objekt) verwendet werden.
Eine wichtige Beziehung ist die enthält-Beziehung (Aggregation). Bei einer enthält-Beziehungen werden die Objekte in einer Reihe, getrennt durch einen Punkt dargestellt, an deren Ende ein Attribut steht.
Grundsätzlich wird bei Beziehungen der Zugriff auf Attribute und Methoden einer anderen Klasse dieser durch eine durch Punkte getrennte Reihe von Objekten der Klassen dargestellt, an deren Ende eine Methode oder ein Attribut steht.
Referenzen zwischen Objekten
Eine Identität des genutzten Objektes ist Attribut-Wert des nutzenden Objekts.
Referenzen sind Grundlage von Beziehungen, damit Attribute und Methoden eines Objekts (genutztes Objekt) können in anderen Objekten (nutzendes Objekt) verwendet werden.
UML-Diagramme (Unified Modeling Language)
Grundlage der Schaltung ist, dass JavaScript über die Methode getElementById Zugriff auf das HTML-Element Canvas (Zeichenfläche) hat.
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
In der Zeichenfläche werden in den Methoden zeichnen() der Klassen Rechteck, Kreisoben und Kreisunten die Grafik-Objekte Rechteck und Kreis durch die JavaScript-Methoden rect() und arc() erzeugt, aus denen in der Klasse Ampel in der Methode zeichnen() eine Ampel zusammengebaut wird.
Das Objekt Fußgängerüberweg (ampelschaktung1) der Klasse Ampelschaltung setzt sich aus den Objekten Fußgängerampel und Autoampel (Ampel1 und Ampel2) der Klasse Ampel zusammen, die aus den Objekten Gehäuse und Lichtoben bzw. Lichtunten der Klassen Rechteck und Kreis bestehen (Die zwei Objekte Lichtoben und Lichtunten werden gebraucht, da es sonst Probleme mit mehrfacher Referenzierung gäbe.).
Die Attribute der entsprechenden Klassen für die jeweiligen Klassen, werden in den Konstruktor-Methoden festgelegt.
Aus den Klassen werden die entsprechenden Objekte durch den Operator new mit den in der Konstruktor-Methode jeder Klasse erzeugt, damit auf deren Attribute und Methoden durch die referenzierende Klasse zugegriffen werden kann.
Die Attribute werden bei der Übergabe im Konstruktor ohne var deklariert.
Die Ampeln sind Automaten mit den Zuständen grün (lichtOben: white, lichtUnten: green) und rot (lichtOben: red, lichtUnten: white) . Die Methode ampelnSchalten() der Klasse Ampelschaltung ist die ausgelöste Aktion für den Automaten mit lediglich einer Fallunterscheidungen über den Zustand des Automaten, der mit Methoden der Objekte lichtOben und lichtUnten der Klassen Kreisoben und Kreisunten geändert werden kann., was einen Zugriff auf Methoden einer anderen Klasse darstellt.
Die auslösende Aktion für den Automaten wird durch die Methode ampelnSchalten() der Klasse Ampelschaltung umgesetzt, wobei die Fahrzeugampel direkt geschaltet wird und nicht wie es eigentlich bei einer Beziehung zwischen Klassen sein sollte durch die Fußgängerampel.
Jede Klasse hat eine Methode zeichnen() zum Anzeigen der entsprechenden Objekte in der Convas (Zeichenfläche).
Die Methode ampelnSchalten() in der Klasse Ampelschaltung wird durch die Schaltfläche aufgerufen und verwendet die Methode zustandSchalten() aus der Klasse Ampel.