domingo, 10 de abril de 2016

Facilidades que ofrece la plataforma .NET para el desarrollo de la GUI

La plataforma .NET es la propuesta de Microsoft para competir con la plataforma Java. Mientras que Java se caracteriza por la máxima "write once, run anywhere", la plataforma .NET de Microsoft está diseñada para que se puedan desarrollar componentes software utilizando casi cualquier lenguaje de programación, de forma que lo que escribamos en un lenguaje pueda utilizarse desde cualquier otro de la manera más transparente posible (utilizando servicios web como middleware). Esto es, en vez de estar limitados a un único lenguaje de programación, permitimos cualquier lenguaje de programación, siempre y cuando se adhiera a unas normas comunes establecidas para la plataforma .NET en su conjunto. De hecho, existen compiladores de múltiples lenguajes para la plataforma .NET: Visual Basic .NET, C#, Managed C++, Oberon, Component Pascal, Eiffel, Smalltalk, Cobol, Fortran, Scheme, Mercury, Mondrian/Haskell, Perl, Python, SML.NET...
La plataforma .NET apuesta por un futuro en el que las aplicaciones se ejecutan de manera distribuida en Internet. Así, una aplicación se ejecuta en un solo servidor y no existen múltiples copias de la misma. Además, una misma aplicación puede "adornarse" con distintas interfaces para que, desde diferentes dispositivos (teléfonos móviles, PDAs, portátiles, etc.) pueda accederse a la misma. La plataforma .NET no es más que un conjunto de tecnologías para desarrollar y utilizar componentes que nos permitan crear formularios web, servicios web y aplicaciones Windows.

CLR [Common Language Runtime]

El Common Language Runtime (CLR) es el núcleo de la plataforma .NET ya que es el encargado de gestionar la ejecución de código compilado para la plataforma .NET. Puede asimilarse a la máquina virtual de Java.
Las dos principales características del CLR son:
  • Ejecución multiplataforma: El CLR actúa como una máquina virtual, encargándose de ejecutar las aplicaciones diseñadas para la plataforma .NET. Su especificación está abierta, por lo que cualquier plataforma para la que exista una versión del CLR podrá ejecutar cualquier aplicación .NET. Microsoft ha desarrollado versiones del CLR para la mayoría de las versiones de Windows. Por otro lado Microsoft ha firmado un acuerdo con Corel para portar el CLR a Linux y también hay terceros que están desarrollando de manera independiente versiones de libre distribución del CLR para Linux. Asimismo, dado que la arquitectura del CLR está totalmente abierta, es posible que en el futuro se diseñen versiones del mismo para otros sistemas operativos.
  • Integración de lenguajes: Desde cualquier lenguaje para el que exista un compilador que genere código para la plataforma .NET es posible utilizar código generado para la misma usando cualquier otro lenguaje tal y como si de código escrito usando el primero se tratase.
Otras características destacables son:
  • Modelo de programación consistente: A todos los servicios y facilidades ofrecidos por el CLR se accede de la misma forma: a través de un modelo de programación orientado a objetos.
  • Eliminación del "infierno de las DLLs": En la plataforma .NET desaparece el problema conocido como "infierno de las DLLs" que se da en los sistemas operativos actuales de la familia Windows ya que en la plataforma .NET las versiones nuevas de las DLLs pueden coexistir con las viejas.
  • Gestión de memoria: El CLR incluye un recolector de basura que evita que el programador tenga que tener en cuenta cuándo ha de destruir los objetos que dejen de serle útiles.
    Este recolector es una aplicación que se activa cuando se quiere crear algún objeto nuevo y se detecta que no queda memoria libre para hacerlo. Entonces el recolector recorre la memoria dinámica asociada a la aplicación, detecta qué objetos hay en ella que no puedan ser accedidos por el código de la aplicación, y los elimina para limpiar la memoria de "objetos basura" y permitir la creación de otros nuevos. Gracias a este recolector se evitan errores de programación muy comunes como intentos de borrado de objetos ya borrados, agotamiento de memoria por olvido de eliminación de objetos inútiles o solicitud de acceso a miembros de objetos ya destruidos.
  • Seguridad de tipos: El CLR facilita la detección de errores de programación difíciles de localizar comprobando que toda conversión de tipos que se realice durante la ejecución de una aplicación .NET se haga de modo que los tipos origen y destino sean compatibles.
  • Aislamiento de procesos: El CLR asegura que desde código perteneciente a un determinado proceso no se pueda acceder a código o datos pertenecientes a otro, ni se permite acceder a posiciones arbitrarias de memoria.
  • Tratamiento de excepciones: En el CLR todo los errores que se puedan producir durante la ejecución de una aplicación se propagan de igual manera: mediante excepciones.
  • Soporte multihilo: El CLR es capaz de trabajar con aplicaciones divididas en múltiples hilos de ejecución que pueden ir evolucionando por separado en paralelo o intercalándose, según el número de procesadores de la máquina sobre la que se ejecuten. Las aplicaciones pueden lanzar nuevos hilos, destruirlos, suspenderlos por un tiempo o hasta que les llegue una notificación, enviarles notificaciones, sincronizarlos, etc.
  • Distribución transparente: El CLR ofrece la infraestructura necesaria para crear objetos remotos y acceder a ellos de manera completamente transparente a su localización real, tal y como si se encontrasen en la máquina que los utiliza.
  • Seguridad avanzada: El CLR proporciona mecanismos para restringir la ejecución de ciertos códigos o los permisos asignados a los mismos según su procedendecia o el usuario que los ejecute.
