Menu
Coddy logo textTech

Kreis-Klasse

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

challenge icon

Aufgabe

Einfach

Lassen 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 einen radius akzeptieren, 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 Sie math.pi fü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