Kreis-Klasse
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 57 von 70.
Aufgabe
EinfachWir entwickeln unseren Shape Manager weiter, indem wir neben dem Rectangle, das du in der vorherigen Lektion erstellt hast, eine Circle-Klasse hinzufügen.
Du wirst mit vier Dateien arbeiten, um deine Formen übersichtlich zu organisieren:
Shape.lua: Deine Basisklasse Shape mit:new(name)und:getName().Rectangle.lua: Deine Rectangle-Klasse aus der vorherigen Aufgabe mit:getArea().Circle.lua: Erstelle eine Circle-Klasse, die von Shape erbt. Der Konstruktor soll einenradiusakzeptieren, den Elternkonstruktor mit dem Namen"Circle"aufrufen und den Radius speichern. Füge eine:getArea()-Methode hinzu, die die Fläche des Kreises mithilfe der Formel πr² berechnet. Verwendemath.pials Wert für π.main.lua: Fordere sowohl deine Rectangle- als auch deine Circle-Module an. Lies drei Werte aus der Eingabe ein: die Breite eines Rechtecks, die Höhe eines Rechtecks und den Radius eines Kreises. Erstelle jeweils eine Instanz jeder Form und gib vier Zeilen aus: den Namen des Rechtecks, die Fläche des Rechtecks, den Namen des Kreises und die Fläche des Kreises.
Beide Formen verwenden jetzt durch Vererbung dieselbe Schnittstelle: Jede besitzt eine :getName()-Methode von Shape und eine eigene :getArea()-Implementierung. Diese gemeinsame Schnittstelle wird in den kommenden Lektionen nützlich werden.
Eingabe: Drei Zeilen: Breite (Zahl), Höhe (Zahl) und Radius (Zahl).
Ausgabe: Vier Zeilen: Name des Rechtecks, Fläche des Rechtecks, Name des Kreises, Fläche des Kreises.
Probier es selbst
-- Rectangle-Modul einbinden
local Rectangle = require('Rectangle')
-- Circle-Modul einbinden
-- TODO: Circle-Modul hier einbinden
-- Breite und Höhe von der Eingabe lesen
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Radius von der Eingabe lesen
-- Neue Rectangle-Instanz mit den gegebenen Dimensionen erstellen
local rect = Rectangle:new(width, height)
-- TODO: Neue Circle-Instanz mit dem gegebenen Radius erstellen
-- Namen und Fläche des Rechtecks ausgeben
print(rect:getName())
print(rect:getArea())
-- TODO: Namen und Fläche des Kreises ausgeben
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