Menu
Coddy logo textTech

Umfang-Methode

Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 58 von 70.

challenge icon

Aufgabe

Einfach

Lassen Sie uns unseren Shape Manager erweitern, indem wir sowohl der Rectangle- als auch der Circle-Klasse eine :getPerimeter()-Methode hinzufügen. Genau wie bei :getArea() berechnet jede Form ihren Umfang anders, aber sie teilen denselben Methodennamen – ein perfektes Beispiel für Polymorphismus in Aktion.

Sie werden weiterhin mit Ihren bestehenden Dateien arbeiten:

  • Shape.lua: Ihre Basisklasse Shape bleibt unverändert.
  • Rectangle.lua: Fügen Sie eine :getPerimeter()-Methode hinzu, die den Umfang des Rechtecks mit der Formel 2 × (width + height) zurückgibt.
  • Circle.lua: Fügen Sie eine :getPerimeter()-Methode hinzu, die den Umfang des Kreises mit der Formel 2 × π × radius zurückgibt. Verwenden Sie math.pi für π.
  • main.lua: Binden Sie beide Shape-Module ein, lesen Sie die Dimensionen aus der Eingabe, erstellen Sie ein Rectangle und einen Circle und geben Sie dann 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 nun über eine vollständige Schnittstelle mit :getName(), :getArea() und :getPerimeter() – alle über dieselben Methodennamen zugänglich, trotz unterschiedlicher Implementierungen.

Eingabe: Drei Zeilen – width (Zahl), height (Zahl) und radius (Zahl).

Ausgabe: Sechs Zeilen in der Reihenfolge: Name des Rechtecks, Fläche des Rechtecks, Umfang des Rechtecks, Name des Kreises, Fläche des Kreises, Umfang des Kreises.

Probier es selbst

-- Erfordert das Rectangle-Modul
local Rectangle = require('Rectangle')

-- Erfordert das Circle-Modul
local Circle = require('Circle')

-- Breite und Höhe von der Eingabe lesen
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Erstellt eine neue Rectangle-Instanz mit den angegebenen Dimensionen
local rect = Rectangle:new(width, height)

-- Erstellt eine neue Circle-Instanz mit dem angegebenen Radius
local circ = Circle:new(radius)

-- Gibt den Namen, die Fläche und den Umfang des Rechtecks aus
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- Gibt den Namen, die Fläche und den Umfang des Kreises aus
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

Alle Lektionen in Object Oriented Programming