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

Viewers also liked

"Carte da Gioco"
"Carte da Gioco""Carte da Gioco"
"Carte da Gioco"
Marta Fais
 
Android App Development - Unimore
Android App Development - UnimoreAndroid App Development - Unimore
Android App Development - Unimore
Nicola Corti
 
Come dove perchè? Ubuntu!
Come dove perchè? Ubuntu!Come dove perchè? Ubuntu!
Come dove perchè? Ubuntu!
Nicola Corti
 
Da Windows a Linux: è tempo di migrare
Da Windows a Linux: è tempo di migrareDa Windows a Linux: è tempo di migrare
Da Windows a Linux: è tempo di migrare
Nicola Corti
 
Introduzione a ubuntu - Linux Day 2010
Introduzione a ubuntu - Linux Day 2010Introduzione a ubuntu - Linux Day 2010
Introduzione a ubuntu - Linux Day 2010
Nicola Corti
 
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Codemotion
 
Sintesi e caratterizzazione di nanotubi di carbonio
Sintesi e caratterizzazione di nanotubi di carbonioSintesi e caratterizzazione di nanotubi di carbonio
Sintesi e caratterizzazione di nanotubi di carbonioMarta Agati
 
Seminario Raspberri Pi - Parte 1 - GULP
Seminario Raspberri Pi - Parte 1 - GULPSeminario Raspberri Pi - Parte 1 - GULP
Seminario Raspberri Pi - Parte 1 - GULP
Nicola Corti
 
Raspberry Pi - Il computer che hai sempre voluto avere
Raspberry Pi - Il computer che hai sempre voluto avereRaspberry Pi - Il computer che hai sempre voluto avere
Raspberry Pi - Il computer che hai sempre voluto avere
Nicola Corti
 
Carbonio - Fullereni - Nanotubi - Grafene
Carbonio - Fullereni - Nanotubi - GrafeneCarbonio - Fullereni - Nanotubi - Grafene
Carbonio - Fullereni - Nanotubi - Grafene
fx127
 
Senza nome 1
Senza nome 1Senza nome 1
Senza nome 1pekins
 
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Gabriele Guizzardi
 
Pillole di programmazione in C
Pillole di programmazione in CPillole di programmazione in C
Pillole di programmazione in C
Nicola Corti
 
Design thinking: Redesign the school-to-work transition
Design thinking: Redesign the school-to-work transitionDesign thinking: Redesign the school-to-work transition
Design thinking: Redesign the school-to-work transition
Daniele Iori
 
Biofisica dei microtubuli
Biofisica dei microtubuliBiofisica dei microtubuli
Biofisica dei microtubuliRita Pizzi
 
Evolution e Thunderbird, i client di posta elettronica liberi
Evolution e Thunderbird, i client di posta elettronica liberiEvolution e Thunderbird, i client di posta elettronica liberi
Evolution e Thunderbird, i client di posta elettronica liberi
Nicola Corti
 
Carbon nanotube based sensor
Carbon nanotube based sensorCarbon nanotube based sensor
Carbon nanotube based sensor
Roberto Nasi
 
The Design of Everyday Things
The Design of Everyday ThingsThe Design of Everyday Things
The Design of Everyday Things
Imre Gmelig Meijling
 
OpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS OfficeOpenOffice.org - Come rendersi indipendenti da MS Office
OpenOffice.org - Come rendersi indipendenti da MS Office
Nicola Corti
 

Viewers also liked (20)

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

Similar to iOS_Course_5

iOS_Course_8
iOS_Course_8iOS_Course_8
iOS_Course_8
Dario Pizzuto
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
Giuseppe Toto
 
iOS_Course_4
iOS_Course_4iOS_Course_4
iOS_Course_4
Dario Pizzuto
 
01 - Ereditarietà e polimorfismo
01 - Ereditarietà e polimorfismo01 - Ereditarietà e polimorfismo
01 - Ereditarietà e polimorfismoFederico Russo
 
A brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventA brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA event
Pietro Di Bello
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
iOS_course_7
iOS_course_7iOS_course_7
iOS_course_7
Dario Pizzuto
 
Introduction to C#
Introduction to C#Introduction to C#
Introduction to C#
Guido Magrin
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Groovy e Domain Specific Languages
Groovy e Domain Specific LanguagesGroovy e Domain Specific Languages
Groovy e Domain Specific Languages
Tiziano Lattisi
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
Roberto Messora
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Corso Python Deltapromo lezione 1
Corso Python Deltapromo   lezione 1Corso Python Deltapromo   lezione 1
Corso Python Deltapromo lezione 1
Paolo Ferretti
 
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
Marco Breveglieri
 
Esempi di AOP (Gian Maria Ricci)
 Esempi di AOP (Gian Maria Ricci) Esempi di AOP (Gian Maria Ricci)
Esempi di AOP (Gian Maria Ricci)DotNetMarche
 
Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.
Davide Corio
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdf
dttdigi
 
Rubynetto
RubynettoRubynetto
Rubynetto
Alessandro DS
 

Similar to iOS_Course_5 (20)

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

More from Dario Pizzuto

iOS_Course_16
iOS_Course_16iOS_Course_16
iOS_Course_16
Dario Pizzuto
 
iOS_Course_15
iOS_Course_15iOS_Course_15
iOS_Course_15
Dario Pizzuto
 
iOS_Course_14
iOS_Course_14iOS_Course_14
iOS_Course_14
Dario Pizzuto
 
iOS_Course_13
iOS_Course_13iOS_Course_13
iOS_Course_13
Dario Pizzuto
 
iOS_Course_12
iOS_Course_12iOS_Course_12
iOS_Course_12
Dario Pizzuto
 
iOS_Course_11
iOS_Course_11iOS_Course_11
iOS_Course_11
Dario Pizzuto
 
iOS_Course_10
iOS_Course_10iOS_Course_10
iOS_Course_10
Dario Pizzuto
 
iOS_Course_9
iOS_Course_9iOS_Course_9
iOS_Course_9
Dario Pizzuto
 
iOS_Course_3
iOS_Course_3iOS_Course_3
iOS_Course_3
Dario Pizzuto
 
iOS_Course_2
iOS_Course_2iOS_Course_2
iOS_Course_2
Dario Pizzuto
 
iOS_Course_1
iOS_Course_1iOS_Course_1
iOS_Course_1
Dario Pizzuto
 

More from Dario Pizzuto (11)

iOS_Course_16
iOS_Course_16iOS_Course_16
iOS_Course_16
 
iOS_Course_15
iOS_Course_15iOS_Course_15
iOS_Course_15
 
iOS_Course_14
iOS_Course_14iOS_Course_14
iOS_Course_14
 
iOS_Course_13
iOS_Course_13iOS_Course_13
iOS_Course_13
 
iOS_Course_12
iOS_Course_12iOS_Course_12
iOS_Course_12
 
iOS_Course_11
iOS_Course_11iOS_Course_11
iOS_Course_11
 
iOS_Course_10
iOS_Course_10iOS_Course_10
iOS_Course_10
 
iOS_Course_9
iOS_Course_9iOS_Course_9
iOS_Course_9
 
iOS_Course_3
iOS_Course_3iOS_Course_3
iOS_Course_3
 
iOS_Course_2
iOS_Course_2iOS_Course_2
iOS_Course_2
 
iOS_Course_1
iOS_Course_1iOS_Course_1
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