SlideShare uma empresa Scribd logo
1 de 15
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 è 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...

Mais conteúdo relacionado

Semelhante a [Objective-C] - 02 Properties e Costruttori

Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2
STELITANO
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
STELITANO
 

Semelhante a [Objective-C] - 02 Properties e Costruttori (13)

iOS_course_7
iOS_course_7iOS_course_7
iOS_course_7
 
Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)
 
Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
 
MS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partIIMS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partII
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Programming iOS lezione 3
Programming iOS lezione 3Programming iOS lezione 3
Programming iOS lezione 3
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 
12 Struct
12   Struct12   Struct
12 Struct
 
Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 

[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 è 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.
  • 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 {...} ...