domingo, 7 de abril de 2013

UNIDAD 2 - 5TO. AÑO


UNIDAD 2
PROGRAMACIÓN ORIENTADA A EVENTOS

1.- ALGUNOS CONCEPTOS IMPORTANTES

El .NET Framework
Esta nueva tecnología de programación ha sido un gran alivio para los programadores ya que proporciona herramientas que facilitan muchísimo la tarea.
El .NET Framework es un entorno para construir, instalar y ejecutar aplicaciones Web (para utilizar a través de Internet, por computadora, celular, etc.) y locales (para utilizar en una PC). Se compone de dos partes principales:
·        El Common Language Runtime (CLR): es una serie de bibliotecas dinámicas (o DDL) que los programas de aplicación necesitan para poder funcionar. Es decir, es como una caja de herramientas que ya han sido programadas y que están almacenadas y listas para ser usadas por cualquier programa. Aquí están todas las instrucciones a nivel de sistema operativo que necesitan las aplicaciones. En realidad, todos los programas de aplicación tienen alguna herramienta de este estilo que permite comunicarse a muy bajo nivel con el procesador.
·        La biblioteca de clases .NET Framework: se trata de una jerarquía de clases de objetos que están definidos y se encuentran almacenados en una biblioteca de modo que cualquier aplicación pueda definir objetos de esas clases. Haciendo una analogía con Pascal, es como la biblioteca Wincrt donde se encontraban las operaciones de entrada y salida de datos (readln y writeln)
Pero entonces, si tanto las DLL como otras bibliotecas ya existían en tecnologías anteriores de programación, ¿por qué este entorno fue una revolución a la hora de programar? Porque si bien todos los programas de aplicación siempre usaron alguna herramienta de este estilo, cada uno de ellos tenía la suya propia, con lo cual todo lo que se programaba para una necesidad específica, no servía para la otra. Y ni que hablar cuando se trataba de lenguajes distintos.
Con la llegada de la plataforma .NET Framework se brinda al programador la posibilidad de utilizar el CLR y la biblioteca de clases independientemente de la aplicación, e incluso sirve para cualquier lenguaje que utilice la plataforma. Más aún, podríamos escribir una aplicación con partes en distintos lenguajes según la conveniencia.

El Namespace y el Assembly
Un Namespace es una forma de agrupar clases, funciones, tipos de datos, etc., que están relacionados entre sí. Puede estar repartido en varios Assemblies.
Un Assembly es una biblioteca dinámica donde están implementados los Namespaces. Dicho de otro modo, las funciones, rutinas, clases, tipos de datos, etc., que se refieren a un tema (por ejemplo, todos los que tienen que ver con manejo de imágenes) se encuentran agrupados, ordenados y clasificados en un Namespace. Esto es una ubicación lógica, conceptual. Mientras que el Assembly es la ubicación física del Namespace, la que se ejecuta efectivamente.
Los Namespaces y los Assemblies también son conceptos compartidos por la plataforma .NET

Lenguaje orientado a eventos
Los lenguajes que se desarrollan en la plataforma .NET, además de compartir DLL, clases, Namespaces y Assemblies, comparten también el IDE (Integrated Development Environment), es decir, el entorno integrado de desarrollo. Al abrir el Visual Studio .NET vemos que tenemos la posibilidad de crear programas en varios lenguajes. Nosotros vamos a utilizar el Visual Basic.
Además de ser un lenguaje que trabaja sobre la plataforma NET Framework, el Visual Basic es un lenguaje orientado a objetos y orientado a eventos. Ya hemos visto qué significa que un lenguaje sea orientado a objetos. Veremos ahora qué es un lenguaje orientado a eventos.
Los lenguajes de programación estructurada respondían a algoritmos finitos de modo que, una vez comenzado a ejecutarse el programa, éste continuaba hasta su finalización pasando por todas las instrucciones que el programador había especificado. La intervención del usuario en este caso, se limitaba a ingresar datos y observar luego sus resultados. En un lenguaje orientado a eventos el centro es el usuario y su interacción con el programa. En cualquier momento desde el inicio de su ejecución, el usuario puede realizar acciones sobre el funcionamiento del programa. A estas acciones se las denomina eventos.
El modo de programar entonces es muy distinto, ya que el programador tiene que tener en cuenta no sólo las acciones del programa sino las potenciales acciones del usuario durante la etapa de ejecución. De esta manera, los resultados de un programa pueden ser muy diversos dependiendo de las decisiones del usuario que lo está manejando.

