Menu
Coddy logo textTech

Gesamtfläche

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

challenge icon

Aufgabe

Einfach

Fügen wir deiner ShapeCollection eine leistungsstarke Funktion hinzu: die Möglichkeit, die Gesamtfläche aller darin enthaltenen Formen zu berechnen. Hier zeigt sich die Stärke der Polymorphie: Deine Sammlung kann für jede Form :getArea() aufrufen, ohne zu wissen, ob es sich um ein Rechteck oder einen Kreis handelt.

Du wirst auf deinen vorhandenen Projektdateien weiter aufbauen:

  • Shape.lua: Deine Basisklasse Shape (unverändert).
  • Rectangle.lua: Deine Klasse Rectangle mit :getArea() und :getPerimeter().
  • Circle.lua: Deine Klasse Circle mit :getArea() und :getPerimeter().
  • ShapeCollection.lua: Erweitere deine Sammlungsklasse, indem du eine :getTotalArea()-Methode hinzufügst. Diese Methode sollte durch alle gespeicherten Formen iterieren, für jede :getArea() aufrufen und die Summe aller Flächen zurückgeben.
  • main.lua: Fordere deine Module an, lies die Maße aus der Eingabe, erstelle ein Rectangle und einen Circle, füge beide zu einer ShapeCollection hinzu und gib anschließend die Gesamtfläche aller Formen in der Sammlung aus.

Das Schöne an diesem Ansatz ist, dass :getTotalArea() keine separate Logik für Rechtecke und Kreise benötigt. Die Methode vertraut einfach darauf, dass jede Form in der Sammlung über eine :getArea()-Methode verfügt. Du könntest später Dreiecke, Sechsecke oder beliebige andere Formen hinzufügen, und die Berechnung der Gesamtfläche würde ohne Änderungen funktionieren.

Eingabe: Drei Zeilen: Breite (Zahl), Höhe (Zahl) und Radius (Zahl).

Ausgabe: Eine einzelne Zeile mit der Gesamtfläche aller Formen in der Sammlung.

Probier es selbst

-- Das Rectangle-Modul laden
local Rectangle = require('Rectangle')

-- Das Circle-Modul laden
local Circle = require('Circle')

-- Das ShapeCollection-Modul laden
local ShapeCollection = require('ShapeCollection')

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

-- Eine neue Rectangle-Instanz mit den gegebenen Abmessungen erstellen
local rect = Rectangle:new(width, height)

-- Eine neue Circle-Instanz mit dem gegebenen Radius erstellen
local circ = Circle:new(radius)

-- Eine neue ShapeCollection erstellen
local collection = ShapeCollection:new()

-- Beide Formen zur Sammlung hinzufügen
collection:addShape(rect)
collection:addShape(circ)

-- Die Gesamtfläche aller Formen in der Sammlung ausgeben
print(collection:getTotalArea())

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Lua-Compiler