{ WillyXoft .NET }

Blog de Willy Mejía sobre Microsoft .NET Framework y temas relacionados...

<October 2008>
SuMoTuWeThFrSa
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678


Navigation

e-Grupos / Foros

Web/Blog Amigos

INETA & MUGs

Subscriptions

News

WillyXoft

Post Categories

Article Categories



POO con Visual Basic .NET Parte 1 Rated Average [3 out of 5].

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

posted on Monday, November 14, 2005 9:05 PM by vbpuntonet





Powered by Dot Net Junkies, by Telligent Systems