2.- EL UTILITARIO VISUAL STUDIO 2010

Como en todo compilador de un lenguaje de alto nivel, en el utilitario podemos encontrar básicamente un editor para escribir nuestro programa y un compilador que lo traduce a lenguaje de máquina. Sin embargo, al ser Visual Basic .NET un lenguaje con todas las características que hemos mencionado antes, el utilitario con el que vamos a trabajar es bastante más poderoso. En principio, debemos decir que cuenta no sólo con un compilador Visual Basic sino también con compiladores de otros lenguajes, dado que la plataforma sobre la que se sustentan tiene como premisa la versatilidad y el aprovechamiento de los mismos recursos para distintas aplicaciones. No obstante, nosotros vamos a trabajar sólo con este lenguaje.
Una vez que elegimos crear un proyecto de Visual Basic, el Visual Studio 2010 nos ofrece varias posibilidades. Entre ellas, vamos a utilizar la de crear un formulario de Windows (Windows Form) y de una biblioteca de clases (Class Library).
Un formulario de Windows es la unidad básica de cualquier aplicación. Es como una hoja en blanco donde el programador va colocando los distintos controles que va a tener su proyecto. Así, diseña el formulario y luego pasa a la etapa de código.
Para el diseño de tal formulario, el programador cuenta con una Caja de Controles de los que dispone. Entre los controles más comunes vamos a destacar:
·        Button: representa un botón que puede ser presionado para ejecutar determinada tarea. Algunas propiedades de este control son:
• Text: Almacena el título del botón.
• TextAlign: Indica la alineación del texto dentro del botón.
• BackColor: Indica el color de fondo para el botón.
• Font: Cambia el tipo de letra para el título del botón.
• Enabled: Permite habilitar/deshabilitar el botón.
• Visible: Permite mostrar/ocultar el botón.
·        Label: se utiliza generalmente para mostrar un contenido informativo al usuario, ya que no permite cambiar su propiedad Text, que es la que contiene el texto. Comparte con Button las mismas propiedades excepto Enabled. 
·        TextBox: se utiliza generalmente para que el usuario ingrese algún dato que el programa necesita. Básicamente es lo mismo que Label pero permite que el usuario modifique su contenido. También tiene las mismas propiedades que Button, más algunas otras que pueden ser de utilidad.
• Multiline : Permite indicar si queremos permitir almacenar una sola línea o varias en el mismo control.
• ReadOnly : Permite indicar que el contenido de la caja de texto sea de sólo lectura, por lo que el usuario no podrá alterar su contenido.
• MaxLength : Permite indicar el máximo de caracteres que será capaz de almacenar la caja de texto.
• TextLength : Devuelve la longitud del texto que actualmente está almacenado en este control.
·        ListBox: Este control es capaz de almacenar una lista de valores, y a la vez permite al usuario seleccionar uno o varios de estos valores. Las propiedades más importantes de este control son:
• Items : Contiene la lista de valores que almacena el ListBox. Se trata de un objeto Collection, el cual proporciona una serie de métodos para poder trabajar sobre ese conjunto de valores
• Sorted : Si almacena el valor True, se ordenarán todos los elementos de la lista (tanto los que ya estaban almacenados como los que se inserten posteriormente) y si se le asigna el valor False ya no se ordenarán los nuevos elementos que se inserten (aunque los que ya estaban insertados mantendrán el orden).
• SelectedItem : Devuelve el elemento de la lista que se encuentra seleccionado por el usuario.
Además, el ListBox cuenta con varios métodos, entre los cuales podemos destacar el AddItem, que permite añadir un nuevo elemento a la lista
·        ComboBox: Se trata de un control mezcla de otros dos que ya hemos visto, el TextBox y el ListBox, ya que realmente se trata de un ListBox pero con apariencia de TextBox en el sentido de que es capaz de almacenar una lista de valores (ListBox) pero visualmente parece ser un TextBox. A diferencia de este último, si pulsamos sobre él desplegará la lista de los valores que almacena.

