Programación Orientada a Objetos con Visual Basic .NET
Parte I
Por Willy Mejía [WillyXoft]
Introducción a la POO
La Programación Orientada a Objetos (POO) es la aproximación de desarrollo de
software en el cual la estructura de el software se basa en la observación de que, en el
mundo real, los objetos se contruyen a partir de otros objetos y que éstos a su
vez interactúan para cumplir una tarea. Por esta razón
utiliza mecanismos y características para la creación y utilización de objetos.
Un mecanismo importante es la Clase y de la cual el Encapsulamiento y la
Herencia son dos características o propiedades importantes.
Ventajas de la POO
Anterior a la POO existían otros modelos de programación --entre ellos la
programación estructurada-- los cuales
presentaban ciertos problemas, táles como:
- Programas monolitcos dificiles de mantener.
- Dificultad de modificación de una parte sin afectar al sistema entero.
- No aprovechamiento de código existente, siendo cada programa construido
desde cero.
- Dificultad en la separación de tareas y responsabilidades, todo
programador tenía que conocer cada parte del sistema.
- Dificultad para transmitir lo modelos de negocios en los modelos de
programación.
- Dificultad en la integracion de sistemas.
El hecho de utilizar un lenguaje POO no implica que ya no tendremos los
problemas citados, para ello debemos de realmente programar orientados a objetos y
olvidar antiguas prácticas de la programación. De nada sirve tener
una sola clase llamada Program con un sólo método llamado Main.
Las metodologias Orientados a Objetos resuelven en cierta medida los problemas
anteriormente listados y
proporcionan los siguientes beneficios:
- Transición intuitiva de los modelos de análisis de negocios a los
modelos de implementación de software.
- Mantenimiento e implementación de cambios más eficiente y rápida
- Permite separar partes del sistema para trabajar en ellos sin afectar al
resto del mismo.
- Permite la reutilización de código de componentes en otros sistemas e
incorporar componentes de terceros.
- Permite una mejor integracion de sistemas distribuidos con un bajo
acoplamiento.
- Mejores interfaces graficas y componentes al aprovechar frameworks
preconstruidos y probados.
Del misma modo, para obtener éstas ventajas debemos de aplicar a
nuestro software los principios y metodologias de la POO.
Conceptos de la POO
Los conceptos de la POO comenzaron a circular a mediados de la década de
1960s con el lenguaje Simula que posteriormente evolucionaron una década despues
con Smalltalk, pero su adopción era mas bien académica. En los años 80s resurgió
el interés en las metodologías orientadas a objetos, cuando lenguajes como C++ y
Eifle (que permiten la construcción y manipulacion de objetos) se volvieron
populares, haciendo que la POO pasara al mundo productivo. Desde entonces la POO
a ganado cada vez mayor popularidad y generando nuevos lenguajes, primero fue
Java a finales del siglo 20, y actualmente los lenguajes .NET, C# y el renovado
Visual Basic: VB.NET.
La POO utiliza objetos para modelar el dominio del problema de un sistema y
para ello se basa en cuatro principios básicos perseguidos por el modelado de
software: Modularidad, Abstracción, Encapsulación y Jerarquía; que sólo la
orientación a objetos cumple en mayor medida que otros estilos de modelado.
- Modularidad: Es la descomposición lógica de
un sistema en entidades más pequeñas. En POO permiten descomponer el
problema en unidades discretas más simples. De esta manera se logra reducir
la complejidad de la construcción de un sistema al dividirlo en unidades mas
pequeñas y manejables, a la vez que permite el intercambio de las mismas. Dichas unidades o módulos tienen
entre sí un grado de cohesión y de acoplamiento.
- Cohesion: Es el grado con el cual las
responsabilidades de un módulo forman una unidad significativa por lo que un
alto grado de cohesion es mejor.
- Acoplamiento: Es el grado de mutua
interdependencia entre módulos, por lo que un bajo grado de acoplamiento es
mejor.
Es decir que lo ideal es que las unidades en las que
se descompone un sistema: los módulos, deben ser altamente cohesivos pero
con un bajo acoplamiento, permitiendo que los módulos trabajen entre sí como
una sola unidad (el sistema) y que la actualización de un módulo no afecte
al resto del sistema.
- Abstracción: Es la acción de separar por
medio de una operación intelectual las cualidades de un objeto de un todo para
considerarlas aisladamente y de esa manera conceptualizar al objeto en su
mas pura
esencia o noción. En POO expresa la acción de conceptualizar a los elementos
de un sistema (los módulos) excluyendo aquellos elementos que no son relevantes
para la solución del problema, es decir, excluyendo aquellos aspectos
(atributos y comportamientos) que no son importantes según el dominio del
problema, haciendo mayor énfasis en el "qué hace" el objeto sobre el "cómo lo hace".
Por ejemplo: La representación abstracta de Empleado
tiene como atributos: Nombre, Salario e Identificador. Pero no su Estatura o
Edad, a menos que sean relevantes para el dominio del problema.
Por otra parte, en términos de la POO, una representación abstracta no es otra cosa que el
mecanismo utilizado por ésta para construir objetos, al cual se le conoce
como Clase.
Clase: Es el orden en el que, con arreglo a
determinadas condiciones o calidades, se consideran comprendidas diferentes
cosas. En POO es una representación abstracta de un conjunto de
elementos del sistema que tienen las mismas características y
comportamientos, y a partir de la cual se pueden crear ejemplares u objetos
utilizables.
Es decir que una clase equivale a la generalización de un tipo específico
de objetos.
Mientras que un objeto es una representación concreta y específica de una clase, por lo que se dice
también que es una instancia de clase.
- Encapsulación: Es la acción de colocar algo dentro de un
contenedor protector. En POO es la capacidad de una representacion abstracta
(clase) de ocultar la
implementación de sus atributos y comportamientos, restringiendo el acceso externo
a los
datos guardados por una instancia, denominado estado. Dicho
estado es manipulado de manera controlada mendiante una serie de métodos,
denominada interfaz, definidos para la interactuación con otras
instancias a través de mensajes (invocación de métodos).
Por ejemplo: La Cerradura
tiene una interfaz de "giro a la derecha" que abre y "giro a la izquierda"
que cierra, pero el modo en que internamente lo realiza permanece oculto.
Con ésto se logra que los datos de los sistemas sean
más seguros y confiables, al controlar el modo en que éstos son modificados.
Por otro lado facilita la separación de tareas ya que otro objeto sólo
necesita conocer su interfaz para poder enviarle mensajes y colaborar con
él, sin necesidad de conocer su implementación y viceversa.
- Jerarquía: Clasificación u ordenación segun
un grado de valor o dependencia. En POO se refiere a la organización entre las diferentes representaciones abstractas
que comprenden el sistema. Dicha organización especifica la relación entre las
representaciones abstractas la cual puede ser de diferentes formas. En POO
resaltan dos: La Agregación y la Herencia.
- Agregación: Es la acción de
formar un objeto juntando a otros colocándolos con cierto orden. En POO es
la relación
entre entidades que contempla la composición de una(s) para formar
parte de otra, esto
implica una relación jerárquica de tipo "tiene un(a)".
Por ejemplo: Un Automobil "tiene un" Motor, el cual a
su vez "tiene una" Transmisión, etc.
Esta propiedad permite modelar e implementar con precisión procesos de
negocio a nuestro software.
- Herencia: Es la capacidad de los progenitores de transmitir un
conjunto de características a su descendencia. En POO brinda la capacidad de
derivación de una entidad a partir de otra que le "transmite" su comportamiento, siendo
la relación jerárquica de tipo "es un".
Por ejemplo: Un Felino
"es un" Mamifero que a su vez "es un" Animal.
La Herencia, también conocida como Generalización, establece
que:
- Algunas entidades son más generales.
- Algunas otras son especializaciones de las anteriores.
Por ende todos los objetos derivan de una clase superior y heredan la
estructura de datos y las operaciones que han sido definidas para dicha
clase. Para ello al diseñar las clases se clasifican
de acuerdo al conjunto de características o funciones similares entre
ellas.
Esto permite crear nuevas representaciones abstractas especializadas
a partir de otra mas general de la cual heredan su implementación,
permitiendo reutilizar el código y concentrarse sólo en agregar nuevas
características. Del ejemplo anterior, la representación abstracta de
Animal es la más general de todas y de la cual se especializan tanto las
representaciones abstractas de Mamifero y Felino, quienes a su vez
heredan la implementación de Animal y cuyas implementaciones sólo añaden
nuevos comportamientos especializados.
De la Herencia a su vez se desprende otra propiedad importante, el
Polimorfisomo.
Polimorfismo: Es la capacidad de tener o poder tener distintas
formas. En POO es la capacidad de una representación abstracta a responder
de distintas formas a una misma invocación dependiendo de la instancía
(tipo) que se utilice. El polimorfismo se logra teniendo múltiples
representaciones abstractas que tienen miembros (atributos o métodos) con el
mismo nombre pero con implementaciones diferentes.
Por ejemplo: Los
teléfonos; la interface común de todos ellos contempla a Ring cuya finalidad es la
misma: alertar al usuario de una llamada entrante, pero la implementacion en
cada representación abstracta en particular es diferente: algunos timbran,
otros emiten un tono, otros reproducen una melodía,
otros vibran, etc...
De los principios y propiedades de modelado citados, son la Encapsulación y
la Herencia lo que mejor realiza la Orientación a Objetos. Por ello junto con el
Polimorfismo, se mencionan en la mayoría de los textos como "Características del
la Programación Orientada a Objetos".
Ahora le invito a repasar ésta sección cambiando la aparición de las palabras "representación
abstracta" por "clase".
Objetos y Mensajes
Hemos visto que la POO modela software utilizando objetos ligados para la
representación de sistemas. La manera en que la POO ve a un sistema es como un
conjunto de objetos que dialogan entre sí, intercambiando mensajes para realizar
las distintas tareas para las que ha sido concebido. Veamos como:
Cada objeto tiene unas características o propiedades particulares, los
atributos, y unas formas de operar sobre ellos, los métodos. Por otro lado, los
objetos interactúan recibiendo, interpretando y respondiendo a mensajes entre
sí. Cada mensaje está asociado a un método; cuando un objeto recibe un mensaje,
la respuesta es la ejecución del método asociado al mismo.
Las acciones que el objeto puede emprender se define por el comportamiento,
para definir este comportamiento hay que añadir métodos a la clase. Los métodos
son rutinas de código definidas dentro del cuerpo de la clase, que se ejecutan
en respuesta a alguna acción tomada dentro de un objeto de esa clase, o bien
desde otro objeto de la misma o de otra clase. Recuerde que los objetos se
comunican mediante mensajes. El conjunto de mensajes a los que un objeto puede
responder se corresponde con el conjunto de métodos que implementa su clase.
Los mensajes enviados entre los objetos dan lugar al procesamiento interno de
datos, siendo los atributos quienes definen el estado de un objeto al permitir
almacenar datos para el mismo. Normalmente dichos atributos se ocultan al
usuario del objeto - principio de encapsulación, manteniendo a los
mensajes como única conexión con el exterior. Los valores de los atributos, y
en consecuencia el estado del objeto, sólo pueden ser manipulados por el
conjunto de métodos que se corresponden con el conjunto de mensajes por los
cuales un objeto se comunica. Por lo que dichos métodos en conjunto reciben el
nombre de interfaz: medio de comunicación.
No obstante cuando decimos que un objeto recibe un mensaje, debemos entender
que el mensaje es un concepto que subyace en nuestra mente; la acción real es la
invocación del método que decimos responde a ese mensaje con el fin de modificar
el estado del objeto. Por esto podemos decir que los nombres de los métodos de
una clase forman el conjunto de mensajes a los que una instancia de esa clase
(el objeto) puede responder. Cualquier método de una clase puede invocar a todos
los otros miembros (atributos y métodos) de su clase. Pero un objeto de esa
clase sólo puede responder a los mensajes para los que fue programado, es decir,
sólo puede invocar a los métodos de su clase.
Continuar con POO con Visual Basic .NET Parte 2