Introduzione agli Array in C++. Argomenti trattati: decadimento a puntatore di un array; conseguenze del meccanismo di decadimento sul passaggio di array a funzioni; array multidimensionali e il concetto di puntatore ad array; come passare array multidimensionali a funzioni; gli iteratori come generalizzazione di un puntatore ad elemento di un array ed una breve scorsa di come usare gli iteratori con gli algoritmi standard (e.g., std::copy) del C++.
✦ Introduzione
✦ Connessioni TCP lato client: la classe
Socket
✦ Connessioni TCP lato server: la classe
ServerSocket
✦ Struttura di un server multi-threaded
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
Meetup del PHP User Group Milano con presentazione delle attività del gruppo e dell'associazione GrUSP per la diffusione delle buone pratiche nel mondo dello sviluppo web. Durante il meetup ci sarà anche un intervento di Enrico Zimuel sulle novità del PHP 7.1 (e 7.2), con la presentazione del suo nuovo libro "Sviluppare in PHP 7. Realizzare applicazioni web e API professionali" edito da Tecniche Nuove.
Il Corso Programmazione Java Base di K-Tech (http://www.k-tech.it) ha come obiettivo quello di far comprendere le tecniche di programmazione orientata agli oggetti, cioè di modellare e “pensare” a oggetti, di trasmettere i concetti base del linguaggio e le basi per sviluppare piccole applicazioni in modo autonomo.
Il corso Programmazione Java Base è composto da dodici moduli:
1. Introduzione
2. Ciclo di sviluppo
3. Sintassi Elementare
4. Principi OOP
5. Classi e Oggetti
6. Concetti Object Oriented
7. Collections
8. Eccezioni
9. Input Output
10. Serialization
11. Unit Testing
12. Threads
Leggi il programma completo: http://www.k-tech.it/formazione/catalogo/programmazione_java_base
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.
Introduzione agli Array in C++. Argomenti trattati: decadimento a puntatore di un array; conseguenze del meccanismo di decadimento sul passaggio di array a funzioni; array multidimensionali e il concetto di puntatore ad array; come passare array multidimensionali a funzioni; gli iteratori come generalizzazione di un puntatore ad elemento di un array ed una breve scorsa di come usare gli iteratori con gli algoritmi standard (e.g., std::copy) del C++.
✦ Introduzione
✦ Connessioni TCP lato client: la classe
Socket
✦ Connessioni TCP lato server: la classe
ServerSocket
✦ Struttura di un server multi-threaded
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
Meetup del PHP User Group Milano con presentazione delle attività del gruppo e dell'associazione GrUSP per la diffusione delle buone pratiche nel mondo dello sviluppo web. Durante il meetup ci sarà anche un intervento di Enrico Zimuel sulle novità del PHP 7.1 (e 7.2), con la presentazione del suo nuovo libro "Sviluppare in PHP 7. Realizzare applicazioni web e API professionali" edito da Tecniche Nuove.
Il Corso Programmazione Java Base di K-Tech (http://www.k-tech.it) ha come obiettivo quello di far comprendere le tecniche di programmazione orientata agli oggetti, cioè di modellare e “pensare” a oggetti, di trasmettere i concetti base del linguaggio e le basi per sviluppare piccole applicazioni in modo autonomo.
Il corso Programmazione Java Base è composto da dodici moduli:
1. Introduzione
2. Ciclo di sviluppo
3. Sintassi Elementare
4. Principi OOP
5. Classi e Oggetti
6. Concetti Object Oriented
7. Collections
8. Eccezioni
9. Input Output
10. Serialization
11. Unit Testing
12. Threads
Leggi il programma completo: http://www.k-tech.it/formazione/catalogo/programmazione_java_base
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.
5. Objective-C
5
Array
• Struttura dati composta da un numero
predeterminato di variabili dello stesso tipo
• Objective-C ci fornisce la classe immutabile
NSArray e la classe mutabile
NSMutableArray
• Non possono contenere elementi nil, si usa
NSNull
9. Objective-C
9
Dictionary
• Struttura dati che ci permette di memorizzare
oggetti chiave - valore
• Molto efficiente
• Objective-C ci fornisce la classe immutabile
NSDictionary e la classe mutabile
NSMutableDictionary
• Non possono contenere elementi nil, si usa
NSNull
13. Objective-C
13
Let’s Code
✦Implementare un array che contenga i
nomi dei ragazzi del corso
✦Implementare un dictionary che
contenga come chiave il numero
progressivo assegnato al vostro nome
e come valore il nome
15. Objective-C
15
Block
• Insieme di codice in linea
• Tipizzato
• Si usano per comporre espressioni
che possono essere passate come
parametri
16. Objective-C
16
Block
• Sono particolarmente indicati come
gestori di Callback
• Un block può accedere alle variabili locali
• La sintassi non è intuitiva
• Disponibili da iOS 4
20. Objective-C
20
Block
• I blocchi possono leggere e
modificare variabili che stanno fuori
dal blocco
• Utilizzo della keyword __block prima
del tipo di variabile
31. Objective-C
31
Exceptions
• Objective-C ci fornisce degli strumenti
per gestire gli errori imprevisti in 3 parti
1. Istruzioni sottoposte a controllo
2. Routine di controllo dell’errore
3. Blocco di codice eseguito sempre
34. Objective-C
34
Exceptions
• Le eccezioni generiche vengono
identificate con la classe NSException
• Tutti i tipi di eccezione in Objective-C
sono sottoclassi di NSException
37. Objective-C
37
Exceptions non gestite
• Nel caso non ci sia il blocco try-catch
per gestire l’eccezione, il programma
si interromperà (crash) e vedremo
nella console lo stacktrace completo
39. Objective-C
39
Sollevare exceptions
• Alcune volte è utile generare un’eccezione
• Soprattutto quando realizziamo nostre API
• ES.
✓Parametri metodo a nil
✓Funzionalità non prevista da quel
determinato metodo
44. Objective-C
44
Clausola finally
• Il blocco di codice all’interno della clausola
finally viene eseguito sempre in seguito alla
valutazione del blocco try
• Nel finally, troviamo spesso operazioni di di
rilascio di risorse
• Se apro un file, è inserisco nel @try le
operazioni di apertura e lettura, posso
sfruttare il @finally per chiudere il buffer
47. Objective-C
47
Let’s Code
✦Implementare un blocco try catch
finally che gestisca l’eccezione
sollevata a runtime quando viene
ricercato un elemento in una
posizione inesistente di un array
49. Objective-C
49
Key Value Coding - KVC
• Protocol che permette l’accesso alle
properties in modo diretto tramite key
• Le keys corrispondono ai nomi delle
property
• Metodi dichiarati in NSKeyValueCoding
• Buon principio di design del codice
• Permette di semplificare il codice
50. Objective-C
50
Key Value Coding - KVC
• Metodo valueForKey:
✓Ritorna il valore per la key specificata
• Se la key non viene trovata, viene chiamato
il metodo valueForUndefinedKey:
✓Solleva un’eccezione di tipo
NSUndefinedKeyException
58. Objective-C
58
Key Value Observing - KVO
• Fornisce la possibilità ad un oggetto, di
ricevere una notifica quando varia la
property di un altro oggetto
• Utile per gestire cambi di visualizzazione o
azioni all’interno della nostra App
• Funzionalità specifica di Objective-C
59. Objective-C
59
Key Value Observing - KVO
• Supponiamo di avere la seguente
situazione
• Vogliamo sapere quando il nostro
accountBalance varia
60. Objective-C
60
Key Value Observing - KVO
• l’oggetto PersonObject, registra un
observer sulla property accountBalance
• Metodo
addObserver:forKeyPath:options:context:
61. Objective-C
61
Key Value Observing - KVO
• Per ricevere la notifica, l’osservatore deve
implementare il metodo
observeValueForKeyPath:ofObject:change:context:
62. Objective-C
62
Key Value Observing - KVO
• Quando avviene il cambio di valore
nell’attributo accountBalance,
automaticamente viene notificato
all’osservatore
63. Objective-C
63
Key Value Observing - KVO
• Rimuovere observer quando viene
deallocata la classe altrimenti potremmo
generare dei leaks
• Metodo
removeObserver:forKeyPath:
64. Objective-C
64
Key Value Observing - KVO
• Non dobbiamo specificare che tipo di notifica
inviare, iOS gestisce autonomamente la
comunicazione
• Non dobbiamo implementare schemi particolari
di gestione per intercettare le modifiche
• Semplice da adottare