·        CheckBox: Este control muestra una casilla de verificación, que podemos marcar o no para activar alguna opción de nuestro programa. Internamente este control funciona como un Boolean ya que su estado podrá ser Verdadero (ha sido seleccionado) o Falso (no está seleccionado). Una de las propiedades más importantes de este control es la siguiente:
• Checked: Indica True o False dependiendo de si el control ha sido seleccionado o no, respectivamente
·        RadioButton: Un control RadioButton permite definir conjuntos de opciones autoexcluyentes. Es decir, se mostrará por ejemplo un grupo de tres RadioButton de manera que sólo se pueda seleccionar uno de ellos e indique así la opción escogida por el usuario. Para poder detectar cuándo ha sido seleccionada la opción de un determinado RadioButton, disponemos del evento CheckedChange, el cual podremos implementar convenientemente de manera que cada vez que se pulse dicho adioButton se ejecuten las acciones que correspondan.
·        GroupBox: Este control permite agrupar controles en su interior de manera que, en cierta manera, permanezcan aislados del resto de controles del formulario. Este control nos será útil para crear más de un grupo de RadioButton ya que sino los separásemos con un control de este tipo se relacionarían entre ellos y representarían la misma opción.
Hay muchos más controles, y cada uno de ellos tienen muchas más propiedades y métodos. A medida que los vayamos utilizando, vamos a ir familiarizándonos con ellos.
Es necesario tener en cuenta que un control es por definición un objeto de Visual Basic, de manera que existe una biblioteca de clases donde se encuentran las definiciones para cada clase de control. Cuando colocamos un nuevo control sobre el formulario (que también es un objeto), estamos instanciando la clase, es decir, creando un nuevo objeto de la clase correspondiente.


3.- LOS EVENTOS
Los eventos son sucesos que provoca la acción de un usuario sobre un control, y que pueden ser capturados para asociar código a los mismos, de manera que cada vez que se produzca una acción determinada del usuario (hacer click, presionar enter, ingresar texto, pasar el mouse por encima de un control) se producirá un evento, es decir, se pone en ejecución una rutina que el programador escribió asociándola a ese evento. Por ejemplo, el evento Click sobre un Button actúa de manera tal que lo que se consigue es que cuando un usuario pulse sobre un botón se lleven a cabo una serie de acciones en el programa.
También es posible asociar código a eventos sobre formularios, por ejemplo, al evento que lanza un formulario cuando el usuario cierra el mismo (Closing) o cuando lo abre (Load). Es muy común que el programador utilice el evento Load (la carga de un formulario) para inicializar datos, controles, variables, propiedades, etc. También es bastante habitual utilizar el evento Closing para mostrar un cuadro de diálogo que confirme el cierre del formulario o la aplicación.
Al ser éste un lenguaje cuya interfaz está orientada  a eventos, es fundamental plantearse antes de comenzar a programar, cuáles serán los eventos que vamos a considerar, es decir, qué intervenciones va a realizar el usuario, sobre qué controles y cuáles serán las acciones que se ejecutarán a partir de esto. Los eventos dan lugar a acciones que por lo general se programan en rutinas de tipo procedimiento. Al igual que cualquier rutina, tienen parámetros que podrán ser pasados por valor o por referencia y utilizan variables de tipo locales, globales o públicas.

