Objective-C Kodlama Yapısına ve Sınıflara Giriş

Objective-C Kodlama Yapısına ve Sınıflara Giriş

Objective-C, Apple tarafından geliştirilen bir programlama dilidir Nesne yönelimli programlama prensiplerine dayanır ve Cocoa ve Cocoa Touch gibi çerçevelerle sıklıkla kullanılır Objective-C'de sınıflar büyük bir öneme sahiptir ve bir şablon görevi görürler Bu sınıfların özellikleri ve metodları belirleyicidir Bir sınıfın tanımlandığı yer @interface ve @end anahtar kelimeleridir Sınıfın özellikleri instance variable olarak tanımlanırken, metodlar sınıfın davranışlarını kontrol ederler Sınıflar, programların okunabilirliğini ve bakımını kolaylaştırır Örnek kodlarla sınıf oluşturma işlemi basit bir şekilde gerçekleştirilebilir

Objective-C Kodlama Yapısına ve Sınıflara Giriş

Objective-C, Apple tarafından geliştirilen bir programlama dilidir. Genellikle Cocoa ve Cocoa Touch çerçevelerinde kullanılır. Bu dillere hakim olmak app geliştiricileri için oldukça önemlidir. Objective-C, C programlama dilinin bir üst kümesi olarak kabul edilir ve C syntax'ına dayanır. Bir programlama dilinin yapıları ve sınıfları belirli bir üstünlüğü simgeler ve Objective-C'de bu yapılar oldukça güçlüdür.

Sınıflar Objective-C'de büyük bir öneme sahiptir. Bir sınıf, nesnelerin üretildiği bir şablon görevi görür. Her sınıf, özellikler ve metodlar ile tanımlanır ve birbirinden farklı amaçlar için kullanılır. Sınıfların oluşturulması, declearation dosyaları ile başlar ve bir header dosyası içinde yer alır. Sınıflar, bir veya daha fazla metod ve değişkene sahip olabilirler ve bu özellikler sınıf içinde kullanılmak üzere tanımlanır. Örnek olarak, bir telefon sınıfı oluşturduğunuzu düşünün. Bu sınıf, telefonunuzun markası, modeli, rengi ve özelliklerine sahip olabilir. Bu özelliklerin çoğu, bir telefon sınıfının içinde yer alabilir.


Objective-C Nedir?

Objective-C, Apple tarafından geliştirilen bir programlama dilidir. Hem statik hem de dinamik tipleri destekleyen bu dil, macOS ve iOS gibi Apple platformları için uygulama geliştirme sürecinde kullanılır. Objective-C, Smalltalk ve C dillerinin birleşimiyle ortaya çıkmıştır.

Bu programlama dili, özellikle mobil cihazlarda kullanılan uygulama geliştirme süreçlerinde sıklıkla tercih edilir. Objective-C'nin temeli, nesne yönelimli programlama prensiplerine dayanır. Kodlama sürecinde sınıflar, nesneler ve mesajlar kullanılır.

Objective-C aynı zamanda, Apple'ın çeşitli uygulama programlama arayüzlerinde (API'ler) kullanılan temel bir dil olarak da kabul edilir. Özellikle, Cocoa API'si için Objective-C, kodlama süreci için temel bir gerekliliktir. Bu API, macOS ve iOS gibi Apple platformları için kullanıma sunulan bir yazılım geliştirme kitidir. Böylece, Objective-C kullanımı, Apple teknolojileriyle çalışan geliştiriciler için temel bir gerekliliktir.


Sınıflar

Objective-C dilinde sınıflar, nesne yönelimli programlama (OOP) prensipleri doğrultusunda kullanılır. Sınıflar, nesnelerin özelliklerini ve davranışlarını tanımlamak için kullanılır.

