SlideShare a Scribd company logo
iOS: Sviluppo App iPhone & 
iPad 
Dario Pizzuto 
1
Objective-C 
2
Objective-C 
3 
Argomenti! 
• Introduzione! 
• Linguaggio! 
• Tipi di base! 
• Classi e Oggetti
Introduzione 
4
Objective-C 
• Linguaggio di programmazione ad 
oggetti! 
• La base è il linguaggio C! 
• Objective-C è un sovra-insieme di C 
5
Objective-C 
• Sviluppato negli anni ’80! 
• Si diffonde grazie all’uso nel 
framework OpenStep della NeXT! 
• NeXT contribuisce a rendere fruibile il 
linguaggio dal compilatore GCC 
6
Objective-C 
• ARC (Automatic Reference Counting)! 
• Multithread! 
• Exceptions! 
• Frameworks 
7
Tipi di base 
8
Objective-C 
9 
Numeri Interi! 
• Short! 
• Int! 
• long! 
• Unsigned ! 
• NSInteger ! 
‣ Architecture independent 32-64bit
Objective-C 
Numeri Reali! 
• float! 
• double! 
• long double! 
• CGFloat (CoreGraphics float)! 
‣ Architecture independent 32-64bit 
10
Objective-C 
Stringhe! 
• Classi per manipolazione stringhe! 
• NSString! 
‣ Immutable! 
• NSMutableString! 
‣ Mutable! 
@”Questa è una stringa in Objective-C” 
11
Objective-C 
12 
Booleani! 
• BOOL! 
‣ YES / NO! 
!
Objective-C 
Struct! 
• Insieme di variabili legate da un nesso 
13 
logico! 
struct nameStruct {! 
int x;! 
int y;! 
};!
Objective-C 
Union! 
• Definisce un’unione logica di variabili! 
• Uso esclusivo di una tra quelle inserite nella 
14 
union! 
union nameUnion {! 
int x;! 
float y;! 
char a;! 
};!
Objective-C 
Typedef! 
• Permette di definire un nuovo tipo di 
15 
dato! 
typedef int size;! 
! 
• size è un nuovo tipo basato su int
Objective-C 
Enum! 
• Permette di definire dati che rientrano in un 
determinato insieme! 
16 
enum Semi{! 
CUORI = 1,! 
QUADRI,! 
FIORI,! 
PICCHE! 
};!
Objective-C 
Puntatori! 
• Fondamentali per l’uso degli oggetti di Objective-C! 
• Si identifica con * (asterisco)! 
• Il puntatore rappresenta la variabile che contiene 
l’indirizzo di memoria della variabile da noi definita! 
NSString *name = @”Dario”;! 
• name contiene l’Indirizzo di memoria 0x1000! 
• L’indirizzo 0x1000 contiene “Dario” 
17
Objective-C 
Tipo id! 
• Rappresenta un oggetto ! 
• Non è NSString, NSInteger! 
• Oggetto non tipizzato! 
id name;! 
18
Objective-C 
Cast! 
• Identifica il passaggio di tipo! 
• Es.! 
19 
✓double a int! 
double a = 12.3;! 
int i;! 
i = (int) a;! 
• i adesso vale 12!
Objective-C 
Operatori aritmetici! 
Operatore Esempio ! 
Significato 
+ a + b Somma a e b 
! 
- a - b Differenza tra a e b 
/ a / b ! 
Divide a per b 
* a * b ! 
Moltiplica a per b 
% a % b Resto della divisione tra a e b 
! 
+= a += b Assegna ad a la somma di a e b 
-= a -= b Assegna ! 
ad a il risultato di a - b 
/= a /= b Assegna ad a il risultato di a / b 
*= a *= b Assegna ad a il risultato di a * b 
%= a %= b Assegna ad a il risultato di a % b 
20
Objective-C 
Incremento e decremento! 
• Diversi modi per incrementare o 
decrementare una variabile! 
✓i++; ++i;! 
✓ j--; --j;! 
21
Objective-C 
Operatori di confronto! 
! 
Operatore Esempio Significato 
! 
< a < b Inferiore di 
! 
<= a <= b Inferiore o uguale a 
! 
> a > b Maggiore di 
! 
>= a >= b Maggiore o uguale a 
! 
!= a != b Diverso da 
== a == b Uguale a 
22
Objective-C 
Operatori logici! 
! 
Operatore Esempio Significato 
! 
! 
! !a Negazione logica 
! 
! 
&& a && b AND logico 
! 
|| a || b OR logico 
23
Condizioni 
24
Objective-C 
Condizioni! 
• Permettono di eseguire operazioni in 
base a delle condizioni! 
• Possono essere annidate! 
25
Objective-C 
Salto condizionale! 
• Valutare una condizione ed eseguire delle 
istruzioni di cnseguenza! 
if(espressione){! 
26 
istruzioni;! 
}! 
[ else{! 
istruzioni; ! 
} ]!
Objective-C 
Salto condizionale esempio! 
if(a > b){! 
NSLog(@”a maggiore di b”);! 
27 
}! 
else{! 
NSLog(@”b maggiore di a”);! 
} !
Objective-C 
Scelta multipla! 
• Eseguire blocchi di istruzioni in abse al valore di una 
variabile! 
switch(espressione) {! 
28 
case cost1:! 
istruzioni;! 
case cost2:! 
istruzioni;! 
[ default:! 
istruzioni; ]! 
}
Objective-C 
29 
Scelta multipla esempio! 
switch(seme) {! 
case 1:! 
NSLog(@”Cuori”);! 
break;! 
case 2:! 
NSLog(@”Quadri”);! 
break;! 
case 3:! 
NSLog(@”Fiori”);! 
break! 
case 4:! 
NSLog(@”Picche”);! 
break;! 
}
Let’s Code 
30
Objective-C 
Let’s Code! 
✦Implementiamo una condizione che ci 
permetta di definire se un numero è 
pari o dispari 
31
Iterazioni 
32
Objective-C 
Iterazioni! 
• Strutture fondamentali che permettono di 
eseguire più volte lo stesso gruppo di 
istruzioni! 
• Meglio conosciuti come “Cicli”! 
33
Objective-C 
Ciclo while! 
• Esegue un gruppo di istruzioni finché 
l’espressione è valida! 
while(espressione) {! 
34 
istruzioni;! 
}
Objective-C 
Ciclo do! 
• Valuta l’espressione di validazione alla 
fine del primo ciclo! 
• Esegue almeno una volta le istruzioni! 
do {! 
istruzioni;! 
} while(espressione) 
35
Objective-C 
Ciclo for! 
• Uno dei costrutti più comuni e versatili! 
for(inizializzazione; controllo; incremento) {! 
36 
istruzioni;! 
}! 
• inizializzazione: imposta le variabili di controllo! 
• controllo: valuta se il ciclo deve interrompersi! 
• incremento: assegna alle variabili inizializzate i 
nuovi valori
Objective-C 
Ciclo for esempio! 
for(int i =0; i < 4; i++) {! 
NSLog(@”%i ”,i);! 
37 
}! 
! 
Output: 0 1 2 3
Objective-C 
Ciclo for veloce! 
• Esegue un’iterazione sugli oggetti di una 
collezione! 
NSArray *names = @[@”Mario”, @”Luca”, 
@”Antonio”]! 
for(NSString *name in names) {! 
NSLog(@”%@ ”,name);! 
}! 
! 
Output: Mario Luca Antonio 
38
Objective-C 
Interrompere un ciclo! 
• È possibile interrompere il ciclo! 
! 
break;! 
! 
• In cicli annidati, viene interrotto solo il 
39 
ciclo interessato
Let’s Code 
40
Objective-C 
Let’s Code! 
✦Attraverso uno dei loop menzionati, 
implementare l’output a console dei 
numeri da 0 a 100 
41
Classi ed Oggetti 
42
Objective-C 
Classe! 
• Costrutto utilizzato per creare oggetti in 
fase di esecuzione! 
• La classe definisce l’organizzazione logica! 
• Es.! 
✓ Auto! 
✓ Animale 
43
Objective-C 
Classe! 
• Si rappresenta una classe attraverso 2 
files! 
✓ file di interfaccia: *.h! 
✓ file di implementazione: *.m! 
44
Objective-C 
Interfaccia! 
• Costituisce la definizione della classe! 
@interface ClassName [: Superclass] {! 
45 
[properties]! 
[methods]! 
}!
Objective-C 
Interfaccia! 
• ClassName: nome da assegnare alla classe! 
• Superclass: classe da cui derivare, se non 
viene indicata NSObject di default! 
• properties: attributi della classe! 
• methods: metodi della classe! 
46
Objective-C 
Implementazione! 
• Costituisce l’implementazione della 
classe! 
@implementation ClassName : Superclass {! 
47 
[iVar]! 
}! 
[methods implementation]! 
}
Objective-C 
Implementazione! 
• iVar: variabili di istanza! 
❖Possibile definire iVar nell’interfaccia ? Si ma 
sconsigliato. Viola l’incapsulamento! 
• Methods implementation: implementazione dei 
metodi definiti nell’interfaccia! 
• Xcode ci avverte se vi sono dei metodi non 
48 
implementati !
Objective-C 
Interfaccia DPPPersona.h 
Implementazione DPPPersona.m 
49
Variabili e Metodi 
50
Objective-C 
Variabili! 
• Dichiarare una variabile per riga! 
! 
NSString *name;! 
NSArray *names;! 
int age;! 
51
Objective-C 
Definizione di metodo! 
[ + ı - ] (tipo di ritorno) methodName 
[parametro1:(tipo1)parametro1 parametro2: 
(tipo2)parametro2] {! 
52 
istruzioni;! 
return valore;! 
}
Objective-C 
Metodi! 
• + ı - : rappresentano il tipo di metodo 
(classe o istanza)! 
• tipo di ritorno: il tipo di dato che ritorna il 
metodo! 
• methodName: nome metodo (notare 
53 
CamelCase)!
Objective-C 
Metodi di Classe! 
• Metodi che possono essere invocati 
senza istanziare l’oggetto! 
• Es.! 
✓+ (id) alloc! 
✓+ (id) sharedInstance! 
54
Objective-C 
Metodi di Istanza! 
• Metodi che possono essere invocati su 
un’istanza specifica! 
• Es.! 
✓- (void) setName! 
✓- (int) countItems! 
55
Objective-C 
Esempio Interfaccia DPPPersona! 
56 
! 
! 
! 
! 
! 
! 
!
Objective-C 
Esempio Implementazione DPPPersona! 
57 
! 
! 
! 
! 
! 
! 
!
Self 
58
Objective-C 
Self! 
• Parola chiave che identifica “se stesso”! 
• La classe stessa !! 
• È possibile accedere alle variabili di 
istanza attraverso l’uso di self! 
59
Objective-C 
60 
Uso di self! 
! 
! 
! 
! 
!
Super 
61
Objective-C 
Super! 
• Parola chiave che identifica la Superclasse! 
• Se invoco un metodo con super, il runtime 
ricerca quel metodo nella superclasse! 
• Fondamentale quando creiamo delle 
62 
sottoclassi!
Objective-C 
63 
Esempio super! 
! 
! 
! 
! 
!
Usare una classe 
64
Objective-C 
Istanziazione! 
• Per utilizzare una oggetto bisogna averlo 
istanziato! 
• L’istanziazione crea l’oggetto della classe! 
• Se la classe non viene istanziata, 
l’oggetto non può essere usato! 
65
Objective-C 
Istanziazione! 
• Ci sono dei metodi di default che 
istanziano un oggetto! 
✓[[DPPPersona alloc] init];! 
✓[DPPPersona new];! 
66
Objective-C 
Istanziazione custom! 
• Possiamo definire un nostro metodo di istanziazione! 
• Override metodo init! 
- (instancetype) init {! 
67 
if(self){! 
_nome = @”Default”;! 
_cognome = @”Default”! 
}! 
return self;! 
}
Objective-C 
Istanziazione! 
• Il metodo crea un’istanza della classe e 
ritorna se stessa! 
• Possibilità di creare metodi di “init” con 
parametri! 
✓ - (instancetype) initWithNome: 
(NSString*)nome;! 
68 
!
Creare una classe da 
Xcode 
69
Objective-C 
70 
Nuova classe! 
• File -> New -> File! 
! 
! 
! 
! 
!
Objective-C 
71 
Nuova classe! 
! 
! 
! 
! 
! 
!
Objective-C 
72 
Nuova classe! 
! 
! 
! 
! 
! 
! 
Class 
Nome della classe 
Subclass 
Subclass da cui derivare
Objective-C 
! 
Ulteriori approfondimenti! 
GNU Compiler Collection! 
Defining Classes! 
73 
!
Domande ? 
74
Let’s Code 
75
Objective-C 
Let’s Code! 
✦Implementare una classe che 
contenga almeno 3 variabili di istanza 
di tipo diverso e 2 metodi 
76

