Çevre Metodu
Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 58 / 70.
Görev
KolayHem Rectangle hem de Circle sınıflarına bir :getPerimeter() metodu ekleyerek Şekil Yöneticimizi (Shape Manager) genişletelim. Tıpkı :getArea() metodunda olduğu gibi, her şekil çevresini farklı şekilde hesaplar ancak aynı metot adını paylaşırlar; bu, polimorfizmin (çok biçimlilik) iş başındaki mükemmel bir örneğidir.
Mevcut dosyalarınızla çalışmaya devam edeceksiniz:
Shape.lua: Temel Shape sınıfınız değişmeden kalır.Rectangle.lua: 2 × (width + height) formülünü kullanarak dikdörtgenin çevresini döndüren bir:getPerimeter()metodu ekleyin.Circle.lua: 2 × π × radius formülünü kullanarak dairenin çevresini döndüren bir:getPerimeter()metodu ekleyin. π içinmath.pikullanın.main.lua: Her iki şekil modülünü de dahil edin (require), girdiden boyutları okuyun, bir Rectangle ve bir Circle oluşturun, ardından altı satır yazdırın: dikdörtgenin adı, alanı ve çevresi, ardından dairenin adı, alanı ve çevresi.
Her iki şekil de artık farklı uygulamalara rağmen aynı metot adları üzerinden erişilebilen :getName(), :getArea() ve :getPerimeter() ile eksiksiz bir arayüze sahiptir.
Girdi: Üç satır—genişlik (sayı), yükseklik (sayı) ve yarıçap (sayı).
Çıktı: Sırasıyla altı satır: dikdörtgenin adı, dikdörtgenin alanı, dikdörtgenin çevresi, dairenin adı, dairenin alanı, dairenin çevresi.
Kendin dene
-- Rectangle modülünü dahil et
local Rectangle = require('Rectangle')
-- Circle modülünü dahil et
local Circle = require('Circle')
-- Girdiden 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)
-- Dikdörtgenin adını, alanını ve çevresini yazdır
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())
-- Dairenin adını, alanını ve çevresini yazdır
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())
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