Zusammenfassung - Formen-Hierarchie
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 36 von 70.
Aufgabe
EinfachLass uns eine komplette Formenhierarchie von Grund auf neu erstellen! Du wirst eine Shape-Basisklasse erstellen, von der alle Formen erben, und dann die Kindklassen Circle und Square bauen, die jeweils ihre eigenen einzigartigen Eigenschaften haben, während sie gemeinsame Funktionalitäten teilen.
Du wirst deinen Code in vier Dateien organisieren:
Shape.lua: Deine Basisklasse, von der alle Formen erben werden. Sie sollte einen:new(color)-Konstruktor haben, der die Farbe der Form speichert, und eine:getColor()-Methode, die diese zurückgibt. Diese gemeinsame Eigenschaft bedeutet, dass jede Form – egal ob Kreis oder Quadrat – eine Farbe haben wird.Circle.lua: Eine Kindklasse, die von Shape erbt. Ihr:new(color, radius)-Konstruktor sollte den Eltern-Konstruktor für die Farbe aufrufen und dann den Radius als einzigartiges Attribut hinzufügen. Füge eine:describe()-Methode hinzu, die die Details des Kreises ausgibt.Square.lua: Eine weitere Kindklasse, die von Shape erbt. Ihr:new(color, side)-Konstruktor sollte ebenfalls den Eltern-Konstruktor aufrufen und dann die Seitenlänge speichern. Füge auch für Quadrate eine:describe()-Methode hinzu.main.lua: Führe alles zusammen, indem du Instanzen beider Formen erstellst und demonstrierst, dass sie korrekt von Shape erben, während sie ihre einzigartigen Eigenschaften beibehalten.
Du wirst zwei Eingaben erhalten:
- Kreis-Daten: Farbe und Radius, getrennt durch ein Komma (z. B.
blue,5) - Quadrat-Daten: Farbe und Seitenlänge, getrennt durch ein Komma (z. B.
red,4)
Erstelle in deiner Hauptdatei einen Circle und ein Square mit den angegebenen Werten. Gib dann Folgendes 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 :describe()-Methode für Circle sollte Folgendes ausgeben:
Circle with radius {radius}Die :describe()-Methode für Square sollte Folgendes ausgeben:
Square with side {side}Wenn die Eingaben beispielsweise blue,5 und red,4 sind, 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 es nie selbst), während jede ihr eigenes einzigartiges Attribut und ihre eigene :describe()-Methode hat!
Probier es selbst
-- main.lua: Alles zusammenführen
local Circle = require('Circle')
local Square = require('Square')
-- Eingabe für Kreis lesen (Farbe, Radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Eingabe für Quadrat lesen (Farbe, Seitenlänge)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Erstelle eine Circle-Instanz mit der angegebenen Farbe und dem Radius
-- TODO: Erstelle eine Square-Instanz mit der angegebenen Farbe und der Seitenlänge
-- TODO: Rufe :describe() für den Kreis auf
-- TODO: Rufe :describe() für das Quadrat auf
-- TODO: Gib die Farbe des Kreises mit :getColor() aus
-- TODO: Gib die Farbe des Quadrats mit :getColor() aus
Alle Lektionen in Object Oriented Programming
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-Klasse2Klassen-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