Un protocollo è un gruppo di proprietà correlate a dei metodi che possono essere implementati da qualsiasi classe. I protocolli inoltre possono essere paragonate alle interfaccia Java.Credo che un esempio pratico rendi meglio l’idea di cosa sia un protocollo e come utilizzarlo.Creiamo un nuovo progetto e diamogli un nome qualsiasi, una volta fatto ciò creiamo un nuovo protocollo file->new->file->objective-c protocol e diamogli come nome RegoleStradali.
Il nostro protocollo ci permette di “catturare” i comportamenti che si dovrebbero rispettare quando si è a bordo di un veicolo. L’utilizzo di un protocollo ci permette di poterlo applicare su oggetti arbitrari, in modo da non essere costretti a ereditare tale comportamento da una determinata superclasse. il metodi che dichiariamo nel nostro protocollo sono i seguenti.
[code lang=”obj-c”]
#import <Foundation/Foundation.h>
@protocol RegoleStradali <NSObject>
-(void)segnaleDiStop;
-(void)segnaleGirareADestra;
-(void)segnaleGirareASinistra;
@end
[/code]
Da notare che <NSObject> non sta indicare la classe NSObject ma esso ci dice che tutti gli oggetti conformi al protocollo RegoleStradali devono essere conformi anche al protocollo NSObject.
Ora creiamo 2 classi (che ereditano da NSObject) la prima classe la chiamiamo Bicicletta la seconda Automobile.
Iniziamo nell’implementare la classe bicicletta.
[code lang=”obj-c”]
#import <Foundation/Foundation.h>
#import "RegoleStradali.h"
@interface Bicicletta : NSObject<RegoleStradali>
-(void)iniziaPedalare;
-(void)stopPedalare;
@end
[/code]
file.m
[code lang=”obj-c”]
#import "Bicicletta.h"
@implementation Bicicletta
-(void)iniziaPedalare{
NSLog(@"inizio a pedalare");
}
-(void)stopPedalare{
NSLog(@"smetto di pedalare");
}
-(void)segnaleDiStop{
NSLog(@"mi fermo");
}
-(void)segnaleGirareADestra{
NSLog(@"Estendo il braccio verso destra ");
}
-(void)segnaleGirareASinistra{
NSLog(@"Estendo il braccio verso sinistra ");
}
@end
[/code]
Ora implementiamo la classe Automobile
file.h
[code lang=”obj-c”]
#import <Foundation/Foundation.h>
#import "RegoleStradali.h"
@interface Automobile : NSObject<RegoleStradali>
-(void)accellero;
-(void)freno;
@end
[/code]
file.m
[code lang=”obj-c”]
@implementation Automobile
-(void)accellero{
NSLog(@"accellero ");
}
-(void)freno{
NSLog(@"freno");
}
-(void)segnaleDiStop{
NSLog(@"mi fermo e accendo il segnale di stop");
}
-(void)segnaleGirareADestra{
NSLog(@"metto la freccia a destra");
}
-(void)segnaleGirareASinistra{
NSLog(@"metto la freccia a sinistra");
}
@end
[/code]
Come possiamo notare pur se entrambi le classi appartengono ad uno stesso contesto (veicolo) hanno dei comportamenti leggermente diversi, ad esempio come si può notare dalla classe bicicletta l’azione che comporta lo spostamento verso destra è indicato dall’azione che effettua il braccio, mentre per quanto concerne la classe automobile tale azione è illustrata con un differente comportamento.
Spero che vi sia stato tutto chiaro per qualsiasi dubbio lasciate un commento oppure contattateci tramite la nostra pagina di facebook.