¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. C# 8 y Visual Studio 2019
  3. La plataforma .NET
Extrait - C# 8 y Visual Studio 2019 Los fundamentos del lenguaje
Extractos del libro
C# 8 y Visual Studio 2019 Los fundamentos del lenguaje
1 opinión
Volver a la página de compra del libro

La plataforma .NET

Introducción

Mediante la plataforma .NET Microsoft pone a disposición un conjunto de herramientas y tecnologías que permiten desarrollar aplicaciones destinadas a configuraciones de software y hardware muy variadas:

En la tabla que sigue podemos ver la situación actual de las posibilidades de la plataforma, a día de hoy, con respecto a los distintos sistemas operativos:

Tipo de aplicaciones

Windows

Linux

MacOS

Android

iOS

Aplicaciones para consola

images/coche.png
images/coche.png
images/coche.png

 

 

Aplicaciones de ventanas (WinForms & WPF)

images/coche.png

 

 

 

 

Aplicaciones Web

images/coche.png
images/coche.png
images/coche.png

 

 

Aplicaciones móviles

images/coche.png

 

images/coche.png
images/coche.png
images/coche.png

Al principio, los distintos tipos de aplicaciones desarrolladas podían serlo gracias a un elemento común: el Framework .NET. Este framework es una solución de software que incluye varios componentes dedicados al desarrollo y ejecución de las aplicaciones. Lo facilita Microsoft para los sistemas operativos Windows desde la creación de la plataforma. Rápidamente, la comunidad del código abierto ha proporcionado un equivalente para los sistemas operativos Linux y MacOS gracias al proyecto Mono. Microsoft se sumó al esfuerzo del código abierto finalmente con la llegada de .NET Core, destinado a dar un soporte oficial a la plataforma .NET para los sistemas operativos Linux y MacOS.

Cada una de estas implementaciones está formada por 3 elementos principales: el Common...

Historia de la plataforma

Desde sus inicios, Windows expone funcionalidades a los desarrolladores a través de interfaces de programación (en inglés API, de Application Programming Interface) que les permiten crear aplicaciones. Con la complejidad que ha adquirido Windows a lo largo de los años, distintas API han ido apareciendo y evolucionando:

  • API Windows (Win16, Win32 y Win64): estas API forman el núcleo de Windows y las utiliza directamente el sistema. Están destinadas a utilizarse al más bajo nivel, con el lenguaje C. Win16 apareció con Windows 3.1, mientras que Win32 se utiliza desde Windows 95 y Win64 está integrado en los sistemas de 64 bits desde Windows XP.

  • MFC (Microsoft Foundation Classes) existe desde 1992 y encapsula las API Win16 y Win32 en una estructura orientada a objetos en C++.

  • COM (Component Object Model) aparece poco después de las MFC para responder a una problemática de comunicación entre procesos. A continuación, la librería ATL (Active Template Library) encapsuló las API COM para simplificar su uso.

La plataforma .NET apareció a principios de los años 2000 para dar respuesta al problema de la complejidad de estas API. Las unifica y las moderniza, permitiendo su uso con cualquier lenguaje que posea una implementación compatible. Visual C# se creó para la plataforma .NET con el objetivo de disponer de un lenguaje capaz de explotar todas las capacidades que ofrece.

La unificación de las API y de los modelos de desarrollo también ha tocado al mundo de la Web. En efecto, desde mediados de los años 90, Microsoft facilita del lado del servidor, el motor de script ASP (Active Server Page), que se dejó de usar en beneficio de un componente integrado en el framework .NET: ASP.NET. Este ha permitido mejorar el rendimiento de las aplicaciones web introduciendo código compilado y no interpretado. También ha mejorado su mantenibilidad remplazando la programación procedural típica de los lenguajes de script con un modelo de programación de eventos y orientado a objetos.

Desde el principio de .NET, Microsoft ha añadido muchas evoluciones en el framework .NET. Ha habido, de hecho, dieciséis versiones diferentes, de las cuales siete aportan modificaciones o funcionalidades mayores.

Este framework se ha concebido como un bloque único...

Evolución de la plataforma

Como acabamos de ver, el entorno .NET se ha ido enriqueciendo con el paso del tiempo con muchas funcionalidades, algunas de las cuales son o han sido definitivamente innovadoras. Las aplicaciones basadas en la plataforma pueden ejecutarse en ordenadores de sobremesa, tabletas, navegadores web, smartphones o incluso en la electrónica integrada. El número de programadores que utilizan los lenguajes basados en CLR ha aumentado considerablemente, hasta llegar a unos cuantos millones en el mundo.

En este estado de madurez, aparecen nuevos problemas tanto en los equipos de desarrollo de Microsoft como en la comunidad de programadores que utilizan esta tecnología. Entre las preocupaciones relacionadas con la plataforma, encontramos la necesidad de compatibilidad / portabilidad del código, así como la necesidad de modernizar los compiladores C# y VB.NET.

Como reacción a estos problemas, los equipos de desarrollo del framework .NET han implementado una especificación formal de las API de la plataforma: .NET Standard. También se han puesto a trabajar en un nuevo compilador para C# y VB.NET: Roslyn.

1. .NET Standard

La existencia de algunas implementaciones en paralelo de la plataforma .NET, cada una de ellas con una evolución propia, ha provocado la aparición de problemas importantes de compatibilidad. Por ejemplo, no se podía compartir una librería...

El Common Language Runtime (CLR)

