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
Como herramienta de desarrollo usaremos Visual Studio .NET 2003 Visual Studio tiene varias plantillas de proyectos,
Más detalles