Kreis-Klasse
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 57 von 70.
Aufgabe
EinfachLassen Sie uns unseren Shape Manager weiter ausbauen, indem wir eine Circle-Klasse neben dem Rectangle hinzufügen, das Sie in der vorherigen Lektion erstellt haben.
Sie werden mit vier Dateien arbeiten, um Ihre Formen organisiert zu halten:
Shape.lua: Ihre Basisklasse Shape mit:new(name)und:getName().Rectangle.lua: Ihre Rectangle-Klasse aus der vorherigen Herausforderung mit:getArea().Circle.lua: Erstellen Sie eine Circle-Klasse, die von Shape erbt. Der Konstruktor sollte einenradiusakzeptieren, den Eltern-Konstruktor mit dem Namen"Circle"aufrufen und den Radius speichern. Fügen Sie eine:getArea()-Methode hinzu, die die Fläche des Kreises mit der Formel πr² berechnet. Verwenden Siemath.pifür den Wert von π.main.lua: Binden Sie sowohl Ihre Rectangle- als auch Ihre Circle-Module ein. Lesen Sie drei Werte aus der Eingabe: die Breite eines Rechtecks, die Höhe eines Rechtecks und den Radius eines Kreises. Erstellen Sie jeweils eine Instanz jeder Form und geben Sie vier Zeilen aus – den Namen des Rechtecks, die Fläche des Rechtecks, den Namen des Kreises und die Fläche des Kreises.
Beide Formen teilen nun die gleiche Schnittstelle durch Vererbung – jede besitzt eine :getName()-Methode von Shape und eine eigene :getArea()-Implementierung. Diese gemeinsame Schnittstelle wird in den kommenden Lektionen nützlich sein.
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
-- Erfordert das Rectangle-Modul
local Rectangle = require('Rectangle')
-- Erfordert das Circle-Modul
-- TODO: Erfordere das Circle-Modul hier
-- Breite und Höhe von der Eingabe lesen
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Den Radius von der Eingabe lesen
-- Erstelle eine neue Rectangle-Instanz mit den gegebenen Dimensionen
local rect = Rectangle:new(width, height)
-- TODO: Erstelle eine neue Circle-Instanz mit dem gegebenen Radius
-- Gib den Namen und die Fläche des Rechtecks aus
print(rect:getName())
print(rect:getArea())
-- TODO: Gib den Namen und die Fläche des Kreises 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