Menu
Coddy logo textTech

Unabhängige Instanzen

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

Ein entscheidender Aspekt der objektorientierten Programmierung ist, dass jede Instanz ihren eigenen separaten Zustand beibehält. Wenn du zwei Objekte aus derselben Klasse erstellst, sind sie vollständig unabhängig: Wenn du eines änderst, wirkt sich das nicht auf das andere aus.

Betrachte dieses Beispiel:

local Counter = {}
Counter.__index = Counter

function Counter:new(start)
    local instance = {}
    setmetatable(instance, self)
    instance.value = start or 0
    return instance
end

function Counter:increment()
    self.value = self.value + 1
end

-- Zwei separate Zähler erstellen
local counterA = Counter:new(10)
local counterB = Counter:new(5)

counterA:increment()
counterA:increment()

print(counterA.value)  -- Ausgabe: 12
print(counterB.value)  -- Ausgabe: 5

Obwohl beide Zähler aus derselben Counter-Klasse stammen, hat das Erhöhen von counterA keinen Einfluss auf counterB. Jedes Objekt verfügt über ein eigenes value-Feld, das in seiner eigenen Instanztabelle gespeichert ist.

Diese Unabhängigkeit macht Objekte so nützlich. Du kannst in einem Spiel Dutzende von Spielern erstellen, wobei jeder seine eigene Gesundheit und Punktzahl verfolgt. Du kannst mehrere Bankkonten verwalten, jedes mit einem anderen Kontostand.

Die Klasse definiert die Struktur und das Verhalten, aber jede Instanz führt mit ihren eigenen Daten ihr eigenes Leben.

challenge icon

Aufgabe

Einfach

Beweisen wir, dass Objekte derselben Klasse tatsächlich unabhängig voneinander existieren! Du erstellst eine Wallet-Klasse und zwei separate Wallet-Instanzen und änderst sie anschließend unabhängig voneinander, um zu zeigen, dass Änderungen an der einen die andere nicht beeinflussen.

Du organisierst deinen Code über zwei Dateien:

  • Wallet.lua: Definiere deine Wallet-Klasse mit dem standardmäßigen Konstruktormuster. Jede Wallet soll ihren eigenen balance verfolgen. Füge Folgendes hinzu:
    • Einen :new(startingBalance)-Konstruktor, der die Wallet mit dem angegebenen Betrag initialisiert
    • Eine :add(amount)-Methode, die den Kontostand erhöht
    • Eine :spend(amount)-Methode, die den Kontostand verringert
  • main.lua: Binde dein Wallet-Modul ein und erstelle zwei separate Wallet-Instanzen. Führe für jede unterschiedliche Operationen aus, um zu zeigen, dass sie ihren unabhängigen Zustand beibehalten.

Du erhältst vier Eingaben:

  1. Anfangskontostand für Wallet A
  2. Anfangskontostand für Wallet B
  3. Zu Wallet A hinzuzufügender Betrag
  4. Aus Wallet B auszugebender Betrag

In deiner Hauptdatei:

  1. Erstelle walletA mit dem ersten Anfangskontostand
  2. Erstelle walletB mit dem zweiten Anfangskontostand
  3. Füge walletA den angegebenen Betrag hinzu
  4. Gib den angegebenen Betrag aus walletB aus
  5. Gib beide Kontostände in separaten Zeilen aus

Gib die endgültigen Kontostände in diesem exakten Format aus:

Wallet A: [balance]
Wallet B: [balance]

Wenn die Eingaben beispielsweise 100, 50, 25 und 10 lauten, sollte die Ausgabe folgendermaßen aussehen:

Wallet A: 125
Wallet B: 40

Beachte, dass das Hinzufügen zu Wallet A Wallet B nicht verändert und das Ausgeben aus Wallet B Wallet A nicht beeinflusst: Jede Instanz behält ihren eigenen separaten Kontostand.

Probier es selbst

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

-- Eingaben lesen
local startingA = tonumber(io.read())
local startingB = tonumber(io.read())
local addAmount = tonumber(io.read())
local spendAmount = tonumber(io.read())

-- TODO: Erstelle walletA mit dem ersten Startguthaben

-- TODO: Erstelle walletB mit dem zweiten Startguthaben

-- TODO: Füge den angegebenen Betrag zu walletA hinzu

-- TODO: Gib den angegebenen Betrag von walletB aus

-- TODO: Gib die endgültigen Guthaben im erforderlichen Format aus
-- Format: "Wallet A: [balance]" und "Wallet B: [balance]"
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Lua-Compiler