Mostrando las entradas con la etiqueta 5to. año. Mostrar todas las entradas
Mostrando las entradas con la etiqueta 5to. año. Mostrar todas las entradas

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)



jueves, 14 de marzo de 2013

UNIDAD 1 - 5to. año


UNIDAD 1
PROGRAMACIÓN ORIENTADA A OBJETOS

1.- CONCEPTOS BÁSICOS

Con la Programación Orientada a Objetos (POO) tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO, que es una serie de normas para realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, es decir, hacer que el código sea reutilizable.
La POO no es difícil pero es una manera especial de pensar. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así no podemos aprovechar todas las ventajas de la POO.

Cómo se piensa en objetos

Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o estacionar.
En un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.

Clases en POO

Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores, un coche en particular es un objeto, mientras que todos esos objetos pertenecen a la clase coche.

Propiedades en clases

Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.

Métodos en las clases

Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones o procedimientos que están asociadas a un objeto, es decir, acciones que el objeto es capaz de ejecutar.

Objetos en POO

Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instance que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de las propiedades de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
Supongamos que CocheDeMiVecino es un objeto que pertenece a la clase Coche. El CocheDeMiVecino es azul, es decir, la propiedad Color del CocheDeMiVecino es azul. Entonces decimos:
CocheDeMiVecino.Color = azul
El objeto es CocheDeMiVecino, luego colocamos el operador punto y por último el nombre de la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a azul con una simple asignación.

Mensajes en objetos

Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto de la clase Coche que se ponga en marcha estamos pasándole el mensaje “Arrancar”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar.
CocheDeMiVecino.Arrancar
En este ejemplo pasamos el mensaje Arrancar, el cual va a buscar a la clase Coche para ver cómo se realiza.

2.- LOS TRES PILARES DE LA POO

Cualquier lenguaje basado en objetos debe cumplir estos tres requisitos:

  • HERENCIA: La herencia es la cualidad de crear clases que estén basadas en otras clases. La nueva clase heredará todas las propiedades y métodos de la clase de la que está derivada, además de poder modificar el comportamiento de los procedimientos que ha heredado, así como añadir otros nuevos. Supongamos que tenemos una clase Gato que está derivada de la clase Animal. Gato hereda de Animal todas las características comunes a esa clase, además de añadirle algunas características particulares a su condición felina. Podríamos tener otra clase Perro, que también heredaría las propiedades y métodos de Animal. Aunque las clases Gato y Perro son claramente distintas, ambas pertenecen o se derivan de la clase Animal y en ese sentido comparten muchas características.

  • ENCAPSULACIÓN: La encapsulación es la capacidad de separar la implementación de la interfaz del código de una clase, es decir, sabemos cuáles son las propiedades de los objetos, cuáles son sus métodos y qué hacen, pero no nos importa cómo lo hacen. Siguiendo el ejemplo anterior, sabemos que un objeto de la clase Coche tiene como método Arrancar; si queremos utilizar ese método, sólo tenemos que invocarlo para lo cual basta con conocer su nombre pero no nos importa en qué consiste.

  • POLIMORFISMO: El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica que pueden utilizarse de manera intercambiable. Por ejemplo, Arrancar puede ser un método de la clase Coche, pero también un método de la clase Moto, y si tenemos dos objetos EsteCoche y EstaMoto, es posible que nos dé lo mismo utilizar el método EsteCoche.Arrancar que EstaMoto.Arrancar

Es bueno tener en cuenta que cuando definimos una clase estamos definiendo dos cosas diferentes: los datos que dicha clase puede manipular o contener (las propiedades) y la forma de acceder a esos datos y trabajar con ellos (los métodos). En cambio, cuando definimos un objeto (sería más exacto hablar de crear un objeto) estamos creando un objeto en particular que pertenece a esa clase. En otras palabras, un objeto es un caso real y concreto de una clase, que sólo describe en forma abstracta un conjunto de objetos.


3.- TRABAJAR CON OBJETOS EN VISUAL BASIC

Para definir una clase, se utiliza la palabra Class y basta con darle un nombre a la clase. Cuando termino de definir todo lo que involucra a la clase, cierro la definición con la palabra End.
   
         Class Coche
      
         End Class

Es decir, todo lo que esté entre Class Coche y End Class, será la definición de la clase Coche. Allí determinaremos sus propiedades (valores que puede tomar) y sus métodos (acciones que puede ejecutar)

Veamos cómo podemos definir algunas propiedades y métodos de la clase Coche:
    
        Class Coche
                        Public Marca as string
                        Public Color as string
                        Public CantidadDePuertas as integer

                        Public Sub Arrancar ()
                                    <aquí se introducen todos los pasos que hacen que un auto
                                   pueda arrancar>
                        End Sub
        End Class

Nótese que las propiedades Marca, Color y CantidadDePuertas y el método Arrancar se definen utilizando la palabra Public, de modo que puedan ser accedidos desde otros códigos.
Vamos ahora a crear un objeto perteneciente a esa clase: primero lo definimos diciendo qué tipo de variable es; Dim en Visual equivale a Var en Pascal, y As vendría a ser los :.

            Dim CocheDeMiVecino As Coche

Y después lo creamos

            CocheDeMiVecino = New Coche()

Si queremos definir una clase que va a pertenecer a otra (como el caso de Gato que pertenece a la clase Animal) podemos hacer que herede todas sus propiedades y métodos. Esto lo hacemos utilizando la palabra Inherits

            Class Gato
                        Inherits Animal
                        <aquí van todas las definiciones propias de la clase Gato que otros
                              elementos de la clase Animal no tienen>
            End Class

Finalmente vamos a decir que un módulo es un archivo en el que se almacenan los códigos correspondientes a las clases que va a utilizar el sistema. Un sistema podría estar conformado por varios módulos, los que a su vez podrían estar conformados por varias clases.


4.- PARÁMETROS DE UN MÉTODO

Los métodos de una clase pueden ser de dos tipos: procedimientos o funciones. Un procedimiento es un conjunto de instrucciones que realizan una acción. Se declara de la siguiente manera

           Sub < nombre del procedimiento> (<lista de parámetros>)
                        <aquí van las instrucciones que realizan la acción>
            End Sub

Una función, además de hacer lo mismo que un procedimiento, puede devolver un valor y termina siendo usada como una variable. Se declara:

            Function <Nombre de la función> (<lista de parámetros>) As <tipo de dato>
                        <aquí van las instrucciones que realizan la acción>
            End Function

Supongamos que tengo un procedimiento que se llama Suma y que recibe dos valores, los cuales suma y devuelve el resultado en un tercer valor. Quedaría como sigue:

            Sub Suma (ByVal Valor1 As Integer, ByVal Valor2 As Integer, ByRef Resultado As Integer)
                        Resultado = Valor1 + Valor2
            End Sub

Valor1 y Valor2 son las variables donde el procedimiento va a guardar los dos números que tiene que sumar. Resultado es la variable donde el procedimiento va a guardar la suma. Valor1 y Valor2 se denominan los parámetros de entrada del procedimiento (para indicarlo se coloca ByVal); mientras que Resultado es el parámetro de salida (por eso está precedido por la expresión ByRef). Así, el procedimiento recibe como entrada dos números que suma y los coloca en una variable que devuelve.

Si esto mismo lo hiciera una función en lugar de un procedimiento, la suma puede devolverse en la misma función

            Function Suma (ByVal Valor1 As Integer, ByVal Valor2 As Integer) As Integer
                        Suma = Valor1 + Valor2
            End Function

Como vemos, en este caso los dos valores se suman y se guardan en la misma función. Desaparece el parámetro de salida y se declara a la misma función Suma como una variable de tipo Integer capaz de devolver el resultado de la suma.

Los parámetros de entrada son variables capaces de guardar valores que reciben para poder procesarlos. Por eso se dice que son parámetros pasados por valor, y todo cambio que se produzca en ellos dentro del procedimiento, no va a salir de ahí. En cambio, los parámetros de salida son variables que después van a seguir siendo usadas por otras porciones de código; por lo tanto es necesario que el parámetro pase la variable entera: su dirección de memoria y su contenido. A este tipo de parámetros se los denomina pasados por referencia.
Dicho de otra manera: los parámetros indicados con ByVal se pasan por valor, es decir, se hace una copia del contenido de la variable o constante y es esa copia la que se pasa al procedimiento. Por otro lado, los parámetros indicados con ByRef se pasan por referencia, es decir se pasa al procedimiento una referencia a la posición de memoria en la que está el contenido de la variable en cuestión, por tano cualquier cambio efectuado a la variable dentro del procedimiento afectará a la variable indicada al llamar al procedimiento. Demás está decir que esta cuestión de los parámetros vale tanto para funciones como para procedimientos.


