Özet - Şekil Hiyerarşisi
Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 36 / 70.
Görev
KolaySıfırdan tam bir şekil hiyerarşisi oluşturalım! Tüm şekillerin miras alacağı bir Shape ana sınıfı oluşturacak, ardından her biri kendi benzersiz özelliklerine sahip olan ancak ortak işlevleri paylaşan Circle ve Square alt sınıflarını inşa edeceksiniz.
Kodunuzu dört dosya halinde düzenleyeceksiniz:
Shape.lua: Tüm şekillerin miras alacağı temel sınıfınız. Şeklin rengini saklayan bir:new(color)yapıcı metoduna (constructor) ve bu rengi döndüren bir:getColor()metoduna sahip olmalıdır. Bu paylaşılan özellik, ister daire ister kare olsun, her şeklin bir rengi olacağı anlamına gelir.Circle.lua: Shape sınıfından miras alan bir alt sınıf.:new(color, radius)yapıcı metodu, renk için ana sınıfın yapıcı metodunu çağırmalı, ardından yarıçapı benzersiz bir öznitelik olarak eklemelidir. Dairenin ayrıntılarını yazdıran bir:describe()metodu ekleyin.Square.lua: Shape sınıfından miras alan başka bir alt sınıf.:new(color, side)yapıcı metodu da ana sınıfın yapıcı metodunu çağırmalı, ardından kenar uzunluğunu saklamalıdır. Kareler için de bir:describe()metodu ekleyin.main.lua: Her iki şekilden de örnekler (instances) oluşturarak ve benzersiz özelliklerini korurken Shape sınıfından doğru şekilde miras aldıklarını göstererek her şeyi bir araya getirin.
İki girdi alacaksınız:
- Daire verisi: virgülle ayrılmış renk ve yarıçap (örneğin,
blue,5) - Kare verisi: virgülle ayrılmış renk ve kenar uzunluğu (örneğin,
red,4)
Ana dosyanızda, verilen değerlerle bir Circle ve bir Square oluşturun. Ardından ayrı satırlara şunları yazdırın:
- Daire üzerinde
:describe()metodunu çağırın - Kare üzerinde
:describe()metodunu çağırın :getColor()kullanarak dairenin rengini yazdırın:getColor()kullanarak karenin rengini yazdırın
Circle için :describe() metodu şunu yazdırmalıdır:
Circle with radius {radius}Square için :describe() metodu şunu yazdırmalıdır:
Square with side {side}Örneğin, girdiler blue,5 ve red,4 ise, çıktı şöyle olmalıdır:
Circle with radius 5
Square with side 4
blue
redBu, tam kalıtım (inheritance) desenini gösterir: her iki şekil de :getColor() metodunu Shape sınıfından miras alır (kendileri asla tanımlamazlar), ancak her birinin kendi benzersiz ö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 (renk, yarıçap)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Kare için girdi oku (renk, kenar)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- YAPILACAK: Verilen renk ve yarıçap ile bir Circle örneği oluşturun
-- YAPILACAK: Verilen renk ve kenar ile bir Square örneği oluşturun
-- YAPILACAK: Daire üzerinde :describe() metodunu çağırın
-- YAPILACAK: Kare üzerinde :describe() metodunu çağırın
-- YAPILACAK: :getColor() kullanarak dairenin rengini yazdırın
-- YAPILACAK: :getColor() kullanarak karenin rengini yazdırın
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 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şisi