More Related Content

PDF
iOS_Course_6
PDF
Ruby in 25 minuti
PDF
Mini Corso Java - Parte 1
PPTX
Scientistposition presentation
PPTX
Caratteristiche del linguaggio c
PDF
Da windows a_linux_ot2013
PDF
Wi-Fi Hacking for Fun and Profit - Tecniche di intrusione & Contromisure
PDF
Seminario Raspberri Pi - Parte 2 - GULP
iOS_Course_6
Ruby in 25 minuti
Mini Corso Java - Parte 1
Scientistposition presentation
Caratteristiche del linguaggio c
Da windows a_linux_ot2013
Wi-Fi Hacking for Fun and Profit - Tecniche di intrusione & Contromisure
Seminario Raspberri Pi - Parte 2 - GULP

Viewers also liked (20)

PPTX
"Carte da Gioco"
PDF
Android App Development - Unimore
PDF
Come dove perchè? Ubuntu!
PDF
Da Windows a Linux: è tempo di migrare
PDF
Introduzione a ubuntu - Linux Day 2010
PDF
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
PPTX
Sintesi e caratterizzazione di nanotubi di carbonio
PDF
Seminario Raspberri Pi - Parte 1 - GULP
PDF
Raspberry Pi - Il computer che hai sempre voluto avere
PDF
Carbonio - Fullereni - Nanotubi - Grafene
ODP
Senza nome 1
PDF
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
PPT
Grundlagen modul it
PDF
Pillole di programmazione in C
PDF
Design thinking: Redesign the school-to-work transition
PPT
Biofisica dei microtubuli
PDF
Evolution e Thunderbird, i client di posta elettronica liberi
PDF
Carbon nanotube based sensor
PDF
The Design of Everyday Things
PDF
OpenOffice.org - Come rendersi indipendenti da MS Office
"Carte da Gioco"
Android App Development - Unimore
Come dove perchè? Ubuntu!
Da Windows a Linux: è tempo di migrare
Introduzione a ubuntu - Linux Day 2010
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Sintesi e caratterizzazione di nanotubi di carbonio
Seminario Raspberri Pi - Parte 1 - GULP
Raspberry Pi - Il computer che hai sempre voluto avere
Carbonio - Fullereni - Nanotubi - Grafene
Senza nome 1
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Grundlagen modul it
Pillole di programmazione in C
Design thinking: Redesign the school-to-work transition
Biofisica dei microtubuli
Evolution e Thunderbird, i client di posta elettronica liberi
Carbon nanotube based sensor
The Design of Everyday Things
OpenOffice.org - Come rendersi indipendenti da MS Office
Ad

