Menu
Coddy logo textTech

Kreis-Klasse

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

challenge icon

Aufgabe

Einfach

Wir entwickeln unseren Shape Manager weiter, indem wir neben dem Rectangle, das du in der vorherigen Lektion erstellt hast, eine Circle-Klasse hinzufügen.

Du wirst mit vier Dateien arbeiten, um deine Formen übersichtlich zu organisieren:

  • Shape.lua: Deine Basisklasse Shape mit :new(name) und :getName().
  • Rectangle.lua: Deine Rectangle-Klasse aus der vorherigen Aufgabe mit :getArea().
  • Circle.lua: Erstelle eine Circle-Klasse, die von Shape erbt. Der Konstruktor soll einen radius akzeptieren, den Elternkonstruktor mit dem Namen "Circle" aufrufen und den Radius speichern. Füge eine :getArea()-Methode hinzu, die die Fläche des Kreises mithilfe der Formel πr² berechnet. Verwende math.pi als Wert für π.
  • main.lua: Fordere sowohl deine Rectangle- als auch deine Circle-Module an. Lies drei Werte aus der Eingabe ein: die Breite eines Rechtecks, die Höhe eines Rechtecks und den Radius eines Kreises. Erstelle jeweils eine Instanz jeder Form und gib vier Zeilen aus: den Namen des Rechtecks, die Fläche des Rechtecks, den Namen des Kreises und die Fläche des Kreises.

Beide Formen verwenden jetzt durch Vererbung dieselbe Schnittstelle: Jede besitzt eine :getName()-Methode von Shape und eine eigene :getArea()-Implementierung. Diese gemeinsame Schnittstelle wird in den kommenden Lektionen nützlich werden.

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

-- Rectangle-Modul einbinden
local Rectangle = require('Rectangle')

-- Circle-Modul einbinden
-- TODO: Circle-Modul hier einbinden

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

-- TODO: Radius von der Eingabe lesen

-- Neue Rectangle-Instanz mit den gegebenen Dimensionen erstellen
local rect = Rectangle:new(width, height)

-- TODO: Neue Circle-Instanz mit dem gegebenen Radius erstellen

-- Namen und Fläche des Rechtecks ausgeben
print(rect:getName())
print(rect:getArea())

-- TODO: Namen und Fläche des Kreises ausgeben

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Lua-Compiler