4.- TÉCNICA GENERAL DE PROGRAMACIÓN ORIENTADA A OBJETOS Y EVENTOS SOBRE PLATAFORMA .NET
Para programar según esta tecnología es necesario aplicar otras técnicas distintas a las que ya conocemos. Esta técnica se puede resumir en los siguientes pasos:
1.      En primer lugar, es necesario diseñar los formularios que van a constituir mi aplicación. Puede ser uno solo o pueden ser varios, dependiendo generalmente de la cantidad de tareas que realice el sistema. A veces es necesario crear distintos formularios para hacer distintas cosas. Si hay varios formularios, es necesario realizar un esquema de la jerarquía que hay entre ellos (como si fuese un mapa de navegación por Internet que refleja los hipervínculos para pasar de una pantalla a la otra)
2.      Una vez decididos los formularios, analizaremos qué clases vamos a definir que serán utilizadas por todos los formularios, o algunos de ellos. Con esto construimos la biblioteca de clases (puede ser sólo un módulo o varios), y definimos las clases con sus propiedades y métodos. Es necesario documentar cuáles son estas bibliotecas, qué módulos contiene cada una, qué clases hay en cada módulo, y para cada clase, qué propiedades define, de qué tipo son y cuáles son los métodos con sus parámetros.
3.      A continuación, decidimos cuáles serán los eventos que vamos a tener en cuenta. Para ello haremos un cuadro en el que figure, para cada formulario, qué eventos hay, sobre qué controles se ejercen y qué acciones provocan.
4.      A partir de aquí recién podemos comenzar a programar en el sentido estricto de la palabra. Una vez determinados todos los formularios que intervendrán, todos los controles de todos los formularios, todas las clases bien definidas, y todos los eventos que se considerarán, estamos en condiciones de tomar evento por evento y comenzar a desarrollar la rutina que le corresponde en la ventana de ingreso de código. También en este caso es muy importante documentar cada rutina con sus parámetros, sus variables indicando tipo y ámbito, y el pseudocódigo o el diagrama de flujo del algoritmo al cual responde.

5.- OTRAS HERRAMIENTAS ÚTILES
Por último, digamos que a la hora de programar debemos tener en cuenta algunas herramientas que el Visual Studio 2010 pone a nuestra disposición y que pueden ser de gran utilidad:
·        GUARDAR EL CÓDIGO FUENTE: Un proyecto Visual Basic .NET no consta de un solo archivo sino de un conjunto de archivos que conforman la plataforma y que deben ser cuidadosamente guardados. Para eso el Visual Studio genera una carpeta con todo el proyecto y las carpetas internas que son necesarias para su funcionamiento. Para guardar un proyecto, debemos seleccionar la opción Propiedades del menú Proyecto. En este caso se abre una ventana de diálogo que solicita el nombre del proyecto (Nombre del Ensamblado), es decir, el nombre de la carpeta que va a contener todos los archivos del proyecto, y el NameSpace (Espacio de Nombres), es decir, el nombre del conjunto de clases y definiciones que yo preparé para mi proyecto. Debo asegurarme que esté activa la casilla que solicita crear un directorio para el proyecto. Una vez que coloqué los datos solicitados, cierro esta ventana de diálogo y abro la opción Guardar Todo del menú Archivo. Esta opción me crea una carpeta con el nombre que puse en Nombre del Ensamblado (en el lugar que yo le haya indicado). Dentro de esa carpeta me va a guardar dos cosas: el proyecto (con el mismo nombre) y otra carpeta (también con el mismo nombre) que va a contener a su vez otras carpetas y archivos que van a conformar la plataforma .NET. Es muy importante tener especial cuidado a la hora de guardar un proyecto, ya que como vimos, no es sólo un archivo lo que estamos guardando, y tal vez, cuando queremos recuperarlo, nos cueste encontrarlo. O, lo que es peor, podemos llegar a guardar algunas cosas pero no todas, con lo cual el programa no va a funcionar correctamente.
·        GENERAR EJECUTABLE: Una vez que diseñamos y programamos nuestro proyecto, y cuando ya guardamos el código fuente correspondiente, podemos generar el código ejecutable para ponerlo en funcionamiento cuando lo necesitemos. Esto se hace en la opción Generar del menú Generar.
·        DEPURADOR: Durante la etapa de programación y antes de generar el código ejecutable, debemos asegurarnos que el programa va funcionando correctamente. Programamos una parte y la probamos, y así hasta que terminemos. Para eso existe el depurador que nos permite probar el programa desde el mismo entorno del Visual Studio 2010 a través de la opción Play (el ícono típico). Si el programa no funciona correctamente, podemos ir probando paso a paso para detectar dónde está el problema. Existe la posibilidad de ejecutar el programa hasta un determinado punto haciendo click con el mouse en el margen del código justo en la línea donde queremos que se detenga, lo que muestra un punto rojo que indicará el STOP.  Luego presionamos Play y el programa comenzará pero se detendrá en ese punto. A partir de ahí y presionando la tecla F8, podemos avanzar instrucción por instrucción, y colocando el mouse sobre las variables, podremos observar su contenido. También existe la posibilidad de agregar estas variables a la Inspección, es decir, a una ventana que se abre en la parte inferior de la pantalla y que va mostrando los valores que las variables van tomando conforme se ejecutan las distintas sentencias.
·        CONVENCIONES DE NOMENCLATURA: Cuando se instancia una clase creando un objeto, es altamente recomendable que el nombre del objeto haga referencia a la clase en sus tres primeras letras. Por ejemplo, si la clase es Automoviles, una instancia de la misma que crea un determinado objeto debería llamarse AutFord, por ejemplo, haciendo alusión a que el Ford es un objeto de la clase Automoviles. Como ya dijimos, los controles son objetos que pertenecen a clases, por lo tanto al crearlos, sus nombres deben comenzar con tres letras que hagan referencia a la clase. En la siguiente lista se especifican las tres letras iniciales para los principales controles:
o       Button: Btn
o       Label: Lbl
o       TextBox: Txt
o       ListBox: Lst
o       ComboBox: Cmb
o       CheckBox: Chk
o       RadioButton: Rad
o       GroupBox: Grp
·        RUTINAS HABITUALES: Existen algunas funciones y también algunos procedimientos que están definidos y que son muy utilizados por los programadores. A medida que las vayamos utilizando, las iremos conociendo y descubriendo su funcionamiento. Por ahora, veamos algunos de ellos:
o       MsgBox: es una función que abre una ventana mostrando un determinado texto (que le es proporcionado en sus parámetros), a la vez que ofrece una serie de botones (también pasados por parámetros) y devuelve cuál es el botón que se pulsó. Ante este evento, el programador puede tomar una decisión. Es el caso típico de la ventana que hace una pregunta y ofrece los botones de Aceptar o Cancelar.
o       InputBox: es una función que abre un cuadro en el cual el usuario ingresa un texto, el cual luego puede ser utilizado dentro del programa.
o       Funciones de conversión de tipos: estas funciones permiten ingresar una variable de un tipo y devolver su equivalente pero de un tipo distinto. Por ejemplo, podemos convertir un valor de tipo texto (“345.78”) en su correspondiente número real (345.78). Nótese que en el primer caso se trata de la cadena compuesta por el 3, el 4, el 5, el ., el 7 y el 8, mientras que en el segundo caso es el número con valor 345.78. Esta conversión puede hacerse también a la inversa y entre otros tipos.
o       Funciones de manejo de caracteres: existen múltiples funciones que permiten trabajar con cadenas de caracteres (string) y que pueden llegar a resultarnos muy útiles a la hora de programar.
·        MANEJO DE ERRORES: En Visual Basic .NET existe una estructura llamada Try/Catch/Finally/End Try, que permite capturar un error y evitarlo, colocando en cada caso el código que lo tiene en cuenta. Vamos a verlo en detalle a medida que avancemos en el ejercicio de programar, pero a modo de introducción describiremos cada parte de la estructura:
o       Try: aquí se coloca el código que puede producir un error, por ejemplo, una división cuyo divisor podría llegar a ser 0.
o       Catch [tipo de error a capturar]: aquí se coloca el código que hay que ejecutar en el caso en que se produzca el error, por ejemplo, Catch divisor=0 Opcion=MsgBox(“MiPrograma”, “No se puede dividir por 0”), que lo que hace es enviar un cartel que avise que este error no puede producirse y eventualmente cierra el programa.
o       Finally: el código que se ejecuta independientemente del error. Esta parte es muy poco usada para nuestro propósito.
o       End Try: para finalizar la estructura.
Existen muchas otras utilidades que exceden los alcances de este apunte. Un manual de Visual Basic .NET puede llegar a ser un libro que contenga más de mil páginas. Obviamente, no vamos a consignar todo eso aquí. Es conveniente hacerse de un manual, ya sea como libro o como archivo .pdf, para consultar permanentemente las cuestiones que tienen que ver con la sintaxis y la utilización del lenguaje.


