Toplam Alan
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 60 / 70.
Görev
KolayShapeCollection sınıfınıza güçlü bir özellik ekleyelim: içerdiği tüm şekillerin toplam alanını hesaplayabilme. Polimorfizmin gerçekten parladığı nokta burasıdır: koleksiyonunuz, şeklin dikdörtgen mi yoksa daire mi olduğunu bilmeden herhangi bir şekil üzerinde :getArea() çağrısı yapabilir.
Mevcut proje dosyalarınızın üzerine eklemeye devam edeceksiniz:
Shape.lua: Temel Shape sınıfınız (değişmeden kalır).Rectangle.lua::getArea()ve:getPerimeter()özelliklerine sahip Rectangle sınıfınız.Circle.lua::getArea()ve:getPerimeter()özelliklerine sahip Circle sınıfınız.ShapeCollection.lua: Bir:getTotalArea()yöntemi ekleyerek koleksiyon sınıfınızı genişletin. Bu yöntem, depolanan tüm şekillerin üzerinden geçmeli, her biri üzerinde:getArea()çağrısı yapmalı ve tüm alanların toplamını döndürmelidir.main.lua: Modüllerinizi içe aktarın, boyutları girdiden okuyun, bir Rectangle ve bir Circle oluşturun, ikisini bir ShapeCollection nesnesine ekleyin, ardından koleksiyondaki tüm şekillerin toplam alanını yazdırın.
Bu yaklaşımın güzelliği, :getTotalArea() yönteminin dikdörtgenler ve daireler için ayrı bir mantığa ihtiyaç duymamasıdır. Yalnızca koleksiyondaki her şeklin bir :getArea() yöntemine sahip olduğuna güvenir. Daha sonra üçgenler, altıgenler veya başka herhangi bir şekil ekleyebilirsiniz; toplam alan hesaplaması herhangi bir değişiklik yapılmadan çalışacaktır.
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ü 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')
-- Genişlik ve yüksekliği girdiden 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 tüm şekillerin toplam alanını yazdır
print(collection:getTotalArea())
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