La composizione serve a definire una nuova classe come la ‘composizione’ di due o più classi. E’ ottenuta attraverso i riferimenti (puntatori) alle classi componenti.
ES.
Definiamo una classe che rappresenti il corpo umano :
@interface CorpoUmano:NSObject{
Cuore *cuore;
Gamba *gamba;
……….
}
@end
@implementation Cuore -(NSString *) description {
return (@”Cuore”);
}
@end
La rispettiva implementazione della classe componenti ridefiniscono il metodo description appartenente alla classe NSObject da cui la classe eredita.
Possiamo quindi estendere la classe CorpoUmano dotandola del metodo showComposition in questo modo
@ interface CorpoUmano: NSObject {
Cuore cuore;
Gamba *gamba[2];
Braccia *braccia[2];
}
-(void) showComposition; @end
@implementation CorpoUmano
-(id) init
{
if( self = [super init]) {
cuore = [[Cuore alloc] init]; gamba[0] = [[Gamba alloc] init]; gamba[1] = [[Gamba alloc] init]; braccio[0] = [[Braccio alloc] init]; braccio[1] = [[Braccio alloc] init];
}
return self;
} …
responsabile dell’inizializzazione della classe stessa e in particolare della creazione di un’istanza Cuore, due istanze Gamba e altrettante per le Braccia.
L’istruzione init ritorna sempre un id relativo all’oggetto appena inizializzato. Se una classe eredita da un’altra classe, nel nostro caso da NSObject, è corretto che prima ancora di inizializzare la classe corrente, venga inizializzata la superclasse relativa.
Per far funzionare il programma occorre scrivere la funzione main(), che creerà un oggetto di tipo CorpoUmano, invocando il metodo showComposition ed uscirà
int main( int argc, const char *argv[] ) {
CorpoUmano *corpoUmano;
corpoUmano = [[CorpoUmano alloc] init]; [corpoUmano showComposition];
Return 0;
}
L’esempio CorpoUmano prevede la creazione degli oggetti componenti all’interno del metodo init, in modo ‘cablato’, cioè negando la possibilità di effettuare modifiche in qualità e quantità degli oggetti formanti in corpo umano
E’ possibile in alternativa dotare la classe dei metodi getter/setter necessari a comporre l’oggetto come
si vuole.
COMPOSIZIONE
Tra la classe A e la classe B esiste una relazione di tipo “ha un” (has a)la classe A è formata dalla classe B.