Modellierung und Simulation - Objektorientierte Programmierung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 29: Zeile 29:
|}
|}


== 2. Klasse „Auto“ ==
== Aufgabe 8.2 Klasse „Auto“ ==
Erstelle eine Klasse <code>Auto</code>, die von <code>Fahrzeug</code> erbt.
Erstelle eine Klasse <code>Auto</code>, die von <code>Fahrzeug</code> erbt.


Zeile 35: Zeile 35:
{| class="wikitable"
{| class="wikitable"
|-
|-
| Eigenschaft: || <code>Marke</code> || nur innerhalb der Klasse zugänglich
| Eigenschaft: || <code>Marke</code> ||  
|-
|-
| Konstruktor: || <code>Auto()</code>|| setzt Geschwindigkeit und Marke
| Konstruktor: || <code>Auto()</code>|| setzt Geschwindigkeit und Marke
Zeile 46: Zeile 46:
=== Beispielausgabe ===
=== Beispielausgabe ===
*Auto: BMW
*Auto: BMW
*Geschwindigkeit: 180 km/h
*Geschwindigkeit: 180&thinsp;km/h


== 3. Klasse „Fahrrad“ ==
== Aufgabe 8.3 Klasse <code>Fahrrad</code> ==
 
Erstelle eine Klasse <code>Fahrrad</code>, die ebenfalls von <code>Fahrzeug</code> erbt.
Erstelle eine Klasse '''Fahrrad''', die ebenfalls von ''Fahrzeug'' erbt.
 
==== Eigenschaften ====
 
Typ (z. B. Mountainbike, Rennrad)


==== Anforderungen ====
==== Anforderungen ====
{| class="wikitable"
|-
| Eigenschaft: || <code>Typ</code> || nur innerhalb der Klasse zugänglich, z. B. Mountainbike, Rennrad
|-
| Konstruktor: || <code>Fahrrad()</code>|| setzt Geschwindigkeit und Typ
|-
| Methode: || <code>getGeschwindigkeit()</code> || liest die Geschwindigkeit aus
|-
| Abstrakte Methode: || <code>info()</code> || liest die Informationen
|}


Konstruktor:
=== Beispielausgabe ===
setzt Geschwindigkeit und Typ
*Fahrrad: Mountainbike
Implementiere:
*Geschwindigkeit: 25&thinsp;km/h
''info()''
 
==== Beispielausgabe ====
Fahrrad: Mountainbike
Geschwindigkeit: 25 km/h
 
=== 4. Hauptprogramm (Polymorphismus) ===


Erstelle ein Skript '''main.m'''.
== Aufgabe 8.4 Hauptprogramm (Polymorphismus) ==


==== Aufgaben ====
Erstelle ein Skript <code>main.m</code>.


Erzeuge:
=== Aufgaben ===
1 Auto
* Erzeuge:
1 Fahrrad
*1 Auto
Speichere beide in einer Liste / einem Array
*1 Fahrrad
Rufe für jedes Objekt die Methode ''info()'' auf
*Speichere beide in einer Liste/einem Array
*Rufe für jedes Objekt die Methode <code>info()</code> auf


== 💡 Zusatzaufgabe (optional) ==
== Aufgabe 8.5 Zusatzaufgabe ==


=== a) Klasse „E-Bike“ ===
=== Aufgabe 8.5.1 Klasse „E-Bike“ ===
Erweitere das System um eine Klasse '''E-Bike''':
Erweitere das System um eine Klasse '''E-Bike''':


zusätzliche Eigenschaft:
Zusätzliche Eigenschaft:
Akkukapazität
*Akkukapazität
überschreibt:
*überschreibt: <code>info()</code>
''info()''


=== b) Kapselung erweitern ===
=== Aufgabe 8.5.2 Kapselung erweitern ===


Setze ''Geschwindigkeit'' auf '''private'''
*Setze ''Geschwindigkeit'' auf '''private'''
Erstelle Methode:
*Erstelle Methode: <code>setGeschwindigkeit(v)</code>
setGeschwindigkeit(v)
* Validierung: Geschwindigkeit darf nicht negativ sein
Validierung:
Geschwindigkeit darf nicht negativ sein


== 🧠 Leitfragen ==
= Lernzielkontrolle =
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Warum ist die Klasse <code>Fahrzeug</code> abstrakt?&thinsp;</strong>
|-
Die Klasse Fahrzeug ist abstrakt, weil sie kein konkretes Objekt beschreibt, sondern nur eine allgemeine Vorlage darstellt.
|-
*Ein <code>Fahrzeug</code> an sich existiert nicht in der Realität als eindeutiges Objekt.
*Es dient nur als gemeinsame Struktur für spezialisierte Klassen wie Auto oder Fahrrad.
*Die abstrakte Methode <code>info()</code> erzwingt, dass jede Unterklasse ihre eigene Umsetzung liefert.
|}


