Intervento al Linux Day 2010@Pisa, organizzato da parte del GULP. L'intervento ha l'obiettivo di presentare il sistema Ubuntu mostrandone gli aspetti principali
Introduzione a ubuntu - Linux Day 2010Nicola Corti
Intervento al Linux Day 2010@Pisa, organizzato da parte del GULP. L'intervento presenta il sistema ubuntu in tutte le sue parti mostrandone pregi e difetti.
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)Gabriele Guizzardi
Slide delle 8h di workshop su Raspberry Pi presso Warehouse Coworking Pesaro, 13/12/2014
Slides of 8h workshop about Raspberry Pi at Warehouse Coworking Pesaro, 13/12/2014
Seminario del GULP (Gruppo Utenti Linux Pisa) che introduce alla programmazione in C, mostrando gli strumenti di sviluppo e i principali costrutti del linguaggio.
Design thinking: Redesign the school-to-work transitionDaniele Iori
This is a journey into the Design Thinking Process, through a design challenge proposed by Leticia Britos Cavagnaro for the Design Thinking Action Lab, Stanford University.
July 17 - Aug 20 2013
DrupalCon Munich, August 22nd 2012
All things that need to be operated are designed. Or at least they should be. Sometimes the design is not so obvious. In fact, many things that people need to operate on a daily bases work quirky. In this session I will discuss some real life examples of quirky design, the remarkable resemblance in the software we make and some methods for addressing them.
OpenOffice.org - Come rendersi indipendenti da MS OfficeNicola Corti
Seminario del GULP (Gruppo Utenti Linux Pisa) che presenta la suite OpenOffice.org, mostrando i vari programmi con un particolare focus sulla compatibilità con MS Office
Intervento al Linux Day 2010@Pisa, organizzato da parte del GULP. L'intervento ha l'obiettivo di presentare il sistema Ubuntu mostrandone gli aspetti principali
Introduzione a ubuntu - Linux Day 2010Nicola Corti
Intervento al Linux Day 2010@Pisa, organizzato da parte del GULP. L'intervento presenta il sistema ubuntu in tutte le sue parti mostrandone pregi e difetti.
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)Gabriele Guizzardi
Slide delle 8h di workshop su Raspberry Pi presso Warehouse Coworking Pesaro, 13/12/2014
Slides of 8h workshop about Raspberry Pi at Warehouse Coworking Pesaro, 13/12/2014
Seminario del GULP (Gruppo Utenti Linux Pisa) che introduce alla programmazione in C, mostrando gli strumenti di sviluppo e i principali costrutti del linguaggio.
Design thinking: Redesign the school-to-work transitionDaniele Iori
This is a journey into the Design Thinking Process, through a design challenge proposed by Leticia Britos Cavagnaro for the Design Thinking Action Lab, Stanford University.
July 17 - Aug 20 2013
DrupalCon Munich, August 22nd 2012
All things that need to be operated are designed. Or at least they should be. Sometimes the design is not so obvious. In fact, many things that people need to operate on a daily bases work quirky. In this session I will discuss some real life examples of quirky design, the remarkable resemblance in the software we make and some methods for addressing them.
OpenOffice.org - Come rendersi indipendenti da MS OfficeNicola Corti
Seminario del GULP (Gruppo Utenti Linux Pisa) che presenta la suite OpenOffice.org, mostrando i vari programmi con un particolare focus sulla compatibilità con MS Office
Dopo una piccola introduzione al linguaggio Groovy, dove verranno illustrate brevemente alcune peculiarità, si passerà ad esaminare le caratteristiche che lo rendono adatto per la generazione di DSL.
Verrà quindi presentato come caso pratico la costruzione di una DSL e sarà mostrato come è possibile embeddarla in un progetto Java.
Javascript avanzato: sfruttare al massimo il webRoberto Messora
Javascript è uno dei linguaggi più sottovalutati e più incompresi dell'intero panorama dei linguaggi di programmazione, eppure è anche uno dei più utilizzati.
Da una parte le molteplici e differenti declinazioni degli strumenti di navigazione web, dall'altra l'infelice scelta storica di usare il termine "script", hanno contribuito alla creazione del mito di un linguaggio poco rigoroso, al servizio di ogni sorta di trucco o pezza di codice.
La verità invece racconta di un linguaggio dinamico ad oggetti a tutti gli effetti, con caratteristiche molto interessanti, seppur con qualche difetto, ma soprattutto un linguaggio che, sull'onda di HTML5, rivestirà se possibile ancora più importanza nell'immediato futuro.
In questa sessione verranno presentati aspetti poco conosciuti, ma molto importanti, di Javascript (scoping, hoisting, closures, ecc.), verranno presentati alcuni design patterns che permettono di strutturare in maniera intelligente le nostre librerie applicative in funzione della manutenibilità e delle performance, senza tralasciare, ove possibile, uno sguardo ad alcuni framework come jQuery o KnockoutJS.
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in DelphiMarco Breveglieri
Slide della sessione "Non Aprite Quella Unit" per ITDevCon 2017. Si parla degli errori comuni nella scrittura del codice e delle tecniche per creare codice pulito (Clean Code) in linguaggio Delphi.
Concetti base su Ruby, in particolare Classi, Oggetti e Metodi che vi permetteranno di iniziare ad usare facilmente Ruby.
Slide usate per uno degli incontri del seminario su Ruby On Rails chiamato Rubynetto, organizzato dal Catania Ruby User Group.
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
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;!
}
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
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
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 !
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
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
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!
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
!