Buscador

Recomendaciones previas a la instalación de Visual Studio .NET - I

Es recomendable realizar la instalación sobre un equipo limpio, es decir, un equipo con el software mínimo para poder realizar pruebas con .NET Framework, o con otro tipo de aplicaciones sobre las que estemos seguros de que no se van a producir conflictos con el entorno. 
En este sentido, una buena práctica consiste en crear en nuestro disco duro una partición que utilizaremos para el trabajo cotidiano con el ordenador, y otra partición en la que instalaremos VS.NET. Para ayudar al lector a formarse una idea más aproximada en cuanto a configuraciones hardware y software, el equipo utilizado para realizar las pruebas mostradas en este texto ha sido un Pentium III a 933 MHz, con 256 MB de memoria y disco duro de 18 GB. 
En cuanto a sistemas operativos, se han realizado dos particiones sobre el disco duro; en la partición primaria se ha asignado un tamaño de 2 GB y se instalado Windows 98. En el resto de espacio en disco se ha creado una unidad lógica sobre la que se ha instalado Windows 2000 Server y el Service Pack 2 para este sistema operativo.

El sistema operativo para Visual Studio .NET

VS.NET puede ser instalado en un equipo con uno los siguientes sistemas operativos:
• Windows XP
• Windows 2000 (se requiere tener instalado el Service Pack 2).
• Windows NT 4.0. (se requiere tener instalado el Service Pack 5).
• Windows Me.
• Windows 98 (SR2)
Para aprovechar todo el potencial de desarrollo de la plataforma, es recomendable usar como sistema
operativo Windows XP o 2000, ya que ciertos aspectos del entorno (las características avanzadas de
gestión gráfica por ejemplo) no están disponibles si instalamos .NET en otro sistema con menos
prestaciones.
Según fuentes de Microsoft, la próxima versión de su sistema operativo: Windows .NET Server,
incluirá la plataforma .NET instalada de modo predeterminado.

Requisitos hardware de Visual Studio .NET

La Tabla 1 muestra una lista con las características mínimas y recomendadas que debe tener el equipo en el que instalemos VS.NET.
Tabla 1. Requerimientos hardware para instalar Visual Studio .NET.

El SDK de .NET Framework: las herramientas de desarrollo

El núcleo de .NET Framework consta de un conjunto de ejecutables y librerías de enlace dinámico, que sirven como soporte al desarrollo de programas escritos para esta plataforma. 
Dicho paquete de elementos constituye el denominado kit de desarrollo de software o SDK (Software Development Kit) para la plataforma .NET. El SDK es un paquete de libre distribución, y se puede obtener gratuitamente de los sitios de descarga que Microsoft tiene habilitados a tal efecto. En principio, el SDK es lo único que necesita instalar el programador para desarrollar aplicaciones que funcionen en la plataforma .NET, ya que aparte de las herramientas de desarrollo y librerías, también se instala la propia plataforma. Sin embargo, la aridez e incomodidad de trabajar con múltiples herramientas de modo separado, harán que en la mayoría de los casos optemos por la programación utilizando el entorno de desarrollo de aplicaciones de .NET: Visual Studio .NET. Visual Studio .NET es un avanzado IDE para el desarrollo de programas basados en .NET Framework, que hace un uso transparente de todas las utilidades del SDK de .NET, liberando al programador, de la necesidad de tener que usar y configurar manualmente todo el conjunto de aplicaciones del SDK. Tales ventajas, no obstante, tienen un precio, ya que mientras que el SDK es un paquete gratuito, Visual Studio .NET es un producto comercial, por el que debemos pagar la correspondiente licencia de uso. A lo largo de este texto, los ejemplos se desarrollarán en su mayoría utilizando Visual Studio .NET, por lo que antes de pasar a crear nuestro primer programa para .NET, explicaremos los pasos a dar para instalar dicho entorno de desarrollo.

.NET Framework: el entorno de ejecución

