Bir sınıf oluştururken “class” anahtar kelimesi ile oluşturmak istediğiniz sınıf ismini girerek oluşturuyorsunuz. Sınıf içinde ‘property’ tanımlamasını aynı değişkenleri nasıl tanımlıyorsak o şekilde tanımlıyoruz. Yine methodlar ve fonksiyonlarda aynı şekilde tanımlanıyor.
1
2
3
4
5
6
7
8
9
10
11
12
|
class Sekil {
var kenarSayisi = 0
var icAcilariToplam = 0
func sekilTanım() -> String {
return “Kenar sayısı \(kenarSayisi) ve iç açıları toplamı \(icAcilariToplam) olan şekil”
}
}
|
Evet yeni bir sınıf oluşturduk ve içinde 2 değişken 1 fonksiyon belirledik. Daha sonra başka bir sınıf içinde Sekil sınıfının bir nesnesini oluşturup parametrelerine değer vereceğiz.
1
2
3
4
5
6
7
8
|
var ucgen = Sekil()
ucgen.kenarSayisi = 3
ucgen.icAcilariToplam = 180
var ucgenTanımlama = ucgen.sekilTanım()
println(ucgenTanımlama)
|
Oluşturduğumuz ucgen nesnesi ile onun değişkenlerine eriştik ve değer ataması yaptık. Daha sonra yine aynı nesne ile Sekil sınıfı içindeki sekilTanım methoduna eriştik ve çağırdık. Return değeri olarak bir String döndürdüğü için öncesinde bir değişken tanımlayıp methodun dönüş değerinin o değişkene atamasını yaptık. Daha sonrada ekrana yazdırdık.
Ekran çıktısı : “Kenar sayısı 3 ve iç açıları toplamı 180 olan şekil”
Sekil sınıfını tanımlayıp bir örnek yaptık fakat bir şey eksikti. O da sınıfın nesnesini oluştururken bir başlangıç yani initializer methodu olan ‘init’ dir.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Sekil {
var kenarSayisi = 0
var icAcilariToplam = 0
init(kenarSayisi : Int , icAcilariToplam : Int){
self.kenarSayisi = kenarSayisi;
self.icAcilariToplam = icAcilariToplam;
}
func sekilTanım() -> String {
return “Kenar sayısı \(kenarSayisi) ve iç açıları toplamı \(icAcilariToplam) olan şekil”
}
}
|
Eğer biz sınıfımızı bu şekilde tanımlasaydık ve içine bir ‘init’ methodu koysaydık. Diğer sınıftan nesneyi oluştururken “kenarSayisi” ve “icAcilariToplam” değişkenlerinin değerlerini direk girip gerekli methodu çağırabilirdik.
1
2
3
4
5
|
var ucgen = Ucgen(kenarSayisi: 3, icAcilariToplam: 180)
var ucgenTanımlama = ucgen.ucgenTanım()
println(ucgenTanımlama)
|
Java da veya diğer dillerden aşina olduğumuz ‘constructer’ ( yapıcı ) methodu ‘init’ methodu ile aynı işlevi görür.
Şimdi bir kare sınıfı oluşturup onu Sekil sınıfından miras alarak oluşturalım.
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
|
class Kare: Sekil {
var kenarUzunlugu : Double
/* Kare sınıfından nesne oluştururken kenar uzunluğunu ve şeklin ismini aldık. */
init(kenarUzunlugu : Double , isim : String)
{
self.kenarUzunlugu = kenarUzunlugu
super.init(kenarSayisi: 4, icAcilariToplam: 360, isim: isim)
}
/* Bir method oluşturup karenin alanını hesaplattık. */
func alanHesapla() -> Double {
return kenarUzunlugu * kenarUzunlugu
}
/* Üst sınıfta bulunan sekilTanım methodunu override yaptık ve içeriğini değiştirdik. */
override func sekilTanım() -> String {
return “override ettiğimiz method da – \(isim) alanı : \(alanHesapla())”
}
}
|
Evet kare sınıfını oluşturduk ve Sekil sınıfından miras aldık. Peki miras alarak tam olarak ne işlem yaptık veya hangi değerlere eriştik ? İlk olarak init methodunun içinde super.init methodunu çağırarak şeklin bilgilerini girdik yani kenarSayisi,icAcilariToplam ve ismini aldık.
Sınıf içinde bunları kullanmadık ama Seklin üst sınıf olduğunu düşünürsek bütün şekillerin bu tarz ortak bilgileri olduğunu düşünürsek her yeni sınıfta bunları tek tek oluşturup değerlerini girmek yerine üst sınıfta daha önceden belirlenmiş olan değişkenlere değerlerini giriyoruz. Ve istediğimiz zaman kullanıyoruz.
1
2
3
4
5
6
7
8
9
10
|
/* Kare sınıfından bir nesne oluşturuyoruz. Oluştururken kenar uzunlugu ve isminide giriyoruz. */
let kare = Kare(kenarUzunlugu: 10.0, isim: “Kare”)
/* Bir değişken tanımlayıp kare nesnesi ile alanHesapla methodunu çağırıp dönüş değerini bu değişkene atıyoruz */
var alanStr = kare.alanHesapla()
println(“Karenin alanı : \(alanStr)“)
/* Burada ise yine bir değişken oluşturup Kare sınıfı içinde üst sınıftan olan Sekil sınıfından override ettiğimiz methodu çağırıyoruz. */
var kareTanımlama = kare.sekilTanım()
println(kareTanımlama)
|
Üst tarafta ise kare sınıfının nesnesini ana sınıfımızda oluşturduk. Daha sonra o nesneyi kullanarak Kare sınıfında tanımladığımız methodları kullanıp dönüş değerlerini oluşturduğumuz değişkenlere atıyoruz. Ve ekrana yazdırıyoruz.
Not : Üst sınıftan miras alarak yeni bir sınıf oluşturduğumuzda üst sınıfın methodlarına , değişkenlerine ve property’lerine erişebilir, değişkenlerine tekrar değer verebilir ve methodlarını override edip içini tekrar doldurup kullanabilirsiniz.