Introducción a la Programación Orientada a Objetos


 Fundamentos de la POO

La Programación Orientada a Objetos (POO, en español; OOP, según sus siglas en inglés) es un paradigma de programación que viene a innovar la forma de obtener resultados. Los objetos manipulan los datos de entrada para la obtención de datos de salida específicos, donde cada objeto ofrece una funcionalidad especial.

 

Muchos de los objetos prediseñados de los lenguajes de programación actuales permiten la agrupación en bibliotecas o librerías, sin embargo, muchos de estos lenguajes permiten al usuario la creación de sus propias bibliotecas.

 

Está basada en varias técnicas del sexenio: herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.

 

Su uso se popularizó a principios de la década de 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos.

 

Los objetos son entidades que tienen un determinado "estado", "comportamiento (método)" e "identidad":

 

La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una "programación estructurada camuflada" en un lenguaje de POO.

 

La programación orientada a objetos difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.

La POO es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

 

Clase

Una clase es una especie de "plantilla" en la que se definen los atributos y métodos predeterminados de un tipo de objeto. Esta plantilla se crea para poder crear objetos fácilmente. Al método de crear nuevos objetos mediante la lectura y recuperación de los atributos y métodos de una clase se le conoce como instanciación.

Herencia

Por ejemplo, herencia de la clase C a la clase D, es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables registrados como "públicos" (publica) en C. Los componentes registrados como "privados" (private) también se heredan, pero se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Para poder acceder a un atributo u operación de una clase en cualquiera de sus subclases, pero mantenerla oculta para otras clases es necesario registrar los componentes como "protegidos" (protestes), de esta manera serán visibles en C y en D pero no en otras clases.

Objeto

Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos), los mismos que consecuentemente reaccionan a eventos. Se corresponden con los objetos reales del mundo que nos rodea, o con objetos internos del sistema (del programa).

Método

Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento

Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento la reacción que puede desencadenar un objeto; es decir, la acción que genera.

Atributos

Características que tiene la clase.

Mensaje

Una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

Propiedad o atributo

Contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

Estado interno

Es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

Miembros de un objeto

Atributos, identidad, relaciones y métodos.

Identificación de un objeto

Un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.

En comparación con un lenguaje imperativo, una "variable" no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.

 

Técnicas y Herramientas para la representación de la POO en UML

 

Los modelos que podemos crear con UML son varios, por lo que debemos

definir en primera instancia lo que deseamos lograr y alcanzar.

 

Con UML se tiene una técnica de trabajo sobre los sistemas de forma específica

que se considera durante todas las fases de desarrollo, cuando deseamos

emplear un diseño para una aplicación, es decir la creación de un software, con

UML lo podemos lograr de una manera más sencilla, se consideran elementos

de desarrollo y pruebas importantes que funcionan específicamente sobre un

medio dedicado.

 

Se puede mejorar el proceso de producción, reducir los tiempos, mejorar la

información que se ingresa al sistema, optimizar los modos de compilación de

los datos, entre otras cosas más. Este medio de desarrollo es independiente de

los métodos de análisis y diseño, de esta forma se tiene un poco más de libertad

en los diseños y las creaciones, además de dar la oportunidad al desarrollador

de crear varios prototipos de un mismo lenguaje o sistema que se ha aplicado

para tener más opciones viables.

 

UML es un medio de desarrollo que cuenta con varios elementos a considerar

antes de la creación de cualquier aplicación, éstos se utilizan para mejorar los

procesos de funcionamiento que se tienen y optimizar los resultados que se

buscan.

Para realizar un buen diseño se requiere tener una idea más clara, esto

mediante el uso de diagramas de flujo, diagramas de clase o modelos en

cascada o cualquier otro sistema o medio de ayuda a la comprensión del

sistema en producción.

El uso de los diagramas permite conocer el contenido de la aplicación y la forma

en cómo ejecutará las instrucciones que se darán por los usuarios, cómo se

tomarán las acciones en el sistema y permite encontrar errores antes de su

compilación. Los diagramas ayudan a tener una mejor estructura, ya que

permiten el análisis de los códigos y se adaptan las soluciones más pertinentes

