domingo, 31 de mayo de 2009

SESIÓN DE APRENDIZAJE DEL 27/05/09 AL 29/05/09

Orientado a Objetos
El objetivo de esta nota es poder llevar al Programador Medio o Principiante a comprender conceptos que conforman la programación Orientada a Objetos.
Estos conceptos son :
• Clases
• Objetos
• Propiedades
• Métodos
• Eventos
• Herencia
• Abstracción
• Polimorfismo
• Encapsulamiento
Trataré de explicar cada uno de estos conceptos de la manera más comprensible y didáctica posible.Clases y Objetos
Estos 2 conceptos deben explicarse juntos para que sean mejor comprendidos.Si tuviera que rápidamente definir con un ejemplo cual es la diferencia entre una Clase y un Objeto, se me ocurre la misma diferencia entre una RECETA y una COMIDA.Nuestra Clase, no es mas que una RECETA, que carece de sentido y funcionalidad hasta que creamos un Objeto (COMIDA).
Esta Clase (RECETA) nos dice de que propiedades, y características estará conformado nuestro Objeto.Ejemplo….Dim MiComida as NEW Paella
Aquí estamos creando un Objeto llamado MiComida y será de tipo PAELLA.
PAELLA es una clase que contiene todas las Propiedades necesarias (RECETA) que indica como debe ser creado nuestro objeto.
Coincidirán conmigo que una RECETA no es absolutamente nada hasta que se convierte en algo tangible como es una COMIDA.
Entonces.. Un Objeto gracias al código contenido en la clase va a tener Propiedades y Métodos.Un Objeto no es mas que una Instancia en memoria de una Clase. Es por eso que al igual que en un Restaurante un cocinero puede crear una Paella (OBJETO) muchísimas veces tomando de referencia la Receta (CLASE), en memoria, pueden existir innumerables Objetos creados por la misma Clase.
Cada Objeto creado en memoria, será pasible de cambios en sus propiedades por parte de la aplicación y cada unos será absolutamente independiente del otro.
Por Ejemplo…
Si tuviera una Clase PERRO y dotara a mi Clase de la Propiedad ColordePelo. Podría escribir el siguiente código.
Dim Perro1 as New Perro, Perro2 as New Perro
Perro1.ColordePelo=”Blanco”Perro2.ColordePelo=”Marron”En este Ejemplo he creado 2 PERROS, uno llamado Perro1 y otro Perro2. Y le modifiqué la propiedad ColordePelo a Perro1 y a Perro2, pero cada uno de ellos es totalmente independiente y ahora tengo 2 Objetos que fueron creados Exactamente Iguales en su origen, pero que ahora tienen características diferentes.
Otra Última comparación entre Clases y Objetos que se me ocurre, es la que existe entre un Plano y una Casa.
El PLANO es la CLASE que contiene todas las propiedades y características que tendrá que contener mi OBJETO (CASA) coincidirán nuevamente conmigo de que un simple Plano no es mas que una IDEA que tomará forma cuando se lleve a cabo creando nuestro Objeto CASA. PROPIEDADESComo ya hemos visto en nuestra explicación anterior un OBJETO contiene (entre otras cosas que luego explicaremos) Propiedades.
Volviendo a nuestro ejemplo, de nuestro Objeto PERRO, podríamos con solo pensarlo definir un conjunto de Propiedades que debería contener nuestro Objeto.
Por Ejemplo :
ColordePelo de tipo String
Raza de tipo String
Edad de tipo Integer
EsAgresivo de tipo Bolean
Por supuesto a Uds. Se le ocurrirán otras Propiedades, y características.Si pensamos en Programación Visual, Un Formulario no es mas que un Objeto que fue creado tomando como base una Clase que contiene todas las Propiedades que debe contener dicho Objeto.Por Ejemplo :
Caption , Font, Width, Height, Picture, ControlBox, etc.
Una Propiedad puede ser de Solo Lectura (ReadOnly) o con permisos de Lectura/Escritura.Esto significa que existen propiedades a las cuales NO Podremos asignarle valores, solamente podemos leer su contenido.
MÉTODOSYa sabemos que un Objeto no es más que una Instancia de una Clase.También sabemos que un Objeto contiene una o muchas Propiedades.Sabemos que nuestro “PERRO” tiene propiedades, pero también es cierto que nuestro PERRO al igual que muchos objetos, es capaz de realizar ACCIONES.
Por Ejemplo….
CORRERSALTARCOMEREsas acciones se denominan Métodos. Volviendo al ejemplo del FORMULARIO, un Formulario contiene muchísimas Propiedades tal como hemos señalado, pero también es capaz de ejecutar acciones CLOSE, RESIZE, MOVE, SHOW, etc.
En nuestra Clase PERRO, deberemos programar cada uno de los Métodos que necesitemos que sea capaz de llevar a cabo nuestro Objeto y dichos métodos no son mas que SUBs.Debemos colocar en cada unos de esos SUBs o Procedimientos, todo el código necesario que se debe ejecutar cuando una aplicación ejecuta por ejemplo…

