Ir al contenido principal

Métodos Comunistas y Propiedades Capitalistas

No, este no es un artículo sobre política, sigue siendo sobre programación orientada a objectos (OOP), específicamente sobre métodos públicos y propiedades privadas, de allí el título.

Todo surge por un comentario que me hizo un querido amigo al leer mi publicación sobre las reglas pigbar de programación. El me comentó:

"Mr. Bladi, entiendo sus reglas acerca de que las propiedades deban ser privadas por aquello del encapsulamiento, ¿pero que todos los métodos deban ser públicos? eso me cuesta entenderlo, eso implica que no existen métodos privados, y yo debo saber lo que un objeto hace sin preocuparme del cómo, por lo que esos métodos privados pueden ser útiles."


... largo es el camino del aprendizaje ... pensé ... jajaja

y procedí a explicarle.

Le dije:
Tienes razón y estás equivocado. Todo al mismo tiempo como el gato de schrödinger.


Tienes razón porque el concepto de encapsulamiento implica que se guarda o encapsulan tanto las propiedades como los métodos en una clase, escondiendo los detalles de la implementación, y eso está súper bien.

Pero, y siempre hay un pero, estás equivocado por que el problema con los métodos privados es que esa funcionalidad que escondes dentro de las entrañas inescrutables de un método privado, no puede ser compartida por otras clases o partes del programa. En otras palabras, sí necesitas o llegas a necesitar que ese comportamiento se realice en otra parte del sistema, vas a tener que recurrir a algunos recursos poco recomendados como son el tristemente celebre Copy & Paste o recurrir a librerías con clases utilitarias, las cuales también son  poco recomendadas y las considero ofensivas en la OOP.

¿Me explico?

Por otra parte ese comportamiento, funcionalidad o utilidad del método escrito en forma privada, no forma parte de ningún contrato por el que deba trabajar la clase, no forma parte de ninguna interface, por lo que no podemos trabajarlo usando ese valioso y sagrado mecanismo de programar para una abstracción, para una interface o para un contrato.

La única forma de acceder esa funcionalidad es dentro de la clase misma donde nunca podrá ser compartida y, en mi experiencia, en la programación de sistemas no conozco aún una funcionalidad tan peculiar, tan única en si misma, que no merezca ni pueda ser compartida o generalizada dentro de una abstracción.

De acá se desprende el axioma: Todo método privado, TODOS; son candidatos a una abstracción, a una nueva clase, y deben ser migrados a esa abstracción.

Es por ello que impongo férreamente , con disciplina dura, el uso de los antes mencionados principios en lo referente a la visibilidad de propiedades y métodos

Por su parte, las propiedades deber ser privadas y en lo posible nunca expuestas al mundo exterior. Ellas forman parte del estado del objeto y son sus elementos mas sagrados. Con ello quiero reflejar que todos los objetos deberían ser inmutables para proteger al sistema de las consecuencias nefastas que derivan del control o gestión sobre los cambios de estados en las clases.

Es por ello que manifiesto que no deben existir setters, que las propiedades deben ser final y que los getters no son recomendados. Todo sea por preservar la inmutabilidad de la clase, favorecer el encapsulamiento y el ocultamiento de la implementación y, por qué no, de la estructura interna del objeto.



Comentarios

  1. Good maestro Miyagi. Lo leí todo, definitivamente me gusta la programación.

    ResponderEliminar
  2. Me contenta que lo hayas leído mi estimado!!! bienvenido siempre ha este mundo de la OOP!!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

El Melange todavía corre

Ese era el estribillo de un capítulo de unas de mis series favoritas de la infancia, Meteoro o Speed Racer. En ese capítulo un auto “fantasma” el X-3, aparecía de imprevisto y dejaba a todos asombrados con su rendimiento y prestaciones y volvía a desaparecer. Traigo ese episodio a colación puesto que recientemente sostuve una amena charla con un querido amigo, en la que el me manifestaba como los Mainframes habían muerto, o mejor dicho, el concepto de la computación distribuida basada en Mainframes había desaparecido. Para variar, yo no estuve de acuerdo, y le dije que por el contrario, el modelo de computación basado en Mainframes está mas vigente que nunca. Estos fueron mis argumentos:

Primeros pasos con Camunda BPM – Modelando un Proceso BPMN 2.0

Tenemos entre manos la tercera publicación de nuestra serie sobre la Plataforma de BPM de Camunda .  El día de hoy vamos, por fin, a empezar a modelar o construir nuestro primer proceso sencillo en notación BPMN 2.0. Para ello vamos a usar el modelador o editor que ya hemos instalado en nuestra primera publicación , y vamos a guardarlo en la sección de recursos del proyecto Maven Java que configuramos en la segunda publicación . Así que, como ya es costumbre, manos a las sobras…

Como configurar jBPM para usar nuestra propia Base de Datos en un sólo paso

Llevo un buen rato trabajando con jBPM en su serie 6.x, y mi opinión sobre este producto en la versión mecionada no ha mejorado para nada. Es una herramienta plena de funciones y caracteristicas avanzadas, pero tambien está llena de Bugs y es realmente inestable, sobre todo en el ambiente de modelamiento.  Así mismo, debo decir que tiene una muy aceptable API REST y que el motor de procesos y la consecuente ejecución de los procesos es estable y bastante rápida. En esta publicación daré inicio a una serie de artículos que hablan sobre ciertas configuraciones comunes e importantes que se hacen con jBPM. Hoy iniciamos con la configuración de jBPM para que use nuestra base de datos favorita. Esto tiene sentido porque el producto viene con la base de datos H2 por omisión, la cual es excelente para pruebas y evaluaciones rápidas de la herramienta, pero es completamente inaceptable en un ambiente de desarrollo, QA o producción cualquiera. Así que manos a l