La plataforma Microsoft .NET
¿Qué es la plataforma Microsoft .NET?
Conjunto de tecnologías y componentes dispersos, que en algunos casos ya existían, que Microsoft ha integrado en una plataforma de desarrollo y ejecución de aplicaciones consistente.
Facilita el desarrollo y ejecución de aplicaciones usando tecnologías nativas de Microsoft.
Cambia el rumbo inicial de Microsoft, moviendo las aplicaciones de ser centradas en el cliente a ser centradas en el servidor.
Orientada a un nuevo modelo de computación distribuida en la red.
Red que está pasando de ser centrada en las personas y basada en los contenidos, a estar centrada en las aplicaciones y basada en los servicios.
La plataforma Microsoft .NET
La plataforma Microsoft .NET
¿Qué es la plataforma Microsoft .NET?
Respuesta de Microsoft al creciente mercado de los negocios en entornos Web, como competencia a la plataforma Java de Sun Microsystems.
Ofrece una marco de trabajo (framework) rápido, seguro y robusto, para desarrollar aplicaciones –o soluciones–.
Permite una integración más rápida y ágil entre empresas.
Permite un acceso más simple y universal a todo tipo de información desde cualquier tipo de dispositivo.
La plataforma Microsoft .NET
La plataforma Microsoft .NET
Componente core de la plataforma Microsoft .NET
Entorno de ejecución y desarrollo de aplicaciones en la plataforma Microsoft .NET
Componente software que se debe instalar en aquellas máquinas que deseen EJECUTAR y/o DESARROLLAR aplicaciones mediante la plataforma Microsoft .NET
Incluido de forma nativa en WS2008, Windows Vista y Windows 7.
Componentes de .NET Framework: CLR - Common Language Runtime
.NET Framework Class Library
.NET Framework
La plataforma Microsoft .NET
.NET Framework es un entorno multilenguaje.
Soporta múltiples lenguajes de programación.
En la actualidad existen más de 20 lenguajes de programación compatibles con .NET Framework: C# , Visual Basic, JScript, J#, COBOL, Fortran, Haskell, Eiffel,
Pascal, Perl, Python, SmallTalk,...
CLS (Common Languague Specification): conjunto de normas mínimas que un lenguaje de programación debe cumplir para ser compatible con .NET Framework.
Componentes escritos en lenguajes distintos pueden compartir funcionalidad entre ellos de forma transparente.
Interoperabilidad de lenguajes
La plataforma Microsoft .NET
.NET Framework es un entorno multilenguaje.
Interoperabilidad de lenguajes
La plataforma Microsoft .NET
Programación de aplicaciones con Visual Studio .NET
9
Interoperabilidad de lenguajes
• Java: un lenguaje en múltiples plataformas
La plataforma Microsoft .NET
Programación de aplicaciones con Visual Studio .NET
10
Interoperabilidad de lenguajes
• ¿Cuál es el siguiente paso? (=>MONO)
La plataforma Microsoft .NET
.NET Framework es un entorno multilenguaje:
Interoperabilidad de lenguajes
La plataforma Microsoft .NET
Entorno común de ejecución de aplicaciones .NET que se instala sobre el SO.
Componente principal o núcleo del .NET Framework.
También conocido como ‘entorno gestionado o administrado’
Procesador “virtual” que se encarga de ejecutar aplicaciones en la plataforma Microsoft .NET.
Una aplicación .NET NO se ejecuta nunca directamente sobre el procesador o sistema operativo; sino que se ejecuta sobre el CLR.
Proporciona un entorno de ejecución de aplicaciones robusto y seguro.
Common Language Runtime (CLR)
La plataforma Microsoft .NET
Proporciona automáticamente una serie de servicios: Liberación del espacio ocupado en memoria.
Seguridad del código que se ejecuta.
Gestión de excepciones.
Gestión de threads.
Depuración de código.
….
Common Language Runtime (CLR)
La plataforma Microsoft .NET
Biblioteca de clases de .NET Framework
Proporciona una serie de servicios y componentes de alto nivel ya implementados para su uso en el desarrollo de aplicaciones.
Conjunto de librerías estándar de clases organizadas jerárquicamente en espacios de nombres o namespaces.
Disponible para todos los lenguajes de programación compatibles con .NET Framework.
La mayoría de namespaces disponibles se organizan bajo la siguiente jerarquía de nombres: System.*
Microsoft.*
.NET Framework Class Library
http://msdn.microsoft.com/es-es/library/ms229335.aspx
La plataforma Microsoft .NET
Las clases que componen esta biblioteca se distribuyen en varios ensamblados (assemblies) almacenados en el GAC (Global Assembly Cache).
.NET Framework Class Library se divide en dos partes: Base Class Library (BCL).
Clases core o estándars que componen el API básico del .NET Framework.
Disponibles en: mscorlib.dll, System.dll y System.core.dll.
Framework Class Library.
Resto de clases que componen .NET Framework Class Library.
.NET Framework Class Library
%SYSTEMDRIVE%\WINDOWS\assembly
La plataforma Microsoft .NET
Espacios de nombres o namespaces típicos: System
Contiene clases estándar que cualquier aplicación necesita.
System.IO Contiene clases para la lectura y escritura de archivos y secuencias de datos.
System.Data Contiene clases para el acceso a datos.
System.Xml Contiene clases que permiten procesar documentos XML.
System.Collections / System.Collections.Generic Contiene clases que definen diversas colecciones de objetos, tales como listas, colas,
matrices de bits, tablas hash y diccionarios.
System.Web Contiene clases que habilitan la comunicación entre el explorador y el servidor.
.NET Framework Class Library
La plataforma Microsoft .NET
.NET Framework 3.0 (WinFX) Extensión de .NET Framework 2.0
No implica ningún cambio en la arquitectura de .NET Framework.
Sigue utilizando el entorno común de ejecución (CLR) de .NET Framework 2.0.
Incluye 4 nuevas librerías al .NET Framework Class Library:
Windows Presentation Foundation (WPF – Avalon)
Windows Communication Foundation (WCF – Indigo)
Windows Workflow Foundation (WF)
Windows CardSpace (InfoCard)
No implica nuevas versiones en los lenguajes de programación C# (C# 2.0) y VB (VB 8)
.NET Framework Class Library
La plataforma Microsoft .NET
.NET Framework 3.5 Extensión de .NET Framework 3.0
Implica cambios y mejoras en el entorno común de ejecución o CLR.
Implica nuevas versiones en los lenguajes de programación C# (C# 3.0) y VB (VB 9.0)
Nuevas librerías y mejoras en .NET Framework Class Library:
LinQ (Language Integrated Query)
ASP.NET 3.5
Soporte a AJAX
….
Incluye .NET Framework 2.0 SP1 + .NET Framework 3.0 SP1.
.NET Framework Class Library
La plataforma Microsoft .NET
Proceso de compilación y ejecución
Compilación
Cuando el método es invocado por 1ª vez
Compilador lenguaje
Ensamblado (EXE, DLL)
Ejecución
Compilador JIT
Código MSIL
Metadatos
Código
Máquina CPU
01010101
Código fuente
C# o VB
La plataforma Microsoft .NET
29
Proceso de compilación y ejecución
• Proceso de compilación
file.cs
file.vb
file.cpp
Compilador C#
csc.exe
Compilador VB
vbc.exe
Compilador C++
cl.exe
Código
MSIL
Código fuente C#
Código fuente VB
Código fuente C++
La plataforma Microsoft .NET
El proceso de compilación del código fuente produce un
módulo gestionado (managed module) conocido como ensamblado (assembly).
Los ensamblados son los únicos componentes que pueden ser ejecutados por el CLR.
Un ensamblado es la unidad mínima de distribución y construcción de aplicaciones en .NET.
Conceptualmente, un ensamblado proporciona una manera de considerar un conjunto de archivos como una entidad única.
Proceso de compilación y ejecución
La plataforma Microsoft .NET
El proceso de compilación en .NET no genera instrucciones
nativas o código máquina específico de ningún procesador.
El proceso de compilación en .NET genera un código intermedio conocido como MSIL o IL –Microsoft Intermediate Language-.
Lenguaje máquina de alto nivel independiente de cualquier procesador y que se ejecuta sobre el CLR.
También conocido como código gestionado (managed code).
Los procesadores no pueden ejecutar directamente el código MSIL o IL.
Proceso de compilación y ejecución
La plataforma Microsoft .NET
Este código MSIL debe ser convertido a código nativo del
procesador sobre el que se vaya a ejecutar la aplicación.
El CLR se encarga de traducir (compilar sobre la marcha) este código MSIL en instrucciones nativas del procesador de destino.
De esto se encarga un componente del CLR conocido como compilador JIT (Just-in-Time) o JITter.
Un compilador JIT (Just-in-Time) o JITter convierte, en tiempo de ejecución, el código MSIL a ejecutar en código nativo del procesador de destino según sea necesario.
Proceso de compilación y ejecución
IL_0000: ldstr "Hola mundo!"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
La plataforma Microsoft .NET
Existen tres tipos de compilador JIT (Just-in-Time) o JITter: Compilador JITter normal
Es el que se suele usar por defecto.
Sólo compila el código MSIL a código nativo a medida que va siendo necesario en tiempo de ejecución.
Compilador JITter económico
Diseñado especialmente para sistemas que tienen recursos limitados.
Incorporación del descarte de código para liberar memoria.
Compilador preJITter (Native Generator, ngen)
Permite compilar completamente cualquier assembly antes de que se cargue la aplicación.
No en tiempo de ejecución.
Usando la herramienta ngen.exe
Proceso de compilación y ejecución
La plataforma Microsoft .NET
El CLR proporciona dos herramientas para trabajar con
código MSIL o gestionado: MSIL Assembler (ilasm.exe)
Ensamblador de código MSIL.
A partir de un fichero con código MSIL (*.il) genera un ensamblado o módulo gestionado (managed module).
MSIL Disassembler (ildasm.exe)
Desensamblador de código MSIL.
A partir de un ensamblado o módulo gestionado (managed module) genera el código MSIL correspondiente.
Proceso de compilación y ejecución
>ilasm HelloWorldCS.il
> ildasm HelloWorldCS.exe /out:HelloWorldCS.il
La plataforma Microsoft .NET
35
Proceso de ejecución gestionada
• En el .NET Framework, el CLR proporciona la infraestructura necesaria para un entorno de ejecución gestionada.
La plataforma Microsoft .NET
36
Proceso de ejecución gestionada
Código fuente
VB C# C++
Compilador Compilador Compilador
Código gestionado
Código
MSIL
Código
MSIL
Código
MSIL
Entorno común de ejecución (CLR) COMPILADOR JIT
Código nativo
Componente
no gestionado
Servicios del Sistema Operativo
La plataforma Microsoft .NET
37
Proceso de ejecución gestionada
• Proceso de ejecución > Cuando un usuario ejecuta una aplicación gestionada, el
SO carga el CLR para que comience con la ejecución del código MSIL del módulo gestionado.
> Pero la CPU no puede ejecutar el código MSIL directamente.
> El CLR debe antes convertir el código MSIL a código nativo del procesador.
> Código MSIL es sólo compilado a código nativo cuando sea necesario mediante el componente del CLR conocido como compilador JIT o JITer.
La plataforma Microsoft .NET
Estructura de un ensamblado:
Manifiesto (Manifest).
Metadatos.
Código MSIL.
Conjunto de recursos
Ensamblados o assemblies
La plataforma Microsoft .NET
40
Metadatos
• El proceso de compilación genera metadatos dentro de cada módulo gestionado creado.
• Es información declarativa emitida en tiempo de compilación (datos que describen datos).
• Es un conjunto de tablas de datos, que describe completamente cualquier elemento que está definido en un módulo: propiedades, métodos, argumentos, valores de retorno, atributos, clases de base,...
• Un ensamblado y sus metadatos son inseparables.
La plataforma Microsoft .NET
Una aplicación puede usar dos tipos de ensamblados (*.dll):
Ensamblados privados.
Ensamblados globales.
Un ensamblado privado se encuentra en el mismo directorio que el ejecutable de la aplicación y sólo puede ser usado por dicha aplicación.
Un ensamblado global se encuentra en la ‘caché de ensamblados globales’ (GAC) y puede ser usado por cualquier aplicación que se ejecute en esa máquina.
Los ensamblados que componen el .NET Framework son ensamblados globales.
Ensamblados o assemblies
La plataforma Microsoft .NET
Programación de aplicaciones con Visual Studio .NET
42
Estructura de una aplicación en .NET
• Estructura básica:
APLICACIÓN
….
Archivo de código fuente Archivo de código fuente
CLASE CLASE
…. ….
Rutina de código: proc.
Rutina de código: proc.
Rutina de código: proc.
Rutina de código: proc.
ENSAMBLADO .EXE / .DLL
Importaciones de E.N Importaciones de E.N
La plataforma Microsoft .NET
Programación de aplicaciones con Visual C# .NET - .NET Framework 2.0
Espacio de nombres (namespace)
Clase
Método a invocar de la clase
Proceso de compilación y ejecución
Ejemplo de aplicación en C#:
La plataforma Microsoft .NET
Programación de aplicaciones con Visual C# .NET - .NET Framework 2.0
Ejemplo de aplicación en C#:
using System;
Importación de namespaces
}
namespace CursoNET.CSharp {
Declaración de namespace
Proceso de compilación y ejecución
La plataforma Microsoft .NET
Programación de aplicaciones con Visual C# .NET - .NET Framework 2.0
Espacio de nombres (namespace)
Clase
Método a invocar de la clase
Proceso de compilación y ejecución
Ejemplo de aplicación en Visual Basic:
La plataforma Microsoft .NET
Programación de aplicaciones con Visual C# .NET - .NET Framework 2.0
Ejemplo de aplicación en Visual Basic:
Imports System
Importación de namespaces
End Namespace
Namespace CursoNET.VB
Declaración de namespace
Proceso de compilación y ejecución
La plataforma Microsoft .NET
Compilador por línea de comandos de C#: csc.exe: C# Compiler
>csc /help Compilador de Microsoft (R) Visual C# 2008, versión 3.5.21022.8 para Microsoft (R) .NET Framework, versión 3.5
(C) Microsoft Corporation. Reservados todos los derechos.
Opciones del Compilador de Visual C# 2008
>csc /target:exe /out:HolaMundoCS.exe HolaMundoCS.cs
> ildasm HolaMundoCS.exe
Proceso de compilación y ejecución
La plataforma Microsoft .NET
Compilador por línea de comandos de Visual Basic: vbc.exe: Visual Basic Compiler
>vbc /help Compilador de Microsoft (R) Visual Basic versión 9.0.21022.8
(c) Microsoft Corporation. Reservados todos los derechos.
Opciones del compilador de Visual Basic
>vbc /target:exe /out:HolaMundoVB.exe HolaMundoVB.vb
> ildasm HolaMundoVB.exe
Proceso de compilación y ejecución
La plataforma Microsoft .NET
Programación de aplicaciones con Visual Studio .NET
49
Proceso de compilación y ejecución
• MSIL Disassembler (ildasm.exe): > Desensamblado de código MSIL
>ildasm HolaMundoCS.exe
>ildasm HolaMundoVB.exe
La plataforma Microsoft .NET
Programación de aplicaciones con Visual C# .NET - .NET Framework 2.0 Código MSIL del ensamblado HolaMundoVB.exe (VB):
Código MSIL del ensamblado HolaMundoCS.exe (C#):
Proceso de compilación y ejecución
La plataforma Microsoft .NET
Estructura de una aplicación .NET
A nivel de ejecución, una aplicación en .NET es una colección de objetos cargos en memoria principal (heap)
A nivel de desarrollo, una aplicación en .NET es una colección de clases agrupadas en namespaces.
HEAP
“Un objeto es una entidad o concepto que existe en el mundo real y que queremos representar
en nuestra aplicación”.
Existe un namespace por defecto (global namespace) donde van aquellas clases a las que no les
indicamos su namespace.