Seccion 4

Transcripción

Seccion 4
MII 733 Computación Móvil
José Miguel Rubio L.
Oficina 3-20
http://www.inf.ucv.cl/~jrubio
[email protected]
Sección 4
.NET Compact
Framework
José Miguel Rubio L.
Oficina 3-20
http://www.inf.ucv.cl/~jrubio
[email protected]
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)
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
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
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
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
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”
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, ...)
Arquitectura (I)
ASP.NET
Servicios Web
Windows Forms
.NET Framework Base Classes
Common Language Runtime
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.
Arquitectura (III)
Common Language Runtime (CLR)
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
Ventaja
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
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
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 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 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
¿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
¿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...
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
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
Lenguaje
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)
El lenguaje C# (III)
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)
Namespaces
Crear un Namespace:
namespace Jugueteria
{
class Juguete
{
...
}
}
Usar un Namespace (en Java se hace con ‘import’)
using Jugueteria;
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
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;
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
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!!";
}
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
Controles clásicos de formulario
(II)
Panel
Atributo
Timer
Atributo
Interval, evento Tick
MainMenu
Menú
Controls
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
Listas en C#
Para almacenar listas de elementos la
clase más usada es ArrayList
Similar al Vector en Java
Namespace System.Collections
Crear
Añadir
a.Add( object );
Acceder a un elemento (usar casting)
ArrayList a = new ArrayList();
string elemento = (string)a[0];
Eliminar
a.RemoveAt( int índice );
object );
a.Remove(
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
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..)
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...
Controles ligados a datos:
DataBound (II)
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
Controles ligados a datos:
DataBound (III)
DataBound simple
string[] nombres = new string[] {“Tambor”,
“Bratz”, “Action Man”};
ListBox lista = new ListBox();
...
lista.DataSource = nombres;
Lista resultado en el formulario
DataBound (IV)
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
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
Atributo
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
Crear la BD
SqlCeConnection Conexión a la BD
SqlCeCommand Comandos SQL de creación de
tablas, etc..
SqlCeEngine
Namespace System.Data.SqlServerCe
SqlCeEngine (I)
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();
SqlCeEngine (II)
Si el archivo existe ya, puede haber
problemas
System.IO
File.Exists (“NombreArchivo”);
File.Delete (“NombreArchivo”);
NameSpace
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();
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
CommandText Sentencia SQL
Método ExecuteNonQuery() ejecución del
comando contra la Base de Datos
Propiedad
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
“Título”);
(“Texto”,
Consultas a una BD
Siguiendo el modelo ADO.NET, para
realizar una consulta se ven implicadas las
siguientes clases
SqlCeConnection
Método ExecuteReader()
SqlCeDataReader
SqlCeCommand
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 )
...
DataSet (I)
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)
DataSet (II)
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]
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)
Web Services (II)
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 puede invocar Web Services
Web Services (III)
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)
Web Services (IV)
Aparecen clases en ese NameSpace para
invocar el servicio
Se usan normalmente, pero son objetos
remotos
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/

Documentos relacionados

NET CF

NET CF Como herramienta de desarrollo usaremos Visual Studio .NET 2003 Visual Studio tiene varias plantillas de proyectos,

Más detalles