gravatar

Abstracciones - Parte 1



Las abstracciones son procesos mentales habituales que nos permiten enfocar nuestra atención en las características más importantes de un objeto (las que lo definen o las que más nos interesan según el objetivo que persigamos), descartando así las menos relevantes.

Mediante las abstracciones las personas representamos imaginariamente la realidad observable creando modelos simplificados de los elementos que la componen.

Mientras una persona piensa, en todo momento utiliza abstracciones. Por ejemplo, al leer la palabra “libro” su mente evoca el concepto abstracto “libro” que está constituido por las características que generalmente son comunes a todos los libros: tema, autor, hojas, tipo de encuadernación, portada, etc.

En el análisis y diseño orientado a objetos, los objetos no se modelan a partir de todas sus características, sino sólo a partir del comportamiento del objeto que sea observable desde el exterior y pertinente respecto del propósito de la aplicación a desarrollar. Luego de tener en claro cuál es el comportamiento deseado para un objeto, se considera cuáles son sus otras características que resultan necesarias para dar soporte a dicho comportamiento.

Esa abstracción sólo adquirirá características particulares cuando usted necesite que así sea. Por ejemplo, supongamos que posee un libro sobre diseño y programación orientada a objetos y pensó que este sería un buen momento para volver a leerlo. Cuando pensó esto, el concepto abstracto libro comenzó una transformación que lo llevó a tomar las características del libro que está buscando: ahora esa construcción imaginaria tiene un color predominante de portada, una altura, una anchura y un espesor determinados, así como un título y otras características que usted recuerda de ese libro en particular.

Note la diferencia entre el concepto “libro” que es una categoría de objetos y un libro en particular que es un ejemplar que pertenece a esa categoría, es decir un objeto. Más adelante, profundizaremos nuestro análisis sobre la base de esta diferencia.

Los conceptos abstractos son un recurso común y elemental que utiliza el ser humano para comprender el entorno que le rodea y a sí mismo.
Cuando los creadores del paradigma de objetos comenzaron sus investigaciones allá por la década del 60, habrán pensado en algún momento que los conceptos abstractos y los procesos mediante los cuales las personas creamos estos conceptos en nuestra mente podrían aplicarse análogamente al desarrollo de software.

Las abstracciones nos permiten pensar, razonar y analizar los problemas, que el programa deberá resolver, de una manera que a las personas nos resulta familiar.

Al contrario que el paradigma de programación modular y estructurada, en el que los problemas se resuelven pensando en cuáles serán las rutinas que darán respuesta a los problemas planteados (análisis y diseño funcional), el paradigma de programación orientada a objetos indica que las soluciones deben plantearse en los términos con los que se describen esos problemas, es decir, que los programas se escriben modelando los “objetos” que se mencionan en las descripciones de dichos problemas.

La POO nos facilita idear las soluciones en los propios términos en los que se expresa el problema y diseñarlas planteando una analogía de la realidad, es decir, creando un modelo que simplifica esa realidad abstrayendo todos los detalles que no sirven al propósito que se persigue.

A veces, los programadores escribimos programas para resolver nuestros propios problemas, pero en la mayoría de los casos los problemas que resolvemos son los de nuestros clientes.

El cliente tienen una visión más o menos clara sobre sus problemas y a veces hasta alguna teoría sobre como deberían solucionarse (aunque muchos programadores dirían que generalmente los usuarios no saben lo que quieren y menos aún cómo expresarlo en una forma clara). El programador que adopta POO puede comprender esos problemas de un modo muy cercano al del cliente y puede comunicarle su visión analítica de esos problemas con facilidad. Así, la comunicación entre ellos puede ser fluida y altamente satisfactoria, lo que constituye una condición fundamental para el éxito de cualquier proyecto de desarrollo de software.

La POO puede facilitar la comunicación entre el programador y el cliente o usuario.

Del mismo modo que para cualquier persona existe en su mente el concepto abstracto “libro” que representa a todos los libros, en un hipotético programa que permite catalogar libros, existiría un concepto abstracto “libro” conformado por datos simples, categorías de información (es decir otros objetos) y el comportamiento que sean relevantes para solucionar los problemas planteados. Por ejemplo: editorial, autor, título, cantidad de páginas, entre otros. En la POO este tipo de concepto abstracto se denomina “clase”.