miPerro.SaltarCuando pensemos en Objetos nos daremos cuenta de que el objetivo primario es Imitar a la vida real a Objetos reales, que gozan de Propiedades, ejecutan acciones y como veremos a continuación sufren estímulos externos e Internos.
EVENTOSComo acabamos de ver un Objeto es capaz de realizar acciones pero también esta expuesto a estímulos que lo condicionan y nosotros podremos determinar cuales serán los estímulos que a los cuales se les prestará atención.
Esos estímulos se llaman EVENTOS.
El ejemplo mas claro es el del EVENTO CLICK de un BOTON. , el cual dota a nuestro Objeto para que sea SENSIBLE al CLICK del MOUSE ejecutado por algún usuario en un momento indeterminado.Entonces, podemos hacer que nuestro OBJETO sea sensible a determinados estímulos.Podríamos crear un OBJETO “SER HUMANO” y volverlo sensible al CALOR, al HAMBRE, al FRIO, etc,
Conclusión :
Un Objeto es una Instancia de una Clase, y puede constar o no, de Propiedades, Métodos y ser sensible de sufrir Eventos.
HERENCIALa HERENCIA es sin lugar a dudas la característica más Importante que tienen los OBJETOS y nos indica que un OBJETO puede HEREDAR las Propiedades, Métodos y Eventos de otro OBJETO.Supongamos que creamos una CLASE llamada ANIMALES.
Dotaremos a nuestra Clase ANIMALES de todas las Propiedades inherentes a los ANIMALES y lo haremos de manera tal, que dicha clase nos servirá para referenciar a cualquier Animal.Pero luego se nos ocurre crear una CLASE llamada PERRO.
Como ya poseemos una CLASE desarrollada de tipo ANIMAL y que contiene innumerables propiedades que me sirven para conformar mi nueva CLASE PERRO, simplemente debo decir mediante código que mi CLASE PERRO, hereda las propiedades de la CLASE ANIMALES, entonces ya no necesito escribir código para muchísimas propiedades y métodos que son comunes a todos los animales.
Entonces….Si ya poseo una Clase MUEBLES y deseo crear una Clase SILLA, para que voy a volver a programar la propiedad MATERIAL, o la propiedad MEDIDAS ?, si esas Propiedades son comunes a todos los muebles ?
Esta filosofía nos enseña a programar de lo General a lo Particular.Y por sobre todas las cosas a Programar lo mas ABSTRACTO posible.
ABSTRACCIÓN La ABSTRACCIÓN es también uno de los Aspectos fundamentales que tenemos que tener en cuenta a la hora de programar Objetos.
Nuestra CLASE ANIMALES debe ser lo suficientemente ABSTRACTA para que podamos utilizarla para la creación de un número importante de Animales.
En definitiva… NO debe contener características peculiares ni delimitantes.Si creamos la CLASE ANIMALES e internamente le indicamos que estamos hablando de MAMIFEROS, esa CLASE no nos servirá para crear un PEZ.
Si creamos la CLASE PERSONAS y le decimos que son todos RUBIOS, esa clase no nos permitirá crear ningún OBJETO que nos sirva para manejar PERSONAS MORENAS.
Si creamos la CLASE MUEBLES y si forzamos nuestra CLASE indicándole que posee 2 puertas… como creamos una SILLA ?
Es muy común caer en este error, y habitualmente cuando debemos contra reloj crear aplicaciones, nos olvidamos de la ABSTRACCION y creamos código que luego no podemos reutilizar en otras aplicaciones debido a su particularidad.
La consigna es la REUTILIDAD de nuestros OBJETOS, que sean lo suficientes ABSTRACTOS para que puedan amoldarse a nuestros nuevos proyectos y no necesitemos escribir nuevamente tanto código.LA ABSTRACCIÓN y LA HERENCIA entonces se convierten en amigos INSEPARABLES e FUNDAMENTALES en la Programación ORIENTADA a OBJETOS.
POLIMORFISMOPOLIMORFISMO nos da idea de MULTIPLES FORMAS, y es en realidad la necesidad de dotar a nuestra clase de la posibilidad de que sus métodos o propiedades se comporten de manera diferente dependiendo de parámetros.
Supongamos que necesitamos dar salida a una determinada información y construimos una CLASE que contiene un método DarSalida y dicho método es el encargado de formatear la información necesaria y generar el OUTPUT de la mima.
Pero… ¿A dónde saldrá la información ?
¿Saldrá por la Impresora?, ¿Se enviará por Email ? o ¿Se exportará a un Archivo ? El usuario deberá manejar 3 métodos diferentes para cada una de estas variantes.
Debemos programar nuestros métodos para que se adapten a los parámetros externos y se comporten de manera diferente.
ENCAPSULAMIENTO La consigna de ENCAPSULAMIENTO nos orienta programar OBJETOS que solamente hagan pública la información mínima y necesaria que necesita el usuario de ese Objeto.QUE SE HACE pero NO COMO SE HACE.
De esta manera nuestro código estará seguro previniendo de que el Usuario pueda interferir en procesos internos.

Cuando nosotros le decimos a un Formulario que se cierre … Form1.Close Ese formulario simplemente hace lo que le indicamos, pero no tenemos acceso al código que se ejecuta en el momento de disparar el método.
La abundancia de Información a veces es contraproducente, se trata de que un Objeto exteriorice solo lo estrictamente necesario.
De esta manera nuestro OBJETO estará más protegido de errores, y crearemos así una capa adicional entre el NÚCLEO del OBJETO y el USUARIO.
Es Evidente que para cada uno de estos términos pueden existir miles de Explicaciones diferentes y ejemplos diferentes a los que yo he dado. Esta es simplemente mi visión de las cosas y realmente espero que sirva para muchos.