Bir sınıf tanımlandığında, sınıfın özellikleri, methodları ve diğer bileşenleri belirlenir. Bu bileşenlerin ayrıntılı bir şekilde belirtilmesi, sınıfın ne yapabileceğini ve nasıl yapılabileceğini belirler. Sınıf, sadece bir plan veya taslak olup, herhangi bir nesneyi temsil etmez.

Sınıfın özellikleri, genellikle sınıfın değişkenleri olarak adlandırılır ve sınıfın davranışları, methodlar olarak adlandırılır. Sınıf içindeki methodlar, nesnelerin çalışma biçimini kontrol eder. Sınıfın bir nesnesi oluşturulduğunda ise belirlenen özellikleri ve davranışları taşıyan bir nesne oluşur.

Objective-C dilinde bir sınıfın tanımlanması için @interface ve @end anahtar kelimeleri kullanılır. Sınıfın özelliklerinin belirtilmesi için ise, değişkenlerin tanımlanması gereklidir. Değişkenler, instance variable adı verilen özel bir yapı kullanarak tanımlanır.

Bir sınıfın instance variable’ları, genellikle sınıfın özelliklerini belirler. Methodlar ise, sınıfın davranışlarını tanımlarken, nesnenin durumunu değiştirmek için instance variable’ları kullanabilirler.

Sınıfın instance variable’larına ve methodlarına erişmek için, nesne üzerinden erişmek gereklidir. Nesne değişkenleri, oluşturulduklarında instance variable’ların başlangıç değerlerini alırlar. Sınıfın methodları, nesne değişkenleri üzerinden çalıştırılır ve nesnenin durumunu değiştirirler.

Bir sınıf tanımlamak, Objective-C dilinde OOP prensipleri doğrultusunda programlama yapmak için önemlidir. Sınıf, programların daha okunabilir ve bakımı daha kolay hale getirir. Bunun nedeni, sınıfların özelliklerinin ve davranışlarının belirli bir şekilde tanımlanmış olmasıdır. Özellikle büyük programlar için, sınıfların doğru bir şekilde tanımlanması oldukça önemlidir.


Örnek Kodlar

Sınıf oluşturma, Objective-C dilinde oldukça önemli ve temel bir konudur. Sınıf oluşturmak için öncelikle bir sınıf adı belirlememiz gerekir. Daha sonra ise bu sınıfın özellikleri ve fonksiyonları tanımlanır. Örnek olarak aşağıdaki kodlar bir sınıf oluşturmanın nasıl yapıldığını göstermektedir:

