Öznitelikleri Başlatma
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 9 / 70.
Öğrendiğiniz :new() yapıcısı nesneler oluşturur, ancak her örnek aynı şekilde başlar. Gerçek nesnelerin benzersiz verilere ihtiyacı vardır: bir kişinin belirli bir adı, bir oyuncunun başlangıç puanı vardır. Nesneleri kullanışlı hâle getirmek için yapıcı, bağımsız değişkenleri kabul etmeli ve bunları yeni örneğe atamalıdır.
Yapıcının başlangıç değerlerini kabul etmesini şu şekilde genişletebilirsin:
local Dog = {}
Dog.__index = Dog
function Dog:new(name, breed)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.breed = breed
return instance
end
function Dog:introduce()
print("I am " .. self.name .. ", a " .. self.breed)
endYapıcı artık parametre olarak name ve breed alıyor. Boş örneği oluşturup metatablosunu ayarladıktan sonra, bu değerleri doğrudan örneğin alanlarına atıyoruz. Oluşturulan her nesnenin kendine ait name ve breed değerleri olacak.
local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")
dog1:introduce() -- Çıktı: I am Rex, a German Shepherd
dog2:introduce() -- Çıktı: I am Bella, a PoodleHer iki köpek de prototipten aynı :introduce() yöntemini paylaşır, ancak her birinin örnek tablosunda depolanan kendine özgü bir adı ve ırkı vardır. Prototipleri parametreleştirilmiş oluşturucularla birleştirmenin gücü budur: bireysel durumla paylaşılan davranış.
Görev
KolayKendi adları ve yaşları olan benzersiz kişiler oluşturan bir Person sınıfı oluşturalım. Uygun modül yapısını uygulamak için kodunuzu iki dosyaya ayıracaksınız.
Şunları oluşturacaksınız:
Person.lua: Bir ad ve yaş kabul eden bir oluşturucu ilePersonsınıfınızı tanımlayın. Her kişinin kendini tanıtmasını sağlayan bir:introduce()yöntemi ekleyin.main.lua: Person modülünü içe aktarın ve sağlanan girdileri kullanarak bir kişi örneği oluşturun. Ardından bu kişinin kendini tanıtmasını sağlayın.
:new(name, age) oluşturucunuz her iki değeri de kabul etmeli ve bunları yeni örnekte saklamalıdır. :introduce() yöntemi tam olarak şu biçimde yazdırmalıdır:
Hello, my name is [name] and I am [age] years oldİki girdi alacaksınız:
- Kişinin adı
- Kişinin yaşı
Örneğin girdiler Alice ve 25 ise çıktı şu şekilde olmalıdır:
Hello, my name is Alice and I am 25 years oldKendin dene
-- Person modülünü yükle
local Person = require('Person')
-- Girdiyi oku
local name = io.read()
local age = io.read()
-- TODO: Person:new(name, age) kullanarak yeni bir Person örneği oluştur
-- TODO: person örneğiniz üzerinde introduce() 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