Una “clase” es una representación abstracta de un conjunto de objetos que comparten características comunes y tienen una existencia real en el dominio del problema (aunque pueden ser objetos intangibles), por ejemplo, personas, hechos, cosas, sistemas, etc. Se trata de un modelo, un recorte de la realidad, que expresa las características comunes de un conjunto de objetos presentes en las descripciones de los problemas que el programa debe resolver.

En programación orientada a objetos cada objeto es responsable por gestionar su propia información, lo que conduce a que tenga un comportamiento específico que dependerá de la naturaleza del objeto y del propósito de la aplicación. Por ejemplo, en un sistema que deba modelar perros probablemente los objetos perros tengan un nombre y un dueño, comportamientos comunes a todos los perros (ladrar, comer, correr, etc) y comportamientos más específicos: por ejemplo, depedendiendo de la raza y de si fueron entrenados o no, habrá perros que podrán rastrear y otros que no. Entonces, en una aplicación a un objeto perro se le puede pedir que ladre o que rastree, a un libro que muestre su tabla de contenidos y su autor o que busque y muestre un párrafo específico.

La clase “libro” es equivalente al concepto abstracto libro que conoce cualquier persona. Pero al igual que usted cuando busca un libro en particular, transforma en su mente el concepto abstracto “libro” en un concepto un poco más específico, es decir, en un libro con algunas características particulares, en este hipotético programa la clase libro deberá “transformarse” de algún modo en libros concretos. En términos de la POO, cuando el programa lo requiera se deberán crear instancias a partir de una categoría de objetos.

Los procesos que denominamos “abstracciones” nos permiten crear conceptos en nuestra mente. Cuando analizamos un problema recurrimos a las abstracciones para evocar o construir conceptos que nos permiten simplificar y finalmente comprender el problema. Así, podemos crear una representación del problema que nos servirá como base para construir modelos que conformen una solución, es decir, un diseño que luego podremos convertir en un programa de computadora. De allí se deduce la importancia de los procesos de abstracción para la programación orientada a objetos. Pero, ¿cómo son exactamente estos procesos mentales?

La POO se sirve de tres procesos básicos de abstracción y de sus opuestos para permitir la identificación de conceptos abstractos (clases):

  1. Clasificación/Instanciación
  2. Agregación/Desagregación
  3. Generalización/Especialización

Estas abstracciones son herramientas que permiten al programador determinar qué conceptos son elementos de la realidad que debería modelar, partiendo de las descripciones de los problemas que el programa debe solucionar.

Existen varios métodos para identificar y definir estos elementos presentes en el dominio del problema que generalmente se utilizan de forma combinada para obtener resultados fiables. Uno de ellos es el análisis de los sustantivos y verbos que aparecen en las descripciones que de los problemas hacen los usuarios, otro es el análisis basado en abstracciones y por último el análisis basado en la asignación de responsabilidades. Todos ellos se tratan en este cómo.

La POO nos permite utilizar recursos cognitivos que habitualmente usamos para entender todo lo que nos rodea, para analizar los problemas y diseñar las soluciones.

La programación orientada a objetos hace uso de abstracciones para permitir la herencia y la agregación que son dos modos de crear nuevos objetos a partir de objetos que ya existen. Por otra parte el encapsulamiento y la ocultación nos permiten crear la interfaz o protocolo de mensajes de un objeto que hará posible que se comunique con el resto del programa, manteniendo oculta su implementación; de modo que sea posible utilizar objetos conociendo únicamente su interfaz, es decir abstrayendo al programador de los detalles de la implementación de todo objeto que utilice en su programa.


gravatar

Pinta muy bien Fabián. ¿Con qué frecuencia lo actualizarás? (quiero seguir leyendo, je)

Saludos

gravatar

Hola, muy interesante tu iniciativa.

Te marco lo que me parece es un error:

"... profundizaremos nuestro análisis en base a esta diferencia"

Creo que "en base" es incorrecto. Podría ser "con base en" o "basándonos en".

Saludos

gravatar

Bien por tu trabajo. Tienes un 10 por lo que has hecho.
Suerte.

gravatar

Gracias por los comentarios y las correcciones.

gravatar

La frecuencia de publicación dependerá del interés y colaboración de los lectores.

Espero poder volcar contenido diariamente, en el mejor de los casos, o semanalmente, en el peor.

Los comentarios están habilitados para que los lectores puedan participar en la corrección del libro, realizar preguntas puntuales o sugerencias. Todo comentario fuera de estos objetivos será eliminado. Por favor, tenga en cuenta lo siguiente:

- Cumpla las normas de etiqueta.

- Realice críticas constructivas.

- No sea redundante.