Reflector: analizando las clases de .NET


Para poder sacar el máximo provecho a IronPython hay que conocer la plataforma .NET. Para ello vamos a usar una herramienta para poder navegar por las clases de .NET, analizar los ensamblados de .NET, ver las relaciones entre las clases y sus métodos, los tipos de parámetros que necesitan dichos métodos. Es decir, hay que saber donde están las clases que necesitamos, y los parámetros que necesitan. Este programa es una muy buena herramienta a la hora de entender .NET y ver cómo funciona por dentro.

Lo primero que vamos a hacer es descargarlo. Es gratuito, así que aquí tenéis la URL:


Se os pedirá un nombre y un correo, para eso de la publicidad. Lo incluis, y le dais al botón de descarga. Una vez descargado, lo descomprimís. El programa no requiere de instalación. Una vez ejecutéis reflector.exe os saldrá la versión del FrameWork que quereis analizar. Mas o menos esto:

En mi caso tengo instalado 2 versiones y el SilverLight. Elijo la 2 y click en OK. Nos sale lo siguiente:

Aqui se nos presentan las principales librerías de .NET Framework. Para probar el porqué de la instalación de Reflector vamos a investigar de donde viene el método WriteLine de la clase Console, que está en el espacio de nombres System.Console. Para ello nos vamos a mscorlib (Microsoft Core Library ó núcleo de la librería de Microsoft), y desplegamos, teniendo lo siguiente:

Darse cuenta que abajo nos dice namespace System, esto es, nos va indicando que estamos en el espacio de nombres System. Volvemos a desplegar y navegando más abajo tenemos:

Es decir, hemos encontrado la clase Console. Darse cuenta del detalle que pone en la descripción de abajo:

Name: System.Console : El nombre de la clase es System.Console.
Assembly: mscorlib, Version 2.0.0.0 : El ensamblado, es decir, en donde reside la clase, es en la librería mscorlib.

Aquí nos paramos un momento, para definir lo que es un ensamblado.

¿Qué es un ensamblado? (Definición de Wikipedia).

En la plataforma .NET (o .NET framework), un assembly, término que podemos traducir como montaje o ensamblado, contiene el código y los recursos de una aplicación, sea en un solo archivo o en varios, formando una biblioteca de código parcialmente compilado y que constituye un bloque reutilizable, versionable y autodescriptivo de una aplicación de Common Language Runtime, un entorno en tiempo de ejecución que proporciona la plataforma .NET y que ejecuta el código y proporciona servicios que facilitan el proceso de desarrollo.

El mismo ensamblado puede ser usado por distintas aplicaciones, de tal forma que se aloja en el dominio de cada una de ellas, donde el entorno de ejecución es quien se encarga de compartir el código del ensamblado entre los dominios, asegurando que en cada uno de ellos el ensamblado aparece como privado.

Una vez definido este concepto, pasamos a buscar el método que queremos. Así que desplegamos de nuevo y obtenemos:

Como vemos hay varias definiciones de WriteLine, pero lo que cambia es el argumento. Amigo programador, aquí está la máxima expresión de polimorfismo.

Si hacemos click en botón derecho sobre el método WriteLine y seleccionamos Analyze, podemos analizar el método. La información aparece a la derecha.


IronPython addin para Redgate's .Net Reflector

Podemos descargar el addin de IronPython para Reflector desde:

http://ipreflector.codeplex.com/releases/view/20765

¿Qué es .NET Framework?

El .NET FrameWork se divide en dos entidades, a saber:

  • El CLR (Common Language Runtime): sistema que administra la ejecución de un programa, habilitando portabilidad, seguridad y programación de varios lenguajes. Cuando se compila un programa en C#, por ejemplo, el resultado del compilador es un archivo que contiene un lenguaje intermedio de Microsoft (MSIL), es decir, el fichero compilado no es código ejecutable (aunque su extensión sea .exe). El CLR es el encargado de traducir el código intermedio a código ejecutable cuando se ejecuta un programa. Esto lo podemos ver un sencillo ejemplo. Si tenemos un fichero .exe escrito con .NET, y no tenemos el FrameWork instalado, nos dirá un error, puesto que el CLR no está instalado. Si lo estuviera, el CLR activa el compilador JIT (justo a tiempo), el cual convierte el lenguaje intermedio en código nativo. Dentro del fichero compilado, junto con el lenguaje intermedio, se almacenan metadatos, que describen los datos usados por el progama y habilita la interacción del código con cualquier otro. A parte de todo esto, el CLR administra la ejecución del código, gestiona automáticamente la memoria, seguridad, depuración, y demás. Ya entraremos más en detalle...
  • La biblioteca de clases de .NET: punto de entrada para todos los programadores, para utilizar los servicios de alto nivel necesarios para el desarrollo de aplicaciones locales, web ó distribuidas. La biblioteca de clases se organiza en una estructura de espacio de nombres (ó namespaces) jerarquizada, usando el convenio de nombre y utilizando el punto como separador para conectar los tipos de datos en el mismo espacio de nombres o subespacio. Por ejemplo, dentro de la clase System podemos encontrar System.Xml, que hace referencia a las clases utilizadas para tratar los archivos XML. Características de la biblioteca de clases:
Puede utilizarse con cualquier lenguaje de programación: C#, Visual Basic y cualquier lenguaje que soporte .NET, como es el caso de IronPython.

Utiliza un mismo tipo de datos para todos los lenguajes. De esto se encarga el CTS (Common Type System), que está dentro del CLR.

Extensible: se pueden crear tipos de datos propios.

Seguro.

Orientado a objetos.
Por el momento no quiero dar más profundida en .NET, como por ejemplo con los conceptos de código administrado y no administrado, ya que no es objeto de este post el describir esta plataforma de manera exhaustiva. Solo unas pinceladas para poder empezar a descubrir un nuevo mundo, de la mano de IronPython y Reflector.

Saludos.

Comentarios

Entradas populares de este blog

Ejercicios resueltos de programación, en Python y en español, I.

Herramientas (IDE, GUI, EDITOR) para desarrollar en Python

pyLorca: Diseño y diagrama de clases, en Python