Warum ist die Klasse ''Fahrzeug'' abstrakt?
Wo wird Vererbung im Code sichtbar?
Wo wird Vererbung im Code sichtbar?
Was bedeutet Polymorphismus im Hauptprogramm?
Was bedeutet Polymorphismus im Hauptprogramm?

Version vom 21. Mai 2026, 15:25 Uhr

Autor: Prof. Dr.-Ing. Schneider
Termin: 22.05.2026

Lernziel

Nach der Bearbeitung können die Studierenden:

  • abstrakte Klassen in MATLAB® erstellen
  • Vererbung anwenden
  • private/protected Eigenschaften unterscheiden
  • Polymorphismus praktisch einsetzen
  • ein einfaches OOP-System strukturieren

Aufgabenstellung

Aufgabe 8.1 Abstrakte Klasse „Fahrzeug“

Erstelle eine abstrakte Klasse Fahrzeug.

Anforderungen

Eigenschaft: Geschwindigkeit nur innerhalb der Klasse zugänglich
Konstruktor: Fahrzeug() setzt die Geschwindigkeit
Methode: getGeschwindigkeit() liest die Geschwindigkeit aus
Abstrakte Methode: info() liest die Informationen

Aufgabe 8.2 Klasse „Auto“

Erstelle eine Klasse Auto, die von Fahrzeug erbt.

Anforderungen

Eigenschaft: Marke
Konstruktor: Auto() setzt Geschwindigkeit und Marke
Methode: getGeschwindigkeit() liest die Geschwindigkeit aus
Abstrakte Methode: info() liest die Informationen

Beispielausgabe

  • Auto: BMW
  • Geschwindigkeit: 180 km/h

Aufgabe 8.3 Klasse Fahrrad

Erstelle eine Klasse Fahrrad, die ebenfalls von Fahrzeug erbt.

Anforderungen

Eigenschaft: Typ nur innerhalb der Klasse zugänglich, z. B. Mountainbike, Rennrad
Konstruktor: Fahrrad() setzt Geschwindigkeit und Typ
Methode: getGeschwindigkeit() liest die Geschwindigkeit aus
Abstrakte Methode: info() liest die Informationen

Beispielausgabe

  • Fahrrad: Mountainbike
  • Geschwindigkeit: 25 km/h

Aufgabe 8.4 Hauptprogramm (Polymorphismus)

Erstelle ein Skript main.m.

Aufgaben

  • Erzeuge:
  • 1 Auto
  • 1 Fahrrad
  • Speichere beide in einer Liste/einem Array
  • Rufe für jedes Objekt die Methode info() auf

Aufgabe 8.5 Zusatzaufgabe

Aufgabe 8.5.1 Klasse „E-Bike“

Erweitere das System um eine Klasse E-Bike:

Zusätzliche Eigenschaft:

  • Akkukapazität
  • überschreibt: info()

Aufgabe 8.5.2 Kapselung erweitern

  • Setze Geschwindigkeit auf private
  • Erstelle Methode: setGeschwindigkeit(v)
  • Validierung: Geschwindigkeit darf nicht negativ sein

Lernzielkontrolle

Die Klasse Fahrzeug ist abstrakt, weil sie kein konkretes Objekt beschreibt, sondern nur eine allgemeine Vorlage darstellt.
  • Ein Fahrzeug an sich existiert nicht in der Realität als eindeutiges Objekt.
  • Es dient nur als gemeinsame Struktur für spezialisierte Klassen wie Auto oder Fahrrad.
  • Die abstrakte Methode info() erzwingt, dass jede Unterklasse ihre eigene Umsetzung liefert.

Wo wird Vererbung im Code sichtbar? Was bedeutet Polymorphismus im Hauptprogramm? Warum ist Kapselung sinnvoll? Was passiert ohne Getter/Setter?

📊 Erwartetes Ergebnis (Polymorphismus)

fahrzeuge = [auto, fahrrad];

for k = 1:length(fahrzeuge) fahrzeuge(k).info(); end

→ gleiche Methode info(), aber unterschiedliche Ausgabe

🧾 Lernziel

Nach der Bearbeitung können die Studierenden:

abstrakte Klassen in MATLAB erstellen Vererbung anwenden private/protected Eigenschaften unterscheiden Polymorphismus praktisch einsetzen ein einfaches OOP-System strukturieren


MATLAB® Befehlsübersicht
→ zurück zum Hauptartikel: BSE Modellierung und Simulation - SoSe26