[Objective-C] - 02 Properties e Costruttori
-
Upload
jacopo-di-stanislao -
Category
Self Improvement
-
view
3.672 -
download
0
Transcript of [Objective-C] - 02 Properties e Costruttori
Properties e Costruttori
AGENDA
• Proprietà @public, @protected e @private
• Accesso alle variabili
• Costruttori multipli
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
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.
PROPRIETA' (3)
@interface ClassA : NSObject {
@publicNSString *cognome;
}
...
@end
ClassA *a = [[ClassA alloc] init];
a->cognome = @"Pippo";NSString *n = a->cognome;
Variabili @public
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
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
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.
ACCESSO (2)
Attraverso le parentesi quadre:
Attraverso il punto:
NSString *n = [a nome];
[a setNome:@"Pippo"];
NSString *n = a.nome;
a.nome = @"Pippo";
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";
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.
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
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;
}...
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 {...}
...
alla prossima...