Öznitelikleri Başlatma
Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 9 / 70.
Öğrendiğiniz :new() kurucusu nesneler oluşturur, ancak her örnek özdeş olarak 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ı hale getirmek için, kurucunun bağımsız değişkenleri kabul etmesi ve bunları yeni örneğe ataması gerekir.
Constructor'ı başlangıç değerlerini kabul edecek şekilde şu şekilde genişletebilirsiniz:
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ı (constructor) artık parametre olarak name ve breed alır. Boş örneği oluşturduktan ve metatablosunu (metatable) ayarladıktan sonra, bu değerleri doğrudan örneğin alanlarına atarız. Oluşturulan her nesne kendi name ve breed alanına sahip olacaktır.
local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")
dog1:introduce() -- Çıktı: Ben Rex, bir Alman Çoban Köpeğiyim
dog2:introduce() -- Çıktı: Ben Bella, bir KanişHer iki köpek de prototipten gelen aynı :introduce() metodunu paylaşır, ancak her birinin kendi örnek tablosunda saklanan kendine özgü adı ve cinsi vardır. Bu, prototipleri parametreli yapıcılarla birleştirmenin gücüdür—bireysel durum ile paylaşılan davranış.
Görev
KolayKendi adları ve yaşları olan benzersiz bireyler oluşturan bir Person sınıfı oluşturalım. Uygun modül yapısını uygulamak için kodunuzu iki dosya halinde düzenleyeceksiniz.
Şunları oluşturacaksınız:
Person.lua: Bir isim ve yaş kabul eden bir yapıcı (constructor) ilePersonsınıfınızı tanımlayın. Her kişinin kendisini tanıtmasını sağlayan bir:introduce()metodu ekleyin.main.lua: Person modülünüzü dahil edin (require) ve sağlanan girdileri kullanarak bir kişi örneği (instance) oluşturun. Ardından kendilerini tanıtmalarını sağlayın.
:new(name, age) yapıcınız her iki değeri de kabul etmeli ve bunları yeni örnek (instance) üzerinde saklamalıdır. :introduce() metodu tam olarak şu formatta çıktı vermelidir:
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 oldKopya kağıdı
Benzersiz verilere sahip nesneler oluşturmak için, parametreleri kabul edecek ve bunları örneğe (instance) atayacak şekilde :new() yapısını genişletin:
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)
endFarklı değerlerle örnekler (instances) oluşturun:
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 nesne, prototipten gelen metotları paylaşırken, kendi örnek tablosunda (instance table) saklanan kendine özgü verilere sahiptir.
Kendin dene
-- Person modülünü dahil et
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şturun
-- TODO: person örneğiniz üzerinde introduce() metodunu çağırın
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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