Similar to iOS_Course_5 (20)

PDF
iOS_Course_8
PDF
Sencha touch: panoramica e orientamento sul codice
PDF
03 - Ricorsione
PDF
iOS_Course_4
PDF
01 - Ereditarietà e polimorfismo
KEY
A brief intro to TDD for a JUG-TAA event
PPTX
Introduzione a TypeScript
PDF
iOS_course_7
PPTX
Introduction to C#
PDF
DotNetToscana - Sessione TypeScript
PDF
Groovy e Domain Specific Languages
PPTX
Javascript avanzato: sfruttare al massimo il web
PDF
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
PPTX
Slide typescript - xe dotnet - Codemotion Rome 2015
KEY
Corso Python Deltapromo lezione 1
PPTX
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
PPTX
Esempi di AOP (Gian Maria Ricci)
PDF
Odoo 8.0. Le nuove API.
PDF
lezione1.pdf
ODP
Rubynetto
iOS_Course_8
Sencha touch: panoramica e orientamento sul codice
03 - Ricorsione
iOS_Course_4
01 - Ereditarietà e polimorfismo
A brief intro to TDD for a JUG-TAA event
Introduzione a TypeScript
iOS_course_7
Introduction to C#
DotNetToscana - Sessione TypeScript
Groovy e Domain Specific Languages
Javascript avanzato: sfruttare al massimo il web
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
Slide typescript - xe dotnet - Codemotion Rome 2015
Corso Python Deltapromo lezione 1
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
Esempi di AOP (Gian Maria Ricci)
Odoo 8.0. Le nuove API.
lezione1.pdf
Rubynetto
Ad

