Menu
Coddy logo textTech

Bağımsız Örnekler

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 10 / 70.

Nesne yönelimli programlamanın önemli bir yönü, her örneğin kendi ayrı durumunu korumasıdır. Aynı sınıftan iki nesne oluşturduğunuzda, bunlar tamamen bağımsızdır: birini değiştirmek diğerini etkilemez.

Şu örneği göz önünde bulundurun:

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

-- İki ayrı sayaç oluştur
local counterA = Counter:new(10)
local counterB = Counter:new(5)

counterA:increment()
counterA:increment()

print(counterA.value)  -- Çıktı: 12
print(counterB.value)  -- Çıktı: 5

Her iki sayaç da aynı Counter sınıfından gelse de counterA değerini artırmanın counterB üzerinde hiçbir etkisi yoktur. Her nesnenin, kendi örnek tablosunda depolanan kendine ait bir value alanı vardır.

Bu bağımsızlık, nesneleri kullanışlı kılan şeydir. Bir oyunda, her biri kendi sağlık ve skorunu takip eden düzinelerce oyuncu oluşturabilirsiniz. Her biri farklı bir bakiyeye sahip birden fazla banka hesabını yönetebilirsiniz.

Sınıf yapıyı ve davranışı tanımlar, ancak her örnek kendi verileriyle kendi hayatını yaşar.

challenge icon

Görev

Kolay

Aynı sınıftan nesnelerin gerçekten birbirinden bağımsız yaşamlar sürdüğünü kanıtlayalım! Bir Wallet sınıfı oluşturacak ve iki ayrı cüzdan örneği yaratacaksın; ardından birindeki değişikliklerin diğerini etkilemediğini göstermek için bunları bağımsız olarak değiştireceksin.

Kodunu iki dosyaya ayıracaksın:

  • Wallet.lua: Standart kurucu kalıbıyla Wallet sınıfını tanımla. Her cüzdan kendi balance değerini takip etmelidir. Şunları ekle:
    • Bu cüzdanı verilen miktarla başlatan :new(startingBalance) kurucusu
    • Bakiyeyi artıran bir :add(amount) metodu
    • Bakiyeyi azaltan bir :spend(amount) metodu
  • main.lua: Wallet modülünü içe aktar ve iki ayrı cüzdan örneği oluştur. Bağımsız durumlarını koruduklarını göstermek için her biri üzerinde farklı işlemler gerçekleştir.

Dört girdi alacaksın:

  1. A cüzdanının başlangıç bakiyesi
  2. B cüzdanının başlangıç bakiyesi
  3. A cüzdanına eklenecek miktar
  4. B cüzdanından harcanacak miktar

Ana dosyanda:

  1. İlk başlangıç bakiyesiyle walletA oluştur
  2. İkinci başlangıç bakiyesiyle walletB oluştur
  3. Belirtilen miktarı walletA'ya ekle
  4. Belirtilen miktarı walletB'den harca
  5. Her iki bakiyeyi ayrı satırlarda yazdır

Son bakiyeleri tam olarak şu biçimde yazdır:

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

Örneğin girdiler 100, 50, 25 ve 10 ise çıktı şöyle olmalıdır:

Wallet A: 125
Wallet B: 40

A cüzdanına para eklemenin B cüzdanını değiştirmediğine ve B cüzdanından harcama yapmanın A cüzdanını etkilemediğine dikkat et: her örnek kendi ayrı bakiyesini korur.

Kendin dene

-- Wallet modülünü gerektir
local Wallet = require('Wallet')

-- Girdileri oku
local startingA = tonumber(io.read())
local startingB = tonumber(io.read())
local addAmount = tonumber(io.read())
local spendAmount = tonumber(io.read())

-- TODO: İlk başlangıç bakiyesiyle walletA oluştur

-- TODO: İkinci başlangıç bakiyesiyle walletB oluştur

-- TODO: Belirtilen miktarı walletA'ya ekle

-- TODO: Belirtilen miktarı walletB'den harca

-- TODO: Son bakiyeleri gerekli formatta yazdır
-- Format: "Wallet A: [balance]" ve "Wallet B: [balance]"
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi