Sie sind auf Seite 1von 8

para programadores C# con Mono en GNU/Linux

C# con Mono en GNU/Linux


Francisco Javier Carazo Gil

Para todo aquel que no lo conozca, Mono es el proyecto de software libre impulsado por Novell que se dedica a la creacin de herramientas orientadas a desarrollar software, bajo las directivas de los estndares ECMA, que rigen las especificaciones de parte de la plataforma .NET, creada por Microsoft. En el ao 2000 Microsoft presenta su plataforma .NET, toda una revolucin en cuanto a lo que haba desarrollado la empresa de Redmond hasta la fecha, ya que a travs de ella pretenda simplificar y cambiar para siempre la forma de desarrollar servicios web, as como de aplicaciones de escritorio. A largo plazo, Microsoft quera convertir la plataforma en el sustituto natural a la Windows API.

a plataforma naca con varios objetivos claros: debera permitir el desarrollo de aplicaciones haciendo nfasis en la transparencia de redes, la independencia de plataforma y el desarrollo rpido de las mismas. De igual manera las aplicaciones, o soluciones como las llama Microsoft, desarrolladas a travs de .NET, no deberan perder seguridad y robustez. Con la plataforma .NET Microsoft entr de lleno en el mercado de las aplicaciones web y convirti a la tecnologa XML en el estndar de facto de intercambio de informacin entre sus aplicaciones. En definitiva, la nueva plataforma se constitua como una respuesta del gigante a la creciente cuota de mercado de la tecnologa Java de Sun Microsystems, que abarcaba y cubra aspectos que ninguna tecnologa de Microsoft por aquel entonces era capaz de solucionar. Microsoft estandariz parte de su plataforma a travs de ECMA. ECMA es un organismo estandarizador en el que se encuentran las especificaciones de tecnologas tan importantes como el lenguaje Javascript entre otros. Concretamente estandariz el CLI (Common Language Infrastructure) con el documento ECMA-335, el lenguaje C# con ECMA-334 y C++/CLI (las extensiones C++ para CLI) con el documento

ECMA-372. Basndose en dichos estndares, se funda a principios de 2001 el proyecto Mono de la mano de Ximian, la empresa creada por Miguel de Icaza, una de las personalidades ms importantes dentro de la comunidad de software libre. Miguel de Icaza es co-fundador de Gnome, creador de Gnumeric y fundador del Proyecto Mono que en este artculo nos ocupa. Mexicano de nacimiento, es sin duda, uno de los creadores de software libre ms prolficos actualmente. Hoy en da Ximian es parte de Novell. El Proyecto Mono por lo tanto tambin lo es a travs de ella, aunque no hay que olvidar el papel de la comunidad dentro del proyecto. Los objetivos del Proyecto Mono desde un comienzo eran claros, establecer una plataforma libre que permitiera el fcil desarrollo de aplicaciones de escritorio en entornos GNU/Linux, reduciendo de igual manera el tiempo y los costes de desarrollo. Adems con el tiempo se pretende que se convierta en un entorno que permita ejecutar en GNU/Linux aplicaciones diseadas para la plataforma .NET expresamente para Windows, facilitando de esta manera, la migracin de aplicaciones a GNU/Linux. Desde que en diciembre de 2000 se comenzara a interesar Miguel de Icaza en la plataforma .NET, pasando por la

62

linux@software.com.pl

Linux+ 7-8/2007

para programadores C# con Mono en GNU/Linux


nos referimos). La implementacin de Microsoft para su CLI, es el denominado CLR (Common Language Runtime) o Lenguaje Comn en Tiempo de Ejecucin. A su vez este llamado CLR est dividido en ms componentes, pero no bajaremos otro nivel ms en la jerarqua de abstraccin, ya que solamente queremos dar una visin general de la arquitectura. Una vez explicada la arquitectura del sistema, expongamos los grupos de componentes que forman Mono.

Componentes de Mono

En Mono los componentes los podemos dividir en tres grupos bien diferenciados:

Assemblies
En espaol, ensamblados. Son la unidad de desarrollo dentro de .NET. El cdigo intermedio es albergado dentro de ellos por lo que se constituyen dentro de plataformas Windows como ejecutables del tipo .exe o .dll. Una de las mayores ventajas que conlleva el uso de ensamblados en sistemas Windows a la hora de desarrollar y ejecutar software, es alejarnos del llamado infierno de las dlls provocado por el descontrol que reinaba y sigue reinando, sobre las libreras de enlace dinmico tpicas de sistemas Microsoft.

Componentes del ncleo


Basados en las directrices de las directivas ECMA, concretamente, Ecma-334 y Ecma-335, dentro de este grupo incluimos: el compilador de C#, la mquina virtual, la Bass Class Library.

