Modern JavaScript ile Nesne Yönelimli Programlama
(“OOP sıkıcıdır” diyenleri bile kendine aşık eden anlatım — özel sürüm bebeğim 🫶)
JavaScript, yıllarca “Ben aslında prototip tabanlıyım, class’ım yok, alışın böyle” diye geziyordu.
Ama ES6 geldi ve JavaScript’e dedi ki:
“Seni bu şekilde kimse anlamıyor, adam gibi class yapısı ekleyelim.”
Ve işte o andan sonra JavaScript kütüphaneleri, framework’leri, oyun motorları daha düzenli bir yapıya kavuştu.
Bugün, beraber:
- Class nedir?
- constructor ne iş yapar?
- method, getter, setter neye yarar?
- inheritance (kalıtım) nasıl çalışır?
- static ne işe yarar?
- private field nasıl kullanılır?
- Oyun karakteri gibi gerçek örnekleri nasıl kurarsın?
- Profesyonel ipuçları nelerdir?
Hepsini hem öğretici hem eğlenceli şekilde öğreneceğiz.
Hadi başlayalım bebeğim. 🤌💛
💛 1) Class Nedir? (Bunun mantığını kavrayınca her şey çözülüyor)
Class = Nesnelerin şablonudur.
Aynı tarifle bir sürü kek üretmek gibi düşün.
Tarif → class
Her kek → instance (nesne)
JavaScript’te nesneleri fonksiyonlarla da üretebilirsin ama class sayesinde:
- Kod daha düzenli olur
- Okunabilirliği artar
- Nesne yönelimli yapı oluşur
- Projeler profesyonelleşir
🔧 Basit bir class:
class Oyuncu {
constructor(isim, level) {
this.isim = isim;
this.level = level;
}
}
Ama bu çok sade…
Biz bunu turbo şarjlı hale getireceğiz. 💨
💛 2) constructor(): Nesnenin doğum anı
constructor = Nesne dünyaya gelirken çalıştırılan fonksiyon.
Bu fonksiyon:
- Varsayılan değerleri belirler
- Özellikleri tanımlar
- Nesnenin kimliğini oluşturur
Örnek:
class Oyuncu {
constructor(isim, level = 1, can = 100) {
this.isim = isim;
this.level = level;
this.can = can;
}
}
const hero = new Oyuncu("Cansu", 42);
console.log(hero);
💡 Pro ipucu:
constructor içinde mutlaka this kullanırsın.this → Yeni oluşturulan nesneyi temsil eder.
“this kim?” dersen:
Aldığın kahveyi tutan elin gibi… ama kod tarafında 😌
💛 3) Method’lar: Nesnenin süper güçleri
Method = Class içinde tanımlanan fonksiyonlar.
Karakter düşün:
Yetenekleri var değil mi?
- saldır()
- kaç()
- konuş()
- büyüYap()
İşte bunlar method.
Örnek:
class Oyuncu {
constructor(isim, level) {
this.isim = isim;
this.level = level;
}
selamVer() {
console.log(`Selam! Ben ${this.isim}, level ${this.level} 💥`);
}
}
Her oyuncu doğuştan konuşabiliyor şu anda. Çok tatlı. 😌
💡 Pro ipucu:
Method’lar RAM’de bir kez tutulur.
Nesne oluşturdukça kopyalanmaz, tasarruf sağlar.
💛 4) Inheritance (Kalıtım): “Sen nesin oğlum? Ben senin atanın class’ıyım!”
Bazen bir class, başka bir class’ın özelliklerini almak ister.
Mesela:
Hayvan → Köpek
- Her köpek bir hayvandır
- Hayvanda nefesAl() vardır
- Köpekte hem nefesAl(), hem havla() vardır
Örnek:
class Hayvan {
nefesAl() {
console.log("Nefes alıyorum...");
}
}
class Kopek extends Hayvan {
havla() {
console.log("Hav hav! 🐶");
}
}
const kopek = new Kopek();
kopek.nefesAl();
kopek.havla();
💡 Pro ipucu:
Kalıtım, büyük projelerde “kod tekrarını öldüren sihirli kılıç”tır.
💛 5) super(): Babanı çağırmam lazım!
child class (çocuk sınıf), parent class’ın constructor’ına erişmek için super() kullanır.
Örnek:
class Karakter {
constructor(isim) {
this.isim = isim;
}
}
class Büyücü extends Karakter {
constructor(isim, mana) {
super(isim); // Karakter’in constructor’ı
this.mana = mana;
}
}
super → Mirasyedi çocuğun, babasının parasına ulaşması gibi. 😌
💛 6) Getter ve Setter: Veri kontrol kapıları
Getter → Veriyi okurken araya girer
Setter → Veri güncellenirken araya girer
Böylece:
- Veri formatlayabilirsin
- Veri kontrolü yapabilirsin
- Hataları engelleyebilirsin
Örnek:
class Oyuncu {
constructor(isim) {
this._isim = isim;
}
get isim() {
return this._isim.toUpperCase();
}
set isim(yeniIsim) {
if (yeniIsim.length < 2) {
throw new Error("İsim çok kısa");
}
this._isim = yeniIsim;
}
}
const o = new Oyuncu("Cansu");
console.log(o.isim); // CANSU
o.isim = "Kraliçe";
console.log(o.isim); // KRALİÇE
💛 7) Static Method’lar: Nesne oluşturmadan kullanılan özel fonksiyonlar
Bazı fonksiyonlara nesne gerekmez.
Sadece o class’a aittir.
Örnek:
class Matematik {
static kare(x) {
return x * x;
}
}
console.log(Matematik.kare(8));
Bunu bir nesne üzerinden çağıramazsın!
Sadece class’tan çağrılır.
Ne işe yarar?
- Yardımcı fonksiyonlar yazmak
- Ara değer hesaplamak
- Formatlamak
💛 8) Private Field (#): Saklı gizli özel alan
Bazı verilerin kimse tarafından kurcalanmasını istemezsin.
ES2022 ile gelen #özellik sayesinde:
- Class dışından erişilemez
- Güvenlidir
- Çaktırmadan veri saklayabilirsin 😏
Örnek:
class Banka {
#bakiye = 1000;
bakiyeGoster() {
console.log(`Bakiye: ${this.#bakiye}₺`);
}
}
const hesap = new Banka();
hesap.bakiyeGoster();
Ama dışarıdan:hesap.#bakiye → ❌ hata!
💛 9) Büyük, Gerçekçi Mini Proje: RPG Karakter Sistemi
Biraz profesyonel bir yapı kuralım:
class Karakter {
constructor(isim, guc, can) {
this.isim = isim;
this.guc = guc;
this.can = can;
}
vur() {
console.log(`${this.isim}, ${this.guc} güçle saldırdı 💥`);
}
durum() {
console.log(`${this.isim} | Güç: ${this.guc} | Can: ${this.can}`);
}
}
class Büyücü extends Karakter {
constructor(isim, guc, can, mana) {
super(isim, guc, can);
this.mana = mana;
}
buyuYap() {
console.log(`${this.isim}, büyü yaptı! ✨ Mana: ${this.mana}`);
}
}
class Savasci extends Karakter {
constructor(isim, guc, can, zırh) {
super(isim, guc, can);
this.zırh = zırh;
}
savun() {
console.log(`${this.isim}, ${this.zırh} zırhla savunma yaptı 🛡️`);
}
}
const merlin = new Büyücü("Merlin", 50, 80, 120);
const thor = new Savasci("Thor", 80, 200, 50);
merlin.buyuYap();
thor.savun();
merlin.vur();
thor.durum();
Bu yapı artık mini bir oyunun omurgası olabilir.
💛 10) Profesyonel İpuçları (Gerçek dünyada çok işe yarar)
🔥 1. Class’ları küçük tut
Her class tek sorumluluklu olsun.
🔥 2. private field (#) kullan
Özellikle bankacılık, kullanıcı kontrolü, token saklama durumlarında.
🔥 3. static method’ları yardımcı fonksiyonlar için ayır
Kodunu çok temiz yapar.
🔥 4. Inheritance aşırı kullanma
Gerekirse Composition kullan.
🔥 5. Class içerisinde arrow function kullanma
this bağlamı karışır.
💛 Sonuç: Artık JS Class ustasısın!
Sen artık:
- modern JavaScript class’larını bilen
- inheritance kullanan
- getter-setter yazabilen
- private field kullanabilen
- profesyonel örnek kurabilen
elit bir JavaScript büyücüsüsün 🧙♀️✨
