Zusammenfassung - Formen-Hierarchie
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 36 von 70.
Aufgabe
EinfachErstellen wir eine vollständige Shape-Hierarchie von Grund auf! Du erstellst eine übergeordnete Klasse Shape, von der alle Formen erben, und baust anschließend die untergeordneten Klassen Circle und Square, die jeweils eigene Eigenschaften besitzen und zugleich gemeinsame Funktionalität nutzen.
Du organisierst deinen Code auf vier Dateien verteilt:
Shape.lua: Deine Basisklasse, von der alle Formen erben werden. Sie sollte einen Konstruktor:new(color)besitzen, der die Farbe der Form speichert, sowie eine Methode:getColor(), die sie zurückgibt. Dank dieser gemeinsamen Eigenschaft hat jede Form, egal ob Kreis oder Quadrat, eine Farbe.Circle.lua: Eine untergeordnete Klasse, die von Shape erbt. Ihr Konstruktor:new(color, radius)sollte den Konstruktor der übergeordneten Klasse für die Farbe aufrufen und anschließend den Radius als einzigartige Eigenschaft hinzufügen. Füge außerdem eine Methode:describe()hinzu, die die Details des Kreises ausgibt.Square.lua: Eine weitere untergeordnete Klasse, die von Shape erbt. Ihr Konstruktor:new(color, side)sollte ebenfalls den Konstruktor der übergeordneten Klasse aufrufen und anschließend die Seitenlänge speichern. Füge auch für Quadrate eine Methode:describe()hinzu.main.lua: Führe alles zusammen, indem du Instanzen beider Formen erstellst und demonstrierst, dass sie korrekt von Shape erben und dabei ihre einzigartigen Eigenschaften beibehalten.
Du erhältst zwei Eingaben:
- Kreisdaten: Farbe und Radius, durch ein Komma getrennt (z. B.
blue,5) - Quadratdaten: Farbe und Seitenlänge, durch ein Komma getrennt (z. B.
red,4)
Erstelle in deiner Hauptdatei einen Circle und ein Square mit den angegebenen Werten. Gib anschließend die folgenden Ausgaben in separaten Zeilen aus:
- Rufe
:describe()für den Kreis auf - Rufe
:describe()für das Quadrat auf - Gib die Farbe des Kreises mit
:getColor()aus - Gib die Farbe des Quadrats mit
:getColor()aus
Die Methode :describe() für Circle sollte Folgendes ausgeben:
Circle with radius {radius}Die Methode :describe() für Square sollte Folgendes ausgeben:
Square with side {side}Wenn die Eingaben beispielsweise blue,5 und red,4 lauten, sollte die Ausgabe wie folgt aussehen:
Circle with radius 5
Square with side 4
blue
redDies demonstriert das vollständige Vererbungsmuster: Beide Formen erben :getColor() von Shape (sie definieren die Methode niemals selbst), während jede Form ihre eigene einzigartige Eigenschaft und Methode :describe() besitzt!
Probier es selbst
-- main.lua: Alles zusammenbringen
local Circle = require('Circle')
local Square = require('Square')
-- Eingabe für Kreis lesen (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Eingabe für Quadrat lesen (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Erstelle eine Circle-Instanz mit der gegebenen Farbe und dem Radius
-- TODO: Erstelle eine Square-Instanz mit der gegebenen Farbe und der Seite
-- TODO: Rufe :describe() auf dem Kreis auf
-- TODO: Rufe :describe() auf dem Quadrat auf
-- TODO: Gib die Farbe des Kreises mit :getColor() aus
-- TODO: Gib die Farbe des Quadrats mit :getColor() aus
Alle Lektionen in Objektorientierte Programmierung
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-KlasseKreis-KlasseUmfang-MethodeFormen-SammlungGesamtflächeFormen filtern2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-CheckÜbe selbstständig: Online-Lua-Compiler