Реклама
Реклама
PROGRAMMAZIONE DI SISTEMI MOBILI IOS,
OBJECTIVE-C: IPHONE, IPAD, IPOD..
LEONARDO SEQUI
Corso di Sistemi Distribuiti e Tecnologie Internet, AA.2012-2013
DISIT LAB: Distributed Systems and Internet Technology Lab
Università degli Studi di Firenze
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
1
Objective-C
• Objective-C è il principale linguaggio di
programmazione che si utilizza per creare applicazioni
per OSX.
• È la base da apprendere per utilizzare le librerie
(framework) che Apple mette a disposizione e che
consentono lo sviluppo di applicazioni su OSX, iPhone,
iPod Touch e iPad.
• E' un linguaggio di programmazione ad oggetti (OOP)
molto simile a altri linguaggi come Java o C++.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
2
Cenni sugli oggetti
• CLASSI e OGGETTI sono elementi astratti che
permettono di rappresentare oggetti reali (o immaginari)
in oggetti software.
• Ogni Oggetto appartiene a una Classe e i nostri
programmi saranno un insieme di oggetti che
dialogano tra loro inviandosi messaggi e ricevendo
risposte attraverso metodi e funzioni.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
3
La prima classe
• In Objective-C per definire un oggetto, quindi la classe
cui esso appartiene, abbiamo bisogno di due file:
• uno (.h) che definisce l'interfaccia della classe
• l'altro (.m) che ne definisce l'implementazione
• L'interfaccia descrive le azioni (i metodi e funzioni) della
classe e nasconde l'implementazione che definisce il
codice vero e proprio, ovvero ciò che le azioni realmente
eseguono.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
4
Class
#import
@interface
//
Person.h
@implementation
//
Person.m
#import "Person.h"
@interface Person : NSObject
@implementation Person
@end
@end
By Giuseppe Arici
5
Class @interface
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{
NSInteger _balance;
}
- (NSInteger) withdraw:(NSInteger)amount;
- (void) deposit:(NSInteger)amount;
@end
By Giuseppe Arici
6
Class @interface
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{ Base types
NSInteger _balance;
import
}
- (NSInteger) withdraw:(NSInteger)amount;
- (void) deposit:(NSInteger)amount;
@end
By Giuseppe Arici
7
Class @interface
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{
NSInteger _balance;
}
class definition
Class definition start
start
(NSInteger) withdraw:(NSInteger)amount;
- (void) deposit:(NSInteger)amount;
@end
By Giuseppe Arici
8
Class @interface
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{
NSInteger _balance;
class name
}
- (NSInteger) withdraw:(NSInteger)amount;
- (void) deposit:(NSInteger)amount;
@end
By Giuseppe Arici
9
Class @interface
extends
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{
NSInteger _balance;
parent class
}
- (NSInteger) withdraw:(NSInteger)amount;
- (void) deposit:(NSInteger)amount;
@end
By Giuseppe Arici
10
Class @interface
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{
NSInteger _balance;
}
- (NSInteger) withdraw:(NSInteger)amount;
Instance
- (void) deposit:(NSInteger)amount;
variables
@end
By Giuseppe Arici
11
Class @interface
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{
NSInteger _balance;
}
- (NSInteger) withdraw:(NSInteger)amount;
- (void) deposit:(NSInteger)amount;
@end
methods
declarations
By Giuseppe Arici
12
Class @interface
#import <Foundation/Foundation.h>
@interface BankAccount : NSObject
{
NSInteger _balance;
}
-
Class definition
(NSInteger)
withdraw:(NSInteger)amount;
end
(void) deposit:(NSInteger)amount;
@end
By Giuseppe Arici
13
Class @implementation
#import "BankAccount.h"
@implementation BankAccount
- (id) init {
self = [super init];
return self;
}
- (NSInteger) withdraw:(NSInteger)amount {
return amount;
}
- (void) deposit:(NSInteger)amount {
_balance += amount;
}
@end
By Giuseppe Arici
14
Class @implementation
#import "BankAccount.h"
@implementation
Interface BankAccount
- (id)import
init {
self =
return self;
}
init];
- (NSInteger) withdraw:(NSInteger)amount {
return amount;
}
- (void) deposit:(NSInteger)amount {
_balance += amount;
}
@end
By Giuseppe Arici
15
Class @implementation
#import "BankAccount.h"
@implementation BankAccount
- (id)
init implementation
{
Class
self = [super init];
return self;start
}
- (NSInteger) withdraw:(NSInteger)amount {
return amount;
}
- (void) deposit:(NSInteger)amount {
_balance += amount;
}
@end
By Giuseppe Arici
16
Class @implementation
#import "BankAccount.h"
@implementation BankAccount
- (id) init {
self = [super init];
return self;
}
- (NSInteger) withdraw:(NSInteger)amount {
return amount;
}
- (void) deposit:(NSInteger)amount {
_balance += amount;
}
@end
By Giuseppe Arici
methods with
bodies
17
Class @implementation
#import "BankAccount.h"
@implementation BankAccount
- (id) init {
self = [super init];
return self;
}
- (NSInteger) withdraw:(NSInteger)amount {
return amount;
}
-
Class implementation
(void) deposit:(NSInteger)amount
end
end
_balance += amount;
{
}
@end
By Giuseppe Arici
18
Instance Variable Declaration
@interface MyClass : NSObject
{
}
By Giuseppe Arici
19
Instance Variable Declaration
@interface MyClass : NSObject
{
@private
// Can only be accessed by instances of MyClass
NSInteger _privateIvar1;
NSString *_privateIvar2;
}
By Giuseppe Arici
20
Instance Variable Declaration
@interface MyClass : NSObject
{
@private
// Can only be accessed by instances of MyClass
NSInteger _privateIvar1;
NSString *_privateIvar2;
@protected // Default
// Can only be accessed by instances of MyClass or MyClass's subclasses
NSInteger _protectedIvar1;
NSString *_protectedIvar2;
}
By Giuseppe Arici
21
Instance Variable Declaration
@interface MyClass : NSObject
{
@private
// Can only be accessed by instances of MyClass
NSInteger _privateIvar1;
NSString *_privateIvar2;
@protected // Default
// Can only be accessed by instances of MyClass or MyClass's subclasses
NSInteger _protectedIvar1;
NSString *_protectedIvar2;
@package // 64-bit only
// Can be accessed by any object in the framework in which MyClass is defined
NSInteger _packageIvar1;
NSString *_packageIvar2;
}
By Giuseppe Arici
22
Instance Variable Declaration
@interface MyClass : NSObject
{
@private
// Can only be accessed by instances of MyClass
NSInteger _privateIvar1;
NSString *_privateIvar2;
@protected // Default
// Can only be accessed by instances of MyClass or MyClass's subclasses
NSInteger _protectedIvar1;
NSString *_protectedIvar2;
@package // 64-bit only
// Can be accessed by any object in the framework in which MyClass is defined
NSInteger _packageIvar1;
NSString *_packageIvar2;
@public // Never use it !
// Can be accessed by any object
NSInteger _publicVar1;
NSString *_publicVar2;
}
By Giuseppe Arici
23
Method & Message
By Giuseppe Arici
25
Method Declaration
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)flag;
By Giuseppe Arici
26
Method Declaration
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)flag;
Method scope
Can be either:
+ for a class method
- for an instance method
Methods are always public !
“Private” methods defined in implementation
By Giuseppe Arici
27
Method Declaration
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)flag;
Return type
Can be any valid data type,including:
void returns nothing
id a pointer to an object of any class
NSString * a pointer to an NSString
BOOL a boolean (YES or NO)
By Giuseppe Arici
28
Method Declaration
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)flag;
Method name
The method name is composed of all labels
Colons precede arguments,but are part of the method name
writeTofile:atomically:
By Giuseppe Arici
29
Method Declaration
- (BOOL) writeToFile:(NSString *)path atomically:(BOOL)flag;
argument type
argument name
Arguments come after or within the method name
By Giuseppe Arici
30
Message Passing
[data writeToFile:@"/tmp/data.txt" atomically:YES];
Square brackets syntax
Nested Message Passing: [ [ ] [ ] [ [ ] ] ]
[[store data] writeToFile:[@"/tmp/data.txt" lowercaseString]
atomically:[[PMOption sharedOption] writeMode]
encoding:NSUTF8StringEncoding
error:&error];
By Giuseppe Arici
31
Properties
By Giuseppe Arici
33
Properties
By default, the instance variables of an object are not accessible outside the block
implementation of the object.
@public
@property
Attribute
@property (attributes) variableType propertyName;
You want it…
readwrite
When you want the property to be modifiable by people. The compiler will generate a getter and a setter for you. This is the default.
readonly
When you don’t want people modifying the property. You can still change the field value backing the property, but the compiler won’t generate a setter.
copy
When you want to hold onto a copy of some value instead of the value itself. For example, if you want to hold onto an array and don’t want people to be able to change its contents after they set it. This sends a copy message to the value passed in, then keeps that.
retain
When you’re dealing with object values. The compiler will retain the value you pass in and release the old value when a new one comes in.
assign
When you’re dealing with basic types, like ints, floats, etc. The compiler just creates a setter with a simple myField = value statement. This is the default, but not usually what you want.
By Giuseppe Arici
34
Properties
Example:
@property (nonatomic, copy) NSString* firstName;
- (NSString*) firstName;
- (void) setFirstName: (NSString*) firstName;
@synthesize firstName;
instructs the compiler to implement the methods
By Giuseppe Arici
35
Object Life Cycle
By Giuseppe Arici
36
•
Object Construction
NSObject defines class method called alloc
Dynamically allocates memory for object on the heap
Returns new instance of receiving class
•
BankAccount *account = [BankAccount alloc];
NSObject defines instance method called init
Implemented by subclasses to initialize instance after memory has been allocated
Subclasses commonly define several initializers (default indicated in documentation)
[account init];
• alloc and init calls are always nested into single line
BankAccount *account = [[BankAccount alloc] init];
By Giuseppe Arici
37
Object Destruction
•
•
•
dealloc
Never call explicitly
Release all retained or copied instance variables (* if notARC)
Calls [super dealloc] (* if notARC)
- (void)saveThis:(id)object {
if (_instanceVariable != object ) {
[_instanceVariable release];
_instanceVariable = [object retain];
}
}
- (void)dealloc {
[_instanceVariable release];
[super dealloc];
}
By Giuseppe Arici
38
Memory Management
By Giuseppe Arici
39
Memory Management
•
Manual Reference Counting
Higher level abstraction than malloc / free
•
Straightforward approach,but must adhere to conventions and rules
Automatic Reference Counting (ARC)
Makes memory management the job of the compiler (and runtime)
•
Available for:partially iOS 4+ or OS X 10.6+ / fully iOS 5+ or OS X 10.7+
Garbage Collection
Only available for OS X 10.5+, but depracated from 10.8+
Not available on iOS due to performance concerns
By Giuseppe Arici
40
Memory Management
Reference count
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
41
Manual Reference Counting
(Only) Objective-C objects are reference counted:
•
•
•
•
Objects start with retain count of 1 when created
Increased with retain
Decreased with release,autorelease
When count equals 0,runtime invokes dealloc
1
alloc
2
retain
1
release
0
release
dealloc
By Giuseppe Arici
42
The Memory Management Rule
Everything that increases the reference count
with alloc,copy,new or retain is in charge of
the corresponding [auto]release.
By Giuseppe Arici
45
Automatic Reference Counting
“Automatic Reference Counting (ARC) in Objective-C
makes memory management the job of the compiler.By
enablingARC with the newApple LLVM compiler,you
will never need to type retain or release again,
dramatically simplifying the development process,while
reducing crashes and memory leaks.The compiler has a
complete understanding of your objects,and releases
each object the instant it is no longer used,so apps run
as fast as ever,with predictable,smooth performance.”
(Apple,“iOS 5 for developers”– http://developer.apple.com/technologies/ios5)
By Giuseppe Arici
46
Automatic Reference Counting
•
•
•
•
The Rule is still valid,but it is managed by the compiler
No more retain,[auto]release nor dealloc
ARC is used in all new projects by default
Apple provides a migration tool which is build into Xcode
By Giuseppe Arici
47
Protocol
By Giuseppe Arici
48
Protocol
•
•
List of method declarations
•
•
Not associated with a particular class
Conformance,not class,is important
Useful in defining
•
•
•
Methods that others are expected to implement
Declaring an interface while hiding its particular class
Capturing similarities among classes that aren't hierarchically related
Java / C# Interface done
Objective-C style
By Giuseppe Arici
49
Protocol
•
Defining a Protocol
@protocol NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
@end
•
Adopting a Protocol
@interface Person : NSObject<NSCoding> {
NSString *_name;
}
// method & property declarations
@end
By Giuseppe Arici
50
Design Patterns
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
52
Design Patterns
•
•
•
•
Model View Controller
Protocol
Delegation
Notification Center
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
53
Model View Controller
• The Model-View-Controller design pattern (commonly known as
MVC) assigns objects in an app one of three roles: model, view, or
controller.
• The pattern defines not only the roles objects play in the app, it
defines the way objects communicate with each othe
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
54
Model
A model object encapsulates the data of an app and
defines the logic and computation that manipulate and
process that data.
Example: a model object might represent a character
in a game or a contact in an address book.
User actions in the view layer that create or modify data are
communicated through a controller object and result in the creation or
updating of a model object.
When a model object changes (for example, new data is received over a
network connection), it notifies a controller object, which updates the
appropriate view objects.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
55
View
• A view object is an object in an app that users can see.
• A view object knows how to draw itself and might
respond to user actions.
• A major purpose of view objects is to display data from the
app’s model objects and to enable the editing of that data.
• In an MVC app view objects are typically decoupled from
model objects.
• View objects learn about changes in model data through
the app’s controller objects and communicate userinitiated changes—for example, text entered in a text field—
through controller objects to an app’s model objects.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
56
Controller
• A controller object acts as an intermediary between one or
more of an app’s view objects and one or more of its model
objects.
• Controller objects can also perform setup and
coordinating tasks for an app and manage the life cycles of
other objects.
• A controller object interprets user actions made in view
objects and communicates new or changed data to the
model layer.
• When model objects change, a controller object
communicates that new model data to the view objects so
that they can display it.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
57
Delegation: Acting on Behalf of Another Object
• In delegation, an object called the delegate acts on behalf of, and
at the request of, another object. That other, delegating, object is
typically a framework object.
• At some point in execution, it sends a message to its delegate;
the message tells the delegate that some event is about to
happen and asks for some response.
• The delegate implements the method invoked by the message
and returns an appropriate value.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
60
Protocol
• A protocol is a declaration of a programmatic interface whose
methods any class can implement. An instance of a class
associated with the protocol calls the methods of the protocol and
obtains values returned by the class formally adopting and
implementing the protocol.
• A protocol is thus, as is delegation, an alternative to subclassing
and is often part of a framework’s implementation of delegation.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
61
Example
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
62
Notification Center
• A notification center is a subsystem of the Foundation
framework that broadcasts a message — a notification — to all
objects in an app that are registered observers of an event.
•
A notification informs the observer
that the event has happened or is
about to happen, thus giving the
observer an opportunity to respond
in an appropriate manner.
•
Notifications broadcast
by the notification
center are a way to
increase cooperation
and cohesion among
the objects of an app.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
63
Notification
Local notification
Notifiche locali schedulate dall’app e gestite dal sistema
operativo del singolo device.
Push Notification
Notifiche inviate dai serverApple (APNsApple Push
Notification service) su tutti i device dove l’app è installata.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
64
Push Notification
Apple Push Notification service transports and routes a
notification from a given provider to a given device.
A notification is a short message consisting of two major pieces of
data: the device token and the payload.
The device token is analogous to a phone number; it contains
information that enables APNs to locate the device on which the
client application is installed. APNs also uses it to authenticate the
routing of a notification.
The payload is a JSON-defined property list that specifies how the
user of an application on a device is to be alerted.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
65
Token Generation and Dispersal
• Applications must register to receive push notifications
• The system receives the registration request from the application,
connects with APNs, and forwards the request.
• APNs generates a device token using information contained in
the unique device certificate. The device token contains an
identifier of the device. It then encrypts the device token with a
token key and returns it to the device.
• The device returns the device token to the requesting application
as an NSData object. The application then must then deliver the
device token to its provider in either binary or hexadecimal
format.
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
66
Token Generation and Dispersal
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
67
Token Trust (Notification)
After the system obtains a device token from APNs it must provide
APNs with the token every time it connects with it.
APNs decrypts the device token and validates that the token was
generated for the connecting device. To validate, APNs ensures
that the device identifier contained in the token matches the
device identifier in the device certificate.
Every notification that a provider sends to APNs for delivery to a
device must be accompanied by the device token it obtained from
an application on that device.
APNs decrypts the token using the token key, thereby ensuring
that the notification is valid. It then uses the device ID contained in
the device token to determine the destination device for the
notification
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
68
Token Trust (Notification)
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
69
A Concrete
Example
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
70
Mobile Emergency
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
71
Emergenze ospedaliere
Assenza di criteri standard
per la creazione dei piani
di emergenza
Incrementare la reattività e
l’efficienza in caso di emergenza
Comunicazioni durante
l’emergenza non gestite
Semplificare i meccanismi di
comunicazione dell’informazione
Dispositivi mobili in ambito ospedaliero:
accesso a cartelle cliniche, risultati di test e
statistiche vitali dei pazienti tramite iPhone
(M.Sinai Hospital, Toronto)
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
72
Mobile Emergency
•
Segnalare in modo dettagliato (luogo, stato pazienti, immagini, video) la presenza di
una situazione di emergenza, gestire le segnalazioni effettuate
•
Consultare lo stato delle emergenze in corso, con possibilità di ricevere notifiche
dalla Centrale Operativa
•
individuare e segnalare la propria posizione indoor tramite lettura di un codice QR
posizionato all’interno dei locali della struttura
•
individuare e segnalare la propria posizione esterna sfruttando il ricevitore GPS
•
Localizzare e raggiungere con un sistema di navigazione indoor/outdoor le vie di
uscita più vicine, le aree di raccolta definite dalla centrale operativa
•
Individuare gli operatori presenti all’interno dell’edificio, conoscerne l’ultima
posizione segnalata tramite la visualizzazione di una mappa, comunicare con essi
tramite una sistema di messaggi in modalità broadcast o unicast
•
Consultare una checklist sui compiti assegnati ai ruoli
•
Richiedere informazioni sul Responsabile di un’emergenza o richiedere di diventarlo
•
Consultare mappe edificio e visualizzare i PDI presenti
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
73
Analisi dei requisiti
Segnalazione di
una situazione di
emergenza
Richiesta di
informazioni sulla
propria posizione
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
74
Progettazione della UI
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
75
Architettura del sistema
MOBILE EMERGENCY PRO
CENTRAL STATION
User Interface
Emergency Manager
Maps Management
Collaboration Discovering
Messaging in Push
QR acquisition
User Management
DATABASE
MOBILE MEDICINE
Best Practice Network and Services
http://mobmed.axmedis.org
Map Consulting
Reach Emergency
PATHS MANAGER
Indoor Path
Manager
Outdoor Path
Manager
MOBILE DEVICES AND SENSORS
Media Acquisition and Delivering
COMMUNICATION MANAGEMENT
MOBILE EMERGENCY FRONTEND
Emergency Management
INDOOR NAVIGATION SYSTEM
Mobile Medicine
Content
Indexer,
Semantic
Ingestion and
processing
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
Information and
history database
Content database
76
Diagramma delle classi
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
77
Diagramma delle classi
VIEW
+
CONTROLLER
MODEL
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
78
La base di dati
PERSISTENZA DEI DATI
MODALITÀ OFFLINE
RIDURRE IL TRAFFICO DI RETE
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
79
Comunicazione Client / Server
•
Comunicazioni tra dispositivi e Centrale Operativa tramite
connessioni HTTP con richieste POST e GET (NSURLConnection)
•
Informazioni inviate dalla Centrale Operativa ai dispositivi sotto
forma di contenuti XML/JSON
Invio di informazione formattata per
ridurre il traffico di rete
Il dispositivo è responsabile della
visualizzazione dei dati
Programmazione sistemi mobili iOS: iPhone, iPad;
Objective C, 2012-2013
80
Comunicazione Client / Server
CLIENT
SERVER
Programmazione sistemi mobili iOS: iPhone, iPad; Objective C, 2012‐2013
81
Comunicazione Client / Server
GET‐Request
Query
Data
DISPLAY DATA
SAVE TO LOCAL DATABASE
PARSER
XML / JSON
Programmazione sistemi mobili iOS: iPhone, iPad; Objective C, 2012‐2013
82
Comunicazione Client / Server
<?xml version="1.0" encoding="UTF‐8"?>
<emergencies>
<emergency>
<id>15</id>
<date>2013‐05‐10 09:50:55</date>
<type>Fire</type>
<dimension>Estesa</dimension>
<patientsNumber>Nessuno</patientsNumber> <description></description>
<patientsState></patientsState>
<street>via di Santa Marta</street>
<streetNumber>28</streetNumber>
<building>Santa Marta</building>
<roomId>1</roomId> <x>1199</x>
<y>699</y>
<edificio_id>1</edificio_id>
<gpsLat>43.798503619421275</gpsLat>
<gpsLng>11.25300407409668</gpsLng> <floor>2</floor>
<department>Ingegneria</department>
<room>466</room>
<userSignalingId>42</userSignalingId>
<resposibleId>42</resposibleId>
</emergency>
<emergency>
(…….)
Programmazione sistemi mobili iOS: iPhone, iPad; Objective C, 2012‐2013
83
Conclusioni
Analisi dei
requisiti
Definizione
del modello
Realizzazione
di mockup
Analisi del
problema
Individuazione
delle entità
Creazione di
mockup
dell’applicazione
Guidelines di
Apple
Individuazione
degli utilizzatori
finali
Individuazione
degli attributi
per ciascuna
entità
Testing virtuale
Design Patterns
Programmazione sistemi mobili iOS: iPhone, iPad; Objective C, 2012‐2013
Scrittura
codice
84
Credit
• Le slide relative alla programmazione sono state derivate dalle slide pubblicate su SlideShare da:
Giuseppe Arici
– [email protected]
– [email protected]
• Le slide relative Mobile Emergency sono derivate da un lavoro svolto al DISIT:
– P. Bellini, S. Boncinelli, F. Grossi, M. Mangini, P. Nesi, L. Sequi, "Mobile Emergency: supporting emergency in hospital with mobile devices", Theme Issue Media Tablets & Apps (Guest editors: Pinciroli & Pagliari), JMIR RESEARCH PROTOCOLS, http://dx.doi.org/10.2196/resprot.2293, 2013.
Programmazione sistemi mobili iOS: iPhone, iPad; Objective C, 2012‐2013
85
Buon lavoro!
Programmazione sistemi mobili iOS: iPhone, iPad; Objective C, 2012‐2013
86
">
/
Изтегляне
Само приятелско напомняне. Можете да видите документа точно тук. Но най-важното е, че нашият AI вече го е прочел. Той може да обясни сложни неща на прост език, да отговори на вашите въпроси на всеки език и да ви помогне бързо да навигирате дори в най-дългите или най-сложните документи.
Реклама