La plataforma .NET Framework, en la que se basa el paradigma de .NET, consiste en una tecnología multiplataforma y multilenguaje. A grandes rasgos, la arquitectura de .NET Framework se ha diseñado de modo abierto, de manera que la plataforma pueda ser ejecutada en diferentes sistemas operativos. 
El entorno de ejecución de .NET se sitúa como una capa intermedia entre el hardware de la máquina y el software, actuando de traductor, lo que posibilita dicha integración. Ver Figura 26.
Figura 26. La plataforma .NET Framework se sitúa como intermediario entre aplicación y sistema operativo.
Entre las muchas cualidades y características, podemos destacar el hecho de que una aplicación creada bajo .NET Framework, podrá ejecutarse en diferentes equipos con distintas arquitecturas sin necesidad de recompilación, siempre y cuando, en dichas máquinas esté instalado el entorno de ejecución de .NET. Otro aspecto también muy destacable, consiste en el hecho de que una aplicación puede estar compuesta a base de piezas o elementos de código, denominados ensamblados o assemblies, pudiendo haberse codificado cada ensamblado en un lenguaje distinto, siempre que todos esos lenguajes sean compatibles con las especificaciones de la plataforma .NET.

Las herramientas para la creación de programas

Remontándonos a los tiempos de las aplicaciones en modo texto, bajo MS-DOS, con los lenguajes y herramientas de programación disponibles en aquella época, los pasos para la creación de un ejecutable descritos en un apartado anterior, debían ser realizados por el programador de forma manual, ya que todos los elementos utilizados para la creación del programa se encontraban separados. 
Disponíamos por un lado, de un programa que consistía en un editor de código fuente, por otro, el compilador, enlazador, librerías de utilidades, etc. Sin embargo, la llegada y evolución de los entornos de desarrollo integrados (IDE, Integrated Development Environment), que incorporan en una sola aplicación todos los elementos necesarios para el desarrollo de programas, estas tareas se han automatizado hasta tal nivel, que el programador sólo necesita escribir el código del programa, mientras que los pasos de compilación, enlazado y generación del ejecutable las realiza internamente el propio entorno. 
La aparición de la tecnología .NET, sorprendentemente, proporciona al programador, si este lo desea, una forma de trabajo a la antigua usanza; disponiendo también de un sofisticado entorno de desarrollo, que será probablemente el medio de desarrollo más habitual. Programando con VB.NET podemos optar por ambos modos de trabajo: a través de utilidades separadas, ejecutadas en una ventana MS-DOS o Windows; o bien, empleando Visual Studio .NET (VS.NET, como también lo denominaremos a lo largo del texto), el IDE o herramienta de desarrollo de la plataforma.

Interfaces de usuario

Un interfaz de usuario es el aspecto que un programa muestra, y el modo en que interactúa con el usuario que lo ejecuta. Los tipos de interfaz de usuario que utilizaremos a lo largo de este texto serán los siguientes:
• Consola. El interfaz de usuario de consola consiste en una ventana de tipo MS-DOS o modo comando, mediante la cual, el usuario introduce las instrucciones en el indicador de comandos del sistema. La creación de programas de tipo consola es sencilla y rápida, y debido a que el objetivo principal de este texto es el aprendizaje de los diferentes aspectos del lenguaje, la mayoría de los ejemplos realizados se harán utilizando la consola.
 • Formularios Windows. Este tipo de interfaz está basado en el entorno de ventanas del sistema operativo Windows, permitiéndonos crear aplicaciones basadas en formularios o ventanas, con todas las características típicas de este tipo de programas.

El archivo ejecutable y su proceso de creación - II

• Enlace. En esta fase se toman, por un lado, el código objeto generado por el compilador, y por otro, el código de rutinas de uso general que necesita el lenguaje de programación, que se encuentra habitualmente organizado en archivos denominados librerías o bibliotecas de código. Todo ello, mediante un programa o utilidad denominado enlazador, se une para obtener el ejecutable final, un archivo con extensión .EXE. Ver Figura 25.
Figura 25. Proceso de enlace del código objeto y librerías para obtener el ejecutable.

El archivo ejecutable y su proceso de creación - I

