際際滷

際際滷Share a Scribd company logo
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)
Variabili @public


@interface ClassA : NSObject {

    @public
                                 ClassA *a = [[ClassA alloc] init];
    NSString *cognome;

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

...

@end
PROPRIETA' (4)
Variabili @protected

@interface ClassA : NSObject {

    @protected
    NSString *nome;
                                     ClassA *a = [[ClassA alloc] init];
}

                                     NSString *n = [a nome];
                                     [a setNome:@"Pippo"];
@property (retain) NSString *nome;



@end
PROPRIETA' (5)
Variabili @private
                                 @interface ClassB : ClassA
@interface ClassA : NSObject {   ...

    @protected                   @implementation ClassB
    NSString *nome;
                                 -(void)aMethod {
    @private
    NSString *anni;                  NSString nome = [self nome];
}
                                     NSString anni = [self anni];
...
                                 }
@end
                                 @end
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:
                       NSString *n = [a nome];

                       [a setNome:@"Pippo"];




Attraverso il punto:
                       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 竪 suf鍖ciente 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...

More Related Content

[Objective-C] - 02 Properties e Costruttori

  • 2. AGENDA Propriet @public, @protected e @private Accesso alle variabili Costruttori multipli
  • 3. 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
  • 4. 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.
  • 5. PROPRIETA' (3) Variabili @public @interface ClassA : NSObject { @public ClassA *a = [[ClassA alloc] init]; NSString *cognome; a->cognome = @"Pippo"; } NSString *n = a->cognome; ... @end
  • 6. PROPRIETA' (4) Variabili @protected @interface ClassA : NSObject { @protected NSString *nome; ClassA *a = [[ClassA alloc] init]; } NSString *n = [a nome]; [a setNome:@"Pippo"]; @property (retain) NSString *nome; @end
  • 7. PROPRIETA' (5) Variabili @private @interface ClassB : ClassA @interface ClassA : NSObject { ... @protected @implementation ClassB NSString *nome; -(void)aMethod { @private NSString *anni; NSString nome = [self nome]; } NSString anni = [self anni]; ... } @end @end
  • 8. 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.
  • 9. ACCESSO (2) Attraverso le parentesi quadre: NSString *n = [a nome]; [a setNome:@"Pippo"]; Attraverso il punto: NSString *n = a.nome; a.nome = @"Pippo";
  • 10. 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";
  • 11. COSTRUTTORI (1) A volte il costruttore di default non 竪 suf鍖ciente 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.
  • 12. 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
  • 13. 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; } ...
  • 14. 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 {...} ...