POO: polymorphisme

jeudi 2 avril 2015

Le polymorphisme est un principe de programmation en orienté objet qui permet à un même code d’être utilisé avec différents types d’objets. Ce qui permet l’implémentation plus abstraites.
On peut utiliser le même nom de méthode pour plusieurs types d’objets différents, ce qui permet une programmation plus générique.

Voici un exemple:

#import <Foundation/Foundation.h>
@interface Forme : NSObject
{
    float aire;
}
- (void) afficheAire;
- (void) calculAire;
@end

#import "Forme.h"
@implementation Forme
- (void) afficheAire{
    NSLog(@"Aire: %f",aire);
}
- (void) calculAire{
    
}
@end
#import <Foundation/Foundation.h>
#import "Forme.h"
@interface Carre : Forme
{
    float longueur;
}
-(id) initWithLongueur:(float)cote;
- (void) calculAire;
@end

#import "Carre.h"
@implementation Carre
-(id) initWithLongueur:(float)cote{
    longueur = cote;
    return self;
}
- (void) calculAire{
    aire =  longueur * longueur;
}
- (void) afficheAire{
    NSLog(@"Aire du carré: %f",aire);
}
@end
#import <Foundation/Foundation.h>
#import "Forme.h"
@interface Rectangle : Forme
{
    float longueur;
    float largeur;
}
- (id)initWithLongueur:(float)rLongueur andLargeur:(float)rLargeur;
- (void) calculAire;
@end

#import "Rectangle.h"
@implementation Rectangle
- (id)initWithLongueur:(float)rLongueur andLargeur:(float)rLargeur{
    longueur = rLongueur;
    largeur = rLargeur;
    return self;
}
- (void) calculAire{
    aire =  longueur * largeur;
}
@end
    Forme *carre = [[Carre alloc] initWithLongueur:10.0];
    [carre calculAire];
    [carre afficheAire];
    Forme *rect = [[Rectangle alloc]initWithLongueur:10.0 andLargeur:5.0];
    [rect calculAire];
    [rect afficheAire];
resultat_pymorphisme

Par exemple la fonction intValue est implémentée aussi bien par NSCell que NSString