Menu
Coddy logo textTech

Umfang-Methode

Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 58 von 70.

challenge icon

Aufgabe

Einfach

Erweitern 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. Verwende math.pi fü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

Übe selbstständig: Online-Lua-Compiler