Formen-Sammlung
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 59 von 70.
Aufgabe
EinfachNachdem Sie nun sowohl die Rectangle- als auch die Circle-Klassen mit voller Funktionalität erstellt haben, lassen Sie uns eine ShapeCollection-Klasse erstellen, die mehrere Formen zusammen verwalten kann. Dies ist ein großartiges Beispiel für Komposition – die Sammlung „hat“ Formen, anstatt selbst eine Form „zu sein“.
Sie werden Ihrem wachsenden Projekt eine neue Datei hinzufügen:
Shape.lua: Ihre Basisklasse Shape (unverändert).Rectangle.lua: Ihre Rectangle-Klasse mit:getArea()und:getPerimeter().Circle.lua: Ihre Circle-Klasse mit:getArea()und:getPerimeter().ShapeCollection.lua: Erstellen Sie eine neue Klasse, die Formen intern speichert. Fügen Sie einen:new()-Konstruktor hinzu, der eine leere Liste von Formen initialisiert, eine:addShape(shape)-Methode, die der Sammlung eine beliebige Form hinzufügt, und eine:count()-Methode, die zurückgibt, wie viele Formen derzeit gespeichert sind.main.lua: Bringen Sie alles zusammen, indem Sie Ihre Module einbinden. Lesen Sie die Dimensionen aus der Eingabe ein, erstellen Sie ein Rectangle und ein Circle, fügen Sie beide einer ShapeCollection hinzu und geben Sie dann die Anzahl der Formen in der Sammlung aus, gefolgt vom Namen jeder Form (in der Reihenfolge, in der sie hinzugefügt wurden).
Die ShapeCollection muss nicht wissen, ob sie Rechtecke oder Kreise speichert – sie hält einfach Formen. Dies demonstriert, wie Polymorphismus es Ihnen ermöglicht, verschiedene Objekttypen einheitlich über eine gemeinsame Schnittstelle zu behandeln.
Eingabe: Drei Zeilen – Breite (Zahl), Höhe (Zahl) und Radius (Zahl).
Ausgabe: Drei Zeilen – die Anzahl der Formen in der Sammlung, dann der Name der ersten hinzugefügten Form, dann der Name der zweiten hinzugefügten Form.
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 Anzahl der Formen in der Sammlung aus
print(collection:count())
-- Gibt den Namen jeder Form in der Reihenfolge aus, in der sie hinzugefügt wurden
for i = 1, collection:count() do
print(collection.shapes[i]:getName())
end
Alle Lektionen in Object Oriented Programming
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-Klasse2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-Check