Una vez escrito el programa a partir del algoritmo, en el lenguaje de programación de nuestra elección, necesitamos obtener el archivo ejecutable correspondiente. El archivo ejecutable es aquel que necesita el ordenador para hacer funcionar el programa, o dicho de otro modo, es la representación física de nuestro algoritmo. Un ejecutable es generalmente un archivo con extensión EXE, que obtenemos tras una serie de pasos, que a grandes rasgos describimos a continuación:
• Compilación. Consiste en convertir el código escrito por el programador en el llamado código objeto. El código objeto es el estado en el que se encuentra nuestro programa en el punto previo a la fase de obtención del ejecutable definitivo. Dependiendo de la herramienta de programación utilizada, el código objeto se almacenará en forma de archivo, o será pasado directamente a la siguiente fase de creación del ejecutable. Para transformar el código fuente a código objeto se emplea el compilador, que es un programa o utilidad encargada de esta labor. Ver Figura 24.
Figura 24. Proceso de compilación del código del programa

Seleccionar el lenguaje de programación más adecuado

Existen multitud de lenguajes de programación: Visual Basic .NET (el motivo del presente texto), C# .NET, Visual C++, Java, Pascal, FORTRAN, etc. Debido a este hecho, cabría formularnos a continuación la siguiente cuestión: “ya que debemos usar un lenguaje comprensible para el ordenador al desarrollar el programa, ¿no sería más fácil que existiera un único lenguaje con el que poder desarrollar todos los programas?, ¿por qué existe tal profusión de lenguajes de programación?”. 
Como respuesta, podemos establecer una analogía entre varios oficios que utilicen herramientas manuales. Cada oficio tiene una tarea concreta que resolver, y para ello, el trabajador emplea un conjunto de herramientas especializadas que le ayudan en dicha labor. 
El mismo caso podemos aplicar al desarrollo de programas. No es lo mismo crear un programa para realizar la facturación de una empresa; que tener que efectuar una serie de operaciones relacionadas directamente con los componentes físicos del equipo; o elaborar cálculos científicos avanzados. 
Por este motivo, para cada uno de estos problemas encontraremos un lenguaje que esté especializado en alguna de estas áreas: gestión, matemático, hardware, etc.; y será ese el lenguaje que debamos emplear, ya que estará dotado de un conjunto de utilidades que ayuden al programador en los aspectos concretos que deba resolver.

Programación orientada a objeto (OOP)

El modelo de programación orientada a objeto (OOP, Object Oriented Programming) se trata de una evolución de la programación estructurada, que se basa en focalizar el desarrollo a través de los elementos involucrados en un proceso, y no en abordar el problema desde el mismo proceso. 
Esto quiere decir que ante un problema como el mantenimiento de datos de los clientes de una empresa, la programación estructurada aborda en primer lugar los procesos a desarrollar: alta, modificación, baja, etc. La programación OOP por el contrario, comienza su análisis por el elemento sobre el que van a actuar los procesos: el objeto Cliente. 
Por tal motivo, en lugar de hacer simples llamadas a procedimientos como sucede en la programación estructurada, empleando técnicas OOP, primeramente creamos el objeto con el que vamos a trabajar, y a través del mismo canalizamos todas las llamadas a sus procesos, manipulando también su información si es necesario. 
En posteriores temas examinaremos con profundidad las principales características de la programación orientada a objeto, ya que se trata de un gran avance logrado en las técnicas de programación

Programación estructurada

Como complemento a la programación procedural apareció la programación estructurada, consistente en un modelo de programación que utiliza un conjunto de estructuras de control, que simplifican la escritura del código y disminuyen el número de errores del programa. 
La programación estructurada también se basa en el uso de procedimientos y módulos de código, pero además, dentro del código de un procedimiento, se utilizarán determinadas estructuras proporcionadas por el lenguaje, que facilitarán la codificación de los procesos. Para poder comprender mejor esta técnica planteemos el siguiente caso: necesitamos diseñar un proceso dentro de un procedimiento, que permita introducir un número de factura y la imprima, pero sólo deberá imprimirla si el número es menor o igual a 500. 
Con las técnicas de programación anteriores no disponemos de un elemento que nos permita comprobar el número de factura, para poder o no imprimirla. Sin embargo, mediante la programación estructurada, podemos utilizar una estructura de decisión, que en pseudocódigo podemos llamar Si...FinSi, que realice la mencionada verificación, y proceda con la impresión si todo es correcto. El Código fuente 9 muestra el algoritmo para este problema.


