Dokumentation: Zugfahrten-Simulationssystem

Diese Dokumentation erklärt das objektorientierte Zugfahrten-Simulationssystema> für angehende Fachinformatiker für Anwendungsentwicklung (FIAE).

1. Systemübersicht

Das System simuliert verschiedene Zugfahrten mit ihren Komponenten (Triebfahrzeuge, Waggons, Abteile) und Routen (Bahnhöfe). Es demonstriert grundlegende Prinzipien der objektorientierten Programmierung (OOP) in JavaScript.

Hauptfunktionen:

2. Klassenmodell

Das System basiert auf einem objektorientierten Klassenmodell mit Vererbung und Komposition.

Klassendiagramm (textuelle Darstellung)

Waggon
+ typ: string
+ constructor(typ: string)

Waggon ist die Basisklasse für:

Personenwagen
- abteile: Abteil[]
+ constructor()
+ abteilHinzufuegen(abteil: Abteil): void
Speisewagen
+ constructor()
Gitterwaggon
+ constructor()
Triebfahrzeug
+ typ: string
+ constructor(typ: string)

Triebfahrzeug ist die Basisklasse für:

DieselLok
+ constructor()
ELok
+ constructor()
Zug
- name: string
- triebfahrzeuge: Triebfahrzeug[]
- steuerwagen: boolean
- waggons: Waggon[]
+ constructor(name: string, triebfahrzeuge: Triebfahrzeug[], steuerwagen: boolean)
+ waggonHinzufuegen(waggon: Waggon): void
Fahrt
- zug: Zug
- bahnhoefe: Bahnhof[]
+ constructor(zug: Zug, bahnhoefe: Bahnhof[])
Fahrplan
- fahrten: Fahrt[]
+ constructor()
+ fahrtHinzufuegen(fahrt: Fahrt): void
+ anzeigen(htmlElement: HTMLElement): void

3. Detaillierte Klassendokumentation

3.1 Bahnhof

Repräsentiert einen Bahnhof mit Namen.

class Bahnhof { constructor(name) { this.name = name; // Name des Bahnhofs } }

3.2 Abteil

Repräsentiert ein Abteil in einem Personenwagen.

class Abteil { constructor(nummer) { this.nummer = nummer; // Nummer des Abteils } }

3.3 Waggon und spezialisierte Waggons

Basisklasse für alle Waggontypen mit spezialisierten Unterklassen.

// Basisklasse class Waggon { constructor(typ) { this.typ = typ; // Typ des Waggons } } // Personenwagen mit Abteilen class Personenwagen extends Waggon { constructor() { super("Personenwagen"); this.abteile = []; // Array für Abteile } abteilHinzufuegen(abteil) { this.abteile.push(abteil); } } // Speisewagen ohne Abteile class Speisewagen extends Waggon { constructor() { super("Speisewagen"); } } // Gitterwaggon für Güter class Gitterwaggon extends Waggon { constructor() { super("Gitterwaggon"); } }

3.4 Triebfahrzeug und spezialisierte Loks

Basisklasse für Triebfahrzeuge mit spezialisierten Unterklassen.

// Basisklasse class Triebfahrzeug { constructor(typ) { this.typ = typ; // Typ des Triebfahrzeugs } } // Diesel-Lokomotive class DieselLok extends Triebfahrzeug { constructor() { super("Diesel-Lok"); } } // Elektro-Lokomotive class ELok extends Triebfahrzeug { constructor() { super("E-Lok"); } }

3.5 Zug

Repräsentiert einen kompletten Zug mit Triebfahrzeugen und Waggons.

class Zug { constructor(name, triebfahrzeuge, steuerwagen) { this.name = name; // Zugname/Nummer this.triebfahrzeuge = triebfahrzeuge; // Array von Triebfahrzeugen this.steuerwagen = steuerwagen; // Hat der Zug einen Steuerwagen? this.waggons = []; // Array für Waggons } waggonHinzufuegen(waggon) { this.waggons.push(waggon); } }

3.6 Fahrt

Repräsentiert eine Zugfahrt mit Route (mindestens 2 Bahnhöfe).

class Fahrt { constructor(zug, bahnhoefe) { if (bahnhoefe.length < 2) { throw new Error("Eine Fahrt muss mindestens zwei Bahnhöfe enthalten."); } this.zug = zug; // Zug-Objekt this.bahnhoefe = bahnhoefe; // Array von Bahnhöfen } }

3.7 Fahrplan

Verwaltet eine Sammlung von Fahrten und stellt sie dar.

class Fahrplan { constructor() { this.fahrten = []; // Array für Fahrten } fahrtHinzufuegen(fahrt) { this.fahrten.push(fahrt); } anzeigen(htmlElement) { if (this.fahrten.length === 0) { htmlElement.innerHTML = "<p>Keine Fahrten im Fahrplan.</p>"; return; } this.fahrten.forEach(fahrt => { // Erstellt die HTML-Darstellung für jede Fahrt // (Details siehe Originalcode) }); } }

4. Objektbeziehungen

4.1 Vererbung (Generalisierung/Spezialisierung)

4.2 Komposition (Teil-Ganzes-Beziehungen)

4.3 Assoziationen

4.4 Abhängigkeiten

5. Dateninitialisierung

Das System verwendet vordefinierte Zugdaten im JSON-Format:

const zugdaten = [ { name: "RE1", triebfahrzeuge: ["ELok"], steuerwagen: true, waggons: ["Personenwagen", "Personenwagen", "Personenwagen"], abteile: [[1, 2], [3, 4], [5, 6]], route: ["Hamm", "Dortmund", "Essen", "Düsseldorf", "Köln", "Aachen"] }, // Weitere Zugdefinitionen... ];

Initialisierungsprozess:

  1. Erstellung eines neuen Fahrplans
  2. Verarbeitung jeder Zugdefinition:
  3. Anzeige des Fahrplans im HTML-DOM

6. OOP-Prinzipien im System

6.1 Kapselung

Jede Klasse kapselt ihre Eigenschaften und Methoden:

6.2 Vererbung

Spezialisierte Klassen erweitern Basisklassen:

6.3 Polymorphie

Unterschiedliche Waggontypen werden einheitlich behandelt:

6.4 Komposition

Komplexe Objekte setzen sich aus Teilobjekten zusammen:

7. Lernziele für FIAE Umschüler

7.1 Verständnis der OOP-Konzepte

7.2 JavaScript-spezifische Konzepte

7.3 Modellierung realer Systeme

Tipp für Umschüler: Experimentieren Sie mit dem Code! Fügen Sie neue Zugtypen hinzu, erweitern Sie die Klassen oder ändern Sie die Darstellung. Praktische Übung ist der beste Weg, OOP zu verstehen.