Özet - Şekil Hiyerarşisi
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 70.
Görev
KolaySıfırdan eksiksiz bir şekil hiyerarşisi oluşturalım! Tüm şekillerin miras alacağı bir Shape üst sınıfı oluşturacak, ardından her biri ortak işlevleri paylaşırken kendine özgü özelliklere sahip olan Circle ve Square alt sınıflarını oluşturacaksın.
kodunu dört dosyaya ayıracaksın:
Shape.lua: Tüm şekillerin miras alacağı temel sınıfın. Şeklin rengini saklayan bir:new(color)yapıcısına ve rengi döndüren bir:getColor()metoduna sahip olmalı. Bu ortak özellik sayesinde daire veya kare fark etmeksizin her şeklin bir rengi olacak.Circle.lua: Shape sınıfından miras alan bir alt sınıf.:new(color, radius)yapıcısı, renk için üst sınıfın yapıcısını çağırmalı, ardından yarıçapı kendine özgü bir öznitelik olarak eklemeli. Dairenin ayrıntılarını yazdıran bir:describe()metodu ekle.Square.lua: Shape sınıfından miras alan başka bir alt sınıf.:new(color, side)yapıcısı da üst sınıfın yapıcısını çağırmalı, ardından kenar uzunluğunu saklamalı. Kareler için de bir:describe()metodu ekle.main.lua: Her iki şeklin örneklerini oluşturarak ve benzersiz özelliklerini korurken Shape sınıfından doğru şekilde miras aldıklarını göstererek her şeyi bir araya getir.
İki girdi alacaksın:
- Daire verileri: virgülle ayrılmış renk ve yarıçap (ör.
blue,5) - Kare verileri: virgülle ayrılmış renk ve kenar uzunluğu (ör.
red,4)
Ana dosyanda, verilen değerlerle bir Circle ve bir Square oluştur. Ardından aşağıdakileri ayrı satırlarda yazdır:
- Daire üzerinde
:describe()çağrısı yap - Kare üzerinde
:describe()çağrısı yap :getColor()kullanarak dairenin rengini yazdır:getColor()kullanarak karenin rengini yazdır
Circle için :describe() metodu şunu yazdırmalı:
Circle with radius {radius}Square için :describe() metodu şunu yazdırmalı:
Square with side {side}Örneğin girdiler blue,5 ve red,4 ise çıktı şöyle olmalı:
Circle with radius 5
Square with side 4
blue
redBu, eksiksiz miras alma modelini gösterir: her iki şekil de :getColor() metodunu Shape sınıfından miras alır (bu metodu kendileri hiçbir zaman tanımlamazlar); ayrıca her birinin kendine özgü bir özniteliği ve :describe() metodu vardır!
Kendin dene
-- main.lua: Her şeyi bir araya getir
local Circle = require('Circle')
local Square = require('Square')
-- Daire için girdi oku (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Kare için girdi oku (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Verilen color ve radius ile bir Circle örneği oluştur
-- TODO: Verilen color ve side ile bir Square örneği oluştur
-- TODO: circle üzerinde :describe() çağır
-- TODO: square üzerinde :describe() çağır
-- TODO: :getColor() kullanarak circle'ın color'ını yazdır
-- TODO: :getColor() kullanarak square'ın color'ını yazdır
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 Rolleri2Sı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