PRÁCTICA 2

  1. EJERCICIO FUNDAMENTAL: Habilitá una sección en tu carpeta, ya sea en papel o digital, a modo de cuadro, de distintos puntos, etc., en la que irás colocando todos los nuevos comandos, funciones, herramientas, etc, que vayas descubriendo mientras hagas los ejercicios. Trabajá siempre con una hoja y una lapicera a mano para ir anotando todo lo que vayas encontrando. NO CONFÍES SÓLO EN TU MEMORIA.
  2. Pasar el contenido de un TextBox a un Label
  3. Crear una calculadora que dados dos números ingresados por un TextBox, genere el resultado correspondiente dependiendo del botón que se presione (+, -, *, /)
  4. Obtener en un Label el mayor de tres números ingresados en TextBox
  5. Diseñar un formulario que muestre los distintos ítems a pagar (Luz, Gas, Agua, ABL, etc.) con su correspondiente valor, de modo que cada uno de ellos cuente con un CheckBox que pueda ser o no habilitado. En el pie del formulario debe figurar el total a pagar y un botón para confirmar el pago. Cuando se presiona el botón, aparece un MsgBox que informa que el pago se ha efectuado correctamente.
  6. Diseñar un formulario que permita elegir en forma de RadioButton, una prenda, un color y un talle. Informar en un Label en otro formulario, cuál fue el resultado de la elección.
  7. En un formulario colocar un rectángulo que debe cambiar de color y de posición según se indique en los marcos con RadioButton “Azul”, “Rojo”, “Verde” y “Amarillo”; y otro “Arriba” y “Abajo”.
  8. Cuando se desliza la barra de desplazamiento vertical, se indican los valores de la temperatura en dos escalas: Grados Centígrados y Grados Fahrenheit. La barra tiene como límites los valores -50ºC y +50ºC.
  9. La etiqueta que contiene el cartel “Quinto Año” varía de color (el fondo o el texto, según se seleccione) conforme la mezcla de los tres colores básicos: RGB(valor rojo, valor verde, valor azul)
  10. El primer formulario tiene la posibilidad de cargar un segundo formulario o de terminar el programa. El segundo formulario, que debe aparecer superpuesto al primero, puede ocultarse, descargarse o cerrarse. En todos los casos, debe aparecer un mensaje con el evento elegido.
  11. Realizar un proyecto que agregue el elemento de un TextBox a un ListBox, y permita también borrar el último de la lista, borrarlos todos o calcular el promedio de todos los números. Finalmente también cuenta con un botón para salir del sistema.
  12. Diseñar un proyecto equivalente al anterior, pero que también permite borrar la lista entera, ordenarla, indicar los valores máximo y mínimo de la lista, y sumar todos los valores
  13. El formulario de título “Semáforo” deberá cambiar la luz de rojo a verde (manteniendo la luz roja encendida se enciende el amarillo; luego se apagan las dos luces y se enciende la verde) y de verde a rojo (se apaga la luz verde y se enciende la amarilla; se apaga la luz amarilla y se enciende la roja)



No hay comentarios.:

Publicar un comentario