Aunque el paradigma de la programación y el software orientado a objetos surgió a mediados de 1967, con el lenguaje Simula 67 usado para hacer simulaciones, este no se hizo popular sino ya para mediados de los años 80, con el lenguaje orientado a objetos Smalltalk y sus predecesores como C++, Java y C#. No hay mejor forma de explicar este paradigma, sino con la frase que todo profesor de informática repite desde hace muchos años.
El desarrollo de aplicaciones usando el modelo orientado a objetos (OO), es el basado en conceptos del mundo real. Un ejemplo de ello pudiese ser, un sistema que tenga que manejar información sobre alumnos y asignaturas. Un alumno puede tener una o varias asignaturas, pero a su vez una asignatura puede no tener a ningún alumno asignado o a muchos.
Cada objeto (en este caso se tienen 3, alumno, asignatura y relación alumno- asignatura) tiene sus propiedades, funciones, procedimientos, atributos que son diferentes y que pueden actuar con otros objetos solo cuando los necesitan. Por lo que, si no se usa ese objeto, es invisible para los demás. Esto es muy útil en programación, ya que si el objeto permanece oculto en la ejecución del código, es menos propenso a sufrir cambios no deseados o intencionados.
Fases del desarrollo
Ahora, un desarrollo OO se puede ver como una colección discreta de objetos que interactúan con otros objetos, estos se comunican a través del paso de mensajes, en donde el objeto receptor del mensaje ejecuta una acción u operación y esta, a su vez, le sede “el control” a otro objeto hasta culminar una tarea. En todo desarrollo incluyendo el orientado a objetos, está formado por tres fases tradicionales: análisis, diseño e implementación.
- Análisis: aquí se tiene el objetivo de entender y comprender el problema, se busca resolver el paradigma de “¿Qué se tiene que hacer?”.
- Diseño: se hace un enfoque en los recursos, en darle solución a los problemas planteados en el análisis, se tiene que resolver el paradigma de “¿Qué se debe hacer?”.
- Implementación: esto se logra con la traducción de lo conseguido en el diseño a través de una aplicación o lenguaje de programación, adaptando la solución a un entorno concreto.
Una de las diferencias que hay entre el modelo OO y los tradicionales, es que en el tradicional hay mucha distancia entre las fases desde el análisis hasta la implementación, mientras que en el modelo OO se tiene mayor continuidad entre las diferentes fases, que dan lugar a desarrollos más iterativos e incrementales. Esto gracias a que el elemento central es el objeto, que es la entidad que encapsula elementos estructurales y de comportamiento.
Lo anterior, permite que los objetos semánticos (un objeto semántico es una representación de cosas identificables, es un conjunto de atributos que describen a una identidad bien definida) identificados en el análisis se refinan durante la fase del diseño e implementación hasta lograr el resultado final.
Principios de la orientación a objetos
Existen muchos principios que se deben entender para poder ser buenos desarrolladores en modelos orientados a objetos, sin embargo, los fundamentales son:
La identidad
Es la propiedad de un objeto que permite que este sea diferente de los demás. En un sistema orientado a objeto, cada objeto tiene una identidad distinta. Esto permite trabajar con un objeto determinado sin que exista la posibilidad de confundirlo con otro y admite que puedan existir varios objetos de la misma clase al mismo tiempo. Se tiende a confundir identidad de un objeto con estado. El estado es el conjunto de valores que posee el objeto en su interior. Puede pasar que dos objetos tengan el mismo estado, pero los mismos siguen siendo totalmente identificables.
La abstracción
Es el mecanismo que permite enfocarse en los aspectos importantes de un objeto y lo que marca su diferencia con otros, obviando aquellos que son irrelevantes.
Encapsulamiento
Permite la ocultación de la información al mundo exterior y, así, asegurar que el contenido de un objeto se pueda ocultar, dejando ver solo lo que se necesita hacer público, esto se logra gracias a diferentes niveles de visibilidad o accesibilidad, estos niveles de visibilidad son:
- Privado: visibilidad para la propia clase
- Protegido: visibilidad para las clases derivadas
- Público: visibilidad para todas las clases La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que se tendrá a los objetos como cajas negras, donde solo se conoce el comportamiento, pero no los detalles internos y esto es conveniente porque interesa conocer qué se hace, pero no será necesario saber cómo se hace, además otra ventaja es proteger al objeto de usos indebidos o inapropiados.
Modularidad
Se encarga de descomponer algo grande y complejo en partes más discretas y sencillas. La diferencia que tiene la modularidad con la abstracción es que, esta se encarga de gestionar su manejabilidad con respecto a los aspectos físicos o de implementación, mientras que la abstracción trata de reducir la complejidad lógica del problema.
Concurrencia
Es la propiedad que distingue un objeto activo de uno que no lo es. Esto permite a diferentes objetos actuar al mismo tiempo, ya que cada uno de ellos tiene su propia autonomía.
Persistencia
Es la propiedad que tiene un objeto de existir en el tiempo y en el espacio. El objeto existe hasta que no sea más necesitado y el espacio que ocupa es reutilizado. Este se implementa mediante los procesos de construcción y destrucción de los objetos definidos como parte del comportamiento de una clase.
Polimorfismo
Es una característica que reduce enormemente el esfuerzo requerido para extender el diseño de un sistema orientado a objeto existente. Para entender el polimorfismo, considerar una aplicación convencional que debe procesar tres tipos diferentes de gráficas estadísticas: dispersión, desviación estándar y el coeficiente de excesos. Una vez calculados los valores se procesa una visualización de los mismos.
Para lograrlo en una aplicación convencional, sería necesario desarrollar módulos de visualización para cada tipo de gráfica. Para resolver esto en un sistema OO, todas las gráficas se convierten en una subclase llamada gráfica estadística.
Usando un concepto llamado sobrecargar (se refiere a la posibilidad de tener dos o más funciones con el mismo nombre, pero funcionalidad diferente), cada subclase define una operación en particular que se ejecutará dependiendo del mensaje que reciba. En resumen, el polimorfismo se refiriere a la posibilidad de definir múltiples clases con funcionalidades diferentes, pero con métodos o propiedades denominados de forma idéntica.
Jerarquía
Permite la organización de los elementos de acuerdo a su tipo de objeto, así como reconocer las similitudes y diferencias entre los distintos objetos que se tengan. •
Herencia
Es uno de los factores claves y diferenciadores entre un sistema tradicional y/o estructurado y los orientados a objetos. Una subclase B hereda todos los atributos y operaciones asociadas con su superclase A. Esto significa que todas las estructuras de datos y algoritmos originalmente diseñados e implementados para A están disponibles de inmediato para B. La reutilización se logra directamente.
La herencia es una forma de reutilización de código. Cualquier cambio a los atributos u operaciones contenidos dentro de una superclase se hereda inmediatamente para todas las subclases. Por tanto, la jerarquía de clase se convierte en un mecanismo mediante el cual los cambios (en niveles superiores) pueden propagarse inmediatamente a través de un sistema. Es importante observar que en cada nivel de la jerarquía de clase pueden agregarse nuevos atributos y operaciones a las que se heredaron de niveles superiores en la jerarquía. De hecho, siempre que se crea una nueva clase, tendrá algunas opciones:
- La clase puede diseñarse y construirse desde cero, es decir, no se usa herencia.
- La jerarquía de clase puede revisarse para determinar si una clase superior en la jerarquía contiene más de los atributos y operaciones requeridos. La nueva clase hereda de la clase superior y, entonces, pueden agregarse adiciones, según se requiera.
- La jerarquía de clase puede reestructurarse de modo que los atributos y operaciones requeridos pueden heredarse en la nueva clase.
- Las características de una clase existente pueden ser excesivas y diferentes versiones de atributos u operaciones se implementan para la nueva clase.
El desarrollo de software orientado a objetos desde el profesional
En TECH Universidad Tecnológica actualmente se desarrolla un amplio portafolio de especializaciones enfocadas en el éxito del alumnado profesional. Por ello, su Facultad de Informática oferta programas tales como el Máster en Tecnología Específica de Telecomunicación y el Máster en Visual Analytics & Big Data. Sin embargo, para aquellos profesionales que busquen enfocarse en temáticas como la relacionada en el presente artículo, no cabe duda que la mejor opción es el Máster en Ingeniería de Software y Sistemas de Información.