Vous êtes sur la page 1sur 14

Introduccin

Nuestro objetivo a la hora de crear estas prcticas es ver cmo usar los servicios y
mecanismos que nos ofrece un Middleware mediante una sucesin de ejemplos,
quizs algo sencillos al principio pero que ganarn en riqueza a lo largo del curso. El
entorno de desarrollo que os recomendamos es Visual Studio en cualquiera de sus
versiones recientes.

Curso de Middleware. Prctica 1.

1 de 14

Primer ejemplo: una aplicacin local


Al principio vamos a construir una pequea aplicacin que nos permitir
familiarizarnos con C# y con el entorno de desarrollo. Vamos a utilizar un ejemplo
muy usual en este tipo de cursos: una calculadora. Esta aplicacin ser inicialmente
local (no remota) y posteriormente la vamos a transformar en una aplicacin
distribuida.
El primer paso pues ser definir la clase de la calculadora. Os proponemos un cdigo
de ejemplo, pero os aconsejamos que intentis crear uno vosotros mismos.

// Calculadora.cs
using System;
namespace Calculo
{
public class Calculadora
{
public double Suma(double izq, double dch)
{
return izq+dch;
}
public double Producto(double izq, double dch)
{
return izq*dch;
}
}
}

Para usar este cdigo vamos a construir un programa principal que har llamadas a
dicha clase. Un ejemplo sera:

Curso de Middleware. Prctica 1.

2 de 14

// Program.cs
using System;
using Calculo;
namespace practica1
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Esto es una prueba");
Calculadora calc = new Calculadora();
Console.WriteLine("Suma 5+3=" + calc.Suma(5, 3));
Console.WriteLine("Producto 5*3=" + calc.Producto(5,
3));

Console.WriteLine("Pulsa enter para terminar");


Console.ReadLine();
}
}
}

Editar y compilar estos programas es relativamente fcil si utilizamos Visual Studio,


basta crear el proyecto correspondiente, aadir los ficheros de cdigo y compilar.
Veamos cmo crear este programa.
El primer paso ser crear un proyecto desde Visual Studio. En nuestro ejemplo, hemos
elegido una aplicacin de consola y le hemos puesto el nombre de practica1:

Curso de Middleware. Prctica 1.

3 de 14

Al terminar deberamos tener algo similar a:

A continuacin, aadimos la clase Calculadora:

Curso de Middleware. Prctica 1.

4 de 14

Tendramos que ver algo similar a:

y aadimos el cdigo anterior:

Curso de Middleware. Prctica 1.

5 de 14

Ahora, aadimos el cdigo del programa principal:

Si pulsamos sobre el botn de ejecutar deberamos ver lo siguiente:

Curso de Middleware. Prctica 1.

6 de 14

Cuando veas este smbolo, nos gustara llamar tu atencin sobre


algn aspecto de la prctica. Es un buen momento para que tu
profesor os cuente conceptos de teora. No avances en la
prctica hasta asegurarte que has entendido correctamente
los objetivos de la misma!!!!.
En este punto, queremos llamar la atencin principalmente sobre conceptos
de programacin tradicional que sern relevantes cuando hagamos
aplicaciones distribuidas. Incluso en un ejemplo tan simple como en el
anterior, podemos encontrar dudas. En concreto, nos gustara comentar los
siguientes puntos:

Conoces y puedes explicar las palabras reservadas del cdigo, en


particular conoces la diferencia entre paquete (o namespace) y clase.
Sabes lo que significa la clusula using (es el equivalente de
import de java)?

Entiendes la diferencia entre paquete y librera (tanto esttica como


dinmica).

Sabras hacer el mismo ejemplo sin necesidad de separar la clase del


programa principal? Tendra sentido? Puedes explicar alguna
ventaja o inconveniente de hacer de una forma u otra?

Puedes explicar la diferencia de paso de parmetros por valor y por


referencia.

Cuando una clase se encuentra dentro de un namespace a uno o varios


niveles, Sabes cmo se nombra?. Entiendes la diferencia entre
Calculo.Calculadora y Calculadora?

Curso de Middleware. Prctica 1.

7 de 14

C# no dispone de un operador o instruccin para la destruccin o


liberacin de objectos (p.e. delete o free). Entiendes las
implicaciones de este concepto? Puedes decir cuando vive un objeto y
cuando muere en el ejemplo anterior. Qu es un recolector de
memoria (garbage collector)?.

Sabes la diferencia entre un miembro de clase y un miembro de


instancia?. Cmo los distingues?

Sabes la diferencia entre mbito de una variable y vida de una


instancia? Es lo mismo? Tenemos que preocuparnos de ello?

Dnde se almacenan la variable calc del programa principal?. En


la pila (stack)? En el montn (heap)? Y los argumentos de los
mtodos que tenemos en la calculadora?

Sabras decir si alguna de las preguntas anteriores te parecen


