I test unitari sono sempre più utilizzati per verificare la correttezza del codice che scriviamo.
Ci si trova però a volte di fronte a codice scritto in maniera poco "disaccoppiata". Questo può impedirci di sostituire a runtime dei Dependent-on Object con dei Mock Object o degli Stub. Nel talk descriverò un plugin scritto per symfony (ma utilizzabile anche in altri ambiti) che permette di sostituire delle classi a runtime ridefinendole e configurandole all'interno dei test, creando un ambiente che isola il codice da verificare.
Il talk prevederà degli esempi pratici di utilizzo dello strumento descritto.
I test unitari sono sempre più utilizzati per verificare la correttezza del codice che scriviamo.
Ci si trova però a volte di fronte a codice scritto in maniera poco "disaccoppiata". Questo può impedirci di sostituire a runtime dei Dependent-on Object con dei Mock Object o degli Stub. Nel talk descriverò un plugin scritto per symfony (ma utilizzabile anche in altri ambiti) che permette di sostituire delle classi a runtime ridefinendole e configurandole all'interno dei test, creando un ambiente che isola il codice da verificare.
Il talk prevederà degli esempi pratici di utilizzo dello strumento descritto.
WebApps FutureCon 에서 발표한 "2011년 웹 & 모바일 개발자가 주목해야할 기술들" 자료입니다. HTML5,CSS3,Javascript,Responsive Web Design,Device API,Hybrid App,Hybrid Framework 등에 대해서 설명합니다.
Olivier Halligon nous a présenté sa librairie OHHTTPStubs. Cette dernière permet de bouchonner vos requêtes réseau facilement. Sans modifier le code de votre application. Très utile dans les phases de développement et de test.
Non Conventional Android Programming (Italiano)Davide Cerbo
Android è il nuovo sistema operativo open source per dispositivi mobili e realizzato da Google che si è posta la missione di rendere l’internet mobile accessibile a tutti tramite dispositi a basso costo.
Durante questo intervento mostrerò come sia possibile sviluppare per questo sistema operativo (e non solo) senza l’utilizzo di Java e come sia possibile utilizzare una versione light di Spring Framework nelle applicazioni mobili.
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
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Codemotion
Un sacco di applicazioni che utilizziamo quotidianamente sono sviluppate in C++. Per esempio, se stai leggendo questo abstract in un browser, allora probabilmente stai usando un software scritto in C++. Nonostante la diffusione di tanti altri eccellenti linguaggi, perché il C++ è ancora così utilizzato? Sapevi che nel 2014 è stato il secondo linguaggio più amato della SO Developer Survey? Cosa offre in più rispetto ad altre tecnologie? Presenterò la mia visione, e anche alcuni “segreti” che rendono il C++ speciale ed evoluto.
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018Codemotion
In this talk I would like to share my experience of using this new mobile database with great potential. We will see which are the major differences compared to SQLite and what makes Realm very fast so as to be called "in realtime". We develop a realtime multiplatform collaborative app starting from scratch, using the latest features introduced by Xamarin Forms to improve the responsiveness. Your viewmodels and bindings for sure will thank you! :-)
Come sviluppare app native per iOS a partire dal suo IDE di sviluppo Xcode per proseguire con un tutorial completo per realizzare una piccola rubrica di contatti.
WebApps FutureCon 에서 발표한 "2011년 웹 & 모바일 개발자가 주목해야할 기술들" 자료입니다. HTML5,CSS3,Javascript,Responsive Web Design,Device API,Hybrid App,Hybrid Framework 등에 대해서 설명합니다.
Olivier Halligon nous a présenté sa librairie OHHTTPStubs. Cette dernière permet de bouchonner vos requêtes réseau facilement. Sans modifier le code de votre application. Très utile dans les phases de développement et de test.
Non Conventional Android Programming (Italiano)Davide Cerbo
Android è il nuovo sistema operativo open source per dispositivi mobili e realizzato da Google che si è posta la missione di rendere l’internet mobile accessibile a tutti tramite dispositi a basso costo.
Durante questo intervento mostrerò come sia possibile sviluppare per questo sistema operativo (e non solo) senza l’utilizzo di Java e come sia possibile utilizzare una versione light di Spring Framework nelle applicazioni mobili.
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
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Codemotion
Un sacco di applicazioni che utilizziamo quotidianamente sono sviluppate in C++. Per esempio, se stai leggendo questo abstract in un browser, allora probabilmente stai usando un software scritto in C++. Nonostante la diffusione di tanti altri eccellenti linguaggi, perché il C++ è ancora così utilizzato? Sapevi che nel 2014 è stato il secondo linguaggio più amato della SO Developer Survey? Cosa offre in più rispetto ad altre tecnologie? Presenterò la mia visione, e anche alcuni “segreti” che rendono il C++ speciale ed evoluto.
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018Codemotion
In this talk I would like to share my experience of using this new mobile database with great potential. We will see which are the major differences compared to SQLite and what makes Realm very fast so as to be called "in realtime". We develop a realtime multiplatform collaborative app starting from scratch, using the latest features introduced by Xamarin Forms to improve the responsiveness. Your viewmodels and bindings for sure will thank you! :-)
Come sviluppare app native per iOS a partire dal suo IDE di sviluppo Xcode per proseguire con un tutorial completo per realizzare una piccola rubrica di contatti.
C# is entering its third decade of life. And it is consistently evolving over the years with lot of new features. Let's recap the recent 7.x evolution and what we expect for the 8.0 features.
9. Principali:
prefix
Foundation (NS)
UIKit (UI)
QuartzCore (CA)
CoreGraphics (CG)
CoreLocation (CL)
frameworks – intro
Mobile Apps con Objective-c | alberto pasca
Librerie software che aumentano le funzionalità di una classe
http://tinyurl.com/objc-prefix
13. sintassi – variabili
#define Moltiplica(x,y) (x*y)
const int valore = 28;
int val = 0;
double val = .5;
float val = 10.;
char val = 'a';
BOOL val = YES | NO;
NSString *val = @"stringa";
id val = MyClass | MyObject;
SEL selector = @selector(MyMethod);
Mobile Apps con Objective-c | alberto pasca
Dynamic Typing
Tipi base
> ereditati dal C
Tipi speciali
> ereditati da SmallTalk
ed aggiunti in ObjC
Ogni oggetto va dicharato
come un puntatore!
14. sintassi – operatori
Mobile Apps con Objective-c | alberto pasca
Aritmetici
+ - * / %
Assegnamento
+= -= *= /= %=
++ --
Comparazione
== != > < >= <=
Bit
<<= >>= &= |= ^=
Ternari
[condition] ? [true] : [false]
myvar =
x == y ? y <= z ?
y : x != j ? k
>= j ? k : j : x :
"omg_i_did_again”;
16. sintassi – cicli e condizioni
for ( int i=0; i<28; i++ ) {
NSLog(@"I: %d", i);
}
int i=28;
while ( i != 0 ) {
NSLog(@"I: %d", --i);
}
int i=28;
do {
NSLog(@"I: %d", i--);
} while ( i!=0 );
Mobile Apps con Objective-c | alberto pasca
if ( i==28 ){
NSLog(@"28!!!");
} else {
NSLog(@"I: %d", i);
}
switch ( i ) {
case 1:
NSLog(@"UNO");
break;
case 2:
NSLog(@"DUE");
break;
default: break;
}
FOR
WHILE
DO-WHILE
IF - ELSE
SWITCH
17. sintassi – enumerazioni
aClass *class = [[aClass alloc] init];
NSArray *arr = [NSArray arrayWithObjects:class, class, class, nil];
int tot = [arr count];
for ( int i=0; i<=tot; i++ )
NSLog(@"STR: %@", [arr objectAtIndex:i]);
for (aClass *c in arr)
NSLog(@"STR: %@", [c description]);
NSEnumerator *en = [arr objectEnumerator];
while (class == [en nextObject] )
[class doWork];
Mobile Apps con Objective-c | alberto pasca
CLASSICO
FOREACH
ENUM
18. sintassi - metodi
Senza parametri:
C -> oggetto.Metodo();
OBJC -> [oggetto Metodo];
Con parametri:
C -> oggetto.Metodo(5, "pippo");
OBJC -> [oggetto MetodoConNumero:5 andStringa:@"pippo"];
Non si chiama un metodo ma si invia un messaggio!
Mobile Apps con Objective-c | alberto pasca
- (void) Metodo;
- (void) MetodoConNumero:(int)num andStringa:(NSString*)str;
19. sintassi – classi (gerarchia)
NSObject
NSArray NSString UIResponder
UIView
UIControl
UITextField UISlider
UILabel
CLASSE
Descrizione astratta che
definisce il comportamento di un
oggetto.
OGGETTO
È un entità appartenente alla
classe, con un proprio stato e
comportamento.
Mobile Apps con Objective-c | alberto pasca
20. sintassi – classi (interface)
#import "aSuperClass.h”
#import <aSuperClass.h>
#include "aSuperClass.h”
#include <aSuperClass.h>
@class aSuperClass;
@interface MyClass: aSuperClass {
int pippo;
}
-/+ (void) mioMetodo;
@end
.H Dichiarazione di variabili e prototipi dei metodi
Mobile Apps con Objective-c | alberto pasca
inclusione lib/classi
Variabili
Metodi
21. sintassi – classi (implementation)
#import "MyClass.h"
@implementation MyClass
- (void) mioMetodoIstanza {
// implementazione
}
+ (void) mioMetodoDiClasse {
// implementazione
}
@end
Mobile Apps con Objective-c | alberto pasca
.M Implementazione metodi
Fine implementazione
Inizio implementazione
Implementazione metodi
22. sintassi – proprietà
nonatomic
+
readonly vs readwrite
+
retain vs assign vs copy
Mobile Apps con Objective-c | alberto pasca
Creano i Getters / Setters per una variabile
tramite le keywords @property (file .H) e @syntetize/@dynamic (file .M)
mutually
exclusive
23. sintassi – proprietà
Mobile Apps con Objective-c | alberto pasca
oggetto0x01retain
assign
oggetto0x02copy
0x01
+1
+0
+1
@property (nonatomic, assign) int CurrentGameLevel;
24. sintassi – proprietà
Mobile Apps con Objective-c | alberto pasca
- (void) setVal:(NSString*)v { variabile = v; }
- (void) setVal:(NSString*)v {
if ( v != variabile ) {
[variabile release];
variabile = [v copy];
}
}
- (void) setVal:(NSString*)v {
if ( v != variabile ) {
[variabile release];
variabile = [v retain];
}
}
assign
copy
retain
25. sintassi – oggetti
Creazione oggetti:
Auto car = new Auto();
Auto *car = [[Auto alloc] init];
Rilascio oggetti:
if (car != nil) [car release];
Mobile Apps con Objective-c | alberto pasca
Invece di invocare dei metodi, si chiede all’oggetto in questione di fare qualcosa..
alloc + init è il pattern di
defaul per creare un oggetto!
26. sintassi – forwarding
Invio di messaggi ad oggetti non specificati
nell’interfaccia o addirittura non esistenti !
id delegate;
isKindOfClass - respondsToSelector
- (void) sendMessage {
if ([delegate isKindOfClass:[MyClass class]])
if ([delegate respondsToSelector:@selector(method)])
[delegate method];
- }
Mobile Apps con Objective-c | alberto pasca
27. sintassi – protocolli
Callback
Ereditarietà multipla
Il metodo chiamato potrebbe non esistere!
Protocolli formali / informali, o meglio…
@required e @optional
@protocol ClassDelegate
- (void) HoFinitoFaiQualcosa;
@end
Mobile Apps con Objective-c | alberto pasca
Scambiano messaggi tra le classi o le interfaccie stesse
28. sintassi – categorie
#import <Foundation/Foundation.h>
@interface NSString (HtmlStrings)
- (BOOL) isUrl;
@end
#import "NSString+Html.h"
@implementation NSString (HtmlStrings)
- (BOOL) isUrl {
if ( [self hasPrefix:@"http://"] )
return YES;
return NO;
}
@end
Mobile Apps con Objective-c | alberto pasca
Permettono di aggiungere funzionalità ad oggetti esistenti e compilati
Utilizzo:
#import “NSString+Html.h”
NSString *Str =
@"http://www.cutaway.it";
if ( [Str isUrl] ) return YES;
La classe NSString ha un
nuovo metodo!
29. sintassi – code
Mobile Apps con Objective-c | alberto pasca
Cosa vedremo…
• main
• application delegate
• view controller
• variabili
• cicli
• enumerazioni
• classi
• metodi (pubblici / privati)
• protocolli
• categorie
• properties
• debug
• log informations
Lezione_01_Sintassi
31. memoria – alloc / release
Mobile Apps con Objective-c | alberto pasca
Basata sui REFERENCE COUNT
Oggetti creati con pattern ALLOC INIT hanno RETAIN COUNT +1
Ogni oggetto rilasciato con RELEASE ha un RC di -1
Quando RC è 0 viene chiamato il distruttore (dealloc)
33. memoria - leaks
Mobile Apps con Objective-c | alberto pasca
- (void) leakyMethod {
// This is a leak
NSArray *array = [[NSArray alloc] init];
}
• MEMORY LEAK
• CLANG_STATIC_ANALYZER
• INSTRUMENTS
34. memoria - autorelease
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[...]
[pool drain];
[pool release]; // ci pensa il drain a fare il release in ambienti RC!
Il pool invia automaticamente un RELEASE a tutti gli oggetti del
pool, pertanto la responsabilità di release passa al POOL.
Command-Line App
Cicli con molti oggetti temporanei
Thread
Mobile Apps con Objective-c | alberto pasca
AUTORELEASE POOL
35. memoria – zombie
NSZombieEnabled = YES;
Mobile Apps con Objective-c | alberto pasca
1 - EXC_BAD_ACCESS
NSString *myString;
- (void)viewDidLoad {
myString = [NSString stringWithFormat:@”asd"];
NSLog(@"%@", myString); // OK
}
- (void) aMethod {
NSLog(@"%@", myString); // EXC_BAD_ACCESS
}
2 – [myString] message sent to deallocated instance 0x5633b0
36. Cosa vedremo…
• alloc + init
• release
• retain count
• memory leak
• autorelease
• autorelease pool
• runtime error
• EXC_BAD_ACCESS
• NSZombie
• Instruments
• debug
Lezione_02_Memoria
memoria – code
Mobile Apps con Objective-c | alberto pasca
37. # EOF - day 01
Coming next:
• Interfacce grafiche
• Eventi
• Foundation.framework
• Persistenza dati
• Librerie di sistema
• Librerie esterne
tks
Mobile Apps con Objective-c | alberto pasca