Obj-C'de çok biçimlilik overloading ve geçersiz kılma overriding arasındaki farkı öğrenmek isteyenler için detaylı bir açıklama Obj-C'de metodların nasıl çağrıldığı, nesne yönelimli programlama ve çok biçimlilik kavramlarına ilişkin bilgiler de yer alıyor
Objective-C programlama dili, çok biçimlilik (overloading) ve geçersiz kılma (overriding) gibi önemli kavramlarla ilgilidir. Bu kavramlar, programcının kodlama sürecinde ihtiyaç duyabileceği farklı çözümleri sunarlar. Özellikle farklı metodlar arasında benzerlik olduğunda, çok biçimlilik ve geçersiz kılma kavramları önemli olurlar.
Çok biçimlilik, aynı ismi taşıyan ancak farklı parametrelerle birden fazla metodun oluşturulmasıdır. Bu metotlar, aynı ismi taşıdıkları için programcının işlemlerini kolaylaştırır ve kod tekrarı önler. Aynı zamanda, farklı metot isimleri kullanmak yerine, aynı işlemleri farklı parametrelerle gerçekleştirmek daha mantıklıdır. Çok biçimlilik, aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda uygulanabilir.
Geçersiz kılma ise alt sınıfta, üst sınıftaki bir metodun aynı ismini aynı parametrelerle kullanarak uygulanmasıdır. Yani, alt sınıf, üst sınıfdaki metodu geçersiz kılar ve kendi ihtiyaçlarına uygun hale getirir. Bu işlem, alt sınıfın, üst sınıftaki metodu değiştirmesi ve kendi ihtiyaçlarına göre uyarlaması anlamına gelir. Geçersiz kılma yalnızca alt sınıflarda uygulanabilir.
Çok biçimlilik, aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda uygulanabilirken, geçersiz kılma yalnızca alt sınıflarda uygulanabilir. Aynı zamanda, çok biçimlilik farklı parametrelerle aynı isimde birden fazla metodu uygulama olanağı sağlar. Geçersiz kılma ise aynı isimli bir metodu, alt sınıfın ihtiyacına uyacak şekilde yeniden uygulama işlemidir.
-(void)print:(NSString*)string;-(void)print:(int)number withMessage:(NSString*)message;-(void)print:(NSString*)string1 andString:(NSString*)string2;
Bu örnek kodda, aynı isimli fakat farklı parametrelerle üç adet 'print' metodu oluşturulmuştur. Bu şekilde, aynı işlem için farklı parametreler kullanılabildiği için kod daha temiz ve okunaklı hale gelir.
//Üst sınıf@interface Vehicle:NSObject -(void)startEngine;@end//Alt sınıf@interface Car:Vehicle@end@implementation Car-(void)startEngine{ [super startEngine]; NSLog(@The car's engine is started);}@end
Bu örnek kodda, üst sınıfta yer alan 'startEngine' metodu alt sınıfta geçersiz kılınıp, yeni bir çalışma şekli tanımlanmıştır. Alt sınıfta 'startEngine' metodu üst sınıftan farklı bir işlem yapacak şekilde düzenlenmiştir. Bu işlem de geçersiz kılma kavramının en güzel örneklerinden biridir.
Çok Biçimlilik (Overloading) Nedir?
Çok Biçimlilik (Overloading) Nedir?
Objective-C'de çok biçimlilik (overloading) terimi, aynı isimli birden fazla metodun oluşturulmasıdır. Bu metodlar aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda tanımlanabilir. Ancak her metodun farklı parametrelere sahip olması gereklidir.
Bir sınıf içinde, bir metodu farklı veri türlerini değiştirerek birkaç kez tanımlayabiliriz. Bu şekilde aynı isimli farklı metotlar oluşur ve farklı veri türlerine sahip olan bu metotlar, ayrı ayrı çağırılabilirler. Birden fazla metodun aynı isimle çağrılması, kodun daha anlaşılır ve erişilebilir olmasına yardımcı olur.
Örneğin, basit bir uygulama için, aşağıdaki metodlar tanımlanabilir:
Metod Adı | Parametreler | Açıklama |
---|---|---|
NSString* | Metnin yazdırılması | |
int, NSString* | Sayının ve mesajın yazdırılması | |
NSString*, NSString* | İki metnin yazdırılması |
Yukarıdaki metodlar, "print" adı altında oluşturulmuş, ancak farklı parametrelere sahip olduğundan, ayrı ayrı çağrılabilirler. Bu, kodun daha temiz, anlaşılır ve bakımı daha kolay hale getirir.
Geçersiz Kılma (Overriding) Nedir?
Objective-C'de alt sınıfta, üst sınıftaki bir metodun aynı ismini, aynı parametrelerle kullanarak uygulanması işlemine "geçersiz kılma" denmektedir. Bu işlem, alt sınıfın üst sınıfın metodunu yeniden uygulayarak, metodun özelleştirilmesini ve alt sınıfın ihtiyaçlarına uygun hale getirilmesini sağlar.
Geçersiz kılma işlemi, alt sınıfın üst sınıfın metodunu kullanmasından farklıdır. Alt sınıfın ihtiyacına uygun olarak yeniden uygulama işlemi, alt sınıfın üst sınıftan gelen özellikleri geçersiz kılması anlamına gelir ve alt sınıfta özel bir durum yaratır.
Üst sınıfta tanımlanmış bir metodu alt sınıfta geçersiz kılmak için, alt sınıfın üst sınıftan türemiş olması gerekir. Alt sınıfta, üst sınıftaki metodu aynı isimle ve aynı parametrelerle uygulamak suretiyle geçersiz kılma işlemi yapılabilir.
Çok Biçimlilik (Overloading) ile Geçersiz Kılma (Overriding) Arasındaki Farklar
Objective-C'de, çok biçimlilik (overloading) ve geçersiz kılma (overriding) kavramları oldukça faydalıdır. Çok biçimlilik, aynı isimle ancak farklı parametrelerle birden fazla metotun oluşturulmasıdır. Böylece aynı işlevi gören metotlar, farklı parametreleriyle kullanılabilir.
Geçersiz kılma ise alt sınıftaki bir metotun, üst sınıftaki bir metotla aynı isim ve parametrelerle uygulanmasıdır. Ancak alt sınıfta değiştirilmiş, farklı bir işlevi yerine getirmektedir. Bu işlem yalnızca alt sınıflarda uygulanabilir.
Bir başka fark ise, çok biçimliliğin aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda uygulanabilirken, geçersiz kılmanın yalnızca alt sınıflarda uygulanabiliyor olmasıdır.
Özetle, çok biçimlilik ve geçersiz kılma arasındaki bu farklılıklar, sınıf yapısını ve metotları düzenlerken dikkate alınması gereken önemli kodlama unsurlarıdır.
Çok Biçimlilik (Overloading)
Objective-C'de, aynı metodun farklı parametrelerle birden fazla defa kullanılması mümkün olan çok biçimlilik (overloading) kavramı vardır. Bu sayede, uygulanan metotlar sınıfın amaçlarına göre değişiklik gösterebilirler.
Örneğin, aynı sınıf içinde, print isimli bir metot birden fazla kez tanımlanabilir. İlk kullanımda string tipinde bir parametre alabilir, ikinci kullanımda ise int tipinde bir parametre ve bir string mesajı alabilir. Üçüncü kullanımda ise iki string parametre alabilir.
Metot Adı | Parametreler |
---|---|
print: | NSString* |
print:withMessage: | int, NSString* |
print:andString: | NSString*, NSString* |
Bu örnekte görüldüğü gibi, aynı isimli ancak farklı parametrelerle birden fazla metot uygulaması mümkündür.
Geçersiz Kılma (Overriding)
Geçersiz kılma, alt sınıflarda, üst sınıfta olan bir metodu aynı adla ve aynı parametrelerle farklı bir şekilde yeniden uygulama işlemidir. Yani, bir alt sınıf, üzerinde değişiklik yapmak istediği bir metodu, aynı isimle üst sınıftan alabilir ve kendi ihtiyaçlarına uyacak şekilde yeniden uygulayabilir.
Geçersiz kılma, programlamada esneklik sağlar. Alt sınıf, üst sınıfın metotlarını kendine özgü bir şekilde kullanabilir ve bu metotların işlevlerini değiştirebilir. Aynı zamanda, alt sınıf bu metotların bütünlüğünü koruyabilir ve hala üst sınıfta tanımlı olan metot çağrısı yapabilir.
Örneğin, üst sınıfın 'startEngine' metodunu alıp alt sınıfta değiştirerek, arabanın motorunu çalıştıran özgün bir yazılım parçası oluşturabilirsiniz. Bu, araba sınıfında olmayan ilave bir işlevsellik sağlar ve arabanın mükemmelleştirilmesinde önemli bir rol oynar.
Tabii ki, geçersiz kılma işlemi, alt sınıfın, üst sınıfta tanımlanan metodun imzasını değiştirmesi durumunda yapılamaz. Bu durumda, alt sınıfın metodu, üst sınıftakine benzese de tamamen ayrı bir metot olarak kabul edilir.
Çok Biçimlilik (Overloading) için Örnek Kod
Çok Biçimlilik (Overloading) için Örnek Kod
Çok biçimlilik, aynı isimli ancak farklı parametrelerle birden fazla metodun uygulanmasıdır. Aşağıdaki örnek kodda, print metodunu farklı parametrelerle üç kez uyguladık:
Metot İsmi | Parametreler |
---|---|
Nesne: string | |
Nesne: number Mesaj: message | |
Nesne: string1 Nesne: string2 |
Bu üç metot, aynı isimle ancak farklı parametrelerle uygulanabilir. Böylece, print metodu aynı işlevi yerine getirir ancak farklı parametrelerle kullanılır. Bu kod parçası, çok biçimlilik (overloading) kavramını örnekleyen kullanışlı bir uygulamadır.
-(void)print:(int)number withMessage:(NSString*)message;Bu örnek kod, aynı isme ve farklı parametrelere sahip birden fazla metodun uygulanmasına bir örnektir. Bu metot, int türünde bir sayı ve NSString türünde bir mesaj parametresi alır ve bunları bir arada kullanarak bir çıktı üretir. Bu çok biçimlilik örneği, aynı sınıf içinde kullanılabilen farklı metotların nasıl tanımlanabileceğine bir örnektir.
Bu örnekte, bir sayı ve bir mesaj göndererek parametreleri tanımlıyoruz. Parametre değerleri ve tipi değiştiğinde, farklı bir metodun kullanılmasına izin veren çok biçimlilik kavramını kullanıyoruz.
-(void)print:(NSString*)string1 andString:(NSString*)string2;-(void)print:(NSString*)string1 andString:(NSString*)string2;
Bu örnek kod, Objective-C'de çok biçimlilik (overloading) kavramının bir örneğidir. Aynı isimli ancak farklı parametrelerle birden fazla metodun oluşturulmasına izin verir. Bu metod, bir NSString ve diğer bir NSString olarak iki farklı parametre alır.
Bu metodun uygulaması, bu iki değişkenin birleştirilmesi sonucunda bir metin yığını elde edilmesidir. Bu yığın, öncelikle ilk parametreye ve ardından ikinci parametreye göre oluşturulur.
Aşağıdaki örnek kod, print metodu uygulamasının nasıl çalıştığını göstermektedir:
NSString *name = @"John"; NSString *surname = @"Doe"; [self print:name andString:surname]; // Output: "JohnDoe"
Burada, ilk parametreye "John" ve ikinci parametreye "Doe" değerleri geçirilerek, print metodu uygulandı. Bu metodun sonucunda, "JohnDoe" adlı bir metin yığını elde edildi.
Bu örnek kod, Objective-C'de çok biçimlilik (overloading) kavramına bir örnek teşkil etmektedir. Bu kavram, aynı isimli ancak farklı parametrelerle birden fazla metot oluşturulmasına olanak tanır.
Geçersiz Kılma (Overriding) için Örnek Kod
Geçersiz kılma, Objective-C programlama dilinde alt sınıfta üst sınıftaki bir metodu aynı isimle ve aynı parametrelerle kullanarak tekrar uygulamaktır. Bu işlem alt sınıfın ihtiyacına uygun şekilde yeniden uygulanmasını sağlar. Geçersiz kılmanın örnek kodu aşağıdaki gibidir:
//Üst sınıf@interface Vehicle:NSObject -(void)startEngine;@end
//Alt sınıf@interface Car:Vehicle@end
@implementation Car-(void)startEngine{ [super startEngine]; NSLog(@"Arabanın motoru çalıştırıldı.");}@end
Yukarıdaki kodda üst sınıfta bir "Vehicle" sınıfı tanımlanır ve içinde "startEngine" adlı bir metod tanımlanır. Alt sınıf olan "Car" sınıfı da tanımlanır ve üst sınıftaki "startEngine" metodunu aynı isim ve parametrelerle tekrar tanımlar. Bu uygulama sayesinde Car sınıfından nesne oluşturulduğunda, alt sınıftaki "startEngine" metodu, üst sınıftaki metodun yanı sıra ekrana "Arabanın motoru çalıştırıldı." mesajını da yazdıracaktır.
Geçersiz kılma, "super" anahtar kelimesi kullanılarak üst sınıfa atıfta bulunulduğu için alt sınıfın üst sınıftaki metodunu çok biçimlilik anlamında değiştirmediğini unutmamak gerekir. Alt sınıf, üst sınıfın metodunu ileriye doğru tamamlar ve tamamlanan haliyle kullanır.
@interface Vehicle:NSObject@interface Vehicle:NSObject
Objective-C'de, sınıfların tanımlanması için @interface sözcüğü kullanılır ve sınıfların tür tanımlamaları için de NSObject kullanılır. Yani, bu kod satırındaki Vehicle sınıfı, NSObject'ten türetilmiştir ve bir nesne olarak oluşturulabilir.
Ayrıca @interface, sınıfın özelliklerini, metodlarını ve değişkenlerini belirlemek için kullanılır. Bu sınıf, araçlar için genel özellikleri ve metodları içermelidir. Örneğin, bu sınıfın içinde startEngine gibi, aracın motorunu çalıştıran metodlar yer alabilir.
-(void)startEngine;-(void)startEngine; metodu, Objective-C'deki geçersiz kılma (overriding) örneği olarak kullanılabilir. Bu metod, üst sınıfta tanımlandıktan sonra alt sınıflar tarafından alt sınıfın ihtiyaçlarına uygun bir şekilde yeniden uygulanabilir. Örneğin, üst sınıfta bu metot sadece bir mesaj yazdırabilirken, alt sınıfta bu metot arabanın motorunu çalıştırmak için kullanılabilir. Şimdi bir örnek kod kullanarak bu konuyu daha ayrıntılı bir şekilde gözden geçirelim.
Öncelikle, üst sınıfımızı ve alt sınıfımızı tanımlayalım:
Üst Sınıf (Vehicle) | Alt Sınıf (Car) |
---|---|
-(void)startEngine; | |
-(void)startEngine; |
Üst sınıfta startEngine metodu sadece bir mesaj yazdırırken, alt sınıfta bu metot arabanın motorunu çalıştırmak için kullanılabilir. Sonuç olarak, alt sınıfımızda aşağıdaki kodu kullanabiliriz:
- - (void)startEngine
- {
- [super startEngine];
- NSLog(@"The car's engine is started");
Bu kodda, "super" kelimesi, alt sınıfta kullanılan metotun aslında üst sınıftan geldiğini belirtir. Böylece, üst sınıftaki kodu da başarıyla çalıştırabiliriz. Daha sonra, "NSLog" fonksiyonu, arabanın motorunun başarıyla çalıştırıldığını yazdırır.
Aşağıdaki örnek kod, alt sınıfta geçersiz kılma kullanarak arabanın motorunu çalıştırır:
//Üst sınıf@interface Vehicle:NSObject -(void)startEngine;@end//Alt sınıf@interface Car:Vehicle@end@implementation Car-(void)startEngine{ [super startEngine]; NSLog(@"The car's engine is started");}@end
Bu şekilde, Objective-C'deki geçersiz kılma (overriding) kavramını anlama şansı elde edebilirsiniz. Artık, üst sınıfta tanımlanan metotları alt sınıfların ihtiyaçlarına göre yeniden uygulamak için kullanabilirsiniz.
@endObjective-C'de çok biçimlilik (overloading) ve geçersiz kılma (overriding), programcıların metodlarını daha etkili ve esnek bir şekilde kullanabilmelerine olanak tanır. Ancak, her iki kavram arasındaki farklar açıkça anlaşılmalıdır. Çok biçimlilikte, aynı isimli ancak farklı parametrelerle birden fazla metot oluşturulabilirken, geçersiz kılma ise üst sınıfta tanımlanan bir metodu alt sınıfta aynı isimle uygulayarak, alt sınıfın ihtiyacına uyacak şekilde yeniden uygulama işlemidir.
Çok biçimlilik ve geçersiz kılma kavramları, complex projelerde kullanıcılara zaman kazandırmak için önemli araçlardan biridir. Öğrenmesi kolay olduğu için, Objective-C'de her programcı tarafından öncelikle kullanılması gereken araçlar arasındadır.
//Alt sınıf//Alt sınıf
Alt sınıf, üst sınıftan miras aldığı metodları kullanarak, kendi ihtiyacına uyacak şekilde yeniden uygulama imkanı sağlar. Bu sayede, üst sınıfta olan bir metodun işleyişinin alt sınıfta değiştirilmesi mümkün olur.
Bir örnek ile açıklamak gerekirse, üst sınıfın bir metodu olan "startEngine" metodu, alt sınıfta değiştirilerek farklı sonuçlar elde etmek mümkündür. Örneğin, alt sınıftaki "Car" sınıfında "startEngine" metodu yeniden uygulanarak, arabaların motorunun nasıl başlatılacağına dair özel mesajlar eklenebilir.
Aşağıdaki örnek kodda, üst sınıf olan "Vehicle" sınıfında bulunan "startEngine" metodu, alt sınıfta olan "Car" sınıfında yeniden uygulanmıştır. Bu sayede, alt sınıftaki "startEngine" metodu, üst sınıfta bulunan "startEngine" metodundan farklı bir işlevsellik kazanmıştır.
//Üst sınıf | //Alt sınıf |
---|---|
@interface Vehicle:NSObject -(void)startEngine; @end | @interface Car:Vehicle @end @implementation Car -(void)startEngine{ [super startEngine]; NSLog(@ The car's engine is started ); } @end |
Görüldüğü üzere, alt sınıfta üst sınıftan miras alınan "startEngine" metodu yeniden uygulanarak, "The car's engine is started" şeklinde bir mesaj eklendi. Bu sayede, alt sınıfta kullanılan "startEngine" metodu, üst sınıfta bulunan "startEngine" metodundan farklı bir işlevsellik kazandı.
@interface Car:Vehicle@interface Car:Vehicle
Alt Sınıfın Tanımlanması:
Objective-C'de bir alt sınıfın tanımlanması, üst sınıfın tanımı izlenerek gerçekleştirilebilir. Alt sınıfın ismi belirtilir ve iki nokta üst üste işareti kullanılarak üst sınıfın ismi belirtilir. İlgili sınıfın tanımları üst üste gelecek şekilde yazılmaktadır. Aşağıda örnek bir alt sınıfın tanımı verilmiştir:
Alt Sınıf | Üst Sınıf |
---|---|
Car | Vehicle |
Geçersiz Kılma (Overriding) Uygulaması:
Alt sınıfın, üst sınıfta bulunan bir metodu, aynı isimde ve parametrelere sahip olarak yeniden uygulayabilmesine denir. Bu sayede alt sınıfın ihtiyacına göre metot özelleştirilir. Alt sınıfın uyguladığı metodun, üst sınıftaki metotla aynı isim ve parametrelere sahip olması gereklidir.
Aşağıda Car sınıfının Vehicle sınıfındaki startEngine metodu için geçersiz kılma uygulanarak yeniden şekillendirilmesi örneği verilmiştir.
//Üst sınıf@interface Vehicle:NSObject -(void)startEngine;@end//Alt sınıf@interface Car:Vehicle@end@implementation Car-(void)startEngine{ [super startEngine]; NSLog(@"The car's engine is started");}@end
Car sınıfı, Vehicle sınıfındaki startEngine metodunu, yeniden uygulayarak alt sınıfın ihtiyacına uyacak şekilde değiştirmiştir. Bu sayede Car sınıfı, Vehicle sınıfındaki metodu kullanmakta ve kendi ihtiyaçlarına göre şekillendirmektedir.
@endBu makalede, Objective-C'de çok biçimlilik (overloading) ve geçersiz kılma (overriding) kavramlarının farklarına değindik. Çok biçimlilik, aynı isimli ancak farklı parametrelerle birden fazla metodun oluşturulmasıdır. Geçersiz kılma ise, alt sınıfta, üst sınıftaki bir metodun aynı ismini, aynı parametrelerle kullanarak uygulanmasıdır.
Çok biçimlilik, aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda uygulanabilen bir kavramdır. Farklı parametrelerle aynı isimde birden fazla metodun uygulanması mümkündür. Örneğin, aşağıdaki kodda, print metodu farklı parametrelerle farklı şekillerde uygulanmaktadır:
Kod Satırı | Açıklama |
---|---|
-(void)print:(NSString*)string; | Bir NSString değişkeni alır ve yazdırır. |
-(void)print:(int)number withMessage:(NSString*)message; | Bir int ve bir NSString değişkeni alır ve yazdırır. |
-(void)print:(NSString*)string1 andString:(NSString*)string2; | İki adet NSString değişkeni alır ve yazdırır. |
Geçersiz kılma ise yalnızca alt sınıflarda uygulanabilen bir kavramdır. Alt sınıf, üst sınıfın metotlarını kullanırken, ihtiyacına uyacak şekilde yeniden düzenleme yapabilir. Örneğin, aşağıdaki kodda, Vehicle sınıfının startEngine metodu Car sınıfında geçersiz kılınarak, "The car's engine is started" mesajı eklendi:
Üst Sınıf (Vehicle) | Alt Sınıf (Car) |
---|---|
@interface Vehicle:NSObject -(void)startEngine; @end | @interface Car:Vehicle @end @implementation Car -(void)startEngine{ [super startEngine]; NSLog(@"The car's engine is started"); } @end |
Bu şekilde, Objective-C'de çok biçimlilik ve geçersiz kılma kavramlarını anlamak daha da kolaylaşacaktır.
@implementation Car@implementation Car, üst sınıfta yer alan bir metodun alt sınıf tarafından yeniden uygulanmasını sağlar. Örneğin, vehicile (araç) adlı bir üst sınıf ve bunun altında yer alan car (araba) adlı bir alt sınıf varsa, vehicle sınıfında bulunan startEngine () adlı bir metot varsa, car sınıfı bu metodun adını ve parametrelerini değiştirerek kendi ihtiyacına uyacak şekilde yeniden uygulayabilir. Bu süreç, alt sınıfın ihtiyacına uyacak şekilde özelleştirilmiş işlevselliği sunar.
Yukarıda bahsedildiği gibi, geçersiz kılma alt sınıflarda sınırlıdır ve yalnızca üst sınıfın metotlarını değiştirmek için kullanılır. Alt sınıf, metot adını, parametrelerini ve dönüş türünü üst sınıfın metoduyla aynı şekilde oluşturarak geçersiz kılma işlemini gerçekleştirir. Ancak alt sınıf, üst sınıfın metoduyla kendi ihtiyacına uyacak değişiklikler yaparak kendi metodu oluşturur.
Bir örnek kodda, üst sınıf vehicle'da startEngine adlı bir metot bulunuyor ve alt sınıf car bu metodu kullanarak, arabayı çalıştırma amaçlarına göre yeniden uyguluyor. Alt sınıfın startEngine () metodu, üst sınıfın startEngine () metoduyla aynı isme sahip olsa da, alt sınıfta arabanın çalışma şeklini yansıtacak şekilde değiştirilmiştir.
Üst Sınıf | Alt Sınıf |
---|---|
@interface Vehicle:NSObject -(void)startEngine; @end | @interface Car:Vehicle @end @implementation Car -(void)startEngine{ [super startEngine]; NSLog(@"The car's engine is started"); } @end |
Yukarıdaki örnekte Car sınıfı, Vehicle sınıfında bulunan startEngine () metotunu yeniden uygulamaktadır. Alt sınıf, üst sınıfta yer alan metotların kodlarını değiştirerek kendi ihtiyacına uygun hale getirebilir. Bu işlem, alt sınıfın üst sınıfa ait fonksiyonlardan farklı ihtiyaçlar duyması durumunda yapılabilir.
-(void)startEngine{'-(void)startEngine' metodu, Objective-C'de geçersiz kılma örneğidir. Bu metod, 'Vehicle' üst sınıfında tanımlanmıştır ve alt sınıf 'Car' tarafından geçersiz kılınmıştır.
Bunun amacı, alt sınıfın ihtiyaçlarına uyacak şekilde, üst sınıfta tanımlanan metodun yeniden uygulanmasıdır. Geçersiz kılma, alt sınıfta yeni bir metod tanımlamak yerine, üst sınıfın metodunu değiştirerek kullanmak için yapılan bir işlemdir.
Yukarıdaki örnekte, 'Vehicle' üst sınıfında tanımlanan 'startEngine' metodu, alt sınıf 'Car' tarafından geçersiz kılınarak yeniden uygulanmıştır. Alt sınıfta, 'startEngine' metodunun başında 'super' kelimesi kullanılarak, üst sınıfta tanımlanan 'startEngine' metodunun çalıştırılması sağlanmıştır. Ardından, alt sınıf 'Car' için özgü bir mesaj olan 'The car's engine is started' yazdırılmıştır.
Bu örnek, geçersiz kılma yönteminin nasıl kullanılabileceğine dair bir örnektir ve Objective-C'de çok biçimlilik kavramını daha iyi anlamak için önemli bir adımdır.
[super startEngine];'[super startEngine];' kodu, alt sınıfta üst sınıftaki bir metodu geçersiz kılmak için kullanılır. Bu kod, bir üst sınıfın metodu devam ettikten sonra, alt sınıfta yer alan bu metodu eklemek için kullanılır. Bu şekilde, üst sınıfta yer alan metot, alt sınıftaki metotla birlikte çalışarak, farklı bir işlevi gerçekleştirecek şekilde güncellenebilir.
Bu işlem, alt sınıfın, üst sınıftan kalıtım yoluyla aldığı metodu değiştirerek, alt sınıfa özgü bir özellik kazandırmasını sağlar. Alt sınıf, üst sınıfın fonksiyonelliğini değiştirebilir veya genişletebilir. Bu nedenle, geçersiz kılma işlemi, polimorfizmin bir örneğidir.
Aşağıdaki örnek kod, üzerinde açıklamalarla geçersiz kılma işlemini göstermektedir:
Üst Sınıf | Alt Sınıf |
---|---|
@interface Vehicle : NSObject | @interface Car : Vehicle |
- (void)startEngine; | - (void)startEngine; |
@end | @end |
@implementation Car | - (void)startEngine{ |
- (void)startEngine{ | [super startEngine]; |
[super startEngine]; | NSLog(@"The car's engine is started"); |
NSLog(@"The engine is started"); | @end |
@end |
Yukarıdaki örnek kodda, 'startEngine' isimli metot, üst sınıfta tanımlanmıştır. Alt sınıftaki 'startEngine' metodu, üst sınıftaki metodu çağırmak için 'super' anahtar kelimesi kullanarak, öncesinde üst sınıftaki metodu uygulayarak, alt sınıfın kendi özelliğini ekler.
Alt sınıftaki metot, üst sınıfın metoduyla aynı görünse de, aynı isme sahip olsa da, alt sınıfta kullanılan seçenek üst sınıftan farklıdır. Bu sayede, alt sınıf yeni bir işlevsellik ekleyerek, üst sınıftan kalıtım yoluyla aldığı metodu farklılaştırır.
NSLog(@NSLog(@, Objective-C'de kullanılan bir fonksiyondur. Bu fonksiyon, programcıların uygulamalarda hata ayıklama yapmasına yardımcı olur. NSLog(@ fonksiyonu, konsol penceresine yazdırılan çıktıları gösterir ve programcılara hataların nerede olduğunu belirlemeleri için yardımcı olur.
Örneğin, bir kodun hangi satırda çalışmadığını veya bir değişkenin değerini görmek istediğinizde NSLog(@ fonksiyonunu kullanabilirsiniz. Bu şekilde, programınızın akışını izleyebilir, doğru sonuçları almak için adımlarınızı ayarlayabilirsiniz.
Genellikle, karışık uygulamalarda debugging yapmak çok zordur ve burada NSLog(@ fonksiyonu yardımcı bir rol oynar. Bu fonksiyon sayesinde uygulamanızda meydana gelen hataları daha hızlı ve etkili bir şekilde çözebilirsiniz.
The car's engine is started.Geçersiz Kılma (overriding) demonstration codes are used to manipulate the functionality of the superclass's startEngine method. When a method is overridden, a subclass provides its implementation, which is used instead of the superclass's implementation during runtime. In this case, the startEngine method of the superclass, Vehicle, has been overridden in the Car subclass to provide a different implementation.
As per the example shown above, when the startEngine method is called on a Car object, in addition to the superclass's startEngine method, the implementation within the Car class will be executed. In this case, the NSLog function inside the Car's startEngine NSLog function will be implemented instead of the parent class implementation, which will print the message "The car's engine is started".
);Bu makalede, Objective-C'de önemli iki kavram olan çok biçimlilik (overloading) ve geçersiz kılma (overriding) arasındaki farklar açıklandı. Çok biçimlilik, aynı isimli ancak farklı parametrelerle birden fazla metodun oluşturulmasıdır. Geçersiz kılma ise, alt sınıfta, üst sınıftaki bir metodun aynı ismini, aynı parametrelerle kullanarak uygulanmasıdır.
Çok biçimlilik, aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda uygulanabilirken, geçersiz kılma yalnızca alt sınıflarda uygulanabilir. Örneğin, bir araba sınıfı, bir araç sınıfından miras alabilir ve aracın başlatılması metodunu geçersiz kılabilir.
Çok biçimlilik için örnek olarak, aynı isimde farklı parametrelerle üç farklı print metodu oluşturulabilir. Geçersiz kılma için örnek olarak, üst sınıfta bulunan bir startEngine metodu, alt sınıfta, araba sınıfının ihtiyaçlarına uygun şekilde uygulanabilir.
Bu kavramların anlaşılması Objective-C'de programlama yaparken oldukça önemlidir ve programların verimliliği açısından büyük bir rol oynar.
}Objective-C'de çok biçimlilik ve geçersiz kılma kavramları birbirinden farklıdır. Bir metodun ismi, aynı sınıfta veya sınıf hiyerarşisindeki farklı sınıflarda kullanılabilirken, alt sınıfta bir metodun aynı isimle, aynı parametrelerle yeniden tanımlanması işlemi geçersiz kılma olarak adlandırılır. Çok biçimlilik ise aynı isimli ancak farklı parametrelerle birden fazla metodun oluşturulmasıdır.
Geçersiz kılma işlemi yalnızca alt sınıflarda kullanılırken, çok biçimlilik aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda da kullanılabilir. Geçersiz kılma ile metot yeniden tanımlanırken, çok biçimlilikte farklı parametrelerle aynı isimli birden fazla metot oluşturulur.
Bu farklar göz önüne alındığında, çok biçimlilik ve geçersiz kılma kavramları birbirinden ayrılabilir. Bir sınıfta aynı isimli ancak farklı parametrelerle birden fazla metodun kullanılması durumunda çok biçimlilik, alt sınıfta üst sınıfın bir metodunun aynı isimli ve aynı parametrelerle yeniden uygulanması durumunda ise geçersiz kılma kullanılır.
Örneğin, bir sınıf içinde print adında bir metot oluşturulduğunu düşünelim. Print metodu, aynı sınıf içinde farklı olarak değişen parametrelere sahip birden fazla metot ile aynı anda kullanılabilir. Bu durumda çok biçimlilik kullanılır. Ancak, alt sınıfta bulunan bir metodu, üst sınıfın aynı isimli metodu ile aynı parametrelerle tekrar uygulamak istediğimizde geçersiz kılma işlemi uygulanır.
@endBu makalede, Objective-C'de çok biçimlilik (overloading) ve geçersiz kılma (overriding) kavramları arasındaki farklar açıklandı. Çok biçimlilik (overloading), aynı isimli ancak farklı parametrelerle birden fazla metodun oluşturulmasıdır. Bu sayede, aynı isimle farklı işlemler yapılabilir. Geçersiz Kılma (overriding) ise alt sınıfta, üst sınıftaki bir metodu aynı isimle ve aynı parametrelerle kullanarak uygulama işlemidir. Alt sınıfın ihtiyacına uyacak şekilde metod yeniden uygulanır ve alt sınıfın özelliklerine göre çalışır.
Çok biçimlilik (overloading) ile geçersiz kılma (overriding) kavramları arasındaki en temel fark, çok biçimliliğin aynı sınıf içinde veya aynı sınıf hiyerarşisindeki farklı sınıflarda uygulanabilirken, geçersiz kılmanın yalnızca alt sınıflarda uygulanabilmesidir. Ayrıca çok biçimlilikte farklı parametrelerle aynı isimde birden fazla metodun kullanılabilmesi mümkündür. Geçersiz kılma ise aynı isimli bir metodu alt sınıfın ihtiyacına uyacak şekilde yeniden uygulama işlemidir.
Örneğin, çok biçimlilik (overloading) için "print" isimli bir metodun oluşturulması düşünülebilir. Farklı parametrelerle farklı işlemler yapılabilen bu metod, belirtilen parametrelere göre çalışır. Geçersiz kılma (overriding) içinse bir üst sınıfta tanımlanan bir metodu, alt sınıfın ihtiyacına uyacak şekilde yeniden uygulamak gerekir.
-(void)print:(NSString*)string;-(void)print:(int)number withMessage:(NSString*)message;-(void)print:(NSString*)string1 andString:(NSString*)string2;
Üst sınıftaki "Vehicle" sınıfında "startEngine" isimli bir metod tanımlanmıştır. "Car" isimli alt sınıfında ise bu metot yeniden uygulanarak alt sınıfın ihtiyacına uygun hale getirilmiştir.
//Üst sınıf@interface Vehicle:NSObject -(void)startEngine;@end//Alt sınıf@interface Car:Vehicle@end@implementation Car-(void)startEngine{ [super startEngine]; NSLog(@"The car's engine is started");}@end