Polimorfismo Objective-C
La palabra polymorphismsignifica tener muchas formas. Normalmente, el polimorfismo se produce cuando existe una jerarquía de clases y están relacionadas por herencia.
El polimorfismo de Objective-C significa que una llamada a una función miembro hará que se ejecute una función diferente dependiendo del tipo de objeto que invoca la función.
Considere el ejemplo, tenemos una clase Shape que proporciona la interfaz básica para todas las formas. Square y Rectangle se derivan de la clase base Shape.
Tenemos el método printArea que se mostrará sobre la función OOP 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;
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
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
En el ejemplo anterior, basado en la disponibilidad del método calculateArea y printArea, el método en la clase base o la clase derivada ejecutada.
El polimorfismo maneja el cambio de métodos entre la clase base y la clase derivada según la implementación del método de las dos clases.