Şekil Koleksiyonu
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 59 / 70.
Görev
KolayArtık tam işlevselliğe sahip hem Rectangle hem de Circle sınıflarınız olduğuna göre, birden fazla şekli birlikte yönetebilen bir ShapeCollection sınıfı oluşturalım. Bu, bileşimin 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şmeden kalır).Rectangle.lua::getArea()ve:getPerimeter()içeren Rectangle sınıfınız.Circle.lua::getArea()ve:getPerimeter()içeren 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()kurucusu, koleksiyona herhangi bir şekil ekleyen bir:addShape(shape)yöntemi ve şu anda kaç şeklin depolandığını döndüren bir:count()yöntemi ekleyin.main.lua: Modüllerinizi require ederek her şeyi bir araya getirin. Girdi üzerinden boyutları okuyun, bir Rectangle ve bir Circle oluşturun, ikisini de bir ShapeCollection'a ekleyin, ardından koleksiyonun sayısını ve sonrasında her şeklin adını (eklenme sırasına göre) yazdırın.
ShapeCollection'ın dikdörtgenleri mi yoksa daireleri mi depoladığını bilmesine gerek yoktur. Yalnızca şekilleri tutar. Bu, çok biçimliliğin farklı nesne türlerini ortak bir arayüz üzerinden tek tip şekilde ele almanı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 şekillerin sayısı, ardından eklenen ilk şeklin adı ve eklenen ikinci şeklin adı.
Kendin dene
-- Rectangle modülünü yükle
local Rectangle = require('Rectangle')
-- Circle modülünü yükle
local Circle = require('Circle')
-- ShapeCollection modülünü yükle
local ShapeCollection = require('ShapeCollection')
-- Girişten genişlik ve yüksekliği 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 şekillerin sayısını yazdır
print(collection:count())
-- Eklenme sırasına göre her bir şeklin adını yazdır
for i = 1, collection:count() do
print(collection.shapes[i]:getName())
end
Nesne Yönelimli Programlama bölümündeki tüm dersler
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri10Proje: Şekil Yöneticisi
Proje KurulumuDikdörtgen SınıfıDaire SınıfıÇevre MetoduŞekil KoleksiyonuToplam AlanŞekilleri Filtrele2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil HiyerarşisiKendi başına pratik yap: Online Lua derleyicisi