Inicio
Modulo Principal
Procedimiento ImprimeFac
Leer NumFactura
Si NumFactura <= 500
Imprimir
FinSi
Fin Procedimiento
Fin Modulo
Fin
Código fuente 9
Trataremos ampliamente todos los tipos de estructuras de control cuando abordemos los elementos del lenguaje, de momento este ejemplo sirve para que el lector se forme una idea de cómo mediante la programación estructurada, combinamos todos los elementos vistos hasta el momento: módulos, procedimientos y estructuras de control, para escribir el código de nuestro programa.

Programación procedural - II

Por ejemplo, si en un programa tenemos procedimientos que se encargan del mantenimiento de clientes y otros que realizan la gestión de facturas, podemos crear un módulo para cada categoría de procedimiento y de esta manera, realizar una mejor organización del código de la aplicación. 
Véase el esquema de la Figura 23.
Figura 22. Ejemplo de código fuente utilizando el modelo de programación procedural
Figura 23. Organización de procedimientos dentro de módulos.

Programación procedural - I

Para solventar los problemas derivados de la programación lineal apareció la programación procedural, que se basa en tomar el código de un programa y dividirlo en partes lógicas con entidad propia, denominadas procedimientos o rutinas de código. Cada procedimiento se ocupa de resolver una tarea específica, de modo que partiendo de un procedimiento inicial o de nivel superior, se llamará a otro procedimiento para que ejecute un determinado trabajo, y al finalizar, se devolverá el control o flujo de la ejecución al procedimiento que hizo la llamada. Véase el esquema de la Figura 21.
Figura 21. Esquema de ejecución del código en programación procedural.
Mediante esta técnica, el ejemplo del cálculo de facturas planteado en el apartado anterior puede enfocarse de un modo mucho más optimizado, ya que sólo necesitaremos escribir el código del proceso que realiza la totalización y cálculo de impuestos una vez, situarlo en un procedimiento, y llamarlo las veces que haga falta. La Figura 22 muestra el esquema de ejecución del código de dicho ejemplo. 
Dentro de la programación procedural se utiliza también el concepto de módulo, para hacer referencia a una entidad contenedora de procedimientos. Esto quiere decir que podemos utilizar los módulos para agrupar funcionalmente o por tipos de proceso, los procedimientos que forman parte de un programa.

Programación lineal

Este es el modelo más tradicional, encontrándose ya en desuso. El código se organiza linealmente, y se ejecuta desde la primera línea hasta la última, sin disponer de ningún tipo de estructuración o bifurcación. El Código fuente 7 muestra un esquema de este tipo de técnica.

Instrucción1
Instrucción2
Instrucción3
.
.
.
InstrucciónFinal
Código fuente 7

El inconveniente con este modelo de programación, radica en que si dentro de un algoritmo hay un proceso que necesita repetirse un número determinado de veces, se tendrá que repetir la escritura del código correspondiente a ese proceso las veces que sean necesarias. Pongamos como ejemplo un proceso que necesita abrir un archivo que contiene los datos de facturas, y totalizar varias, calculando además, el impuesto a añadir al total. Mediante programación lineal, el pseudocódigo de este proceso quedaría como muestra el Código fuente 8.
Inicio
Abrir archivo datos facturas
Obtener Factura1
Obtener TipoImpuesto
Sumar LineasFactura
Calcular TotalFactura
Obtener Factura2
Obtener TipoImpuesto
Sumar LineasFactura
Calcular TotalFactura
Obtener Factura3
Obtener TipoImpuesto
Sumar LineasFactura
Calcular TotalFactura
Fin
Código fuente 8

Vemos como hay tres líneas que se repiten, lo cual es un elemento negativo en esta técnica de
programación, ya que obliga a escribir una mayor cantidad de código, y el mantenimiento del mismo
se hace más dificultoso.

Modelos de programación

Un modelo de programación consiste en la técnica empleada para escribir el código de un programa, de forma que consigamos la mayor efectividad y optimización al ejecutarlo. El desarrollo de las herramientas informáticas ha posibilitado una progresiva evolución en las técnicas de programación, con la consiguiente mejora que ello supone, tanto a la hora de la escritura como de la ejecución de un programa. A continuación se realiza una descripción de los modelos de programación existentes.

Lenguajes de alto nivel