More from Dario Pizzuto (11)

PDF
iOS_Course_16
PDF
iOS_Course_15
PDF
iOS_Course_14
PDF
iOS_Course_13
PDF
iOS_Course_12
PDF
iOS_Course_11
PDF
iOS_Course_10
PDF
iOS_Course_9
PDF
iOS_Course_3
PDF
iOS_Course_2
PDF
iOS_Course_1
iOS_Course_16
iOS_Course_15
iOS_Course_14
iOS_Course_13
iOS_Course_12
iOS_Course_11
iOS_Course_10
iOS_Course_9
iOS_Course_3
iOS_Course_2
iOS_Course_1

iOS_Course_5

  • 1. iOS: Sviluppo App iPhone & iPad Dario Pizzuto 1
  • 3. Objective-C 3 Argomenti! • Introduzione! • Linguaggio! • Tipi di base! • Classi e Oggetti
  • 5. Objective-C • Linguaggio di programmazione ad oggetti! • La base è il linguaggio C! • Objective-C è un sovra-insieme di C 5
  • 6. Objective-C • Sviluppato negli anni ’80! • Si diffonde grazie all’uso nel framework OpenStep della NeXT! • NeXT contribuisce a rendere fruibile il linguaggio dal compilatore GCC 6
  • 7. Objective-C • ARC (Automatic Reference Counting)! • Multithread! • Exceptions! • Frameworks 7
  • 9. Objective-C 9 Numeri Interi! • Short! • Int! • long! • Unsigned ! • NSInteger ! ‣ Architecture independent 32-64bit
  • 10. Objective-C Numeri Reali! • float! • double! • long double! • CGFloat (CoreGraphics float)! ‣ Architecture independent 32-64bit 10
  • 11. Objective-C Stringhe! • Classi per manipolazione stringhe! • NSString! ‣ Immutable! • NSMutableString! ‣ Mutable! @”Questa è una stringa in Objective-C” 11
  • 12. Objective-C 12 Booleani! • BOOL! ‣ YES / NO! !
  • 13. Objective-C Struct! • Insieme di variabili legate da un nesso 13 logico! struct nameStruct {! int x;! int y;! };!
  • 14. Objective-C Union! • Definisce un’unione logica di variabili! • Uso esclusivo di una tra quelle inserite nella 14 union! union nameUnion {! int x;! float y;! char a;! };!
  • 15. Objective-C Typedef! • Permette di definire un nuovo tipo di 15 dato! typedef int size;! ! • size è un nuovo tipo basato su int
  • 16. Objective-C Enum! • Permette di definire dati che rientrano in un determinato insieme! 16 enum Semi{! CUORI = 1,! QUADRI,! FIORI,! PICCHE! };!
  • 17. Objective-C Puntatori! • Fondamentali per l’uso degli oggetti di Objective-C! • Si identifica con * (asterisco)! • Il puntatore rappresenta la variabile che contiene l’indirizzo di memoria della variabile da noi definita! NSString *name = @”Dario”;! • name contiene l’Indirizzo di memoria 0x1000! • L’indirizzo 0x1000 contiene “Dario” 17
  • 18. Objective-C Tipo id! • Rappresenta un oggetto ! • Non è NSString, NSInteger! • Oggetto non tipizzato! id name;! 18
  • 19. Objective-C Cast! • Identifica il passaggio di tipo! • Es.! 19 ✓double a int! double a = 12.3;! int i;! i = (int) a;! • i adesso vale 12!
  • 20. Objective-C Operatori aritmetici! Operatore Esempio ! Significato + a + b Somma a e b ! - a - b Differenza tra a e b / a / b ! Divide a per b * a * b ! Moltiplica a per b % a % b Resto della divisione tra a e b ! += a += b Assegna ad a la somma di a e b -= a -= b Assegna ! ad a il risultato di a - b /= a /= b Assegna ad a il risultato di a / b *= a *= b Assegna ad a il risultato di a * b %= a %= b Assegna ad a il risultato di a % b 20
  • 21. Objective-C Incremento e decremento! • Diversi modi per incrementare o decrementare una variabile! ✓i++; ++i;! ✓ j--; --j;! 21
  • 22. Objective-C Operatori di confronto! ! Operatore Esempio Significato ! < a < b Inferiore di ! <= a <= b Inferiore o uguale a ! > a > b Maggiore di ! >= a >= b Maggiore o uguale a ! != a != b Diverso da == a == b Uguale a 22
  • 23. Objective-C Operatori logici! ! Operatore Esempio Significato ! ! ! !a Negazione logica ! ! && a && b AND logico ! || a || b OR logico 23
  • 25. Objective-C Condizioni! • Permettono di eseguire operazioni in base a delle condizioni! • Possono essere annidate! 25
  • 26. Objective-C Salto condizionale! • Valutare una condizione ed eseguire delle istruzioni di cnseguenza! if(espressione){! 26 istruzioni;! }! [ else{! istruzioni; ! } ]!
  • 27. Objective-C Salto condizionale esempio! if(a > b){! NSLog(@”a maggiore di b”);! 27 }! else{! NSLog(@”b maggiore di a”);! } !
  • 28. Objective-C Scelta multipla! • Eseguire blocchi di istruzioni in abse al valore di una variabile! switch(espressione) {! 28 case cost1:! istruzioni;! case cost2:! istruzioni;! [ default:! istruzioni; ]! }
  • 29. Objective-C 29 Scelta multipla esempio! switch(seme) {! case 1:! NSLog(@”Cuori”);! break;! case 2:! NSLog(@”Quadri”);! break;! case 3:! NSLog(@”Fiori”);! break! case 4:! NSLog(@”Picche”);! break;! }
  • 31. Objective-C Let’s Code! ✦Implementiamo una condizione che ci permetta di definire se un numero è pari o dispari 31
  • 33. Objective-C Iterazioni! • Strutture fondamentali che permettono di eseguire più volte lo stesso gruppo di istruzioni! • Meglio conosciuti come “Cicli”! 33
  • 34. Objective-C Ciclo while! • Esegue un gruppo di istruzioni finché l’espressione è valida! while(espressione) {! 34 istruzioni;! }
  • 35. Objective-C Ciclo do! • Valuta l’espressione di validazione alla fine del primo ciclo! • Esegue almeno una volta le istruzioni! do {! istruzioni;! } while(espressione) 35
  • 36. Objective-C Ciclo for! • Uno dei costrutti più comuni e versatili! for(inizializzazione; controllo; incremento) {! 36 istruzioni;! }! • inizializzazione: imposta le variabili di controllo! • controllo: valuta se il ciclo deve interrompersi! • incremento: assegna alle variabili inizializzate i nuovi valori
  • 37. Objective-C Ciclo for esempio! for(int i =0; i < 4; i++) {! NSLog(@”%i ”,i);! 37 }! ! Output: 0 1 2 3
  • 38. Objective-C Ciclo for veloce! • Esegue un’iterazione sugli oggetti di una collezione! NSArray *names = @[@”Mario”, @”Luca”, @”Antonio”]! for(NSString *name in names) {! NSLog(@”%@ ”,name);! }! ! Output: Mario Luca Antonio 38
  • 39. Objective-C Interrompere un ciclo! • È possibile interrompere il ciclo! ! break;! ! • In cicli annidati, viene interrotto solo il 39 ciclo interessato
  • 41. Objective-C Let’s Code! ✦Attraverso uno dei loop menzionati, implementare l’output a console dei numeri da 0 a 100 41
  • 43. Objective-C Classe! • Costrutto utilizzato per creare oggetti in fase di esecuzione! • La classe definisce l’organizzazione logica! • Es.! ✓ Auto! ✓ Animale 43
  • 44. Objective-C Classe! • Si rappresenta una classe attraverso 2 files! ✓ file di interfaccia: *.h! ✓ file di implementazione: *.m! 44
  • 45. Objective-C Interfaccia! • Costituisce la definizione della classe! @interface ClassName [: Superclass] {! 45 [properties]! [methods]! }!
  • 46. Objective-C Interfaccia! • ClassName: nome da assegnare alla classe! • Superclass: classe da cui derivare, se non viene indicata NSObject di default! • properties: attributi della classe! • methods: metodi della classe! 46
  • 47. Objective-C Implementazione! • Costituisce l’implementazione della classe! @implementation ClassName : Superclass {! 47 [iVar]! }! [methods implementation]! }
  • 48. Objective-C Implementazione! • iVar: variabili di istanza! ❖Possibile definire iVar nell’interfaccia ? Si ma sconsigliato. Viola l’incapsulamento! • Methods implementation: implementazione dei metodi definiti nell’interfaccia! • Xcode ci avverte se vi sono dei metodi non 48 implementati !
  • 49. Objective-C Interfaccia DPPPersona.h Implementazione DPPPersona.m 49
  • 51. Objective-C Variabili! • Dichiarare una variabile per riga! ! NSString *name;! NSArray *names;! int age;! 51
  • 52. Objective-C Definizione di metodo! [ + ı - ] (tipo di ritorno) methodName [parametro1:(tipo1)parametro1 parametro2: (tipo2)parametro2] {! 52 istruzioni;! return valore;! }
  • 53. Objective-C Metodi! • + ı - : rappresentano il tipo di metodo (classe o istanza)! • tipo di ritorno: il tipo di dato che ritorna il metodo! • methodName: nome metodo (notare 53 CamelCase)!
  • 54. Objective-C Metodi di Classe! • Metodi che possono essere invocati senza istanziare l’oggetto! • Es.! ✓+ (id) alloc! ✓+ (id) sharedInstance! 54
  • 55. Objective-C Metodi di Istanza! • Metodi che possono essere invocati su un’istanza specifica! • Es.! ✓- (void) setName! ✓- (int) countItems! 55
  • 56. Objective-C Esempio Interfaccia DPPPersona! 56 ! ! ! ! ! ! !
  • 57. Objective-C Esempio Implementazione DPPPersona! 57 ! ! ! ! ! ! !
  • 59. Objective-C Self! • Parola chiave che identifica “se stesso”! • La classe stessa !! • È possibile accedere alle variabili di istanza attraverso l’uso di self! 59
  • 60. Objective-C 60 Uso di self! ! ! ! ! !
  • 62. Objective-C Super! • Parola chiave che identifica la Superclasse! • Se invoco un metodo con super, il runtime ricerca quel metodo nella superclasse! • Fondamentale quando creiamo delle 62 sottoclassi!
  • 63. Objective-C 63 Esempio super! ! ! ! ! !
  • 65. Objective-C Istanziazione! • Per utilizzare una oggetto bisogna averlo istanziato! • L’istanziazione crea l’oggetto della classe! • Se la classe non viene istanziata, l’oggetto non può essere usato! 65
  • 66. Objective-C Istanziazione! • Ci sono dei metodi di default che istanziano un oggetto! ✓[[DPPPersona alloc] init];! ✓[DPPPersona new];! 66
  • 67. Objective-C Istanziazione custom! • Possiamo definire un nostro metodo di istanziazione! • Override metodo init! - (instancetype) init {! 67 if(self){! _nome = @”Default”;! _cognome = @”Default”! }! return self;! }
  • 68. Objective-C Istanziazione! • Il metodo crea un’istanza della classe e ritorna se stessa! • Possibilità di creare metodi di “init” con parametri! ✓ - (instancetype) initWithNome: (NSString*)nome;! 68 !
  • 69. Creare una classe da Xcode 69
  • 70. Objective-C 70 Nuova classe! • File -> New -> File! ! ! ! ! !
  • 71. Objective-C 71 Nuova classe! ! ! ! ! ! !
  • 72. Objective-C 72 Nuova classe! ! ! ! ! ! ! Class Nome della classe Subclass Subclass da cui derivare
  • 73. Objective-C ! Ulteriori approfondimenti! GNU Compiler Collection! Defining Classes! 73 !
  • 76. Objective-C Let’s Code! ✦Implementare una classe che contenga almeno 3 variabili di istanza di tipo diverso e 2 metodi 76