[Objective-C] - 02 Properties e Costruttori

15
Properties e Costruttori

Transcript of [Objective-C] - 02 Properties e Costruttori

Page 1: [Objective-C] - 02 Properties e Costruttori

Properties e Costruttori

Page 2: [Objective-C] - 02 Properties e Costruttori

AGENDA

• Proprietà @public, @protected e @private

• Accesso alle variabili

• Costruttori multipli

Page 3: [Objective-C] - 02 Properties e Costruttori

PROPRIETA' (1)

Un elemento molto importante in OOP è lo scope (l'ambito) delle proprietà di una classe.

Objective-C ha tre tipi di scope:

• @public

• @protected

• @private

Page 4: [Objective-C] - 02 Properties e Costruttori

PROPRIETA' (2)

@public: permette l'accesso diretto alla variabile senza dover utilizzare i metodi accessor. Non utilizzare mai!

@protected: permette l'accesso alla variabile solo alle classi che estendono la classe cui essa appartiene.

@private: permette l'accesso alla variabile solo ai metodi della classe stessa.

Page 5: [Objective-C] - 02 Properties e Costruttori

PROPRIETA' (3)

@interface ClassA : NSObject {

@publicNSString *cognome;

}

...

@end

ClassA *a = [[ClassA alloc] init];

a->cognome = @"Pippo";NSString *n = a->cognome;

Variabili @public

Page 6: [Objective-C] - 02 Properties e Costruttori

PROPRIETA' (4)

@interface ClassA : NSObject {

@protectedNSString *nome;

}

@property (retain) NSString *nome;

@end

ClassA *a = [[ClassA alloc] init];

NSString *n = [a nome];[a setNome:@"Pippo"];

Variabili @protected

Page 7: [Objective-C] - 02 Properties e Costruttori

PROPRIETA' (5)

@interface ClassA : NSObject {

@protectedNSString *nome;

@privateNSString *anni;

}

...

@end

@interface ClassB : ClassA...

@implementation ClassB

-(void)aMethod {

NSString nome = [self nome];

NSString anni = [self anni];

}

@end

Variabili @private

Page 8: [Objective-C] - 02 Properties e Costruttori

ACCESSO (1)

Per accedere alle proprietà di una classe possiamo utilizzare tre diverse notazioni:

• [ ] : parentesi quadre.

• . : "punto". Approccio simile ad altri linguaggi come Java.

• -> : freccia.

Page 9: [Objective-C] - 02 Properties e Costruttori

ACCESSO (2)

Attraverso le parentesi quadre:

Attraverso il punto:

NSString *n = [a nome];

[a setNome:@"Pippo"];

NSString *n = a.nome;

a.nome = @"Pippo";

Page 10: [Objective-C] - 02 Properties e Costruttori

ACCESSO (3)

Attraverso la "freccia" accedo direttamente alle variabili di una classe (vedi esempio di variabili @public) senza utilizzare i metodi getter/setter.

NSString *c = a->cognome;

a->cognome = @"Pippo";

Page 11: [Objective-C] - 02 Properties e Costruttori

COSTRUTTORI (1)

A volte il costruttore di default non è sufficiente per inizializzare un oggetto secondo le nostre esigenze.

Possiamo quindi creare dei costruttori multipli che accettano, analogamente ai metodi, uno o più parametri.

Ci sono tuttavia delle "best practies" da adottare qualora volessimo creare più costruttori.

Page 12: [Objective-C] - 02 Properties e Costruttori

COSTRUTTORI (2)

A differenza del costruttore di default dobbiamo dichiararne l'esistenza nell'interfaccia.

@interface ClassA : NSObject {

NSString *nome;NSString *cognome;

}

- (id)initWithNome:(NSString *)n;

- (id)initWithNome:(NSString *)n andCognome: (NSString *)c;

@end

Page 13: [Objective-C] - 02 Properties e Costruttori

COSTRUTTORI (3)

Per l'implementazione è consigliabile sviluppare solo il costruttore con più argomenti...

@implementation ClassA

- (id)init {...}- (id)initWithNome:(NSString *)n {...}

- (id)initWithNome:(NSString *)n andCognome: (NSString *)c {if(self = [super init]) {

nome = n;cognome = c;

}return self;

}...

Page 14: [Objective-C] - 02 Properties e Costruttori

COSTRUTTORI (4)

... utilizzando gli altri (a cascata) per impostare valori di default.

@implementation ClassA

- (id)init {return [self initWithNome:@"nomeDEFAULT"];

}

- (id)initWithNome:(NSString *)n {return [self initWithNome:n andCognome:@"cognomeDEFAULT"];

}

- (id)initWithNome:(NSString *)n andCognome: (NSString *)c {...}

...

Page 15: [Objective-C] - 02 Properties e Costruttori

alla prossima...