Figura 1. Mono-logo presentacin de The Mono Open Source Project, en julio de 2001, Ximian haba hecho posible en este perodo de tiempo, la creacin de uno de los proyectos ms importantes en la actualidad dentro del software libre. Posteriormente, tras tres aos de trabajo, el 30 de junio de 2004 fue lanzada la versin 1.0 de Mono. Otro punto a destacar es que a pesar de que en este artculo slo nos centremos en el lenguaje C#, el Proyecto Mono y por extensin la plataforma .NET, o viceversa, existen implementaciones para Visual Basic, Nemerle y Boo. Finalmente mencionar que no son pocos los que hablan de los problemas legales que puede tener Mono en un futuro, sin embargo Novell ya tiene planteada una solucin a dicho tema. Por un lado la parte que se basa en la especificacin ECMA no tendr problemas, as como las libreras propias, Gtk#, Gnome#... Por otro lado, si la parte que no est cubierta por ECMA algn da sufre problemas legales, Novell ha mencionado que se reimplantaran dichas partes, por lo que a pesar de las acciones que puedan emprender terceros, Mono estar protegida legalmente.

Pila de desarrollo Mono/Linux/Gnome


Se trata de un conjunto de herramientas que tratan de aprovechar las libreras existentes de la comunidad de Software Libre, sobre todo en lo referente a Gnome. Incluye: Gtk#, para desarrollo de interfaces grficas de usuario, el equivalente para C# de la archiconocida Gtk, Libreras de la Fundacin Mozilla, para trabajar con el motor de navegacin Gecko principalmente, Libreras de integracin con sistemas *nix, Libreras orientadas a la conectividad con bases de datos, como MySQL, PostgreSQL, incluso con Microsoft SQL Server, Lenguaje XML-schema, RelaxNG, Pila de seguridad.

Metadata

En espaol la traduccin sera algo as como metadatos y se refiere a una informacin que describe al cdigo intermedio (CIL, Common Intermediate Language).

Bass Class Library (BCL)


La librera de clases bsica, es por as decirlo la recopilacin de todas las clases que albergan a las funciones necesarias para casi todo lo que un programador puede necesitar, incluyendo funciones de alto nivel. Por ejemplo proporciona funcionalidad para lectura/escritura desde flujos, interaccin con bases de datos, renderizacin grfica, tratamiento de ficheros XML.

Y muchos otros que la comunidad del proyecto va aadiendo poco a poco.

Arquitectura de Mono/ Plataforma .NET

Previamente a seguir avanzando vamos a definir brevemente la arquitectura del tema que nos ocupa.

Common Language Infraestructure (CLI)