Como se puede deducir de las características comentadas, el CLR lo que hace es gestionar la ejecución de las aplicaciones diseñadas para la plataforma .NET. Por esta razón, al código de estas aplicaciones se le suele llamar código gestionado, y al código no escrito para ser ejecutado directamente en la plataforma .NET se le suele llamar código no gestionado.

Requerimientos que debe cumplir una interfaz gráfica de usuario

El objetivo de el análisis de requerimientos es determinar las condiciones o capacidades que debe cumplir el sistema que se quiere diseñar para satisfacer las necesidades de un grupo de usuarios. Para lograr esto utilizaremos la definición de requerimientos. Un requerimiento se puede entender como una descripción informal de las necesidades y deseos que tiene el usuario final respecto a un producto de software.
En los sistemas informáticos, la relación humano-computadora se realiza por medio de la interfaz, que se podría definir como mediador. Cuando existen dos sistemas cualesquiera que se deben comunicar entre ellos la interfaz será el mecanismo, el entorno o la herramienta que hará posible dicha comunicación.
Podríamos definir básicamente dos tipos de interfaces:
  • La interfaz física: un ratón y un teclado que sirven para introducir y manipular datos en nuestro ordenador.
  • La interfaz virtual o interfaz gráfica (GUI) que permite, mediante iconos (cursor + objetos gráficos metafóricos), interactuar con los elementos gráficos convirtiendo al ser humano en usuario de la aplicación.
Estas dos mediaciones son relaciones del tipo entrada de datos (input). Al igual que tenemos una entrada, necesitamos algo que facilite la salida de datos (output), para esto tenemos, por ejemplo, la pantalla de la computadora, donde se visualizan estas interfaces gráficas, o la impresora, donde se imprimen los datos.
En definitiva GUI es una interfaz de usuario en la que una persona interactúa con la información digital a través de un entorno gráfico de simulación. Este sistema de interactuación con los datos se denomina WYSIWYG (What you see is what you get, ‘lo que ves es lo que obtienes’), y en él, los objetos, iconos (representación visual) de la interfaz gráfica, se comportan como metáforas de la acción y las tareas que el usuario debe realizar (tirar documento = papelera). Estas relaciones también se denominan interfaces objetos-acción (object-action-interface, OAI).
Para diseñar una interfaz es necesario pasar por cuatro etapas:
  1. Análisis de requerimientos del producto, análisis de las tareas. Conocimiento del usuario. Generación de posibles metáforas y análisis del tipo de diálogo. Revisión.
  2. Generación de prototipos virtuales (layouts) o físicos para investigar desde lo general hasta el detalle. Desarrollo de la aplicación, del sitio o del sistema.
  3. Planificación (desarrollo del plan, definición de las medidas, selección de participantes, formación de observadores, preparación de los materiales). Test (prueba piloto, test con usuarios).
  4. Conclusión (análisis de los datos, elaboración del informe, resultados y recomendaciones). Comparación con estándares (internos y/o externos), versiones anteriores del mismo producto y productos competidores. Verificación de las diferencias. Generación de nuevas metas.
Con todas estas fases cubiertas conseguiremos ajustar las necesidades y acercarnos más a la meta deseada de transparencia y flexibilidad de uso de una interfaz gráfica de usuario.

Las características básicas de una buena interfaz  podrían sintetizarse en:
  •  Facilidad de comprensión, aprendizaje y uso
  •  Representación fija y permanente de un determinado contexto de acción (fondo)
  •  El objeto de interés ha de ser de fácil identificación
  •  Diseño ergonómico mediante el establecimiento de menús, barras de acciones e iconos de fácil acceso
  •  Las interacciones se basarán en acciones físicas sobre elementos de código visual o auditivo (iconos, botones, imágenes, mensajes de texto o sonoros, barras de desplazamiento y navegación...) y en selecciones de tipo menú con sintaxis y órdenes
  •  Las operaciones serán rápidas, incrementales y reversibles, con efectos inmediatos
  •  Existencia de herramientas de Ayuda y Consulta
  •  Tratamiento del error bien cuidado y adecuado al nivel de usuario.
El diseñador de interfaces debe facilitar y simplificar el acceso y los recorridos de los usuarios. A menudo se usa la metáfora del viaje o del camino a recorrer y se presentan iconos o símbolos de interfaz y otros dispositivos que tienen que ver con las señales utilizadas en mapas, urbanismo o arquitectura.

Los contextos navegacionales organizan el espacio de navegación, ayudando al usuario a recorrer los contenidos y ofreciéndole herramientas que guíen  o faciliten los recorridos o las búsquedas y la recuperación de información y que le ofrezcan la posibilidad de realizar una serie de acciones estableciendo mecanismos de vuelta atrás , el etiquetado y la vista previa de enlaces y otros procesos automatizados a modo de servicios interactivos. La interfaz de navegación no debe limitarse a la parte visible de la información en un momento dado, sino que debe ser capaz de ofrecer al usuario el acceso a la parte del documento que le interesa y en la forma que desea. Aun tratándose de un entorno navegacional complejo, éste se debe Presentar al usuario de una forma sumamente sencilla y que sea lo más normalizada posible.