Toplam Alan
Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 60 / 70.
Görev
KolayShapeCollection'ınıza güçlü bir özellik ekleyelim: içerdiği tüm şekillerin toplam alanını hesaplama yeteneği. Polimorfizmin (çok biçimlilik) gerçekten parladığı yer burasıdır: koleksiyonunuz, bir şeklin dikdörtgen mi yoksa daire mi olduğunu bilmeden herhangi bir şekil üzerinde :getArea() metodunu çağırabilir.
Mevcut proje dosyalarınızın üzerine inşa etmeye devam edeceksiniz:
Shape.lua: Temel Shape sınıfınız (değişmedi).Rectangle.lua::getArea()ve:getPerimeter()metodlarına sahip Rectangle sınıfınız.Circle.lua::getArea()ve:getPerimeter()metodlarına sahip Circle sınıfınız.ShapeCollection.lua: Bir:getTotalArea()metodu ekleyerek koleksiyon sınıfınızı genişletin. Bu metod, saklanan tüm şekiller üzerinde gezinmeli, her biri için:getArea()metodunu çağırmalı ve tüm alanların toplamını döndürmelidir.main.lua: Modüllerinizi dahil edin (require), girdiden boyutları okuyun, bir Rectangle ve bir Circle oluşturun, her ikisini de bir ShapeCollection'a ekleyin ve ardından koleksiyondaki tüm şekillerin toplam alanını yazdırın.
Bu yaklaşımın güzelliği, :getTotalArea() metodunun dikdörtgenler ve daireler için ayrı bir mantığa ihtiyaç duymamasıdır; koleksiyondaki her şeklin bir :getArea() metoduna sahip olduğuna güvenir. Daha sonra üçgenler, altıgenler veya başka herhangi bir şekil ekleyebilirsiniz ve toplam alan hesaplaması herhangi bir değişiklik yapılmadan çalışmaya devam eder.
Girdi: Üç satır—genişlik (sayı), yükseklik (sayı) ve yarıçap (sayı).
Çıktı: Koleksiyondaki tüm şekillerin toplam alanını içeren tek bir satır.
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ıçap ile 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 tüm şekillerin toplam alanını yazdır
print(collection:getTotalArea())
Object Oriented Programming 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ı2Sı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şisi