Se trata del componente ms importante dentro de la plataforma. Traducido el ttulo a espaol sera algo as como: Infraestructura Comn de Lenguaje. Su labor es proporcionar una plataforma independiente del lenguaje para el desarrollo y ejecucin de aplicaciones, incluyendo componentes encargados del manejo de excepciones, la seguridad, la interoperabilidad y la recogida de basura (basura en cuanto memoria Figura 2. Estructura mono

www.lpmagazine.org

63

para programadores C# con Mono en GNU/Linux Pila de compatibilidad con Microsoft


Entre los objetivos iniciales de Mono, como hemos comentado al comienzo, se encuentra la creacin de un mtodo a travs del mismo Mono para poder ejecutar software diseado para .NET en plataformas Windows. Dentro de este grupo encontramos entre otros: ADO.NET, ASP.NET, Windows.Forms. Una vez completada la instalacin de Mono pasamos a instalar libgdiplus:
$ tar xzf libgdiplus-1.2.3.tar.gz $ cd libgdiplus-1.2.3 $ ./configure $ make $ make install

Comentario del cdigo: using System; Usamos el espacio de nombres System, namespace holamundo Definimos nuestro espacio de nombres, holamundo, class MainClass Definicin de la clase, la llamamos MainClass, public static void Main(string[] args) Definicin del mtodo Main, como parmetros le pasamos los argumentos con los que se llama al programa (aunque no los usaremos), Console.WriteLine(Hello World!); En la clase Consola hay un mtodo WriteLine al que se le pasa una cadena y escribe en la consola dicha cadena, Hello World!.

Adems de Mono y Libgdiplus, necesitaremos instalar las ltimas versiones estables de Monodoc, la documentacin del proyecto; MonoEs importante mencionar que todos estos Develop, el entorno integrado de desarrollo elementos no estn estandarizados, por lo para Mono y gtk-sharp2, el conjunto de bin- que en un futuro pueden existir problemas dings para GTK. legales, por tema de patentes y propiedad intelectual. MonoDevelop, el entorno Una vez comentados todos estos aspec- integrado de desarrollo tos, pasemos a la parte prctica del artculo en El IDE para Mono, integrado dentro del pro- Ahora pasamos a construir el ejecutable. Dela que se expondr cmo instalar y configurar yecto, a pesar de encontrarse todava en la ver- bido a las caractersticas propias del proyecto Mono en su sistema GNU/Linux y se darn sin 0.12, se encuentra lleno de funcionalidad y Mono heredadas de la plataforma .NET, el los pasos iniciales de cara a programar aplica- gracias a l el desarrollo de aplicaciones usando ciones usando C# y Gtk# con Mono. Mono se hace mucho ms gil. Para ejecutarlo desde la shell introducimos, monodevelop. Instalacin y configuracin Entre las funcionalidades ms importantes Si usis una distribucin que haga uso de un que nos proporciona se encuentran la ayuda gestor de descargas tipo Synaptic, os ser real- que incorpora, la gestin de clases, la finalizamente fcil llevar a cabo la instalacin, ya que cin del cdigo, el soporte del proyecto y por casi con toda seguridad, Mono va a estar in- supuesto todo lo que significa una interfaz cluido en vuestro repositorio. Adems existen grfica que ayuda a la hora de desarrollar el paquetes precompilados para gran cantidad de cdigo. distribuciones. Tambin podis optar por instalar directa- Hola Mundo en C# mente desde el cdigo fuente, las instrucciones Para comenzar a mostrar el uso y la funcionalipara ello se detallan a continuacin. La URI dad de Mono, nada mejor para comenzar que desde la que podis acceder a los archivos es la implementar el clsico Hola Mundo usando el siguiente: http://go-mono.com/sources-stable/. lenguaje de programacin ms importante de Mono, C#. Para una buena comprensin del $ tar xzf mono-1.2.3.tar.gz artculo a partir de este punto, es necesario $ cd mono-1.2.3 que conozcis algo de programacin orientada $ ./configure a objetos y tambin es recomendable que ha$ make yis programado usando alguna librera como $ make install Qt o GTK. An as procurar hacer el desarrollo de la parte ms prctica del artculo de la Listado 1. Hola Mundo manera ms entendible posible. El primer paso ser abrir MonoDevelop como lo hemos hecho en el apartado anterior. using System; Elegimos Start New Project, y usando la plantinamespace holamundo lla de C# (que viene por defecto) seleccionamos { Proyecto de consola. El nombre y la ubicacin lo class MainClass dejo a vuestra eleccin aunque yo como ubica{ cin voy a poner un directorio creado para la public static void Main(string[] ocasin y como nombre Hola Mundo. De todas args) maneras en lo que respecta al directorio, existe { la posibilidad de que MonoDevelop cree un Console.WriteLine("Hola Mundo!"); subdirectorio para la solucin. } Automticamente, MonoDevelop genera } el cdigo de un Hola Mundo en C#. El cdigo } es el siguiente. cdigo que podemos ejecutar no es, como ya hemos explicado antes, cdigo binario ejecutable directamente por la mquina, sino cdigo intermedio llamado Common Intermediate Language (CIL). Para construir el ejecutable, presionamos F8 o nos dirigimos a Proyecto, Construir Solucin. Si queremos ver posibles errores y warnings tenemos una ventana abajo del cdigo en la que aparecen. Tras esto, presionamos F5 y el programa se ejecuta en la misma ventana que apareceran los errores. Si queremos ejecutarlo desde consola, el path del mismo se encuentra en direccin_proyecto/bin/Debug.

El lenguaje de programacin C#

Quizs para muchos ste haya sido el primer programa en C# que hayis visto en vuestra vida. Este lenguaje de programacin, que en la actualidad se encuentra entre los diez lenguajes de programacin ms utilizados en el mundo, segn fuentes de Tiobe.com (http://www. tiobe.com/tpci.htm), ha conseguido un xito reconocible en slo seis aos de existencia. Aparecido en 2001 de la mano de Microsoft y su plataforma .NET, C# es un lenguaje orientado a objetos, con una sintaxis basada en C++, aunque con fuertes parecidos con otros lenguajes, principalmente Java, y Delphi en parte. Su caracterstica ms importante respecto a estos lenguajes es su simplificacin, menos requerimientos simblicos que C++ y menos requerimientos declarativos que Java. Los objetivos de C# tal como explica su especificacin en ECMA son: C# es un lenguaje orientado a objetos cuyo objetivo es ser simple, moderno y de propsito general,

64

Linux+ 7-8/2007

para programadores C# con Mono en GNU/Linux


Aparte de estas diferencias, en general, a todo programador de C++ le resultar muy familiar la sintaxis del lenguaje.

Profundizando un poco ms en C#

Para mostrar algo ms del lenguaje vamos a desarrollar a continuacin un ejemplo un poco ms complicado. No explicaremos muchos aspectos especficos del lenguaje, ya que ese no es el objetivo del artculo, pero s daremos unas breves explicaciones sobre un ejemplo que espero os resulte prctico. El ejemplo trata simplemente de hallar la letra del N. I. F. (Nmero de Identificacin Fiscal), a partir del nmero correspondiente al D. N. I. (Documento Nacional de Identidad).

Clculo de la letra del N. I. F.


Figura 3. Letra N. I. F. tiene tambin a la comunidad de software libre apoyndole, por lo que el futuro para estos dos lenguajes parece muy prspero. Tras comentar los parecidos, vamos a indicar cules son las diferencias fundamentales entre ambos lenguajes. Sintcticamente, C# es mucho ms similar a C/C++ que Java. Tam bin guarda elementos como las enumeracio nes enum que Java no incorpora y en C# adems de incorporarse se han adaptado con algunas mejoras (las enumeraciones ahora no tienen por qu ser simplemente enteros). Tambin es de resear el hecho de que en C# s podemos trabajar directamente con punteros, de manera que accedemos a la memoria de Muchos de vosotros conoceris C++ o Java, forma no segura. Aunque no es lo normal, y ya que se parecen creo conveniente explicar C# nos proporciona esta posibilidad, mientras brevemente los parecidos y diferencias entre que Java no. C# y Java, y C# y C++. Las implementaciones del mismo han de proveer mecanismos de comprobacin de tipos, gestin de arrays, deteccin de variables no inicializadas y recoleccin automtica de memoria, Capaz de desarrollar software distribuido, Portable, Soporte para internacionalizacin, A pesar de que las aplicaciones escritas en C# debern contemplar la economa de memoria y la eficacia de procesamiento, el lenguaje no est llamado a competir con la eficiencia de lenguajes como C o ensamblador.

El clculo de la letra del N. I. F., simplemente requiere calcular el resto de la divisin de nmero correspondiente al D. N. I. entre 23, y posteriormente mediante una funcin de asignacin hacer corresponder el resultado a una letra. Los restos irn desde 0 hasta 22, as que para 0 corresponder una letra, para 1 otra y as sucesivamente. Para implementarlo haciendo uso de C# he seguido la siguiente idea. Rellenamos un
Tabla 1. La funcin de asignacin expresada en forma de tabla Resto 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Letra T R W A G M Y F P D X B N J Z S Q V H L C K E

C# frente a Java
C# con Java comparte gran cantidad de caractersticas. Ambos son orientados a objetos, de reciente creacin y su sintaxis est basada en C/C++. Adems los dos poseen gestin dinmica de memoria y una caracterstica que los define en gran medida, el producto de la compilacin no es directamente un cdigo que pueda ejecutar el microprocesador, sino un cdigo intermedio. Sin duda son los dos lenguajes de propsito general de creacin reciente que ms se usan hoy en da. La causa de este hecho seguramente venga provocada entre otros factores, adems de por las caractersticas y prestaciones de ambos, por el respaldo en ambos casos de dos gigantes de la informtica Sun Microsystems y Microsoft. Adems, tras la aparicin del proyecto Mono y Dot GNU, C#

C# frente a C++

A pesar de los parecidos en las sintaxis de ambos lenguajes, hay un punto clave en el diseo de ambos lenguajes C# est orientado a compilar cdigo intermedio y C++ no. Otro hecho importante es que C# es ms orientado a objetos que C++, en C# todos los tipos derivan en ltima instancia el tipo object. Aparte la sintaxis tampoco es del todo igual, hay diferencias como por ejemplo que para acceder a los mtodos de una clase se usa en lugar de ::. Tambin hay otros cambios, como el que aleja a los tipos de dato bool de los enteros. En C++, 0 era falso y todo lo dems verdadero, es decir se poda hacer uso tanto de tipos de dato int como bool para funciones que usasen valores booleanos. En C# para trabajar con los valores verdadero/falso es absolutamente necesario hacer uso del tipo de dato bool.

www.lpmagazine.org

65

para programadores C# con Mono en GNU/Linux


tencia del return especificamos que devuelva mas que luego se ejecutarn en Windows la posicin n del carcter, siendo n el resto de la o en Mac OS X. Slo deciros que el paquete de divisin que nos ocupa: Mono para Windows trae consigo Gtk, as que es realmente fcil portarlo.
return (char)cadena[n%23];

Listado 2. Ejemplo 2 consola


using System; class Carnet { public static void Main(string[] args) {

Usando Stetic GUI Designer


El primer paso es una vez abierto MonoDevelop, seleccionar Start a New Project. Seguidamente seleccionamos Proyecto GTK# 2.0 dentro del men correspondiente a C#. El nombre del proyecto y dems podis elegir el que queris, yo he puesto holaMundo. Lo primero es disear el interfaz que simplemente se compondr de la ventana principal y un botn. Para disearlo, en lugar de tener que llamar a constructores, pasar parmetros, invocar gran cantidad de mtodos,... haremos uso de Stetic, el diseador de interfaces grficas de usuario que trae incluido MonoDevelop y que nos proporciona un considerable ahorro de tiempo a la hora de disear interfaces de usuario. Para ello en la parte izquierda de la ventana, en la ventana correspondiente a las clases, seleccionamos la clase MainWindow. En ese momento nos aparecer en la ventana central el cdigo de MainWindow.cs, el cdigo fuente de la misma. Seguidamente, en esa misma ventana central en la parte de abajo hacemos clic sobre Diseador y en ese momento ya estaremos dentro de Estetic. De primeras nos aparece una ventana sin ningn widget incluido. Podemos observar en la parte derecha de la pantalla, dos ventanas, la superior con la Paleta de Componentes y la inferior con las Propiedades del componente. Haciendo uso de la ventana referente a las propiedades podemos cambiarle el nombre a nuestra ventana y ponerle por ejemplo Hola Mundo. Seguidamente, incluimos un Vbox y un Hbox dentro de la ventana para poder dimen-w sionar y posicionar correctamente el botn que desencadenar la impresin con una ventana del mensaje Hola Mundo. Posicionamos el botn, mediante la paleta de componentes en el lugar requerido y una vez hecho esto nos dirigimos a Seales, que se encuentra

int numero;

Console.WriteLine("Programa para calcular la letra del NIF\n"); Console.WriteLine("-->Inserte el numero de su DNI :"); numero=int.Parse(Console.ReadLine ()); Console.WriteLine("La letra de su DNI es : "+calcularLetra(numero)); } public static char { string cadena ="TRWAGMYFPDXBNJZSQ VHLCKE"; } } return (char)cadena[n%23];

Con esto ya tenemos casi todo lo que necesitamos. Nos hace falta slo un interfaz a travs de la consola para pedir el nmero de D. N. I. y posteriormente devolver la letra. El interfaz sera algo as como:
int numero; Console.WriteLine("Programa para calcular la letra del NIF\n"); Console.WriteLine("-->Inserte el numero de su DNI :"); numero=int.Parse(Console.ReadLine()); Console.WriteLine("La letra de su DNI es : "+calcularLetra(numero));

calcularLetra(int n)

Una vez hecho esto ya tenemos el programa entero, slo tenemos que hacer una clase, e implementar el mtodo Main y el mtodo que calcule la letra que lo hemos llamado calcularLetra (ver Listado 2).

vector de caracteres, o string, de 23 posiciones con las 23 letras que corresponderan al resto en ese caso. Es decir, en la posicin n del vector, estar almacenada el carcter que corresponde al resto n. En C# los string o vectores de caracteres se tratan de forma similar a C/C++. En este punto me gustara comentaros que en C/C++ los vectores de caracteres almacenaban caracteres ASCII, de 1 byte de tamao, y en este caso almacenamos caracteres Unicode de 2 bytes de tamao. La razn es que debido a la gran variedad de lenguajes humanos existente y sus correspondientes particularidades, por ejemplo el espaol con nuestra , el cdigo ASCII se quedaba ms que pequeo, y haba que utilizar libreras que no fueran la estndar para poder trabajar con caracteres de este tipo. En C# este problema se resuelve. Volviendo al ejemplo del clculo de la letra del N. I. F., una vez relleno el vector, que lo hacemos mediante la siguiente expresin:
string cadena ="TRWAGMYFPDXBNJZSQVH LCKE";

Hola Mundo usando GTK#

Una vez visto este ejemplo pasamos a hacer una pequea introduccin a GTK#, el binding de la librera grfica GTK para Mono. La intencin es presentaros cmo podis desarrollar programas usando esta potente librera grfica a travs del entorno Mono Develop, implementando por supuesto en C#. Gracias a la labor que realiza el entorno, veris lo fcil que es realizar implementaciones usando esta librera. La mayor parte de la culpa la tiene Stetic GUI Designer, que es el diseador grfico de interfaces de usuario que viene integrado en Mono Develop. Es potente, verstil y sobre todo, muy fcil de usar como comprobaris a continuacin. Con su perfecta integracin dentro de Mono y MonoDevelop, podremos disear interfaces en cuestin de minutos, labor en la que de otra manera hubiramos tardado mucho ms de eso. Antes de seguir avanzando hablemos un poco de GTK#.

GTK#
Bsicamente se trata de un conjunto de bindings que nos permiten desarrollar programas usando la librera GTK con Mono. En la actualidad se encuentra en su versin 2.10 y es un producto de Novell y la comunidad, con licencia GPL. Adems de poderse usar para realizar programas en entornos Gnome, bajo GNU/Linux, Gtk# nos permite implementar progra- Figura 4. Mono develop gtk sharp

Una vez hecho esto devolveremos la posicin que nos ocupa, por ejemplo el siguiente nmero de D. N. I., 11.111.111, debera devolver (resto de 11.111.111 entre 23 es 18), H. Para hacer esto simplemente podemos realizar una funcin, que reciba el nmero y devuelva la letra. Para devolver la letra en la misma sen-

66

Linux+ 7-8/2007

para programadores C# con Mono en GNU/Linux


anteriormente, lo modificamos e incluimos ms que interesantes para cualquier amante el siguiente: del software libre y la programacin. Adems es una tecnologa muy reciente por lo que esprotected virtual void t en pleno desarrollo y poco a poco veremos OnButton1Clicked cmo se van incorporando nuevas funcionali(object sender, System.EventArgs e) dades.
{ string c="TRWAGMYFPDXBNJZSQVHLCKE"; int numero=int.Parse(entry1.Text); string letra=c.Substring(numero%23,1); entry1.Text="La letra es : "+letra; }

Listado 3. Hola mundo con gtk#


protected virtual void System.EventArgs e) { AboutDialog about = new AboutDialog(); para Linux+"; about.Version = "1.0.0"; about.Run(); about.Destroy(); } about.Name = "Hola Mundo con GTK#

OnButton1Clicked(object sender,

Compiladores e intrpretes en Mono

dentro de la ventana de Propiedades del componente. Incluimos la seal Clicked que como su nombre indica hace referencia al hecho de hacer clic sobre el botn. En el cdigo se nos crear una funcin del tipo: protected virtual void OnButton1Clicked(object sender, System. EventArgs e). Dentro de esta funcin incluimos Listado 3. Como podis apreciar hemos hecho uso de un objeto de la clase AboutDialog, quizs no sea la manera ms elegante pero s era una manera cmoda y grfica de cmo realizar el programa. Paso seguido construimos la solucin, la ejecutamos y ya tenemos el resultado delante nuestro, nuestro primer programa haciendo uso de GTK#.

Como podis apreciar accedemos y escribimos de manera muy simple sobre entry1 usando Text. Aparte el resto del programa es el mismo que anteriormente hemos usado para calcular la letra con algunos detalles cambiados. El primero es que el nmero previamente a utilizarlo, ya que proviene de un Entry que proporciona datos tipo string, hemos de tratar-

Debido a que en el contenido prctico del artculo trato de ser lo ms prctico posible, no he comentado hasta ahora los compiladores e intrpretes en Mono. Esta seccin puede ir tanto delante como detrs de la parte prctica, sin embargo, he credo mejor ponerla en este sitio, debido a que el objetivo principal del artculo es como se ha podido comprobar, usar la plataforma principalmente con el entorno de desarrollo integrado MonoDevelop. A pesar de que como ya hemos comentado a lo largo del artculo, Mono no se limita al lenguaje C#, debido que el tpico del artculo es ese, explicaremos ms detalladamente el compilador de C#, aunque recordamos que existen compiladores para otros lenguajes dentro del proyecto, como por ejemplo el de Visual Basic, el que quizs sea ms famoso despus del de C#.

lo con la funcin parse para convertirlo en un tipo de dato entero. El segundo es que en lugar de hallar con los corchetes el lugar del vector de caracteres, usamos el mtodo Substring al que le pasamos dos parmetros, el primero indica a partir de qu caracter hemos de asignar la subcadena y el segundo cul ser la longitud de sta. Si ponemos como caracter de inicio el resto de la operacin ya comentada y como longitud 1, el resultado es el mismo pero obtenemos un string. Finalmente imprimimos el resultado. Letra del N. I. F. con GTK# La parte ms prctica del artculo termina Siguiendo la misma mecnica que seguimos aqu. Espero que os haya servido para introanteriormente, presentar primero Hola Mundo duciros al mundo de C# y GTK# en el que, y luego un ejemplo un poco ms complejo en como podis ver, existen unas posibilidades el que se halle la letra del N. I. F., vamos a realizar un programa con GTK# para hacer el mismo proceso que anteriormente, pero con interfaz grfica. Partiendo desde el Hola Mundo en GTK#, abrimos el proyecto y en la interfaz aadimos un componente de tipo Entry que ser el que nos permita pedir datos. Adems tambin lo usaremos para mostrar el resultado. Para que los componentes de la interfaz sean accesibles desde MainWindow.cs, hemos de realizar lo siguiente, en Stetic seleccionamos el botn y nuestro nuevo cuadro de tipo Entry y le indicamos Bind to field o Unir al campo. Una vez hecho esto aparecern las siguientes dos lneas en MainWindow.cs.
protected Gtk.Button button1; protected Gtk.Entry entry1;

Introduccin
MCS, el compilador de C# del Proyecto Mono, fue capaz de analizar sintcticamente por s mismo en abril de 2001 y el 28 de diciembre de ese mismo ao, fue capaz de compilar. Cinco das despus MCS lleg a ser autnomo. Respecto a la ltima versin de C# soportada, en el verano de 2005 ya era capaz de soportar

Luego nos dirigimos al evento antes creado y en lugar del cdigo que tenamos puesto Figura 5. Hola Mundo con GTK

www.lpmagazine.org

67

para programadores C# con Mono en GNU/Linux


Java, sin embargo tras la mejora sucesiva de la mquina virtual de Mono, en las nuevas versiones la diferencia se reduce solamente a un 25% a favor de Java, en lugar de un 300% del que hablbamos antes. Por supuesto esta medida no es fiable, ya que no se compara la velocidad en distintas circunstancias sino solamente en los requerimientos de clculo de este juego. Pero al menos espero que os resulte orientativa y alentadora a la vez, ya que como habis comprobado, la mejora en Mono ha sido ms que sustancial desde las primeras versiones.

Aplicaciones famosas implementadas con Mono

Figura 6. Letra N. I. F. con GTK la tercera edicin de C#. A partir de julio de 2003 GMCS fue creado. MCS, el compilador del que hemos hablado hasta ahora es el com- pilador estable del proyecto. GMCS fue un fork que se deriv de ste para dar soporte para genricos. Cada cierto tiempo de ma- nera regular los cambios que se incluyen en MCS son posteriormente incluidos dentro de GMCS. En un futuro MCS, que es el compila- dor de la versin de Mono 1.2, desaparecer, dejando paso solamente a GMCS.

Debido a que la tecnologa Mono es muy reciente, no existen todava gran cantidad de aplicaciones disponibles basadas en esta tecnologa. Sin embargo, hay casos en los que programas que muchos de vosotros usis a menudo, como por ejemplo Tomboy y F-Spot, estn implementados con Mono y muchos de vosotros seguro lo ignoPara compilar archivo.cs y crear archivo. ris. exe: mcs archivo.cs, Tomboy Para compilar archivo.cs y crear prog- Este programa, incorporado por defecto en rama.exe: la versin 6.10 de Ubuntu, la llamada Edgy mcs archivo.cs -out:programa.exe, Eft, es simple pero muy til. Es una herraPara compilar ms de un archivo.cs, y crear mienta para tomar notas. El funcionamiento archivo.exe: es similar al de los sistemas Wiki para unir mcs archivo0.cs archivo1.cs las notas entre s. Est implementado hacienarchivo2.cs, do uso de C# y la Gtk#. Es una buena herraPara ver todas las opciones del compila- mienta para manejar la informacin persodor: nal. Entre las caractersticas a destacar de mcs help. esta aplicacin, destaco: Uso de MCS: Resaltado del texto automtico, Nos permite la revisin automticamente del texto usando GtkSpell, Los correos y direcciones web son enlazados de manera automtica, Permite "Deshacer/Rehacer", La fuente tambin se puede elegir, Capacidad de usar plugins. Aunque en la actualidad no tiene disponibles demasiados, hay algunos interesantes para trabajar con Evolution, Gaim y para exportar a HTML.

A pesar de que en todos los ejemplos anteriores hemos usado el compilador, aunque a travs de la interfaz tan cmoda que nos ofrece MonoDevelop, a continuacin voy a ha- Velocidad de procesamiento cer una presentacin del uso del compilador con Mono desde consola. Debido al carcter de plataforma que ejecuta cdigo compilado en una mquina virtual, Mono ser lgicamente ms lento que cualquier lenguaje compilado que se ejecute sobre la mquina, como C o C++. Sin embargo, la pregunta es, cmo es Mono de rpido en comparacin con lenguajes como Java que se ejecutan sobre mquina virtual tambin. A pesar de que no se han realizado pruebas de importancia, podemos hacernos una idea con un juego, mono-chess, que comparte implementacin en dos proyectos, uno realizado con Java sobre la Java Virtual Machine y el otro realizado con C# sobre Mono. En las primeras versiones de Mono, la diferencia de velocidad era realmente grande, el motor tardaba tres veces ms en ejecuFigura 7. Mono-chess tar en su versin C# con respecto a la versin

Usando MCS

F-Spot
Tambin se trata de un programa que incorpora Ubuntu en su versin 6.10. Esta distribucin es de las que ms est apoyando al proyecto Mono. Es un gestor de fotografas para Gnome, que al igual que Tomboy tambin est implementado en C#. Sus caractersticas son:

68

Linux+ 7-8/2007

para programadores C# con Mono en GNU/Linux


Tiene soporte para gran cantidad de formatos, JPEG, PNG, TIFF, DNG y muchos formatos de tipo RAW (CR2, PEF, ORF, SRF, CRW, MRW y RAF). Tambin soporta grficos tipo GIF, SVG y PPM, Es posible importar fotos directamente desde la cmara, Adems tambin puedes exportar a CD las fotos, de manera directa desde el men principal, Todas las operaciones bsicas (rotar, cambiar el tamao...) estn disponibles, Un punto muy importante es que permite el trabajo directamente con galeras como Flickr, Gallery, O.r.i.g.i.n.a.l y Google Picasa Web Album, facilitando mucho el trabajo y haciendo que no tengamos que usar otro software para trabajar con dichos lbumes online.

Banshee
Se trata del reproductor de msica para GnoFigura 8. Reproductor de msica Banshee me basado en Gtk#. Es software libre bajo licencia MIT y aunque se encuentra todava Tiene una arquitectura de plugins muy en una versin muy temprana, la 0.12 vio la extensible y personalizable. Los plugins luz el 5 de marzo de este ao, tiene bastantes ms usados hoy en da para el programa caractersticas interesantes. Os detallo a contison: listas de reproduccin inteligentes, nuacin algunas de ellas: posibilidad de recomendacin desde el portal Last.fm, podcasts, conexin con Utiliza Helix y Gstreamer para reproiTunes Store, entre otros. ducir, codificar y decodificar, Ogg Vorbis, MP3, Flac y otros formatos de au- Aparte de estos tres programas, existen mudio, chos ms basados en Mono, que nos les voy Puede reproducir e importar CDs de au- a prestar la misma atencin, pero que al medio, adems de sincronizarlos con repro- nos, si voy a nombrar a algunos de ellos ductores iPods de Apple y Zen de Crea- a continuacin: tive, Permite reportar a la cuenta de usuario iFolder, del portal Last.fm, que est utilizndolo, Beagle, la lista de reproduccin, Hula, Wikipedia lo usa para las labores de bsqueda.

Libro recomendado

Sobre el autor
Francisco Javier Carazo Gil es un cordobs estudiante de I. T. en Informtica de Sistemas, slo a falta del proyecto para obtener el ttulo. Actualmente est trabajando con contrato de becario. Es tambin webmaster de LinuxHispano.net, sitio del cual es uno de los fundadores y colaborador habitual de esta revista, Linux+. Sus intereses son principalmente el software libre, la programacin y todo lo relacionado con GNU/Linux. Su web personal est en http://jcarazo.com. Podis contactar con l a travs de su correo personal, carazo@gmail.com.

Adems de los recursos electrnicos, que son numerosos sobre el tema, existen en el mercado gran variedad de libros acerca de C#. La mayora a pesar de estar centrados en el lenguaje, lo exponen utilizando las herramientas de Microsoft, sobre sistemas Windows por supuesto. A pesar de que es un pequeo fallo, algunos de ellos en general merecen la pena. A m personalmente el que ms me ha gustado, y lo digo como crtico y sin ningn nimo publicitario, es La Biblia de C#, de la editorial Anaya. Sus autores son, Jeff Ferguson, Brian Patterson y Jason Beres. He ledo otros libros acerca del lenguaje, y en espaol el que ms me ha gustado ha sido ste. Respecto a Mono y Gtk# no he podido tener acceso a ningn libro. Creo que en el mercado no hay apenas libros acerca de estas temticas, sin embargo, en Internet hay una gran El futuro de Mono cantidad de informacin disponible, comenzanGracias a la gran aceptacin que est teniendo do por la que nos prestan los proyectos en s. el proyecto dentro de la comunidad de software libre, es de esperar que siga creciendo por lo menos al ritmo que hasta ahora, y que En la red las aplicaciones basadas en l crecern de ma Proyecto Mono: nera exponencial, debido a la facilidad, efihttp://www.mono-project.com, ciencia y estabilidad de la que cada vez ms Wikipedia: hace gala la plataforma. Adems es de resear http://es.wikipedia.org, el apoyo que distribuciones de GNU/Linux Mono Hispano: como Ubuntu, le proporcionan incluyendo http://www.monohispano.es, ya no la mquina virtual instalada por de Wiki Libros: fecto, sino haciendo parte de la distribucin http://es.wikibooks.org, gran cantidad de software desarrollado para Mono Develop: Mono. http://www.monodevelop.com/.

www.lpmagazine.org

69

Das könnte Ihnen auch gefallen