Menu
Coddy logo textTech

Gesamtfläche

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns Ihrer ShapeCollection eine leistungsstarke Funktion hinzufügen – die Fähigkeit, die Gesamtfläche aller darin enthaltenen Formen zu berechnen. Hier glänzt Polymorphismus wirklich: Ihre Sammlung kann :getArea() für jede Form aufrufen, ohne zu wissen, ob es sich um ein Rechteck oder einen Kreis handelt.

Sie werden auf Ihren bestehenden Projektdateien weiter aufbauen:

  • Shape.lua: Ihre Basisklasse Shape (unverändert).
  • Rectangle.lua: Ihre Klasse Rectangle mit :getArea() und :getPerimeter().
  • Circle.lua: Ihre Klasse Circle mit :getArea() und :getPerimeter().
  • ShapeCollection.lua: Erweitern Sie Ihre Sammlungsklasse durch Hinzufügen einer :getTotalArea() Methode. Diese Methode sollte alle gespeicherten Formen durchlaufen, :getArea() für jede einzelne aufrufen und die Summe aller Flächen zurückgeben.
  • main.lua: Binden Sie Ihre Module ein, lesen Sie die Dimensionen aus der Eingabe, erstellen Sie ein Rectangle und ein Circle, fügen Sie beide einer ShapeCollection hinzu und geben Sie dann 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 – sie vertraut einfach darauf, dass jede Form in der Sammlung eine :getArea() Methode besitzt. Sie könnten später Dreiecke, Sechsecke oder jede andere Form hinzufügen, und die Berechnung der Gesamtfläche würde ohne Modifikation funktionieren.

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

Ausgabe: Eine einzelne Zeile, die die Gesamtfläche aller Formen in der Sammlung enthält.

Probier es selbst

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

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

-- Erfordert das ShapeCollection-Modul
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())

-- 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)

-- Erstellt eine neue ShapeCollection
local collection = ShapeCollection:new()

-- Fügt beide Formen der Sammlung hinzu
collection:addShape(rect)
collection:addShape(circ)

-- Gibt die Gesamtfläche aller Formen in der Sammlung aus
print(collection:getTotalArea())

Alle Lektionen in Object Oriented Programming