Aportan tipos de datos y estructuras de control entre otros elementos. Igualmente disponen de una
sintaxis en lenguaje más natural, y un amplio conjunto de funciones internas, que ayudan al
programador en diversas situaciones, así como un número determinado de utilidades y asistentes que
ahorran tiempo y trabajo al programador. Visual Basic .NET es uno de los ejemplos de este tipo de
lenguaje.

Lenguajes de bajo nivel

En este tipo de lenguajes, al igual que sucede con los lenguajes máquina, existe una gran dependencia con el hardware del equipo en el que se va a ejecutar. 
No obstante son algo más fáciles de escribir, quedando su complejidad en un punto intermedio entre el lenguaje máquina y uno de alto nivel: no es tan complicado como el primero, pero exige una mayor curva de aprendizaje que el segundo, debido a que se necesita conocer el tipo de máquina en que se va a ejecutar el programa 
Otra característica reside en que el código escrito no es directamente ejecutable en el ordenador, sino que ha de pasar por un proceso de traducción de código fuente a código binario denominado compilación. El ejemplo más destacable de este tipo de lenguaje es el Ensamblador.

Lenguajes máquina

Se trata de lenguajes cuyas instrucciones son directamente comprendidas por el ordenador en el que se ejecuta el programa. Su dependencia por lo tanto, con respecto al hardware del ordenador en que funcionan es total, por lo que su ejecución es más veloz que cualquier otro tipo de lenguaje que podamos emplear. Tras la anterior explicación, y ya que este tipo de código es el único que entiende el ordenador de modo directo, ¿no sería mejor programar siempre en lenguaje máquina?. 
Como respuesta, y a pesar de la mencionada ventaja, podemos decir que existen inconvenientes muy importantes: la vinculación del lenguaje máquina con el hardware del equipo, hace que un programa no pueda ser transportable a otro tipo de arquitecturas de ordenador, por lo que deberemos rescribir el programa, si necesitamos que sea ejecutado en una máquina con diferente arquitectura que para la que originalmente fue diseñado. 
Por otro lado, la escritura de un programa en lenguaje máquina es una labor lenta y compleja, en la que el programador no dispone de herramientas de soporte, que le ayuden en su tarea.

Tipos de lenguaje de programación

Antes de proceder a escribir el código del programa, debemos elegir el lenguaje de programación que mejor se adapte a nuestras necesidades. En función del tipo de problema a resolver, los lenguajes se clasifican en los niveles descritos a continuación.

Implementación de programas en la plataforma Microsoft .NET

Implementación del programa 

Cumplimentada la fase de análisis, y obtenido el correspondiente algoritmo mediante alguna de las técnicas descritas en el tema anterior, la etapa de implementación consiste en trasladar al ordenador el resultado del análisis del problema. Para introducir en el ordenador las instrucciones del algoritmo, deberemos utilizar un lenguaje de programación, con el que crearemos un programa que tenga las sentencias a ejecutar. Finalizada la escritura del programa, procederemos a su compilación, obteniendo un archivo ejecutable con las instrucciones en un formato denominado código binario, ya comprensible por el ordenador para su ejecución. En los próximos apartados se tratan los aspectos del proceso de implementación en lo que respecta a los lenguajes de programación, tipos y técnicas; el proceso de creación del ejecutable; una breve descripción de la plataforma .NET Framework, como entorno de ejecución de aplicaciones; Visual Basic .NET como lenguaje de nuestra elección, su instalación, entorno de desarrollo, y la confección de un sencillo programa de prueba.

Diagramas Nassi-Schneiderman - III

En los diagramas N-S, como observará el lector en el siguiente ejemplo, los bloques de instrucciones que están a un mayor nivel de profundidad, y que en pseudocódigo deberíamos indentar, se representan en recuadros interiores al cuadro principal del diagrama. Veamos en la Figura 20, como quedaría el algoritmo de compra de artículos en un diagrama de este tipo, eliminaremos la condición de que el artículo tenga descuento o bonificación para no recargar en exceso el diagrama.

Figura 20. Diagrama N-S para algoritmo de compra de artículos

Diagramas Nassi-Schneiderman - II

El algoritmo de apertura de llave, pero en esta ocasión añadiendo un refinamiento para realizar la selección de llave, se representaría según muestra la Figura 19.

Figura 19. Diagrama N-S para algoritmo de apertura de puerta con selección de llave.

