Amaç-C Polimorfizmi
Kelime polymorphismbirçok biçime sahip olmak anlamına gelir. Tipik olarak, polimorfizm, bir sınıf hiyerarşisi olduğunda ortaya çıkar ve kalıtımla ilişkilendirilir.
Objective-C polimorfizmi, bir üye işleve yapılan bir çağrının, işlevi çağıran nesnenin türüne bağlı olarak farklı bir işlevin yürütülmesine neden olacağı anlamına gelir.
Örneği düşünün, tüm şekiller için temel arayüzü sağlayan bir Shape sınıfımız var. Kare ve Dikdörtgen, Shape temel sınıfından türetilir.
OOP özelliği hakkında gösterecek olan printArea yöntemimiz var polymorphism.
#import <Foundation/Foundation.h>
@interface Shape : NSObject {
CGFloat area;
}
- (void)printArea;
- (void)calculateArea;
@end
@implementation Shape
- (void)printArea {
NSLog(@"The area is %f", area);
}
- (void)calculateArea {
}
@end
@interface Square : Shape {
CGFloat length;
}
- (id)initWithSide:(CGFloat)side;
- (void)calculateArea;
@end
@implementation Square
- (id)initWithSide:(CGFloat)side {
length = side;
return self;
}
- (void)calculateArea {
area = length * length;
}
- (void)printArea {
NSLog(@"The area of square is %f", area);
}
@end
@interface Rectangle : Shape {
CGFloat length;
CGFloat breadth;
}
- (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth;
@end
@implementation Rectangle
- (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth {
length = rLength;
breadth = rBreadth;
return self;
}
- (void)calculateArea {
area = length * breadth;
}
@end
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Shape *square = [[Square alloc]initWithSide:10.0];
[square calculateArea];
[square printArea];
Shape *rect = [[Rectangle alloc]
initWithLength:10.0 andBreadth:5.0];
[rect calculateArea];
[rect printArea];
[pool drain];
return 0;
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
2013-09-22 21:21:50.785 Polymorphism[358:303] The area of square is 100.000000
2013-09-22 21:21:50.786 Polymorphism[358:303] The area is 50.000000
Yukarıdaki örnekte, calculateArea ve printArea yönteminin kullanılabilirliğine göre, temel sınıftaki yöntem veya türetilmiş sınıf çalıştırılır.
Polimorfizm, iki sınıfın yöntem uygulamasına dayalı olarak temel sınıf ve türetilmiş sınıf arasındaki yöntem geçişini yönetir.