Kalıtım Kurulumu
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 31 / 70.
Şimdiye kadar, her nesnenin yöntemleri tek bir prototip tablosunda aradığı sınıflar oluşturdun. Peki bir sınıfın başka bir sınıf üzerine kurulmasını istersen ne olacak? İşte burada kalıtım devreye girer: bir alt sınıf, kendi özelliklerini eklerken üst sınıftaki her şeye erişebilir.
Temel içgörü, bir sınıf tablosunun kendisinin de bir metatabloya sahip olabilmesidir. Lua alt sınıfta bir şey bulamadığında, alt sınıfın metatablosundaki ve üst sınıfı gösteren __index alanına bakar.
-- Üst sınıf
local Animal = {}
Animal.__index = Animal
function Animal:new()
local obj = {}
setmetatable(obj, Animal)
return obj
end
function Animal:breathe()
print("Breathing...")
endŞimdi kalıtım kurulumu şöyle. Bir alt sınıf oluşturuyor ve metatablosunu üst sınıfa bakacak şekilde ayarlıyoruz:
-- Çocuk sınıf
local Dog = {}
Dog.__index = Dog
setmetatable(Dog, {__index = Animal})setmetatable(Dog, {__index = Animal}) şeklindeki bu tek satır, kalıtım bağlantısını oluşturur. Bir Dog örneği Dog içinde bulunmayan bir yöntemi çağırdığında Lua, Animal'ı kontrol eder.
Arama zinciri şu şekilde çalışır: instance → Dog → Animal. Her adım, aranacak sonraki tabloyu bulmak için __index kullanır. Bu, alt sınıfların tüm üst sınıf yöntemlerini kopyalamadan otomatik olarak devralmasını sağlar.
Görev
Kolayİlk kalıtım hiyerarşinizi oluşturalım! Taban olarak Machine sınıfının görev yaptığı ve Robot sınıfının bundan kalıtım aldığı basit bir üst sınıf-alt sınıf ilişkisi oluşturacaksınız.
Kodunuzu üç dosyaya ayıracaksınız:
Machine.lua: Standart sınıf kalıbını kullanarak üst sınıfınızı tanımlayın.:new()oluşturucusunu ve:status()yazdıran birMachine is operationalmetodunu ekleyin.__indexdeğerini ayarlamayı ve dosyanın sonunda sınıfı döndürmeyi unutmayın.Robot.lua: Machine'den kalıtım alan alt sınıfınızı tanımlayın. Machine modülünü içe aktarın, kendi__indexdeğerine sahip Robot tablosunu oluşturun vesetmetatable(Robot, {__index = Machine})kullanarak kalıtım bağlantısını kurun. Robot'u metatablo olarak kullanan bir örnek oluşturan:new()oluşturucusunu ekleyin.main.lua: Robot modülünüzü içe aktararak, bir Robot örneği oluşturarak ve kalıtılan:status()metodunu çağırarak her şeyi bir araya getirin.
Buradaki temel kavram, Robot sınıfınızın :status() metodunu kendisinin tanımlamamasıdır. Bu metodu metatablo zinciri aracılığıyla Machine'den alır. Bir Robot örneği üzerinde :status() çağırdığınızda Lua önce Robot'ta arama yapar, metodu bulamaz ve ardından __index bağlantısını izleyerek metodu bulduğu Machine'e ulaşır.
Çıktınız şu olmalıdır:
Machine is operationalBu tek satır, kalıtımın çalıştığını kanıtlar. Robot, yalnızca üst sınıfında tanımlanan bir metoda başarıyla erişti!
Kendin dene
-- main.lua: Her şeyi bir araya getir
-- TODO: Robot modülünü require et
-- TODO: Robot:new() kullanarak bir Robot örneği oluştur
-- TODO: Robot örneğinizde miras alınan :status() metodunu çağır
-- This should print "Machine is operational"
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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