back to top

Objective C: dichiarazione di classi e metodi – Guida Sviluppo App iOS

Andiamo adesso a fare una breve panoramica sul linguaggio Objective C.

Come nel linguaggio C, ci troveremo a dover lavorare con file aventi due estensioni: .h e .m.

I file con la prima estensione (.h) sono gli header file e dunque conterranno le definizione delle classi, dei tipi e dei metodi. In sostanza viene mostrato un prototipo della classe e dei suoi metodi.

Per quanto riguarda la seconda estensione (.m) questa appartiene ai file di implementazione della classe, che dunque conterranno tutto il codice sorgente. Questi file possono contenere anche pezzi di codice scritto in puro linguaggio C.

Qualora lo si desideri è anche possibile lavorare anche con codice C++ (in aggiunta a codice scritto in Objective C) il quale deve essere inserito in file con estensione .mm.

Dichiarare una nuova classe

Quando abbiamo intenzione di creare una nuova classe andremo a fornirne la definizione in un header file.

Mostriamo adesso un breve blocco di codice nel quale viene dichiarata una classe con attributi e metodi:

@interface MiaClasse : NSObject{
  int numero;
  NSSTring *miaStringa;
}

-(void)comparaStringa:(NSString*)stringa2 ;
@end

Analizziamo adesso la sintassi mostrata precedentemente per la dichiarazione di una classe:

  • @interface – E’ una parola chiave che permette la definizione di una classe.
  • MiaClasse : NSObjectMiaClasse rappresenta il nome che daremo alla nostra classe e i due punti (:) indicano che discende dalla classe NSObject. La classe NSObject rappresenta la classe da cui discendono tutte le altre classi. Per fare un’anologia con un altro linguaggio di programmazione, NSObject rappresenta la classe Object nel linguaggio Java.
  • @end – Non è altro che un terminatore che indica al compilatore che la dichiarazione della classe è conclusa.

Facciamo adesso una breve riflessione. Abbiamo detto che i : indicano la discendenza di una classe da un’altra. Dunque, a questo punto, possiamo introdurre un concetto più generale ovvero l’ereditarietà.

L’ereditarietà si realizza con la sintassi vista sopra, ovvero utilizzando i : seguiti dal nome della classe che vogliamo ereditare. Per chiarire il concetto forniamo un brevissimo eesempio:

@interface Rettangolo : Poligono{
  //attributi
}
@end
Avremo dunque che la classe "Rettangolo" eredita dalla classe "Poligono" attributi e metodi.

Torniamo adesso ad analizzare la sintassi mostrata nel primo esempio.

Attributi

Notiamo che sono presenti due attributi un int (numero intero) ed una stringa.

Come possiamo vedere la dichiarazione di questi due attributi è leggermente diversa: nell’int non abbiamo il * (pointer) mentre nella dichiarazione della stringa sì. Questo perchè, in Objective C, tutti gli oggetti devono essere dichiarati con il pointer in quanto, a priori, non è conosciuta la dimensione esatta del’oggetto e sarebbe impossibile allocare un quantititativo di memoria opportuna. La cosa non vale per una variabile dichiarata come int in quanto, in questo caso, è conosciuta la dimensione occupata da un int.

Facciamo notare che quando dichiariamo un oggetto con la sintassi TipoOggetto *nomeOggetto non andremo a creare l’oggetto, ma creeremo esclusivamente un puntatore ad un area di memoria che conterrà, successivamente, quell’oggetto.

Dichiarazione del Metodo

Passiamo ora alla dichiarazione del metodo di cui andiamo ad analizzare la sintassi:

  • : è l’identificatore del tipo di metodo ed indica che questo è un metodo di istanza, ovvero tutte le istanze della classe possono utilizzare il metodo richiamando il metodo utilizzando il nome dell’oggetto. E’ possibile definire un metodo utilizzando come identificatore il + ed un metodo così definito viene detto metodo di classe, ovverro verrà richiamato utilizzando il nome della classe. In alcuni esempi, durante la trattazione della guida, avremo modo di chiarire meglio questo concetto.
  • (void): il tipo di ritorno del metodo.
  • comparaStringa: nome che identifica il metodo
  • :(NSString *)stringa2: indica che il metodo possiede un parametro in ingresso di tipo stringa. Ovviamente è possibile aggiungere parametri al metodo semplicemente accodandoli al primo con la sintassi :(tipo)nome. Anche in questo caso, se al metodo viene passato un int o un float non deve essere usato il pointer.

Pubblicitร 

In questa guida...