importantes para los sistemas distribuidos? Cules? Intenta razonar tu
respuesta.

Curso de Middleware. Prctica 1.

8 de 14

Ejercicios adicionales
Sobre el cdigo anterior, vamos a realizar algunos cambios que nos ayuden a
comprender otros conceptos relevantes.
En nuestro primer ejemplo nos haran falta otras operaciones tales como dividir o
restar. Lo dejamos para que lo hagis vosotros mismos como ejercicio. Por
ejemplo, aade cdigo similar a:

public double Resta(double izq, double dch)


{
return izq - dch;
}

Otra mejora que necesitaremos en breve es disponer de trazas. Os recomiendo que


insertis alguna traza en las funciones de la clase calculadora; de esta forma
podremos observar dnde se est ejecutando el objeto cuando pasemos al modelo
distribuido. Como ejemplo, te ofrecemos el siguiente fragmento de cdigo:

public double Resta(double izq, double dch)


{
Console.WriteLine(Estoy en el mtodo Resta);
return izq - dch;
}

Otro aspecto muy necesario en breve es la generacin de una librera que tenga la
calculadora. Vamos a separar el cdigo de la calculadora y del programa principal.
Decimos que sto ser necesario ya que cuando pasemos al modelo distribuido, la
lgica de la calculadora estar en el servidor, mientras que nuestro programa
principal se convertir en el cliente. Os contamos paso a paso cmo hacer este
cambio. Primero debemos aadir un nuevo proyecto a la solucin. Este nuevo
proyecto debe ser de tipo librera. La siguiente pantalla representa este paso.

Curso de Middleware. Prctica 1.

9 de 14

Hemos llamado a nuestro proyecto Calculo. Tras la creacin de este proyecto lo


que veremos en el Visual Studio ser algo similar a:

Observa que se nos ha creado una clase por defecto en el proyecto (llamada
Class1.cs). Podemos borrarla y en su lugar vamos a poner la clase calculadora
que tenamos anteriormente. Es suficiente con arrastrar el fichero Calculadora.cs.
El resultado final debera ser lo siguiente:

Curso de Middleware. Prctica 1.

10 de 14

Si ahora compilamos, veremos que se generan errores de compilacin. Antes de


continuar, os animamos a que lo compruebe. El problema surge debido a que el
proyecto practica1 no sabe localizar la clase Calculadora. Por ello es necesario
incluir una referencia al proyecto que contiene ese cdigo. Esta accin se realiza
pulsando con el botn derecho encima del proyecto practica1. Elegimos aadir
referencia.

Y elegimos el proyecto que contiene la librera:

Curso de Middleware. Prctica 1.

11 de 14

Ahora debera compilar y ejecutar sin problema.


Os animamos a que probis a seguir probando las diferentes opciones que nos
ofrece el entorno de trabajo. Un aspecto interesante para probar es la depuracin.
Intentad depurar y seguir paso a paso la ejecucin del programa.

Es un buen momento para que tu profesor os cuente


conceptos de teora. No avances en la prctica hasta
asegurarte que has entendido correctamente los objetivos de
la misma!!!!.
Hemos aadido algunos conceptos nuevos que debemos meditar. Por favor,
intenta explicar los siguientes puntos:

En nuestro ejemplo, tenemos una librera llamada Calculo.dll y un


ejecutable practica1.exe. Entiendes la diferencia?

Tiene sentido separar el cdigo en dos assemblies (librera y


ejecutable)? Puedes explicar alguna ventaja o inconveniente de hacer
de una forma u otra?

Cuando hemos separado el cdigo de la calculadora para hacer una


librera, Ha sido necesario cambiar el nombre del namespace?
Hemos modificado la sentencia que haca using? Tiene sentido
hacer esos cambios cuando construimos una librera?

Para qu sirve aadir una referencia al proyecto? Ha sido necesario


aadir otra referencia a la inversa? Qu pasara? Tiene sentido?

En un programa distribuido es importante dividir la funcionalidad en


varias libreras? No complica la programacin innecesariamente?

Curso de Middleware. Prctica 1.

12 de 14

Resumen
A lo largo de esta prctica hemos aprendido a construir nuestra primera aplicacin en
C#. Por ahora, es una aplicacin local, pero nos ha permitido una primera toma de
contacto con C# y con Visual Studio. Este primer ejemplo nos ha permitido repasar
conceptos de programacin a los que tendremos que replantear cuando veamos
sistemas distribuidos.

Curso de Middleware. Prctica 1.

13 de 14

Conceptos introducidos
En esta prctica hemos introducido/repasado los siguientes conceptos:

Aplicacin local

Clase

Instancia

Mtodos de instancia y de clase

Namespace

Ejecutable y Librera

Paso de parmetros por valor y por referencia

Mquina virtual

Recolector de basura

Tipo de datos

Constructor

Curso de Middleware. Prctica 1.

14 de 14

Vous aimerez peut-être aussi