Sınıf yapısı, nesneye yönelik programlamanın en temel yapısıdır. Bir sınıf yapısı içinde bir nesne oluşturmak için gerekli veri ve metotlar (fonksiyonlar) birlikte tanımlanır. Nesneye yönelik programlamanın bu özelliğine paketleme (encapsulation) adı verilir.
Dikdörtgen nesnesini göz önüne alalım. Bu nesnenin iki özelliği (property) mevcuttur: genişlik ve uzunluk.
Dikdörtgen üzerinde iki önemli hesaplama gerekir: dikdörtgenin çevresi ve dikdörtgenin alanı. Bu hesaplamalar ise metotlar (fonksiyonlar) sayesinde gerçekleştirilecektir.
Dİkdörtgen | |
---|---|
Özellikler | Genişlik,Uzunluk |
Metodlar | Alan(),Çeevre() |
Aşağıda DikDort adlı sınıfın tanımı görülmektedir:
// Created by Mithat Uysal on 23/06/14.
// Copyright (c) 2014 Mithat Uysal. All rights reserved.
//
class DikDort{
var genislik:Double
var uzunluk:Double
init(g:Double,u:Double)
{genislik=g
uzunluk=u
}
func alan()->Double
{return genislik * uzunluk }
func cevre()->Double
{return 2*(genislik+uzunluk)}
}
Sınıf oluşturmakta, özellikler değişkenler gibi tanımlanırken metotlar da fonksiyon olarak tanımlanmaktadır.
Tanımlanan sınıfın özelliklerine ilk değer atamak zorunludur. Bu iki şekilde yapılabilir:
-
Özellik tanımı esnasında:
var genislik:Double=0
var uzunluk:Double=0
Burada genislik ve uzunluk için ilk değer olarak 0 atanmıştır.
-
Daha genel bir yol init() fonksiyonu ile değer atamaktır:
init(g:Double,u:Double)
{genislik=g
uzunluk=u
}
Burada genişlik ve uzunluk özelliklerine ilk değer olarak g ve u değişkenleri atanmaktadır. init fonksiyonu, DikDort sınıfından d nesnesi oluşturulurken
var d = DikDort(g:6.0 , u:3.5)
komutunda görülen şekilde çağırılır.
Aşağıda ise, DikDort adlı sınıftan d adlı bir nesne (object) türetilmekte ve d’nin 2 özelliği ile (genislik ve uzunluk) iki metodu (alan ve çevre) çağrılmaktadır:
var d = DikDort(g:6.0 , u:3.5)
print("DIKDORTGENİN GENİŞLİĞİ=\(d.genislik)")
print("DIKDORTGENİN UZUNLUĞU=\(d.uzunluk)")
print("DIKDORTGENİN ÇEVRESİ=\(d.cevre())")
print("DIKDORTGENİN ALANI=\(d.alan())")
Aşağıda ise programın çıktısı görülmektedir:
DIKDORTGENİN GENİŞLİĞİ=6.0
DIKDORTGENİN UZUNLUĞU=3.5
DIKDORTGENİN ÇEVRESİ=19.0
DIKDORTGENİN ALANI=21.0
Program ended with exit code: 0
MİRAS ALMA (INHERITANCE)
Nesneye yönelik programlamanın en önemli özelliklerinden biri de miras alma özelliğidir.
Bir sınıftan yeni bir sınıf üretilebilir. Örneğin A sınıfından B adlı yeni bir sınıf üretilebilir. Bu durumda A temel sınıf (base class) ya da super sınıf (super class) ya da ebeveyn sınıf (parent class) adını alır. B ise alt sınıf (subclass)
A-TEMEL SINIF(BASE CLASS) YA DA SUPER SINIF(SUPER CLASS)
ya da çocuk sınıf (child class) olarak isimlendirilmektedir.
B-ALT SINIF (SUB CLASS) YA DA ÇOCUK SINIF(CHILD CLASS)
Bir sınıftan yeni bir alt sınıf üretildiğinde, super sınıfın bütün özellik ve metotları alt sınıfa aynen geçecektir. Buna miras alma (inheritance) adı verilmektedir.
ÖRNEK:
class A{
var x:Int
var y:Int
init()
{x=0
y=0}
func tt()->Int
{return x + y
}
}
class B:A {
func carp()->Int
{return x * y}
}
var aa=A()
aa.x=3
aa.y=89
print("3+89=\(aa.tt())")
var bb=B()
bb.x=32
bb.y=8
print("32+8=\(bb.tt())")
print("32*8=\(bb.carp())")
PROGRAMIN ÇIKTISI:
3+89=92
32+8=40
32*8=256
B-Sınıfı | |
Özellikler | x,y(A'dan miras alındı) |
(A'dan miras alındı) | |
Metotlar | tt:(A'dan miras alındı) |
Çarp() | -B'ye ait metot |
A Sınıfı | |
---|---|
Özellikler | x,y |
Metodlar | tt |
B sınıfı, A’dan aldığı tüm özellik ve metotları kullanabilir ayrıca varsa kendine ait özellik ve metotları da kullanır.
A sınıfı ise B’ye ait özellik ve metotları kullanamaz.
OVERRIDE (BASKIN GELME) ÖZELLİĞİ
Nesneye yönelik programlamanın diğer önemli bir özelliğidir.
Bir super sınıftan bir alt sınıf türetildiğinde alt sınıfın, super sınıfın özellik ve metotlarını miras aldığını öğrendik. Bazı durumlarda super sınıfta ve alt sınıfta aynı isimli fakat farklı içerikte değişken ya da metot kullanmak gerekebilir. Bu durum Swift’te override sözcüğü ile gerçekleştirilir. Alt sınıftaki aynı isimli metotların icrası önceliklidir. Üst sınıftaki aynı isimli metodun kullanılabilmesi için super komutunun kullanılması gerekir.
import Foundation
class A {
var x:Double
var y:Double
init()
{x=0
y=5
}
func u()
{print("BAZ SINIF...")}
}
class B:A {
var z:Double
override init()
{z=0
super.init()
}
override func u()
{super.u()
print("ALT SINIF...")}
}
var sup=A()
var alt=B()
print("x=\(alt.x)")
print("y=\(alt.y)")
print("z=\(alt.z)")
print(alt.u())
print(sup.u())
PROGRAMIN ÇIKTISI
x=0.0
y=5.0
z=0.0
BAZ SINIF...
ALT SINIF...
BAZ SINIF...
Program ended with exit code: 0