5.- ÁMBITO DE LAS VARIABLES

El ámbito de una variable se refiere a la porción de código para la cual esa variable puede ser utilizada.
Diferenciamos tres ámbitos distintos:

  • Global: la variable puede ser utilizada por cualquier otra clase de cualquier otro lugar del sistema. Estas son las variables que normalmente llamamos propiedades de las clases. Se declaran utilizando la palabra Public inmediatamente después de denominar a la clase

Class <Nombre de la Clase>
Public <Variable Global> As <Tipo>

<aquí va el resto del código correspondiente a la definición de
la clase>
                       
End Class

  • Privada: la variable puede ser utilizada sólo por la clase donde está declarada. Se declaran con la palabra Private inmediatamente después de denominar a la clase

Class <Nombre de la Clase>
Private <Variable Privada> As <Tipo>

<aquí va el resto del código correspondiente a la definición de
la clase>
                       
End Class

  • Local: la variable puede ser utilizada sólo en el método en el cual se define. Se utiliza la palabra Dim dentro del método

Class <Nombre de la Clase>

Sub <Nombre del método>

             Dim <Variable Local>
             <aquí va el resto del código correspondiente a la
definición del método>
                                    End Sub

                        End Class

Salvo las propiedades que obviamente deben ser variables globales, en la medida de lo posible hay que declarar a todas las variables lo más localmente posibles. Es decir, si se puede se declara local; si es necesario, puede declararse privada; y en última instancia, sólo si es imprescindible, se declara global.


PRÁCTICA 1

1.                    ¿Qué ventajas presenta la técnica de POO con respecto a la programación estructurada?
2.                  ¿Por qué la técnica de POO recibe ese nombre?
3.                  ¿Qué es una clase? ¿Qué es un objeto? ¿Cuál es la diferencia entre ambos?
4.                  ¿Qué son las propiedades de un objeto? ¿A qué equivalen en la tecnología de programación estructurada?
5.                  ¿Cómo me refiero a la propiedad de un objeto?
6.                  ¿Dónde se declaran? ¿De qué manera? ¿Por qué?
7.                  ¿A qué se denomina estado de un objeto?
8.                  ¿Qué es un mensaje para un objeto?
9.                  ¿Qué es un método?
10.              ¿Qué es definir una clase? ¿Qué diferencias presenta con crear un objeto?
11.              ¿Qué es la encapsulación  y cuál es su función?
12.              ¿Qué es la herencia? ¿Qué ventajas presenta?
13.              ¿A qué llamamos polimorfismo?
14.             Definir, según la sintaxis del Visual 2010, una clase Colegio que tiene cinco propiedades: Nombre, Especialidad, CantidadDeAlumnos, ValorDeLaCuota, RequiereUniforme (sí o no); y tres métodos: Inicializar (se encarga de establecer valores iniciales en “Colegio”, “Título”, 0, 0, “No”, respectivamente para cada propiedad), IngresosMensuales (calcula la cantidad de dinero que debe ingresar a la escuela por mes) y IngresoRealPorcentual (dada la cantidad de alumnos morosos, devuelve el porcentaje de dinero real que ingresa al nivel con respecto al total que debería percibir si todos abonaran) ¿Qué tipo de método convendría en cada caso? ¿Por qué?
15.             Definir una clase Nivel que hereda todas las propiedades y métodos de la clase Colegio y agrega dos nuevas propiedades Tipo (Jardín, Primaria, Secundaria) y CantidadDeDivisiones; y un nuevo método PromedioDeAprobados (dada la cantidad total de alumnos aprobados, devuelve el promedio de aprobados por división)
16.             En un formulario FormColegios crear dos objetos distintos que pertenezcan a la clase Colegio: CualquierColegio tendrá los valores iniciales de la clase, y MiColegio, los valores de tu escuela. Mostrar un cartel que diga “Situación de riesgo” en el caso en que el porcentaje de ingresos reales sea inferior al 70%.
17.             En el mismo formulario anterior, crear dos objetos distintos que pertenezcan a esa clase: NivelPrimario para la Primaria y NivelSecundario para la Secundaria. Inicializar las propiedades según los datos de tu colegio. Mostrar en un mensaje cuál es el promedio de alumnos aprobados según el nivel.
18.             Para estos cuatro últimos ejercicios, realizar un diccionario de variables: un listado, objeto por objeto, de todas las variables involucradas, especificando tipo y ámbito.