Menu
Coddy logo textTech

Şekil Koleksiyonu

Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 59 / 70.

challenge icon

Görev

Kolay

Artık tam işlevselliğe sahip hem Rectangle hem de Circle sınıflarına sahip olduğunuza göre, birden fazla şekli birlikte yönetebilen bir ShapeCollection sınıfı oluşturalım. Bu, kompozisyonun harika bir örneğidir; koleksiyon bir şekil "olmak" yerine şekillere "sahiptir".

Büyüyen projenize yeni bir dosya ekleyeceksiniz:

  • Shape.lua: Temel Shape sınıfınız (değişmedi).
  • Rectangle.lua: :getArea() ve :getPerimeter() metotlarına sahip Rectangle sınıfınız.
  • Circle.lua: :getArea() ve :getPerimeter() metotlarına sahip Circle sınıfınız.
  • ShapeCollection.lua: Şekilleri dahili olarak depolayan yeni bir sınıf oluşturun. Boş bir şekil listesi başlatan bir :new() yapıcı metodu (constructor), koleksiyona herhangi bir şekil ekleyen bir :addShape(shape) metodu ve şu anda kaç şeklin depolandığını döndüren bir :count() metodu ekleyin.
  • main.lua: Modüllerinizi çağırarak (require) her şeyi bir araya getirin. Girdiden boyutları okuyun, bir Rectangle ve bir Circle oluşturun, her ikisini de bir ShapeCollection'a ekleyin, ardından koleksiyonun sayısını ve ardından her şeklin adını (eklenme sırasına göre) yazdırın.

ShapeCollection'ın dikdörtgen mi yoksa daire mi depoladığını bilmesine gerek yoktur; o sadece şekilleri tutar. Bu, polimorfizmin (çok biçimlilik) farklı nesne türlerine ortak bir arayüz üzerinden tek tipte davranmanıza nasıl olanak tanıdığını gösterir.

Girdi: Üç satır—genişlik (sayı), yükseklik (sayı) ve yarıçap (sayı).

Çıktı: Üç satır—koleksiyondaki şekil sayısı, ardından eklenen ilk şeklin adı, ardından eklenen ikinci şeklin adı.

Kendin dene

-- Rectangle modülünü dahil et
local Rectangle = require('Rectangle')

-- Circle modülünü dahil et
local Circle = require('Circle')

-- ShapeCollection modülünü dahil et
local ShapeCollection = require('ShapeCollection')

-- Girdiden genişlik ve yükseklik değerlerini oku
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Verilen boyutlarla yeni bir Rectangle örneği oluştur
local rect = Rectangle:new(width, height)

-- Verilen yarıçapla yeni bir Circle örneği oluştur
local circ = Circle:new(radius)

-- Yeni bir ShapeCollection oluştur
local collection = ShapeCollection:new()

-- Her iki şekli de koleksiyona ekle
collection:addShape(rect)
collection:addShape(circ)

-- Koleksiyondaki şekil sayısını yazdır
print(collection:count())

-- Her bir şeklin adını eklenme sırasına göre yazdır
for i = 1, collection:count() do
    print(collection.shapes[i]:getName())
end

Object Oriented Programming bölümündeki tüm dersler