6.13. Proyectos a partir de varios fuentes
En los programas de gran tamaño, lo habitual es que no se plantee como un único fichero fuente de gran tamaño, sino como una serie de objetos que colaboran entre ellos, lo que supone descomponer nuestro fuente en varias clases (y, por tanto, en varios ficheros).
En estos casos, un editor como el Bloc de Notas, o incluso como Notepad++, se queda corto. Sería preferible un entorno que nos permitiera editar nuestros fuentes, compilarlos sin necesidad de salir de él, que nos destacara las líneas que contienen errores, que nos mostrara ayuda sobre la sintaxis de cada función, que nos permitiera depurar nuestros programas avanzando paso a paso…
Existen entornos que nos permiten hacer todo eso, y además hacerlo gratis. El más conocido es el Visual Studio de Microsoft, que en su versión Express incluye todo lo un programador novel como nosotros puede necesitar. Una alternativa muy similar, pero algo más sencilla (lo que supone que funcione más rápido en ordenadores no demasiado potentes) es SharpDevelop.
Vamos a ver las pautas básicas de manejo de SharpDevelop (que se aplicarían con muy pocos cambios al caso de Visual Studio):
Comenzamos por descargar el fichero de instalación del entorno, desde su página oficial (http://www.icsharpcode.net/opensource/sd/). La versión 3.1, para las versiones 2.0 y 3.5 de la plataforma .Net, ocupa unos 15 Mb.
La instalación comenzará simplemente con hacer doble clic. Deberíamos ver una ventana parecida a ésta:
Como es habitual, el siguiente paso será aceptar el contrato de licencia, después deberemos decir en qué carpeta queremos instalarlo, comenzará a copiar archivos y al cabo de un instante, tendremos un nuevo icono en nuestro escritorio:
La instalación debería ser muy sencilla en Windows Vista y superiores, pero en Windows XP quizá necesite que instalemos la versión 3.5 de la plataforma .Net (se puede hacer gratuitamente desde su página oficial).
Cuando lanzamos nuestro nuevo icono, veremos la pantalla principal de SharpDevelop, que nos muestra la lista de los últimos proyectos ("soluciones") que hemos realizado, y nos permite crear uno nuevo:
En nuestro caso, comenzaremos por crear una "Nueva solución", y se nos mostrará los tipos de proyectos para los que se nos podría crear un esqueleto vacío que después iríamos rellenando:
De estos tipos, el único que conocemos es una "Aplicación de Consola" (en C#, claro). Deberemos escribir también el nombre., y aparecerá un esqueleto de aplicación que nosotros sólo tendríamos que completar:
Cuando hayamos terminado de realizar nuestros cambios, podemos compilar el programa con el botón:
Si hubiera algún error, se nos avisaría en la parte inferior de la pantalla, y se subrayarían en rojo las líneas correspondientes de nuestro programa; si todo ha ido bien, podremos ejecutar nuestro programa para verlo funcionando:
(Si la ventana de nuestro programa se cierra tan rápido que no tenemos tiempo de leerla, nos puede interesar añadir provisionalmente una línea ReadLine() al final del fuente, para que éste se detenga hasta que pulsemos la tecla Intro)
Así prepararíamos y lanzaríamos un programa formado por un solo fuente. Si se trata de varios fuentes, basta con ir añadiendo nuevas clases al proyecto. Lo conseguimos pulsando el botón derecho sobre el nombre del proyecto (en la ventana izquierda, "Proyectos") y escogiendo las opciones Agregar / Nuevo Elemento:
Normalmente, el tipo de elemento que nos interesará será una clase, cuyo nombre deberemos indicar:
y obtendríamos un nuevo esqueleto vacío (esta vez sin "Main"), que deberíamos completar.
Nuestro programa, que ahora estaría formado por dos clases, se compilaría y se ejecutaría de la misma forma que cuando estaba integrado por una única clase.
Ejercicio propuesto:
Crear un proyecto que contenga las siguientes clases (cada una en un fichero distinto):
o Una clase Trabajador, cuyo constructor escriba en pantalla "Soy un trabajador".
o Una clase Programador, que derive de Trabajador, cuyo constructor escriba en pantalla "Soy programador".
o Una clase Analista, que derive de Trabajador, cuyo constructor escriba en pantalla "Soy analista".
o Una clase Ingeniero, que derive de Trabajador, cuyo constructor escriba en pantalla "Soy ingeniero".
o Una clase IngenieroInformatico, que derive de Ingeniero, cuyo constructor escriba en pantalla "Soy ingeniero informático".
o Una clase "PruebaDeTrabajadores", que cree un objeto perteneciente a cada una de esas clases.