Objective-C ile ilgili öğrenmeniz gereken önemli konulardan biri, nesne yönelimli programlamadır Bu makalede, Objective-C'de nesne yönelimli programlama konusunu inceleyeceğiz Ayrıca Getter/Setter metotlarını da detaylı bir şekilde ele alacağız Öğrenmek isteyenler için rehber niteliğinde bir yazı!

Objective-C, modern programlama dillerinden biri olup, OOP'nin tüm özelliklerini destekleyen bir dil olarak karşımıza çıkar. Bu makalede Objective-C programlama dilinde object oriented programming (OOP) kavramı ve getter/setter metotları ele alınacaktır.
Object oriented programming (OOP), kodun nesneye yönelik olmasını sağlayan bir programlama paradigmıdır. Bu yaklaşım, kodun daha organize ve anlaşılır olmasını sağlar. Objective-C, sınıflar, nesneler, inheritance ve polymorphism gibi OOP kavramlarını destekleyerek, kodun daha temiz ve okunaklı bir hale gelmesini sağlar.
Objective-C'de OOP
Objective-C, object oriented programming (OOP) kavramının tüm özelliklerini destekleyen bir programlama dilidir. OOP, bir programın her bileşeninin bir nesne olarak ele alındığı ve birbirleriyle etkileşim kurduğu bir yaklaşımdır. Bu sayede programlar daha düzenli, anlaşılır ve farklı gereksinimlere uygun olarak geliştirilebilir.
Objective-C'deki OOP uygulaması ise oldukça esnektir. Sınıflar (class) ve nesneler (object), OOP'nin temel taşlarıdır ve Objective-C'de de aynı şekilde kullanılırlar. Sınıflar, nesnelerin nasıl oluşturulacaklarını ve çalışacaklarını belirleyen şablonlardır. Nesneler ise sınıflardan türetilen örneklere denk gelirler.
Sınıflar, özellikleri (property) ve metotları (method) içerirler. Özellikler, nesnelerin veri saklamaları için kullanılırken, metotlar nesnelerin davranışlarını tanımlar. Objective-C'de de sınıfların tanımlanması oldukça basittir ve aynı zamanda esnektir. Sınıf tanımlaması ve özelliklerin belirlenmesi sonrasında, nesneler örneklenerek yaratılabilirler.
Class ve Object
Objective-C programlama dilinde her bir nesne, bir sınıf tarafından tanımlanır. Bir sınıf, yüklendikten sonra, birden fazla nesne örneği (instance) oluşturulabilir. Sınıflar, özellikler ve metotları (methods) kapsayan bir kod bloğudur ve belirli bir amaç için tasarlanmış bir kod parçasıdır.
Bir sınıfın bir örneği, bir nesne olarak adlandırılır. Bir nesneye verilen özellikler, o nesnenin sınıfındaki özellikler ile aynı isimde ve türde olan değişkenler tarafından temsil edilir. Nesnelerin metotlarıyla, nesneler arasında etkileşim ve işbirliği sağlanabilir. Bunun için öncelikle sınıfların tanımlanması gereklidir.
Sınıfların tanımlanması için kullanılan yöntemler, çok yönlü ve özelleştirilebilir bir yapıya sahiptir. Temel olarak, sınıf tanımlayıcısı (class header) ve sınıfın uygulama kodu (class implementation) olarak iki bölümden oluşur. Sınıf tanımlayıcısı, sınıfın adını ve sınıfın özel veya varsayılan üst sınıfını belirtir.
Örneğin, aşağıdaki kod örneği, "Hesap" sınıfının tanımlayıcı kodunu göstermektedir:
|
Bu kod, "Hesap" adlı bir sınıfın oluşturulduğunu ve "NSObject" sınıfından türetildiğini belirtir. Sınıfın uygulama kodu, sınıfın func'ları tanımlayan ve kodun işlevini belirleyen kod bloğudur.
Örneğin, aşağıdaki kod örneği, "Hesap" sınıfının hesaplama metodu için uygulama kodunu göstermektedir:
|
Bu kod, "Hesap" sınıfının "hesapla" adlı bir metodu olduğunu ve toplama işlemi gerçekleştirdiğini gösterir.
Nesneler, sınıfın örnekleri olarak tanımlanır ve genellikle sınıfın "init" metodu ile başlatılır. Örneğin, aşağıdaki kod bloğu, "Hesap" sınıfından bir nesne örneği oluşturur:
|
Bu kod, "Hesap" sınıfından bir nesne oluşturur ve "hesap" adlı bir işaretçi oluşturur. "Alloc" ile nesnenin bellekte yer ayırırken "init" ile başlatır.
Sonuç olarak, Objective-C programlama dilinde class ve object kavramları oldukça önemlidir. Sınıfların tanımlanması, özelliklerin ve metotların belirlenmesi nesnelerin açık bir şekilde oluşturulmasına ve etkileşimli olmasına yardımcı olur.
Sınıf Tanımlama
Sınıf tanımlama, Objective-C'de bir sınıfın özelliklerini ve metotlarını belirtmek için kullanılır. Sınıf tanımlaması, @interface anahtar kelimesi ile başlatılır ve @end ile sonlandırılır.
Sınıfın özelliklerini belirtmek için @interface sonrasında özellik adı ve veri tipi kullanılır. Örneğin, bir kişi sınıfı için örnek bir sınıf tanımlaması aşağıdaki gibi olabilir:
@interface Kişi : NSObject |
@property NSString *ad; |
@property NSString *soyad; |
@property int yaş; |
@end |
Bu tanımlamada, NSString veri tipi kullanarak ad ve soyad özellikleri tanımlanmıştır. Ayrıca, int veri tipi kullanarak yaş özelliği tanımlanmıştır. Sınıfın metotlarını tanımlamak için ise, @interface ve @end arasına metot adı ve parametreleri eklenir.
Örneğin, yukarıdaki sınıf için adVeSoyad adlı bir metot aşağıdaki gibi tanımlanabilir:
@interface Kişi : NSObject |
@property NSString *ad; |
@property NSString *soyad; |
@property int yaş; |
- (NSString *)adVeSoyad; |
@end |
Bu metot, NSString veri tipinde bir değer döndürür ve adVeSoyad adını taşır.
Getter ve setter metotları, sınıfın özellikleri için otomatik olarak oluşturulabilen özel metotlardır. Örneğin, yukarıdaki örnekteki yaş özelliği için aşağıdaki gibi bir getter ve setter metodu otomatik olarak tanımlanabilir:
@interface Kişi : NSObject |
@property NSString *ad; |
@property NSString *soyad; |
@property int yaş; |
- (int)yaş; |
- (void)setYaş:(int)value; |
@end |
Bu getter metodu, int veri tipinde yaş özelliğinin değerini döndürürken, setter metodu yaş özelliğinin değerini değiştirir. Setter metodu, void veri tipinde bir değer döndürür ve set önekli bir isim alır.
Bu şekilde, Objective-C'de sınıf tanımlaması ve metotları ile birlikte, nesne tabanlı programlama için gerekli olan tüm araçlar sunulur.
Nesne Oluşturma
Objective-C'de sınıf tanımlandıktan sonra, nesne/nesneler oluşturulabilir. Nesne oluşturma işlemi için öncelikle, sınıfın adı kullanarak bir nesne örneği oluşturulması gerekir. Örneğin, aşağıdaki örnekte sınıfımız "Araba" olsun:
Kodu: | Yorum: |
---|---|
Araba *myCar = [[Araba alloc] init]; | Yeni bir "Araba" nesnesi oluşturuluyor. |
Yukarıdaki örnekte, "myCar" isimli bir "Araba" nesnesi oluşturuluyor ve nesne bellek alanına sabitleniyor. Bu nesneyi oluşturmak için "alloc" metodu ve "init" metodunu kullanıyoruz.
Daha sonra, bu nesne üzerinde sınıfın özelliklerine ve metotlarına erişebilirsiniz. Örneğin:
Kodu: | Yorum: |
---|---|
[myCar setMarka:@"Ford"]; | "myCar" nesnesinin "marka" özelliğine "Ford" değeri atanıyor. |
NSString *marka = [myCar marka]; | "myCar" nesnesinin "marka" özelliği "marka" değişkenine atanıyor. |
Yukarıdaki kodlarda, "setMarka" ve "marka" isimli metotlar kullanılarak "myCar" nesnesinin "marka" özelliğine değer atanıyor ve bu özelliğin değeri bir değişkene atanıyor. Nesne örnekleri, sınıfın özelliklerini ve metotlarını kullanarak bu şekilde manipüle edilebilir.
Inheritance (Miras) ve Polymorphism (Çok Biçimlilik)
Object Oriented Programming (OOP), inheritance ve polymorphism kavramlarını içerir. Inheritance, bir sınıfın, diğer bir sınıftan özelliklerini devralmasıdır. Bu, kodun yoğunluğunu azaltır ve daha az kod yazarak yeni bir sınıf tanımlanmasını sağlar. Örneğin, bir araba sınıfı oluşturulabilir ve bu sınıftan türetilen bir SUV sınıfı oluşturulabilir. SUV sınıfı, özellikle tahrik tipi ve kapasite özelliklerinde yeni nitelikler içerebilir.
Polymorphism, her bir nesnenin farklı şekilde davranması anlamına gelir. Bu, aynı yöntemi farklı sınıflarda uygulamak için kullanılır. Örneğin, bir Shape (Şekil) sınıfı oluşturalım ve bu sınıftan Circle (Daire) ve Square (Kare) sınıfları türetelim. Her biri ayrı şekilde davranır ancak aynı hareket metodlarını uygular. Çok biçimlilik, kodun daha kolay okunmasını ve anlaşılmasını sağlar.
Inheritance (Miras)
Inheritance (Miras), Objective-C programlama dilinde bir sınıfın diğer sınıflardan özelliklerini devralmasına olanak veren bir kavramdır. Inheritance, nesne yönelimli programlama için önemli bir araçtır. Bu sayede bir sınıf, diğer sınıfların özelliklerini, metodlarını ve değişkenlerini kullanabilir.
Bir sınıfın kalıtım yoluyla diğer sınıfları devralabilmesi için, burada bahsettiğimiz sınıfın bir üst sınıfı (parent class) olması gerekir. Bu üst sınıftaki özellikler ve metotlar, alt sınıflara (child class) geçer. Böylece alt sınıflar, üst sınıfın sahip olduğu özellikleri kullanabilirler.
Inheritance, kod tekrarını önlemek için de kullanılır. Örneğin, bir sınıfın içindeki metotlar başka bir sınıf için de yazılabilir, ancak bu tekrarlı bir kod olacaktır. Ancak, kalıtım yoluyla, bu metotları ortak bir sınıfta tanımlayabilir ve iki sınıfın da ortak özelliklerini bu sınıf üzerinden kullanabilirsiniz.
Objective-C'de inheritance, :
işareti ile gösterilir. Alt sınıfın tanımlanmasında, üst sınıfın ismi yazıldıktan sonra bu işaret kullanılır ve alt sınıfın adı yazılır. Örneğin:
Üst Sınıf | Alt Sınıf |
---|---|
Animal | Dog |
Shape | Rectangle |
Bu örneklerde, Dog sınıfı Animal sınıfının özelliklerini kullanarak oluşturulmuştur ve Rectangle sınıfı Shape sınıfının özelliklerini kullanarak oluşturulmuştur.
Polymorphism (Çok Biçimlilik)
Polymorphism, object oriented programming'in temel kavramlarından biridir. Polymorphism, farklı nesnelerin aynı nesne gibi davranabilmesine olanak veren bir özelliktir. Bu, obje yönelimli programlamanın en büyük avantajlarından biridir. Polymorphism ile kod, daha modüler hale gelerek daha genişletilebilir hale getirilebilir.
Objective-C'de, bir nesne farklı rolleri üstlenebilir ve farklı şekillerde davranabilir. Polymorphism'in kullanılması, birden fazla nesne türü kullanılarak, benzer ama farklı davranışlar sunan bir uygulama geliştirmeyi mümkün kılar.
Bir örnek vermek gerekirse, Objective-C'de bir UIButton nesnesi farklı rolleri üstlenebilir ve farklı şekillerde davranabilir. Bir button bazen bir label gibi çalışabilir veya bir resim gibi görünebilir ama yine de bir button olarak hareket edebilir.
Bu, Objective-C'nin inheritance özelliği ile birleştirildiğinde, daha güçlü bir yapı sunmaktadır. Özellikle, bir sınıfın diğer sınıflardan özellikleri üzerine inşa edildiği inheritance özelliği, bir sınıfa ait methodların diğer sınıflarda da geçerli olabilmesini mümkün kılar.
Getter/Setter Metotları
Objective-C programlama dilinde getter/setter metotları, nesnelerin iç ve dış dünya ile etkileşimde olduğu durumlarda kullanılır. Bu metotların kullanılması ile nesneler dışarıya veri çıkartabilir veya içerideki verileri alabilir.
Getter metodu bir nesnenin özelliğini döndüren metotdur. Object nesnesinden bir özellik değerini almak isteyen başka bir sınıf, bu metodu kullanabilir. Setter metodu ise, bir nesnenin özelliği için veri atayan metotdur. Bu sayede bir nesnenin özelliği başka bir sınıf tarafından değiştirilebilir.
Getter/setter metotları, kendilerine ait birçok sözdizimi vardır. Bunlar arasında @property ve @synthesize de bulunur. Bu sözdizimleri, Objective-C'deki nesne özelliklerini tanımlamak için kullanılır.
Örneğin; bir sınıfta "name" adında bir özellik oluşturmak istediğimizi varsayalım.```objective-c@interface MyClass : NSObject@property NSString *name;@end
@implementation MyClass@synthesize name;@end```
Burada "@property" ile "name" adında bir özellik tanımlanır ve "@synthesize" komutu, özellik için ilgili getter/setter yöntemlerini oluşturur.
Bu sayede, başka bir sınıftan MyClass örneği oluşturulduğunda, bu örneğin name özelliğine erişilebilir ve değiştirilebilir.
Getter/setter metotlarını kullanmak, programlamada hataya neden olan hataların önlenmesine yardımcı olabilir. Bu yöntem ile nesneler arasındaki iletişim daha anlaşılır ve güvenli hale gelebilir.