Diagramas Nassi-Schneiderman - I

Este tipo de diagramas, también denominados N-S, se basan en la representación de los pasos del algoritmo mediante recuadros adyacentes, eliminando los símbolos de flechas y líneas de conexión. Al mismo estilo de los diagramas de flujo, podemos situar una o varias acciones en un único recuadro En el caso más simple, una ejecución de varias instrucciones sin ningún tipo de condición o desvío en el flujo del programa, como es el ejemplo de apertura de llave sin selección, un diagrama de este tipo para dicho algoritmo quedaría cómo se muestra en la Figura 18.

Pseudocódigo - IV

Finalmente, convertiremos a pseudocódigo el diagrama del ejemplo sobre el proceso de compra de artículos. Ver Código fuente 6.

CompraArticulos
===============
Comienzo
Mientras haya artículos
Lectura Precio
Si Precio > 30
Descuento = Precio * 0.02
Precio = Precio – Descuento
Sino
PuntosBonif = PuntosBonif + 1
FinSi
TotalCompra = TotalCompra + Precio
FinMientras
Escritura TotalCompra, PuntosBonif
Final


Código fuente 6

Pseudocódigo - III

Pasemos a continuación, a otro de los ejemplos anteriores realizados para un diagrama; de esta forma podremos establecer las comparaciones necesarias entre una y otra técnica. El pseudocódigo a escribir será para el algoritmo de compra de cartuchos de impresora, que incluye cálculo de impuestos. Ver Código fuente 5.

CompraCartuchos
===============
Comienzo
Lectura Cartuchos
ImporteCartuchos = Cartuchos * 12
Impuesto = ImporteCartuchos * 0.16
TotalFac = ImporteCartuchos + Impuesto
Escritura ImporteCartuchos, Impuesto, TotalFac
Final
Código fuente 5

Pseudocódigo - II

Como medio de facilitar la legibilidad de las líneas del algoritmo, indentaremos aquellas que formen parte de un bloque o estructura. Si debemos escribir comentarios aclaratorios en las operaciones del algoritmo, podemos emplear dos barras invertidas //, comilla ', llaves { }, etc. Comencemos con un ejemplo sencillo de pseudocódigo, basado en un problema anteriormente comentado, sobre la apertura de una puerta después de elegir la llave correcta; el algoritmo quedaría resuelto mediante este sistema como muestra el Código fuente 4.


Apertura
========
Comienzo
elegir una llave
Si podemos introducir llave en cerrojo
abrir la puerta
FinSi
Final
Código fuente 4

Pseudocódigo - I

El sistema de representación de algoritmos mediante diagramas de flujo, si bien es un medio gráfico y fácil de comprender, presenta el inconveniente de la lentitud en su proceso de creación, y dificultad de de gran parte del mismo. Como solución a este problema, se hace necesaria una técnica de diseño de algoritmos, que permita una creación más ágil del mismo, mediante un lenguaje sencillo de escribir y mantener. 
La respuesta la encontramos en el pseudocódigo. El pseudocódigo consiste en una forma de expresar el desarrollo de un algoritmo, empleando palabras de nuestro lenguaje cotidiano, junto con símbolos y palabras clave genéricas de la mayoría de lenguajes de programación, es decir, un sistema que se encuentra a medio camino entre el lenguaje natural y el de programación. No hay un conjunto de normas establecidas o sintaxis para la escritura de pseudocódigo; existen una serie de recomendaciones para el desarrollo de algoritmos mediante esta técnica, quedando el resto en manos de cada programador, que lo aplicará según sus necesidades o experiencia. Partiendo de lo anterior, cuando en pseudocódigo necesitemos realizar operaciones que impliquen un cálculo matemático o comparación entre elementos, emplearemos los operadores explicados en el anterior apartado dedicado a los diagramas de flujo, cuya finalidad es equivalente. En las indicaciones de principio, fin del algoritmo, lectura y escritura de datos, usaremos también las mismas palabras clave que empleamos en los diagramas de flujo. Para estructuras repetitivas o bloques de instrucciones que se ejecuten basados en una condición, podemos utilizar las siguientes palabras: Si...FinSi, Para...Siguiente, Mientras...FinMientras, Seleccionar Caso...FinCasos.