Programmazione iOS e Mac ( composizione)

      Nessun commento su Programmazione iOS e Mac ( composizione)

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.

DIFFERENZE TRA EREDITARIETA’ E  COMPOSIZIONE  
EREDITARIETA
Tra la classe A e la classe B esiste una relazione di tipo “è un” (is-a)classe A è una classe B più specializzata

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.