Kod Açıklama
                    @interface Araba : NSObject                     {                         //sınıf özellikleri buraya yazılır                        int hiz, model;                         NSString *marka;                     }                                     //sınıf metodları buraya yazılır                    -(void) hizlan;                    -(void) yavasla;                    -(void) bilgiVer;                    @end                

Bu kodlar, "Araba" adında bir sınıf oluşturduğumuzu göstermektedir. Sınıfımızın özellikleri hiz, model ve marka olmak üzere üç tanedir. Bunun yanı sıra sınıfımızın hizlan, yavasla ve bilgiVer adlı üç tane metoduda bulunmaktadır.

Bu örnekte görüldüğü gibi sınıf oluşturma, Objective-C dilinde oldukça basittir. Sınıfımızın özelliklerini ve metodlarını tanımladıktan sonra bu sınıfı kullanmak için ise nesnesini oluşturmalıyız. Aşağıdaki kodlar, oluşturduğumuz Araba sınıfının nesnesini nasıl oluşturabileceğimizi göstermektedir:

Kod Açıklama
                    Araba *mercedes = [[Araba alloc]init];                    [mercedes hizlan];                

Bu kodlar ise Araba sınıfının nesnesini oluşturup hizlan metodunu çağırdığımızı göstermektedir. Bu sayede oluşturduğumuz Araba sınıfının özelliklerini ve metodlarını kullanabiliriz.

Yukarıdaki örnek kodlar, Objective-C dilinde sınıf oluşturma ve kullanımına dair bir anlatım sunmaktadır. Bu şekilde sınıf oluşturma yaparak, daha derli toplu ve yönetilebilir bir kod yapısına sahip olabilirsiniz.


İlk Sınıfımızı Oluşturma

Objective-C dilinde ilk bir sınıf oluşturmak oldukça basittir. Sınıf oluşturmak için öncelikle bir isim belirlememiz gerekiyor. Ardından, bu ismi kullanarak bir sınıf tanımlayabiliriz.

Örneğin, aşağıdaki kod bloğunda "ÖrnekSınıf" adında bir sınıf tanımlıyoruz:

@class ÖrnekSınıf;

@interface ÖrnekSınıf { NSString* isim;}

-(void)metodum;@end

@implementation ÖrnekSınıf-(void)metodum { NSLog(@"Merhaba Dünya!");}@end

Yukarıdaki örnek kod bloğunda, "@interface" anahtar kelimesiyle ÖrnekSınıf adında bir sınıf tanımlıyoruz. "NSString *isim;" satırında bir özellik oluşturuyoruz ve "-(void)metodum;" satırında bir metod tanımlıyoruz.

Sonrasında "-(void)metodum" kısmında bu metodun ne yapacağını belirtiyoruz. Bu örnek kod bloğu, sınıf oluşturma ve ilk metodunu yazma işlemlerini anlatıyor. Faydalı örnek kodlara göz atarak Objective-C dilinde sınıflar hakkında daha fazla bilgi edinebilirsiniz.


Metodlar

Objective-C dilinde sınıfların içerisinde yer alan metodlar, sınıfların davranışlarını tanımlamak için kullanılır. Metodlar, sınıfların genişletilmesi için oldukça önemlidir. Her metot, bir adı ve bir veya birden çok parametresi olan bir fonksiyon gibidir.

Objective-C dilindeki metodlar, C'deki fonksiyonlara benzerdir. Ancak, Objective-C metotları, çağrılan nesne hakkında bilgi içeren bir belirteç içerir. Bu, C'den farklı bir özelliktir.

Bir sınıf içindeki bir metot, sınıfın davranışını tanımlayan kod bloklarından oluşur. Bu kod blokları, sınıfın herhangi bir zamanında çağrılabilir.

Objective-C'de, metotlar sınıfların arayüzleri içinde de tanımlanabilir. Metotlar, bir sınıf arayüzüne tanımlandıktan sonra, sınıfın tüm uygulamalarında erişilebilir hale gelir. Herhangi bir nesne, o nesnenin sınıfındaki tanımlanan tüm metotlara erişebilir.

Önceden tanımlanmış metotların kullanımı daha popülerdir. Ancak, Objective-C'de metotların tanımlanması oldukça esnektir. Bu nedenle, Objective-C dilinde, ihtiyaca ve tercihe göre, yeni metotlar oluşturulabilir ve kullanılabilir.

Örnek olarak, aşağıdaki Objective-C kodları, sınıf içinde basit bir metot tanımlar ve kullanır:

Objective-C Kodu Açıklama
- (void)displayMessage {
NSLog(@"Merhaba Dünya!");
}
Bu kod bloğu, "displayMessage" adlı bir metodun tanımlar. Bu metot, "Merhaba Dünya!" yazdırır.
[myObject displayMessage]; Bu kod bloğu, yukarıda tanımlanan "displayMessage" metodunu çağırır.

Bu örnekte, "myObject" adlı bir nesneye "displayMessage" adlı bir metot tanımlanıyor ve bu metot daha sonra çağrılıyor. Bu örnek, Objective-C'de sınıf içinde metot kullanımını gösterir.


Miras ve Kategoriler

Objective-C dilinde miras işlemi, bir sınıfın bir başka sınıfın özellikleri ve metodlarıyla genişletilmesi anlamına gelir. Bu sayede tekrar eden kodlar yerine bu özellikler tek bir sınıfta toplanarak kullanıma hazır bir şekilde sunulur. Bu işlem yapılırken super anahtar sözcüğü ile miras alınan sınıfa referans verilir.

Bir diğer konu ise kategorilerdir. Kategoriler, mevcut bir sınıfın yeni özelliklerle genişletilmesini sağlar. Bu özellikler sınıfın kendisi yerine ayrı bir kategori dosyasında tanımlandığından, kodun daha düzenli olmasını sağlar. Kategori dosyası, sınıfın kendisine referans verilerek tanımlanır ve yeni özellikler ve metodlar burada yer alır.

  • Miras işlemi için örnek kod:
  • ParentClass.h ChildClass.h
    - (void) parentMethod; - (void) childMethod;
    - (void) commonMethod;

    Burada ParentClass sınıfından ChildClass sınıfı miras almaktadır. ChildClass sınıfı, ParentClass sınıfının özelliklerine ve metodlarına sahip olurken, yeni eklediği childMethod adlı bir metod ile de kendisini farklılaştırmaktadır.

  • Kategori işlemi için örnek kod:
  • MainClass.h MainClass+ExtraFunctionality.h
    - (void) mainMethod; - (void) extraMethod;

    Burada MainClass sınıfı, MainClass+ExtraFunctionality kategorisi ile genişletilmektedir. Bu kategori dosyası MainClass.h dosyasına referans verilerek tanımlanır ve extraMethod adlı yeni bir metod burada eklenir.


Hata Yönetimi

Objective-C dilinde hata yönetimi oldukça önemli bir konudur. Kodlarımızda her zaman beklenmedik durumlar oluşabilir ve bu gibi hataların hızlı bir şekilde tespit edilip düzeltilmesi gereklidir. Bunun için Objective-C dilinde kullanılan bazı yapılardan bahsedebiliriz.

Objective-C dilinde hata yönetimi ile ilgili kullanabileceğimiz en yaygın yapılardan biri Try-Catch bloklarıdır. Bu bloklar sayesinde kodlarımızın çalışması sırasında meydana gelebilecek hataları önceden tahmin edebilir ve bu hatalara hızlı bir şekilde müdahale edebiliriz. Ayrıca, kodlarımızı daha okunaklı hale getirerek, hatanın nerede meydana geldiğini kolayca görebiliriz.

Örnek olarak, aşağıdaki kod bloğunu ele alabiliriz:

```@try { // Hata oluşabilecek kod bloğu}@catch (exception) { // Hata durumunda yapılacak işlemler}@finally { // Her durumda yapılması gereken işlemler}```

Yukarıdaki kod bloğunda, kodlarımızın çalışması sırasında oluşabilecek hatalar içerisinde `@try` bloğu yer almaktadır. Eğer bu blok içerisinde bir hata oluşursa, `@catch` bloğuna girilerek hata durumunda yapılacak işlemler belirtilir. Ayrıca, `@finally` bloğunda ise kodlarımızın her durumda yapması gereken işlemler yer alır.

Ayrıca, Objective-C dilinde hata yönetimi için `NSException` sınıfı kullanılabilir. Bu sınıf sayesinde hata objeleri oluşturabilir ve bu objeleri metodlarımızda yakalayabiliriz. Böylece, hata durumunda yapılacak işlemleri hızlı bir şekilde belirleyebilir ve kodlarımızı daha güvenli hale getirebiliriz.

Sonuç olarak, Objective-C dilinde hata yönetimi oldukça önemli bir konudur. Kodlarımızda meydana gelebilecek beklenmedik durumları önceden tahmin ederek, Try-Catch blokları veya `NSException` sınıfı gibi yapılardan yararlanarak hatasız kodlar yazabiliriz.


Try-Catch Blokları

Objective-C dilinde hata yönetimi oldukça önemlidir. Try-catch blokları sayesinde hata yönetimi daha kolay bir hale getirilebilir. Öncelikle Try bloğu içerisine yazılacak kodlar denenecek olan kodlardır. Eğer bu kodlar hata verirse Catch bloğu devreye girer.

Catch bloğu, hata yakalandığı anda ne yapılması gerektiğini belirten bloktur. Hata türüne göre farklı Catch blokları oluşturulabilir. Örneğin, bir dosya açma hatası oluştuysa bu hatayı özel olarak ele almak ve kullanıcıya daha anlaşılır bir mesaj vermek için farklı bir Catch bloğu oluşturabilirsiniz.

Try-catch bloklarının kullanımı aşağıdaki örnek kodlarda detaylı bir şekilde anlatılmaktadır:

Kod Parçası Anlamı
@try {   // Denenecek kodlar}@catch (HataTuru1 *hata) {   // HataTuru1 hatası ile karşılaşılırsa yapılacak işlemler}@catch (HataTuru2 *hata) {   // HataTuru2 hatası ile karşılaşılırsa yapılacak işlemler}@finally {   // Her durumda çalışacak olan blok}
Bu kodda Try bloğu içerisinde denenecek olan kodlar yazılır. Eğer bir hata oluşursa, hata türüne göre ilgili Catch bloğu devreye girer. Eğer herhangi bir hata oluşmazsa Finally bloğu çalıştırılır.

Yukarıdaki örnekte Try bloğunda herhangi bir hata oluşması durumunda HataTuru1 ile ilgili Catch bloğu devreye girer. Eğer HataTuru1 dışında farklı bir hata oluşursa HataTuru2 ile ilgili Catch bloğu devreye girer. Her iki durumda da Finally bloğu çalıştırılır.

Bir diğer örnekte ise sadece bir Catch bloğu kullanılır. Bu durumda hata türü fark etmeksizin, aynı kod bloğu içerisinde ele alınır:

Kod Parçası Anlamı
@try {   // Denenecek kodlar}@catch (NSException *hata) {   // Catch bloğu}@finally {   // Her durumda çalışacak olan blok}
Bu kodda sadece bir Catch bloğu yer almaktadır. Hata türü fark etmeksizin, aynı kod bloğu içerisinde ele alınır. Finally bloğu, her iki durumda da çalıştırılır.

Try-catch blokları, Objective-C dilinde hata yönetimi çalışmalarında oldukça sık kullanılır. Bu yapı sayesinde kodların hatasız bir şekilde çalıştırılması ve kullanıcıya daha anlaşılır hata mesajları sunulması sağlanır.


NSLog Kullanımı

Objective-C dilinde en sık kullanılan tool'lardan olan NSLog, yazılımın akışı konusunda önemli bir rol oynar. Debugger'ın mantığının anlaşılması konusunda da büyük bir katkı sağlar.

NSLog, basitçe, bir yazılım hata ayıklama aracıdır. Printf veya Console.WriteLine gibi kodları verimli hale getirmektedir. NSLog kullanıcılara, kod içerisinde bir dizi veri tipi ve metin çıktısı oluşturma seçeneği sunar.

Kod Ekran Çıktısı
NSLog(@"Merhaba, Dünya!"); Merhaba, Dünya!
NSLog(@"%d", 123); 123
NSString *isim = @"Ahmet"; NSLog(@"Merhaba, %@!", isim); Merhaba, Ahmet!

NSLog aynı zamanda farklı veri tiplerindeki değişkenlerin yer tutucuları olarak da kullanılabilir. Örneğin; %@ string tipi için, %d sayı tipi için, %f float ve double için yer tutucular olarak kullanılabilir. Bu kullanım şekle, String Format (formatlı dizeler) denir.

Obj-C büyük miktarda ekrana yazdırığı için NSLog bir hata ayıklama aracı olarak çok yararlıdır. Bununla birlikte, bir sınıftaki özellik değerlerinin tamamı yazdırılmışsa, debug işlemleri de hızlandırılabilir.

NSLog ile ilgili daha fazla bilgiye erişmek isteyenler, Apple'ın belgelerine bakabilirler.


Genel Kullanımı

NSLog, Objective-C dilinde sıklıkla kullanılan bir fonksiyondur. Bu fonksiyon, hata ayıklama işlemleri sırasında oldukça faydalıdır. NSLog'un temel kullanımı oldukça basittir. Kullanımı için öncelikle "NSLog" kelimesi yazılır ardından parantez açılır ve bu parantez içerisinde yazılacak olan mesaj belirtilir. Mesaj belirtilirken, özellikle değişkenler yazılırken, mesajın içerisine "%" işareti kullanılarak değişkenler yerleştirilebilir.

Bu fonksiyon aynı zamanda çeşitli özelliklere de sahiptir. Örneğin, log mesajlarına zaman damgası (timestamp) eklemek için "%@" yerine "%@" kullanılabilir. Bunun yanı sıra, NSLog kullanımı sırasında bir dosyaya yazdırma işlemi de yapılabilir. Bunun için ise "@">" operatörü kullanılabilir.

Kod Örneği Açıklama
NSLog(@"Merhaba dünya!"); Basit bir log mesajı yazdırma örneği
NSLog(@"Toplam: %d", toplam); Değişken kullanılarak log mesajı yazdırma örneği
NSLog(@"[%@] %@", zamanDamgasi, logMesaji); Zaman damgası eklenerek log mesajı yazdırma örneği
NSLog(@"Hata: %@ Dosya: %@ Satır: %d", hataMesaji, dosyaAdi, satirNumarasi); Parmak izi eklenmiş log mesajı yazdırma örneği
NSLog(@"Log mesajı dosyaya yazıldı"); Dosyaya yazdırma işlemi yapılacak log mesajı örneği

Yukarıdaki tabloda görülebileceği gibi, NSLog kullanımı oldukça geniş bir yelpazeye sahiptir. Özellikle hata ayıklama işlemleri sırasında oldukça faydalı olan bu fonksiyon, Objective-C dilinin temel özellikleri arasında yer almaktadır.


Debug İşlemleri

Objective-C dilinde kod yazarken debugging işlemi oldukça önemlidir. Bu işlem, yazılan kodun hataları ve eksikleri tespit etmek amacıyla yapılır. Bu nedenle debugging işlemleri sırasında NSLog oldukça kullanışlı bir araçtır.

NSLog, basit bir debug aracıdır ve özellikle geliştirme sırasında istenilen çıktıları almak için kullanılır. Bu şekilde programın o anki durumu hakkında bilgi edinebilir ve hataları kolayca tespit edebilirsiniz.

Bu aracı kullanarak programınızdaki bir değişkenin, methodun ya da işlevin değerini öğrenebilirsiniz. Bu şekilde, programınızı daha rahat bir şekilde yönetebilir ve hata ayıklama işleminizi daha da kolaylaştırabilirsiniz.

Örneğin, bir string değişkenini ekrana bastırmak istiyorsanız, aşağıdaki kodları kullanabilirsiniz:

Code Output
NSString *metin = @"Merhaba Dünya!";
NSLog(@"%@", metin);
Merhaba Dünya!

Bu şekilde, string değişkenini ekranda görebilir ve programınızı daha kolay yönetebilirsiniz. Ayrıca, NSLog'un farklı seçenekleri de vardır. Örneğin, ekranda daha fazla bilgi göstermek istediğinizde %@ yerine %d veya %f kullanarak farklı veri tiplerini kullanabilirsiniz.

  • %d: integer (tam sayı)
  • %f: floats/doubles (ondalıklı sayılar)
  • %@: objects (nesneler)

Bu nedenle, NSLog'un hangi seçeneklerini kullanabileceğiniz hakkında daha fazla bilgi edinmek isterseniz, Objective-C dilinin resmi dokümantasyonunu inceleyebilirsiniz. Ancak, basit debugging işlemleri için %@ fazlasıyla yeterli olacaktır.