May 24th, 2007Programación con C# y .NET Remoting/Mono Remoting [1/7]
Indice general de los manuales
- Introducción, instalación en Ubuntu y creación de una calculadora. « [Leyendo]
- Modos de compartición de objetos. Creando nuestra primera calculadora distribuida.
- Canales: TCP y HTTP. Configuración en archivo XML.
- Uso de interfaces para separar el código entre cliente y servidor.
Introducción
C# es un lenguaje de programación orientado a objetos, con una sintaxis muy similar a C++. Se diseñó con la intención de derivar las mejoras de otros lenguajes (Java, Delphi…) mezclando la posibilidad de programar en bajo nivel, y la flexibilidad de los lenguajes orientados a objetos. Entre todas la ventajas de este lenguaje, vease en wikipedia, destacamos el uso del modelo de objetos .NET (o Mono) y la portabilidad del código.
.NET Remoting (Mono Remoting) es un entorno (framework) para la creación de aplicaciones distribuidas. Como cualquier otro framework, Remoting nos ofrece una serie de servicios y mecanismos para el paso de mensajes entre objetos, creación y gestión de vida de los objetos.
El código fuente de este tutorial te lo puedes bajar desde aquí.
0. Instalación de los compiladores y el framework bajo [X]Ubuntu
Para instalar tanto el compilador de C# como el framework de Mono, abriremos una consola y escribiremos:
sudo aptitude install monodevelop mono-gmcs
Con estas instrucciones no solo instalaremos el compilador y el framework, sino también un editor gráfico para programar sobre C# y Mono.
1. Creación de una calculadora
El objetivo de esta serie de tutoriales, será ofrecer remotamente el servicio de una calculadora de diferentes modos, que veremos más adelante. Para empezar, crearemos un calculadora simple que sume, divida y haga la potencia sobre una base, y así podremos familiarizarnos con el lenguaje C#.
- // Archivo: Calculo.cs
- // Descripcion: Clase que simula algunas operaciones de una calculadora
- // Biblioteca estandar
- using System;
- // Un espacio de nombres puede contener varias clases
- // En este caso, tendra una llamada Calculadora
- namespace Calculo
- {
- // Clase Calculadora
- public class Calculadora
- {
- // Atributo para usarlo en el metodo Potencia
- private double laBase;
- // Properties: son el GET y el POST, en C#, de un atributo
- // y asi poderlo usarlo de esta forma: obj.Base
- // Nos evita, como en otro lenguajes, el uso de obj.getBase()
- // y obj.setBase()
- public double LaBase
- {
- get { return this.laBase; }
- set { this.laBase = value; }
- }
- // Constructor
- public Calculadora()
- {
- Console.WriteLine(“Constructor.”);
- this.laBase = 10.0;
- }
- // POST: Suma dos numeros
- public double Suma(double izq, double dcha)
- {
- Console.WriteLine(“Metodo: Suma.”);
- return izq + dcha;
- }
- // POST: Divide dos numeros
- // EXCEPTION: si el denominador es 0
- public double Divide(double numerador, double denominador)
- {
- Console.WriteLine(“Metodo: Divide.”);
- if (denominador == 0)
- {
- throw new Exception(“Division por 0″);
- }
- else
- {
- return (numerador / denominador);
- }
- }
- // POST: Eleva nuestra base al numero que le pasamos en
- // el argumento
- public double Potencia(double valor)
- {
- Console.WriteLine(“Metodo: Potencia.”);
- return Math.Pow(this.laBase, valor);
- }
- }
- }
Podéis ver que he añadido algunos comentarios para seguir fácilmente el código y que he añadido trazas en el constructor y los métodos. Con estas trazas podremos comprobar en que máquina se ejecuta el código cuando hagamos la aplicación distribuida.
Ahora necesitamos el programa principal que haga uso de la calculadora:
- // Archivo: Principal.cs
- // Descripcion: programa principal que usa la calculadora
- // Bibliotecas a usar:
- using System;
- using Calculo;
- public class Principal
- {
- public static void Main (String[] args)
- {
- Calculadora calc = new Calculadora();
- Console.WriteLine(“Suma 2+2 = “ + calc.Suma(2.0, 2.0));
- Console.WriteLine(“Potencia 10^5 = “ + calc.Potencia(5.0));
- try
- {
- // La division puede darnos una excepcion, por eso
- // la metemos en este bloque de captura de excepciones.
- Console.WriteLine(“Division 8/2 = “ + calc.Divide(8.0,2.0));
- Console.WriteLine(“Division 5/0 = “ + calc.Divide(5.0,0.0));
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- }
- }
- }
Una vez que tenemos los dos archivos creados, “Calculo.cs” y “Principal.cs”, vamos a compilarlos. Para ello, abriremos una consola. Primero vamos a compilar el archivo “Calculo.cs” y decirle que es un archivo de biblioteca:
mcs -target:library Calculo.cs
Esto nos generará un archivo llamado “Calculo.dll”, que contendrá todas las clases que estén en el espacio de nombres “Calculo”, en nuestro caso la clase “Calculadora”. Ahora pasamos a compilar el programa principal junto con la biblioteca, para que pueda hacer uso de esta:
mcs -r:Calculo.dll Principal.cs
Y esto nos generará el archivo ejecutable “Principal.exe” (todo esto de archivos “dll” y “exe” suena un poco a Windows… aunque lo estemos haciendo en Linux). Para ejecutar el programa, simplemente lo escribimos en consola:
./Principal.exe
Y obtendremos:
Constructor.
Metodo: Suma.
Suma 2+2 = 4
Metodo: Potencia.
Potencia 10^5 = 100000
Metodo: Divide.
Division 8/2 = 4
Metodo: Divide.
System.Exception: Division por 0
at Calculo.Calculadora.Divide (Double numerador, Double denominador) [0x00000]
at Principal.Main (System.String[] args) [0x00000]
Si pruebas a ejecutar el programa bajo Windows (con las bibliotecas .NET instaladas) nos daremos cuenta de que… también funciona!!
Con esto, terminamos este primer acercamiento a C#. Ahora viene lo interesante: como hacer la aplicación distribuida.
Indice general de los manuales
- Introducción, instalación en Ubuntu y creación de una calculadora. « [Leyendo]
- Modos de compartición de objetos. Creando nuestra primera calculadora distribuida.
- Canales: TCP y HTTP. Configuración en archivo XML.
- Uso de interfaces para separar el código entre cliente y servidor.

April 2nd, 2009 at 5:26 am
hola un slaudo cordial, bueno ante todo explicarle el por que de este mail, soy nuevo con esto de C# y queria saber si todos los programas que yo programe en visual estudio .net 2008 correran tambien en mono,
claro esta en VB.net 2008 utilizo C#.
gracias de antemano por su atencio hast aluego.
April 2nd, 2009 at 8:45 am
Hola,
La respuesta es no. No hay compatibilidad total, pero puedes instalar Mono para Windows y buscando en Google, puedes usarlo en Visual Studio. De esta forma, la gente que utilice Linux también podrá usarlo.
Saludos.