Umfang-Methode
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 58 von 70.
Aufgabe
EinfachErweitern wir unseren Shape Manager, indem wir den Klassen Rectangle und Circle jeweils eine :getPerimeter()-Methode hinzufügen. Genau wie bei :getArea() berechnet jede Form ihren Umfang auf unterschiedliche Weise, aber beide verwenden denselben Methodennamen: ein perfektes Beispiel für Polymorphismus in der Praxis.
Du arbeitest weiterhin mit deinen vorhandenen Dateien:
Shape.lua: Deine Basisklasse Shape bleibt unverändert.Rectangle.lua: Füge eine:getPerimeter()-Methode hinzu, die den Umfang des Rechtecks mithilfe der Formel 2 × (width + height) zurückgibt.Circle.lua: Füge eine:getPerimeter()-Methode hinzu, die den Umfang des Kreises mithilfe der Formel 2 × π × radius zurückgibt. Verwendemath.pifür π.main.lua: Binde beide Formmodule ein, lies die Abmessungen aus der Eingabe ein, erstelle ein Rectangle und einen Circle und gib anschließend sechs Zeilen aus: den Namen, die Fläche und den Umfang des Rechtecks, gefolgt vom Namen, der Fläche und dem Umfang des Kreises.
Beide Formen verfügen jetzt über eine vollständige Schnittstelle mit :getName(), :getArea() und :getPerimeter(): Alle sind trotz unterschiedlicher Implementierungen über dieselben Methodennamen zugänglich.
Eingabe: Drei Zeilen: width (Zahl), height (Zahl) und radius (Zahl).
Ausgabe: Sechs Zeilen in dieser Reihenfolge: Name des Rechtecks, Fläche des Rechtecks, Umfang des Rechtecks, Name des Kreises, Fläche des Kreises, Umfang des Kreises.
Probier es selbst
-- Lade das Rectangle-Modul
local Rectangle = require('Rectangle')
-- Lade das Circle-Modul
local Circle = require('Circle')
-- Lies width und height von der Eingabe
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())
-- Erstelle eine neue Rectangle-Instanz mit den gegebenen Dimensionen
local rect = Rectangle:new(width, height)
-- Erstelle eine neue Circle-Instanz mit dem gegebenen radius
local circ = Circle:new(radius)
-- Gib den Namen, die Fläche und den Umfang des rectangle aus
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())
-- Gib den Namen, die Fläche und den Umfang des circle aus
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())
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