#8 ES6 Static Metot ve Kalıtım (Subclass) Kavramları

Bir önceki yazımızda ES6 ile beraber gelen Class kavramından bahsetmiş ve sınıflardan ürettiğimiz nesneler ile içerisine yazdığımız yardımcı metotlara ulaşabildiğimizi görmüştük. Bu yazımızda static metotlara ve kalıtım kavramına değineceğiz.

1) Static Metodlar

Static yardımcı metotlar; içerisindeki sınıf değişkenlerinden bağımsız, ilgili sınıftan bir nesne üretmeden, sınıf ismi ile ulaşabildiğimiz metotlardır. Static yardımcı metotlara ilgili sınıf parametrelerinden bağımsız parametreler gönderip istediğimiz sonucu geri döndürebiliriz.

Metodlara sınıf üzerinden erişimi bir örnek üzerinden anlatalım:

Oluşturduğumuz PuanTablosu isimli sınıf, içerisindeki puanHesapla() adlı yardımcı static metot ile gönderdiğimiz parametreler neticesinde ilgili takımın toplam puanınını göndersin. Gönderdiğimiz “G” (Galibiyet) parametresi +3, “B” (Beraberlik) parametresi ise toplam puana +1 eklesin. “M” (Mağlubiyet) ise puana hiç bir etki yapmasın.
Oluşturduğumuz her bir obje bir maç değerine karşılık gelmektedir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class PuanTablosu {
constructor(sonuc)
{
if (sonuc === "G") {
this.sonuc = "G";
}else if(sonuc === "B"){
this.sonuc = "B";
}else if(sonuc === "M"){
this.sonuc = "M";
}
}
static puanHesapla(...mac)
{
let puan = 0;
for (let i of mac)
{
if(i.sonuc === "G"){
puan += 3;
}else if (i.sonuc === "B") {
puan += 1;
}
}
console.log("Toplam puan: "+puan);
}

}

Kullanım:

1
2
3
4
5
6
7
8
const mac1 = new PuanTablosu("G"); //+3
const mac2 = new PuanTablosu("M"); // 0
const mac3 = new PuanTablosu("B"); //+1
const mac4 = new PuanTablosu("B"); //+1
const mac5 = new PuanTablosu("G"); //+3
// Static yardımcı metodumuza class üzerinden erişim sağladık.
PuanTablosu.puanHesapla(mac1,mac2,mac3,mac4,mac5);
//Console: Toplam puan: 8

1) ES6 ile Kalıtım

Diğer programlama dillerinde olduğu gibi javascript tarafında da oluşturduğumuz sınıfların özelliklerini kalıtım yolu ile başka bir sınıfa aktarabiliyorduk. Fakat bu biraz aşina olduğumuz yapılardan biraz farklı oluyordu. İsterseniz ES6 standartları ile kalıtım örneğine geçmeden önce bir örnek ile daha önceden nasıl kalıtım alıyorduk inceleyelim.

Akademisyen ve Personel adında iki adet sınıfımız olsun ve Akademisyen sınıfı Personel sınıfının özelliklerinden kalıtım yolu ile yararlansın.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Personel(ad,soyad) {
this.ad = ad;
this.soyad=soyad;
}

Personel.prototype.bilgiYazdir = function () {
console.log("Unvanı: " + this.unvan + " Adı: " + this.ad + " Soyadı: " + this.soyad)
};

function Akademisyen(ad,soyad,unvan) {
//call metodu ile Personel sınıfının constructoruna ulasıp, ilgili objemizi ve özeliiklerimi gönderiyoruz.
Personel.call(this,ad,soyad);
this.unvan = unvan;
}

Şimdi ise kalıtımı sağlayacak olan atamayı yapalım. Object.create() metoduna Akademisyen sınıfımızın prototype kısmını vererek bunu Akademisyen sınıfımızın prototype ına ekle veya at demiş oluyoruz. Yani Personel sınıfımızdaki bütün özellikler artık Akademisyen sınıfı tarafından da kullanılmış oluyor.
1
Akademisyen.prototype = Object.create(Personel.prototype);

Kullanım:

1
2
3
var akademisyen = new Akademisyen("Kubra", "Şahin", "Doc.Dr");
akademisyen.bilgiYazdir();
//Console: Unvanı: Doc.Dr Adı: Kubra Soyadı: Şahin

ES6 ile kalıtım kavramını inceleyelim;

ES6 standartları ile sınıflar arası kalıtım “extends” anahtar kelimesi ile sağlanır.

1
2
3
class altSınıf extends ustSınıf{
...
}

Ust sınıfa erişim için ise “super()” metodundan yararlanılır.
1
2
3
4
5
6
7
class altSınıf extends ustSınıf{
constructor(param1,param2,param3){
super(param1,param2);
...
}
...
}

Şimdi aynı örneğimizi ES6 sonrası kalıtım kavramı ile yeniden yazalım

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Personel {
constructor(ad, soyad, unvan) {
this.ad = ad;
this.soyad = soyad;
}

bilgiYazdir() {
console.log("Unvanı: " + this.unvan + " Adı: " + this.ad + " Soyadı: " + this.soyad)
}

}

class Akademisyen extends Personel{
constructor(ad,soyad,unvan){
super(ad,soyad);
this.unvan = unvan;
}
}

var akademisyen = new Akademisyen("Kubra", "Şahin", "Doc.Dr");
akademisyen.bilgiYazdir();
//Console: Unvanı: Doc.Dr Adı: Kubra Soyadı: Şahin

React-Native: Component Mantığı #7 ES6 Class Kavramı

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×