La ejecución de las aplicaciones Windows tradicionales la gestiona el propio sistema operativo. Estos programas se generan mediante un compilador que transforma instrucciones escritas en un lenguaje de programación como C o C++ en un archivo binario que contiene instrucciones específicas de un sistema operativo particular y una arquitectura de procesador específica. Por lo tanto, en este caso, se deben generar varios ejecutables para soportar las distintas configuraciones de hardware y de software de los usuarios.

Una solución a esta problemática consiste en generar un archivo ejecutable cuyo código sea genérico, independiente del entorno de ejecución. Sin embargo, su ejecución no puede confiarse directamente al sistema operativo dado que no es capaz de procesar el código genérico. Es necesario insertar un componente de software en la cadena de ejecución, entre la aplicación y el sistema, para traducir el código genérico en instrucciones adaptadas a la máquina. Un componente lógico de este tipo se denomina máquina virtual.

Este es exactamente el principio de funcionamiento que utiliza la plataforma .NET. La etapa de compilación de una aplicación escrita con Visual C# o Visual Basic .NET produce un archivo ejecutable cuyo contenido está, esencialmente, escrito en un lenguaje...

La Base Class Library (BCL)

Cada implementación de la plataforma .NET incluye un conjunto de tipos de datos que permiten ofrecer rápidamente una solución a muchos de los problemas que podemos encontrar a lo largo del desarrollo de una aplicación.

Estos tipos de datos están organizados de manera jerárquica. Cada nivel de la jerarquía está definido por un espacio de nombres (namespace) que identifica a un grupo de tipos. Los espacios de nombres se nombran concatenando el nombre del padre, el símbolo "." y su propio nombre y todo ello hace referencia a un conjunto de funcionalidades que se proveen de manera conjunta. Por ejemplo, el espacio de nombres System.Xml agrupa un conjunto de clases que permiten procesar flujos de datos en formato XML.

La BCL contiene varios miles de tipos y es muy probable que nunca utilice gran parte de ellos en sus desarrollos. Algunos son, en efecto, muy específicos y se utilizan en muy pocos contextos. Así ocurre con todos los tipos definidos en los espacios de nombres Microsoft.Build o System.CodeDom, que permiten respectivamente interactuar con el motor MSBuild y generar código C# o Visual Basic .NET.

Entre los espacios de nombres más utilizados podemos destacar:

System

Se trata del espacio de nombres raíz para las funcionalidades suministradas por el sistema operativo. Contiene, en particular, la definición de los tipos...

El Dynamic Language Runtime (DLR)

El Dynamic Language Runtime es una subcapa del Common Language Runtime, aparecida con la versión 4.0 del Framework .NET, que suministra servicios que facilitan la implementación y el uso de lenguajes dinámicos en un entorno .NET.

Desde la aparición del DLR es posible definir variables .NET de tipo dinámico, es decir, que no esté prefijado en el momento de la escritura del código. El uso de esta funcionalidad puede resultar extremadamente práctico cuando se trata de interactuar con aplicaciones escritas con lenguajes dinámicos o cuando se quieren utilizar ciertos componentes COM. Los tipos de datos devueltos por estos elementos de software no se conocen en el momento de la escritura del código, de modo que es difícil utilizarlos en lenguajes cuyo tipado sea puramente estático.

La existencia del Dynamic Language Runtime permite, en consecuencia, suministrar una implementación de lenguajes dinámicos como Python o Ruby para la plataforma .NET. Por otro lado, estos dos lenguajes ya están implementados en .NET con los nombres IronPython e IronRuby.

También es posible, gracias al DLR, crear aplicaciones .NET que permitan implementar scripts. Es decir, que sea posible escribir código compatible con .NET, con IronPython por ejemplo, y ejecutarlo en el interior de una aplicación Visual C# de la misma manera...

Una primera aplicación con Visual C#

Para descubrir C#, estudiaremos a continuación la escritura de una aplicación muy sencilla, así como el proceso de compilación del código. A esta primera fase le seguirá una etapa de análisis del ejecutable generado.

1. Creación

El primer ejemplo que veremos en este libro será el desarrollo de una aplicación que mostrará el tradicional ¡Hola Mundo! en la ventana de la línea de comandos. 

El proceso no es el mismo si utilizamos el SDK del framework .NET o el SDK de .Net Core. Aunque este libro se concentará en el segundo entorno, en esta sección se presentarán los dos procedimientos. Esto le permitirá de visualizar mejor la diferencia entre el Framework .Net y .Net core.

Pero antes de empezar, un pequeño recordatorio (o no) en lo que se refiere a la edición del código:

Una aplicación C# se construye a partir de archivos de código fuente. Estos archivos se escriben, generalmente, con la ayuda de un entorno de desarrollo integrado como Visual Studio o, si está más familiarizado con herramientas open source, Visual Studio Codo o MonoDevelop o SharpDevelop.

Estos archivos de código fuente no son más que archivos de texto. Es perfectamente posible editarlos con la ayuda de la aplicación Bloc de Notas de Windows o con cualquier otro programa que permita abrir y modificar archivos de texto. La herramienta utilizada para editar estos archivos no debe, no obstante, agregar código de representación en la página como harían aplicaciones de procesamiento de textos como Word, WordPad o LibreOffice Writer.

Con el SDK del Framework .NET

Para escribir el código fuente correspondiente a nuestro programa es necesario crear un simple archivo de texto. Modifíquelo de modo que contenga el código fuente siguiente:

using System;  
  
namespace MiPrimeraAplicacionCSharp 
{ 
    class Program  
    {  
      static void Main()  
       {  
          Console.WriteLine("¡Hola Mundo!");  
       }  
    }...