Phi

Engineer's blog

Programación orientada a objetos: pequeñas aclaraciones



Existe una confusión entre la mayoría de principiantes a la hora de desarrollar software implementando el paradígma orientado a objetos. Los lenguajes como Java, C++, C#, Objective-C, etc., no son los únicos que pueden desarrollar software con dicho paradigma aunque hayan sido creados con este objetivo, lenguajes como Go y C pueden hacerlo sin tener palabras reservadas como Class, Private, Public y demás. Sé que algunos en estos momentos estarán diciendo que C++ es una extensión de C hecha para dicho propósito, pero no es así aunque haya sido la intención de su creador Bjarne Stroustrup, estos dos lenguajes son distintos (En caso de curiosidad recomiendo leer el libro Object-oriented Programming in ANSI-C de Axel Schreiner).

Muchos desarrolladores Java creen que por el simple hecho de usar éste lenguaje ya se está aplicando OOP (Object-Oriented Programming) pero no es así. Uno de los conceptos más importantes es la abstracción de los datos, sin embargo en contravía a éste, los desarrolladores agregan automaticamente métodos de recuperación y establecimiento de las variables privadas como si fuesen públicas. Existe una gran diferencia entre objetos y estructuras de datos, mientras los objetos ocultan sus datos tras abstracciones y muestran funciones que operan dichos datos, las estructuras de datos por el contrario no realizan ninguna ocultación y sus funciones carecen de sentido. Ésto presenta un problema y una ventaja inherente cuando se desarrolla por estas dos vías. En el código hecho por procedimientos se facilita la inclusión de nuevas funciones sin modificar las estructuras de datos pero se dificulta la inclusión de nuevas estructuras, caso contrario a la OOP donde se facilita la inclusión de nuevas clases sin modificar las funciones y su dificultad está en el cambio de funciones porque hace necesario la modificiación de las clases. Éste obstáculo puede ser superado con el patrón de diseño visitor siguiendo además el principio abierto/cerrado sin embargo ésto será tema de discusión en otro artículo.

Con el fin de realizar código limpio, no se debe crear código híbrido, donde aplique conceptos de estructuras de datos y de programación orientada a objetos, ésto confunde y además trae consigo los problemas presentes de los dos enfoques, sin embargo existe una excepción que son los Objetos de Transferencia de Datos (Data Transfer Object o DTO), estructuras sin funciones creadas para la extracción de información en bases de datos y/o el recibimiento de mensajes (como por ejemplo JSON), comunmente se conocen como modelos.

Ya para finalizar no olvide que la aplicación del paradigma de la programación orientada a objetos depende más del desarrollador que del lenguaje de programación.