2. Prof. Villelli Miguel Ángel
Introducción a la Programación Visual
Plataforma .NET
La plataforma .NET pone a nuestra disposición un conjunto de tecnologías y
herramientas que simplifican el desarrollo de aplicaciones y propone una
solución para casi cualquier tipo de aplicaciones:
• aplicaciones Windows clásicas.
• aplicaciones Web.
• servicios Windows.
• servicios Web.
Todas estas aplicaciones se pueden realizar gracias a un elemento
esencial: el Framework .NET. Este Framework se encarga, por medio de
numerosas capas de software superpuestas, de la integridad de la vida de
una aplicación, desde el desarrollo hasta la ejecución. El sistema operativo,
con el que va a interactuar, debe albergar el framework. El primer sistema
que permite incorporarlo es, por supuesto, Windows, pero hay otras
versiones disponibles que permiten la adaptación de la plataforma .NET a
sistemas tales como Linux o Unix.
El framework contiene dos elementos principales: el Common Language
Runtime y la librería de clases del .NET Framework.
La librería de clases es un conjunto de clases que se puede utilizar para el
desarrollo de cualquier aplicación. Haremos uso de ellas a lo largo de la
cursada.
Principio de funcionamiento del Common Language Runtime
En las aplicaciones de Windows tradicionales, el sistema se encarga
directamente de la ejecución del código. En efecto, éste se genera a través
del compilador asociado al lenguaje de programación utilizado para el
diseño de la aplicación. El resultado de esta compilación es un archivo
2
3. Prof. Villelli Miguel Ángel
binario que contiene el código especificado para el microprocesador y el
sistema operativo con los cuales debe funcionar la aplicación. No hay
compatibilidad alguna con ningún otro tipo de microprocesador o sistema
operativo.
Para convencerse de ello, basta con intentar la ejecución de una aplicación
prevista para Windows en un sistema Linux para comprobar esta
incompatibilidad. Si se intenta la ejecución en una estación de trabajo SUN,
que utiliza un tipo de microprocesador radicalmente diferente, el resultado
es idéntico. La solución para paliar estos problemas consiste en generar
para la aplicación no un código específico sino genérico, independiente de
cualquier plataforma de software o hardware. Se confía este código, en el
momento de la ejecución, a una máquina virtual que garantiza su ejecución.
Este código se llama Microsoft Intermediate Language (MSIL).
Durante la ejecución de la aplicación, la máquina virtual se hace cargo de
este código y lo traduce en instrucciones específicas para el
microprocesador de la máquina. Dicha traducción no se realiza en bloque
desde el principio de la aplicación, sino sólo en función de las necesidades.
En efecto, ¿para qué perder tiempo traduciendo el código MSIL si no se va a
utilizar nunca? Es por esta razón por lo que el compilador utilizado para esta
traducción se llama compilador Just In Time (JIT).
Las ventajas de esta solución son obvias, ya que para ejecutar una misma
aplicación en varias plataformas de hardware o software, basta con obtener
la máquina virtual capaz de efectuar la traducción. Esta máquina virtual
está disponible para todos los sistemas de Microsoft. El proyecto Mono
propone una versión de la máquina virtual para las plataformas siguientes:
• Linux
• Mac OS X
• Sun Solaris
• BSD - OpenBSD, FreeBSD, NetBSD
Están disponibles para descargar en el sitio http://www.mono-project.com.
Podemos decir entonces que el Common Language Runtime (CLR) es la
base del .NET Framework. Se puede considerar el runtime como un motor
de ejecución que administra la ejecución de código y la gestión de la
memoria. El código del que se encarga el CLR se llama código gestionado.
Los desarrolladores que usan CLR escriben el código fuente en un lenguaje
compatible con .NET, como C# o Visual Basic .NET.
En tiempo de compilación, un compilador .NET convierte el código a CIL. En
tiempo de ejecución, el compilador del CLR convierte el código CIL en
código nativo para el sistema operativo. Alternativamente, el código CIL es
compilado a código nativo en un proceso separado anterior a la ejecución.
3
4. Prof. Villelli Miguel Ángel
Esto acelera las posteriores ejecuciones del software debido a que la
compilación de MSIL a nativo ya no es necesaria.
El esquema siguiente muestra el conjunto de estas operaciones:
Los servicios del Common Language Runtime
La máquina virtual no se limita a efectuar la traducción del código. El código
MSIL también se llama código gestionado, lo que supone que se llevará a
cabo un cierto número de operaciones adicionales sobre el código en tiempo
de ejecución. La figura siguiente muestra el conjunto de las funcionalidades
disponibles en el CLR.
Class Loader: Gestiona la carga en memoria de las instancias de clases.
IL to Native Compilers: Convierte el código intermedio (MSIL) en código
nativo.
Code Manager: Gestiona la ejecución del código.
Garbage Collector: Asegura la gestión de la memoria vigilando las
instancias de clases que ya no son accesibles.
4
5. Prof. Villelli Miguel Ángel
Security Engine: Permite la verificación de la identidad de la persona
requeriendo la ejecución del código y acepta o no esta ejecución, en función
de los permisos otorgados.
Debug Engine: Permite la depuración de la aplicación al encargarse por
ejemplo de la ejecución paso a paso del código.
Type Checker: Vigila el uso de variables no incializadas y las conversiones
entre variables de tipo diferente.
Exception Manager: Facilita la gestión estructurada de las excepciones en
relación con Windows Structured Exception Handling (SEH). Esta técnica
permite una gestión individual de cada excepción más que una gestión
global.
Thread Support: Propone un conjunto de clases que permite la realización
de aplicaciones multihilo.
COM Marshaler: Permite traducir llamadas hacia componentes COM,
asegurando, por ejemplo, la conversión de los tipos de datos.
Base Class Library Support: Facilita el acceso a los servicios disponibles
en el sistema operativo anfitrión.
La Base Class Library
El Framework .NET pone a disposición de los desarrolladores un conjunto de
herramientas que les permite obtener una solución rápida a la mayoría de
los problemas encontrados durante el desarrollo de una aplicación.
Estas herramientas están disponibles en forma de clases. Al contrario que
las librerías de código de los lenguajes de la generación anterior, que sólo
eran una lista sin fin de procedimientos o funciones, la librería de clases se
organiza bajo la forma de una estructura jerarquizada. El elemento esencial
de esta jerarquización es el espacio de nombres (Namespace). Permite la
agrupación lógica de clases que tienen puntos en común. Por ejemplo,
encontramos en el namespace System.Data todas las clases necesarias para
acceder a una base de datos.
Naturalmente esta librería de clases es independiente de cualquier lenguaje
de programación. Permite, pues, la mezcla de diferentes lenguajes a lo
largo del desarollo de una aplicación. También está perfectamente integrada
a Visual Studio, lo que nos procura comodidad en el uso gracias a
herramientas tales como Intelissence. Como esta librería está orientada a
objetos, es fácilmente extensible a través de relaciones de herencia.
La librería contiene una cantidad impresionante de espacios de nombres y
clases; tanto es así que, durante el desarrollo de sus aplicaciones con Visual
C#, es probable que usted nunca utilice algunos de ellos.
Los espacios de nombres usados más frecuentemente son los siguientes:
5
6. Prof. Villelli Miguel Ángel
System: Es el espacio de nombres raíz para los tipos de datos en el
Framework .NET. Contiene, en particular, la definición de la clase Object,
que es el ancestro de todos los tipos de datos del Framework .NET.
System.Windows: Contiene el conjunto de los elementos que permiten la
creación de interfaces de usuarios de Windows.
System.Web : Contiene todos los recursos necesarios para la creación de
aplicaciones Web, con, por ejemplo, las clases de la tecnología ASP.NET o
las clases necesarias para la creación de servicios Web XML.
System.data: Contiene un conjunto de clases especializadas en el acceso a
las bases de datos con el soporte de ADO.NET.
System.Xml: El lenguaje Xml se ha hecho omnipresente y este espacio de
nombres contiene las clases que aseguran la manipulación de documentos
Xml.
Las versiones y evoluciones de la plataforma .NET
La primera versión (1.0) de la plataforma .NET sale en enero del 2002 con
Visual Studio 2002. Esta versión es sustituida rápidamente por la versión
1.1, que corrige algunos problemas de juventud de la versión anterior y
añade tecnologías que sólo estaban disponibles anteriormente como
instalaciones independientes y son ahora incluidas. Las aportaciones de esta
versión son principalmente:
Los controles ASP.NET para móviles (antiguamente Microsoft Mobile
Internet Toolkit), que extienden el Framework .NET sobre los periféricos
móviles (sin cable) tales como teléfonos móviles y asistentes digitales
personales.
El proveedor de datos .NET Framework para ODBC y el proveedor de datos
para Oracle, que previamente sólo estaban disponibles a través de
descarga, vienen, a partir de ahora, integrados en el .NET Framework.
La compatibilidad con el nuevo protocolo de Internet, comúnmente llamado
IP versión 6 o más sencillamente IPv6. Este protocolo está diseñado para
aumentar de manera sensible el espacio de direccionamiento utilizado para
identificar los puntos de entrada de comunicación con Internet.
El desarollo de aplicaciones Web es también cada vez más fácil con la nueva
versión de ASP.NET, que propone una multitud de nuevos controles.
La clase Console es mejorada con la inserción de nuevas propiedades y
métodos (gestión de los colores, borrado, posición del cursor...).
El .NET Framework 2.0 vuelve a introducir la funcionalidad Modificar y
Continuar, que permite al usuario que depura una aplicación en Visual
Studio modificar el código fuente en modo parado. Una vez aplicadas las
6
7. Prof. Villelli Miguel Ángel
modificaciones del código fuente, el usuario puede retomar la ejecución del
código y observar el efecto.
La aparición de la noción de genérico, que permite declarar y definir la las
clases, estructuras, interfaces, métodos y delegados con parámetros de tipo
no especificado o genérico en lugar de tipos específicos. Los tipos reales se
especifican posteriormente durante la utilización.
La versión 3.0 llega en noviembre del 2006 y aporta nuevas tecnologías, a
la vez que sigue siendo principalmente una versión 2.0. Estas tecnologías
están disponibles en descargas que vienen a integrarse al framework 2.0. A
continuación echamos un vistazo a estas novedades:
Windows Presentation Foundation (WPF) representa el nuevo sistema de
interfaces gráficas. Se basa en un motor de aspecto vectorial y permite una
separación más clara entre la definición de la interfaz gráfica de una
aplicación y su código. Para esto utiliza el lenguaje XAML (eXtensible
Application Markup Language). Las tareas se pueden repartir más
facilmente entre diseñadores y desarrolladores.
Windows Communication Foundation (WCF) constituye la nueva base de
desarrollo de aplicaciones distribuidas. Facilita la comunicación entre
aplicaciones añadiendo una capa de abstracción que uniforma las técnicas
de comunicación entre aplicaciones (Servicios Web, .NET Remoting,
Microsoft Transaction Server y Microsoft Message Queuing…).
Windows Workflow Foundation (WF) está compuesto por un modelo de
programación de un motor de ejecución y herramientas para integrar flujos
de trabajo en una aplicación. Se puede definir un flujo de trabajo como un
conjunto de acciones o etapas que se ejecutan en un orden predefinido.
Estas acciones se pueden encadenar en función de condiciones,
interacciones con procesos informáticos o en función de interacciones
humanas.
Windows Cardspace facilita una nueva técnica a los usuarios para
identificarse en una aplicación. Tiene la misma vocación que Microsoft
Passport, pero no es específica para las aplicaciones de Microsoft (Hotmail,
MSDN…).
La versión 3.5 de noviembre del 2007 aporta principalmente mejoras y
evoluciones a las tecnologías aparecidas con la versión 3.0. La única
verdadera novedad de esta versión corresponde a la aparición del lenguaje
LINQ (Language Integrated Query). El objetivo de este lenguaje consiste en
uniformar el método utilizado para extraer información de una fuente de
datos. Este nuevo lenguaje permite consultar colecciones de objetos, bases
de datos de SQL Server, DataSet ADO.NET y documentos XML con la misma
síntaxis.
La versión 4.0 disponible desde mayo del 2010 mejora aún más las
capacidades y funcionalidades disponibles. Entre sus novedades podemos
señalar:
7
8. Prof. Villelli Miguel Ángel
La mejora del recolector de basura, que se ejecuta ahora en segundo plano.
Durante una operación de recolección, los hilos de la aplicación ya no
quedan en suspenso durante la limpieza de la memoria, lo que aumenta de
forma efectiva la capacidad de reacción de la aplicación.
El añadido de un núcleo de ejecución para poder trabajar lenguajes
dinámicos tales como IronPython y IronRuby. Con este tipo de lenguajes,
los tipos de variables ya no sólo pueden ser fijados en el momento del
diseño de la aplicación, sino también durante su ejecución.
La disponibilidad de nuevos tipos de datos, como BigInteger y Complex,
permiten respectivamente el uso de valores numéricos enteros sin límite
superior o inferior y la manipulación de números complejos.
La mejora de las clases de manipulación del sistema de archivos y la
creación de archivos mapeados en memoria.
Poder trabajar más fácilmente los procesadores multinúcleo que permiten el
reparto de las tareas mediante la programación paralela.
8