Metot Kalıtımı
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 32 / 70.
Miras bağlantısı kurulduğunda, alt sınıf örnekleri otomatik olarak tüm üst sınıf yöntemlerine erişim kazanır. Bu, Lua’nın arama zinciri aracılığıyla gerçekleşir; bir örnek üzerinde yöntem çağırdığınızda Lua, aradığınızı bulana kadar bağlantılı tabloların her birinde arama yapar.
Animal sınıfının :breathe() yöntemini tanımladığı bu kurulumu düşünün:
local Animal = {}
Animal.__index = Animal
function Animal:new()
local obj = {}
setmetatable(obj, Animal)
return obj
end
function Animal:breathe()
print("Breathing...")
end
-- Dog, Animal'dan miras alır
local Dog = {}
Dog.__index = Dog
setmetatable(Dog, {__index = Animal})
function Dog:new()
local obj = {}
setmetatable(obj, Dog)
return obj
endŞimdi bir Dog oluşturup üst sınıfın yöntemini çağırdığımızda ne olduğuna bakın:
local buddy = Dog:new()
buddy:breathe() -- Çıktı: Breathing...Dog sınıfı :breathe() yöntemini hiç tanımlamadı, yine de çalışıyor. Lua önce buddy içinde kontrol eder ve hiçbir şey bulamaz, ardından Dog içinde kontrol eder ve yine hiçbir şey bulamaz; sonunda onu Animal içinde bulur. Bu otomatik yöntem kalıtımı, ortak davranışı üst sınıfta bir kez yazmanızı ve her alt sınıfın bundan hemen yararlanmasını sağlar.
Görev
KolayYöntem kalıtımını uygulamalı olarak görmek için basit bir yaratık hiyerarşisi oluşturalım! Bir Animal üst sınıfı ve bir Dog alt sınıfı oluşturacak, ardından Dog örneklerinin yalnızca Animal içinde tanımlanan yöntemleri kullanabildiğini göstereceksin.
Kodunu üç dosyaya ayıracaksın:
Animal.lua: Standart sınıf kalıbını kullanarak üst sınıfını tanımla. Hayvanın adını saklayan bir:new(name)oluşturucusu ve hayvanın adının ardından:speak()yazdıran birmakes a soundyöntemi ekle. Dosyanın sonunda sınıfı döndür.Dog.lua: Animal'dan kalıtım alan alt sınıfını tanımla. Animal modülünü gerektir ve Dog'un Animal yöntemlerine erişebilmesi için kalıtım bağlantısını kur. Adı saklayan ve Dog'u metatablo olarak ayarlayan bir:new(name)oluşturucusu ekle. Dog sınıfı kendi:speak()yöntemini TANIMLAMAMALIDIR. Bu yöntemi Animal'dan kalıtacaktır.main.lua: Dog modülünü gerektir, girdiden bir ad oku, bu adla bir Dog örneği oluştur ve üzerinde:speak()yöntemini çağır.
Bir girdi alacaksın: köpeğin adı.
Örneğin girdi Buddy ise çıktı şöyle olmalıdır:
Buddy makes a soundBuradaki sihir, Dog sınıfının hiçbir zaman :speak() tanımlamamasına rağmen bir Dog örneği üzerinde çağrıldığında bunun kusursuz şekilde çalışmasıdır. Lua, arama zincirini Dog örneğinden Dog sınıfına, ardından yöntemi bulduğu Animal sınıfına kadar izler. İşte kalıtım böyle çalışır!
Kendin dene
-- main.lua: Giriş noktası
local Dog = require('Dog')
-- Köpeğin adını girdiden oku
local name = io.read()
-- TODO: Verilen adla bir Dog örneği oluştur
-- TODO: Köpek örneğinde :speak() metodunu çağır
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