que puedan dar un resultado esperado

 

 

 

 

¿Qué es UML?

 

Es un lenguaje estándar de programación utilizado para realizar planos de

software, puede utilizarse para visualizar, especificar, construir y documentar

todo lo que se requiere en el sistema.

UML proporciona vocabularios y reglas para ser utilizados dentro de un lenguaje

de modelado, esto con la finalidad de lograr una representación conceptual y

física del sistema. Este lenguaje ayuda a la interpretación de grandes sistemas

utilizando gráficos o texto obtenido de modelos explícitos que ayudan mejorando

la comunicación durante el desarrollo de una aplicación.

Las fases de diseño dentro de UML expande y detalla los modelos de análisis

que se toman en cuenta para las implicaciones y restricciones técnicas. La

finalidad con que cumple el diseño es la de dar soluciones, éstas deben poder

trabajar y ser fácilmente convertida a un código fuente que construya una

arquitectura simple y fácilmente extensible.

Las clases definidas en el análisis son detalladas y añadidas a nuevas clases

para manejar áreas técnicas como bases de datos, interfaz de usuario,

comunicación, dispositivos, etc.

UML como modelo de diseño se apoya de varios elementos, con los cuales

puede determinar un mejor resultado final en el desarrollo de las aplicaciones

que se desean completar, algunos de estos elementos son:

• Diagramas de interacción.

• Diagramas de colaboración.

• Diagramas de secuencia.

• Representación de clases e instancias.

• Clases.

• Paquetes.

• Subsistemas.

• Etc.

Los modelos que busquemos crear mediante UML se apoyan en los diferentes

tipos de diagramas, por lo que debemos comprender las diferencias de cada uno

de estos y encontrar la mejor vía de aplicación para cada uno, con respeto a lo

que buscamos o esperamos conseguir.

 

Diagrama de clase y sus relaciones

 

Los diagramas de clase son elementos comunes que se utilizan dentro de los

lenguajes de modelado orientados a objetos. Este diagrama, como lo dice su

nombre, utiliza y muestra un conjunto de clases, interfaces y colaboración con

las relaciones entre ellos.

Este tipo de diagramas se utilizan en el diseño del modelo estático determinado

para un sistema, involucra el vocabulario del sistema, el modelado de

colaboraciones o modelo de esquemas. Los diagramas de clase se utilizan

también como base para el uso de diagramas relacionados, conocidos como

diagramas de componentes y diagramas de instalación.

La importancia de estos diagramas son importantes no sólo para la visualización,

especificación y documentación del modelo estructural, también es útil para la

construcción de sistemas ejecutables. UML como medio de programación

orientado a objetos se basa en los diagramas para tener el beneficio de un

análisis anticipado de los elementos; es decir, con el uso de estas herramientas

se pueden tener los detalles de lo que se desea diseñar al igual que comprender

los elementos que funcionarán dentro del diseño, también se pueden realizar

correcciones en esta etapa antes de compilar cualquier código o script ayudando

al programador a ahorrar tiempo y código.

Un diagrama de clases contiene comúnmente los siguientes elementos:

• Clases.

• Interfaces.

• Colaboraciones.

• Dependencia.

• Generalización.

• Relaciones de asociación.

Los diagramas de clase pueden contener notas o restricciones y de igual manera

contener paquetes o subsistemas de los cuales son usados para agrupar

elementos de su modelo, en ocasiones se requieren instancias de lugar en el

diagrama de clases, como cuando se quiere visualizar el tipo de una instancia.

Algunas características más que tienen estos diagramas son el uso de medios

como:

• Asociaciones: éstas representan relaciones estáticas entre las clases, en

donde una flecha rellena indica la dirección de la relación.

• Multiplicidad: las notaciones utilizadas para señalar multiplicidad se

colocan cerca del final de una asociación.

• Composición y agregación: es un tipo especial de agregación que

denota una fuerte posesión de la clase, ésta se grafica con un rombo lleno

contra la clase que represente el todo.

• Generalización: es otro nombre por el cual se conoce a la herencia,

refiere una relación entre dos clases donde una es una versión

especializada de la otra.

Comentarios