En esta entrada trataré de hacer una revisión del del desarrollo de software orientado a objetos, tratando de destacar a la vez la importancia de su surgimiento para las TIC's.
El hardware es la parte tangible de las TIC's tal y como indica el término, es algo así como la parte dura, la parte materializada de las tecnologías de la información. El software por otro lado, mas que verlo como la parte “suave” de las TICs podríamos imaginarlo como si fuera “el alma” que precisamente dá vida a esa parte dura dentro de la cual “existe”.
Desde el inicio de las computadoras existieron herramientas q
ue permitieron “la programación” de esos elementos duros. Surgieron desde entonces diferentes tipos de lenguajes, desde los mas rudimentarios como lenguajes de máquina (que básicamente consistían de instrucciones en lenguaje binario) hasta los lenguajes mas avanzados, pasando por lenguajes de “distintas generaciones”. Últimamente tenemos una proliferación de lenguajes “visuales” que dicho sea de paso hacen mas sencilla la forma de programar proporcionando estructuras predefinidas a las cuales los programadores solamente acompletan cierta codificación para obtener la funcionalidad deseada.
Hasta hace un par de décadas se hizo popular el paradigma de la programación orientada a objetos; anteriormente se habían utilizado en forma generalizada otro tipo de mecanismos de programación, siendo una de las mas populares la programación funcional, la cual basaba el desarrollo de sistemas precisamente en su descomposición funcional, sin embargo ese enfoque presentaba bastantes desventajas( por ejemplo la creciente complejidad de los sistemas cuanto mas grande eran, difícil de extender, difícil matenimiento, difícil de reutilizar codigo ya existente, etc) y constituía en si misma una limitante para el desarrollo tecnológico global debido a las debilidades inherentes que presentaban los productos de software desarrollado con ese tipo de herramientas.
El paradigma de desarrollo de software orientado a objetos haciendo uso de lenguajes que soportaban ese principio permitió entonces desarrollar el nuevo software en forma de componentes que presentaban mayor flexibilidad en varios aspectos, incluyendo aspectos como mayor escalabilidad, portabilidad, reutilización, ciclos de desarrollo menores y mayor facilidad para mantenerlos.
En un ámbito de desarrollo orientado a objetos es posible pensar en el software desarrollado como si se tratara de diversas entidades(precisamente objetos), con ciertas responsabilidades(métodos programados para efectuar tareas especificas) y propiedades que implican que cada objeto tenga una identidad “propia” en tiempo de ejecución(propiedades ó atributos con sus respectivos valores). Para que los objetos generados por los programas en tiempo de ejecución puedan interactuar entre sí hacen uso de su interfaz. Así, cuando es necesario revisar la lógica en un sistema que debe mantenerse o corregirse, es obviamente con base en lo anterior mucho mas fácil “modificar el comportamiento de un objeto” y en adelante cualquier solicitud que reciba la ejecutara de la nueva forma, que revisar el código completo de una aplicación desarrollada haciendo uso de métodos de análisis y diseño funcional en la cual su construcción está realizada siguiendo flujos de control del programa mucho mas complicados.
En la programación orientada a objetos, antes de generar los objetos (dentro de los programas), se generan las estructuras estándar(las clases ó tipos de objetos) de las que precisamente se derivan los objetos con características especificas y que son los que realmente ejecutan ciertas acciones dentro del flujo del sistema.
Una de las grandes ventajas de la orientación orientada a objetos como ya antes lo había comentado, es la ventaja de la reutilización de código, esto se hace posible debido a varias características de ese paradigma incluyendo por supuesto la facilidad de agrupar “bibliotecas de estructuras estándar” que después pueden utilizarse por otros programas tal como se encuentran almacenados ó bien pueden extenderse fácilmente sin caer en problemas de inconsistencia. Esto es posible porque los elementos utilizados por esta forma de programar presentan las siguientes características:
- Herencia. Es posible construir clases a partir de otras, enriqueciendo las propiedades y métodos de las nuevas clases, sobre las propiedades y métodos de las clases originales (Los objetos construidos por los programas en tiempo de ejecución se basan en las clases previamente construidas). En algunos lenguajes se puede inclusive hacer combinaciones de clases con nuevas clases que heredan la totalidad de características de las clases originales.
- Abstracción. Una gran ventaja de la programación orientada a objetos es que cuando el programador genera el código para cada objeto, en realidad (dependiendo de lo adecuado del análisis y el diseño realizados) está simulando la actividad de entidades de la vida real, lo cual hace mas fácil el proceso de conceptualización y codificación de los objetos, es decir, su diseño y asignación de responsabilidades.
- Encapsulación. De acuerdo a Booch(uno de los padres del paradigma de orientación a objetos), consiste en el ocultamiento de la forma en la que funcionan los objetos, de tal forma que para un objeto consumidor del servicio ofrecido por otro objeto debe ser totalmente transparente la forma en la que este último realice la actividad que se le solicite ejecutar, lo importante es que el objeto invocado ejecute la actividad en forma correcta(un ejemplo de encapsulación es que a mi en realidad a mi no me interesa la forma en la que funcione el control de mi televisor, lo que me interesa es que en caso de buen funcionamiento, cada vez que yo oprima en él la tecla correspondiente a un canal especifico, se cambie a ese canal en mi televisor-que obviamente deberá estar encendido)
- Polimorfismo. Un objeto debería de tener diferentes respuestas ante un llamado dependiendo de los argumentos que reciba. Por ejemplo un objeto que sirva para calcular áreas debería hacer un calculo de área sobre un área rectangular cuando reciba dos parámetros(porque el programa entendería que lo que recibe son las longitudes de los lados del rectángulo ), pero debería hacer un calculo sobre área de un circulo cuando reciba solamente un argumento (porque el programa entendería que es el radio de ese circulo).
En fin, creo que el paradigma de la programación orientada a objetos constituyó un avance tecnológico que ha facilitado la evolución de las TICS. Actualmente es muy difícil encontrar alguna herramienta de desarrollo de software(lenguaje) que no motive hacia el uso del paradigma de orientación a objetos cuando se utiliza para desarrollar: JAVA y .Net son herramientas de desarrollo ampliamente utilizadas que soportan el desarrollo orientado a objetos.
Por último es importante no confundir el paradigma de
programación orientada a objetos con el enfoque metodológico de desarrollo orientada a objetos. El primero constituye una herramienta puramente técnica de que apoya a los programadores durante su jornada de diseño y codificación del software. El segundo surge como guía para un equipo completo del proyecto de desarrollo de software, incluyendo a todos los stakeholder (patrocinio, usuarios, gerencia, diseñadores, analistas, testers, etc). Cualquier proyecto con el que se pretenda desarrollar software orientado a objetos debería hacer uso de una metodología orientada a objetos para obtener todos los beneficios que ofrece esa tecnología de desarrollo de sistemas.
Saludos!