NET CF

Transcripción

NET CF
Taller de Programación de
Dispositivos Móviles
José Miguel Rubio L.
Oficina 3-20
http://www.inf.ucv.cl/~jrubio
[email protected]
.NET CF
Windows Mobile y .NET CF
Windows Mobile = Windows CE + programas +
extensiones
Modular como Windows CE, código a disposición
de los ensambladores/operadoras
Dirigido a:
Pocket PC, PPC Phone Edition
Smartphone (SP)
Portable Media Center (PMC)
.NET CF
Windows Mobile y .NET CF
Dispositivos
SO
Mejor
Desarrollo
Capacidad
Plataforma
Futura
Plataforma
Windows
Mobile
2000
2002
2003
WinCE 3.0
WinCE 3.0
WinCE 4.2
WinCE 4.2
WinCE 5.0
eVC 3 (C++)
eVB 3 (VB)
eVC 3 (C++)
eVB 3 (VB)
eVC 3 (C++)
eVC 4 (C++)
VS.NET 2003
eVC 3 (C++)
eVC 4 (C++)
VS.NET 2003
Visual Studio
(C#, VB.NET)
(C#, VB.NET)
2003
Second Edition
2005
(C#, VB.NET, C++)
MFC
MFC, ATL
ATL 4.2, .NET CF
.NET CF SP2
.NET CF 2.0
Win32,
POOM
Active Sync
Connection Mgr
MAPI
OBEX
Telephony
Enhanced Emulator
Configuration Mgr,
Bluetooth, SMS
VGA (PPC)
QVGA (SP)
Square
Landscape
MFC 8.0, ATL 8.0
Broad managed code
support
Notifications Broker,
Location, Camera,
Watson, D3DM
.NET CF
Windows Mobile y .NET CF
Visual Studio 2005
Managed
Native
MFC
ATL
Server side
.NET Compact
Framework 2.0
Win32
ASP .NET
Mobile Controls
Software Platform (APIs)
Device Management
Communication
Presentation
Data Access
Remote API
Configuration*
Bluetooth
Not. Broker
Pocket Watson
Connection Manager
TAPI*
SMS*
MAPI*
POOM*
Home Screen
User Interface/Shell
HTML Control
DOM
Multimedia
SQL Mobile
ADO CE
XML
CE DB
OLE DB
GAPI
Camera
D3DM
Windows Mobile
Windows CE
CE DB
ActiveSync
SQL Mobile
Pocket Outlook
Pocket Internet Explorer
Windows Media Player
Drivers
Device
Hardware
Processor
Memory
Display
USB or Serial
Radio
GSM/GPRS
CDMA/1xRTT
WiFi
Bluetooth
* = Managed wrappers
.NET CF
Contenidos
Introducción a .NET
Introducción a Compact Framework
Sintaxis de C#
Operaciones básicas con C#
Propiedades y DataBinding
Acceso a Bases de Datos
Invocación de Web Services
.NET CF
Introducción (I)
¿Qué es .NET?
Un conjunto de tecnologías que Microsoft ha creado y
posibilitan crear programas y comunicarlos entre sí con
independencia del lenguaje de programación y la
plataforma de ejecución.
¿Para qué tipo de máquina? CUALQUIERA que
soporte .NET
Se crea un programa y éste puede ejecutarse en
cualquier máquina con .NET instalado.
Puede comunicarse con otros programas
independientemente de la plataforma y lenguaje
.NET CF
Introducción (II)
Además, el programa puede haber sido hecho en
cualquiera de los lenguajes del conjunto .NET,
que es muy amplio
C++
J++
C#
Visual Basic.NET
Pascal, COBOL, Delphi, Python, .......
El conjunto cada día crece más
“Escribe en el lenguaje que quieras y ejecútalo en
la máquina que quieras”
.NET CF
Introducción (III)
Para conseguir esto se han creado una
serie de elementos básicos
Common Language Runtime (CLR)
Base Class Library (BCL)
Y unos elementos que se ejecutan sobre
ellos (Windows Forms, Web Services, ...)
.NET CF
Arquitectura (I)
ASP.NET
Servicios Web
Windows Forms
.NET Framework Base Classes
Common Language Runtime
.NET CF
Arquitectura (II)
Common Language Runtime
Elemento que se encarga de la ejecución. El corazón
de la ejecución de una aplicación en .NET
Se encarga de ejecutar las aplicaciones, crear el
entorno de ejecución en la máquina, etc...
El concepto es similar al que usa JAVA: El código
fuente es convertido a código intermedio ‘standard’
(MSIL)
El CLR traduce este código intermedio al código
máquina de la arquitectura concreta, directamente,
para que el procesador ejecute las instrucciones.
.NET CF
Arquitectura (III)
Common Language Runtime (CLR)
Ventaja en .NET CUALQUIER lenguaje
.NET se traduce al código intermedio.
Da igual en qué lenguaje se cree la aplicación,
al final se tendrá el mismo código intermedio a
ejecutar. El CLR ejecutará lo mismo provenga
del lenguaje de programación que provenga
Posibilidad INTEGRACIÓN
MULTILENGUAJE: Llamar a métodos o
heredar de clases escritas en otros lenguajes.
Todo converge al final a MSIL
.NET CF
Arquitectura (IV)
Compilar
Código Fuente
Código Intermedio
CLR
n
ó
i
Código Máquina cuc
e
Ej
Base Class Library (BCL)
Conjunto de librerías que usan los lenguajes de
programación .NET
Es un conjunto de clases que ofrece la funcionalidad
básica: Desde vectores y arrays a sockets y librerías de
Base de Datos
Por supuesto, cualquier usuario puede aumentar la
librería creando nuevas clases que pueden o no
heredar de éstas
.NET CF
Arquitectura (V)
Elementos que residen encima de CLR y
BCL
Windows Forms: Aplicaiones de formularios
ASP.NET: Generación que evoluciona de los
ASP’s comunes. Creación de páginas web
dinámicas
Web Services: invocación remota a servicios
de todo tipo a través de la web
.NET CF
Usar .NET en dispositivos
móviles
Aprovechando esta propiedad de .NET, se
pueden crear aplicaciones para móviles
fácilmente
¿Y si existiera un CLR especial para dispositivos
móviles?
Podríamos programar normalmente, compilar, crear el
lenguaje intermedio (MSIL) y el CLR se encargaría de
ejecutarlo en el procesador de estos dispositivos
Para eso se ha creado .NET Compact Framework
.NET CF
.NET Compact Framework (I)
La idea es poder programar estos dispositivos sin
necesidad de ser especialista en ellos
Se programarían tal y como programamos
aplicaciones de un PC de sobremesa, el CLR se
encargaría del resto
Problema Un procesador de un dispositivo de
este tipo es mucho menos potente que el de un
PC de sobremesa
Es necesario un CLR reducido, menos potente que el
CLR ordinario
.NET CF
.NET Compact Framework (II)
¿Consecuencia de esto?
Al tener menos potencia las clases que requieran
mayor proceso o que por alguna otra razón no se
puedan implementar en estos dispositivos se eliminan
Queda un subconjunto de las clases de sobremesa
Sin embargo, se ha conseguido que el conjunto
funcional de clases en Compact Framework aún siga
siendo muy amplio
El objetivo es que el programador acostumbrado al
CLR normal no se vea ‘con las manos cortadas’
Además, las características básicas propias de .NET
siguen intactas
.NET CF
¿Cómo programar en .NET CF?
Para empezar a usar CF usaremos el lenguaje de
programación C#
Como herramienta de desarrollo usaremos Visual
Studio .NET 2003
Visual Studio tiene varias plantillas de proyectos,
dependiendo del tipo. Usaremos la específica de
dispositivos móviles.
Visual Studio Ofrece funciones útiles como emulador
de PocketPC, el despliegue automático de la aplicación
a un dispositivo real, etc
.NET CF
¿Cómo programar en CF?
Con Visual Studio se puede ejecutar la
aplicación en un dispositivo móvil real,
mientras se hace debug en el mismo PC
Hay otras herramientas alternativas de
desarrollo
Desarrollo en C# : SharpDevelop (Open Source)
http://www.icsharpcode.net/opensource/sd/
Etc...
.NET CF
El lenguaje C# (I)
C# es muy parecido a Java
Pequeñas diferencias de sintaxis, algunos
elementos nuevos y diferentes librerías
Por ser parte de .Net
Lenguaje autocontenido no necesita ficheros extra
demás del fuente (ficheros de cabecera, etc..) guarda
toda la información necesaria él mismo
Recolector de basura no necesita que el
programador se encargue de gestionar la memoria
.NET CF
El lenguaje C# (II)
¡En C# CUALQUIER cosa hereda de object!
Hasta los tipos básicos como int se pueden tratar como
objetos, a diferencia de Java
Se pueden redefinir operadores, como en C++ y a
diferencia de Java
No es necesario usar punteros, pero para el que
quiera hacerlo (o necesite migrar una aplicación
hecha por ejemplo en C++) existe la opción Código Inseguro (unsafe)
Las clases de la librería base se encuentran
divididas en grupos. En Java se llaman paquetes,
en C# se llaman NameSpaces (espacios de
nombres)
.NET CF
Namespaces
Crear un Namespace:
namespace Jugueteria
{
class Juguete
{
...
}
}
Usar un Namespace (en Java se hace con ‘import’)
using Jugueteria;
.NET CF
Principales Namespaces
System Los tipos más frecuentemente usados
(tipos básicos y tablas, fechas...)
System.Collections Colecciones de datos más
comunes (pilas, colas, listas ...)
System.Data Manipulación de Bases de Datos
System.IO Manipulación de ficheros
System.Net Comunicaciones en red
System.Threading Manipulación de Threads
System.Windows.Forms Formularios
System.Web.UI.WebControls Controles Web
.NET CF
Más sintaxis (I)
En C# la clase string (con minúscula) se puede
comparar con el operador == y hasta los tipos
básicos como int tienen método ToString()
El acceso a consola es con
System.Console.WriteLine(“Hola Mundo!”);
System.Console.ReadLine();
Herencia
public class Trabajador: Persona
Constantes
public const int NO_VALIDO = -1;
.NET CF
Más sintaxis (II)
Instrucción nueva foreach recorre automáticamente una
colección de datos (array, lista, etc...). Como un for que
pasa por todos los elementos de la colección.
Suponiendo que la variable trabajadores es una lista de
instancias de la clase Trabajador:
foreach (Trabajador t in trabajadores)
{
Console.WriteLine( t.ToString() );
}
La instrucción recorre la colección trabajadores, extrae
cada uno de los elementos de ella, que son de tipo
Trabajador, los coloca en la variable t y aplica las
instrucciones del bucle
.NET CF
Un ‘Hola Mundo’ para PocketPC
Visual Studio 2003 Nuevo Proyecto C# y Smart Device Application
Primer control de formulario TextBox
Evento Form_Load
private void FormHola_Load(object sender,
System.EventArgs e)
{
this.textHola.Text = "¡¡Hola Mundo!!";
}
.NET CF
Controles clásicos de formulario
(I)
Form, Label, TextBox
Atributo Text
CheckBox, RadioButton
Atributos Text y Checked
ListBox, ComboBox
Atributos Items (indizado) y SelectedIndex
Atributos SelectedItem y SelectedValue
Command
Evento OnClick
.NET CF
Controles clásicos de formulario
(II)
Panel
Atributo Controls
Timer
Atributo Interval, evento Tick
MainMenu
Menú principal del formulario
InputPanel
Teclado en pantalla
En dispositivos móviles suele ser la única posibilidad
de entrada de texto
Para que aparezca es necesario un MainMenu
.NET CF
Listas en C#
Para almacenar listas de elementos la clase más
usada es ArrayList
Similar al Vector en Java
Namespace System.Collections
Crear
ArrayList a = new ArrayList();
Añadir
a.Add( object );
Acceder a un elemento (usar casting)
string elemento = (string)a[0];
Eliminar
a.RemoveAt( int índice );
.NET CF
a.Remove( object );
Propiedades (I)
La forma propia del lenguaje para acceder a los
atributos. En Java son los métodos get/set
Añadir una propiedad a un atributo
class juguete
{
private string nombre;
public string Nombre
{
get {return nombre;}
set {nombre = value;}
}
}
La palabra ‘value’ representa el valor que se le
quiere dar a la propiedad
.NET CF
Propiedades (II)
A diferencia de Java, a la hora de acceder a las
propiedades, en C# no es necesario escribir los
métodos get/set
Juguete j = new Juguete();
j.Nombre = “Tambor”;
//set, value = “Tambor”
string nombreJuguete = j.Nombre
//get
De esta manera se consigue controlar el acceso a
los atributos y sus valores (controlar valores no
válidos, propiedades de sólo lectura sin set..)
.NET CF
Controles ligados a datos:
DataBound (I)
En lugar de recorrer una colección de datos y
manualmente rellenar items de un control de
formulario, podemos hacer esto de forma
automática
Los controles tienen un campo DataSource que
les sirve para ligarse a los datos
Este campo puede ser cualquier tipo de
colección: arrays, ArrayLists...
O incluso una colección de datos que proviene
directamente de una base de Datos
Nos ahorramos leer los registros de una consulta SQL
uno por uno y rellenar
.NET CF
Controles ligados a datos:
DataBound (II)
DataBound simple
string[] nombres = new string[] {“Tambor”, “Bratz”,
“Action Man”};
ListBox lista = new ListBox();
...
lista.DataSource = nombres;
Lista resultado en el formulario
.NET CF
DataBound (III)
La colección no tiene por qué ser de tipos
básicos, puede ser de clases complejas
Si el control es en forma de tabla, cada propiedad
de la clase será una columna.
Si el control sólo puede manejar una propiedad
(ListBox) hemos de indicarle qué propiedad
utilizar
Atributo DisplayMember string, le damos el nombre
de la propiedad a visualizar
Atributo ValueMember igual que DisplayMember,
pero se aplica al atributo ‘value’, si existe, asociado a
cada item
.NET CF
Acceso a Bases de Datos
Con Compact Framework se puede acceder a
una Base de Datos remota o bien tener una
pequeña BD en el dispositivo
Se sigue el modelo ADO.NET, evolución de ADO
Crear una BD usando el driver ‘SQL Server CE’
implica las siguientes clases
SqlCeEngine Crear la BD
SqlCeConnection Conexión a la BD
SqlCeCommand Comandos SQL de creación de
tablas, etc..
Namespace System.Data.SqlServerCe
.NET CF
SqlCeEngine
Crea la Base de Datos dentro del dispositivo, en
forma de un archivo con extensión *.sdf en la ruta
que se le especifique
Crear un engine: Especificar el archivo de la BD
SqlCeEngine engine = new SqlCeEngine(
“Data Source = \\ruta\\Jugueteria.sdf”);
Crear la BD: crea el archivo y monta la BD
engine.CreateDatabase();
Si el archivo existe ya, puede haber problemas
NameSpace System.IO
File.Exists (“NombreArchivo”);
File.Delete (“NombreArchivo”);
.NET CF
SqlCeConnection
Se conecta a una BD existente y mantiene una
sesión con ella, para enviar comandos, consultas,
etc
Crear una conexión
SqlCeConnection con = new
SqlCeConnection( “Data Source =
Jugueteria.sdf” );
Abrir la conexión
con.Open();
Cerrar la conexión
con.Close();
.NET CF
SqlCeCommand
Manda comandos y consultas a una BD con
una conexión abierta
Crear un SqlCeCommand: a partir de una
conexión abierta
SqlCeCommand comm = con.CreateCommand();
Mandar un comando
Propiedad CommandText Sentencia SQL
Método ExecuteNonQuery() ejecución del
comando contra la Base de Datos
.NET CF
Excepciones
Las excepciones se tratan igual que en Java (try /
catch / finally)
La diferencia es que en el catch sólo es
obligatorio poner el tipo de excepción, no es
necesario declarar la variable, y no es necesario
capturar toda excepción con try / catch. Se
propagan automáticamente
catch ( SqlCeException ){}
catch ( SqlCeException SqlEx ){}
Los mensajes de error lo normal es que se
muestren en ventanas de mensajes:
MessageBox.Show (“Texto”, “Título”);
.NET CF
Consultas a una BD
Siguiendo el modelo ADO.NET, para
realizar una consulta se ven implicadas las
siguientes clases
SqlCeConnection
SqlCeCommand Método ExecuteReader()
SqlCeDataReader
.NET CF
SqlCeDataReader
El método ExecuteReader() devolverá un objeto
de esta clase como resultado, el método de
lectura es similar a Java
Read() Avanza al siguiente registro. Devuelve
false si no hay más registros, true en caso
contrario. Es necesario invocar Read() antes de la
primera lectura
GetString( int columna ) Lee el valor (string) de
la columna que se le indique. Hay variantes
GetInt32( int )
GetSqlMoney( int )
...
.NET CF
DataSet
Otro tipo de lectura de BD
Estructura de datos compleja que recoge toda la
consulta hecha contra la BD
Puede colocarse como ‘DataSource’ para ligar el
control a los datos de la BD (DataBound)
Para rellenar un DataSet usaremos una clase
llamada SqlCeDataAdapter
SqlCeDataAdapter dataAdapter = new
SqlCeDataAdapter(“Consulta SQL", conexión_BD);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
El DataSource más común es dataSet.Tables[0]
.NET CF
Web Services (I)
Un Web Service es un servicio residente en local
o en otra máquina y que puede ser invocado en
forma de método de forma remota Una forma
más de invocación remota
Para hacer la invocación, pasar los parámetros y
recoger el resultado se utiliza una comunicación
basada en XML (standard)
La invocación se hace por Web (puerto 80) No
es cortada por FireWalls
Montones de Web Services Gratuitos
http://www.xmethods.net
http://www.capescience.com/webservices
http://www.webservicex.net/WS/wscatlist.aspx
.NET CF
Web Services (II)
.NET CF puede invocar Web Services
Desde Visual Studio 2003 se pueden localizar
Web Services muy fácilmente
ProyectoSolution ExplorerReferencesAñadir
Referencia Web
Introducir la url donde se encuentra el servicio y añadir
referencia
Incluir el NameSpace nuevo que se ha creado (using)
El NameSpace del proyecto es Ejercicio y el Web Service está
en www.deusto.es using Ejercicio.es.deusto.www;
Aparecen clases en ese NameSpace para invocar
el servicio
Se usan normalmente, pero son objetos remotos
.NET CF
Referencias en la Web
.NET CF Development Center http://msdn.microsoft.com/smartclient/under
standing/netcf/
OpenNetCf - http://www.opennetcf.org
MSMobiles - http://msmobiles.com/
.NET CF