"¡Hola, amigo! Me gustaría hablarte de otro beneficio de la programación orientada a objetos. Verás, los programas se parecen más a los animales que a los edificios. No se construyen, se hacen crecer. El desarrollo significa cambios constantes. En la construcción, puedes tener un buen plan y seguirlo al pie de la letra. Pero en el desarrollo de software, ese no es el caso".

Muy a menudo, no puede hacer algo de la manera que pretendía y tiene que volver a trabajar mucho en su programa. Y aún más a menudo, los requisitos del cliente cambian.

"Pero, ¿y si el cliente proporciona una especificación realmente detallada?"

"Eche un vistazo a lo que sucede con el tiempo. Si un producto tiene éxito, el cliente querrá lanzar una nueva versión, y luego otra, y otra. Y, por supuesto, tendrá que hacer algunos " pequeños cambios " para el producto existente. Entonces, el desarrollo de software es una larga serie de cambios. Solo la cadencia difiere. Se puede lanzar una nueva versión cada semana, una vez al mes o cada seis meses".

"Entonces, ¿qué concluimos de todo esto?"

"La estructura interna del producto debe mantenerse de manera que permita realizar cambios importantes (y menores) con un mínimo de reelaboración".

"¿Cómo haces eso?"

"Ya hemos hablado sobre cómo un programa consta de objetos que interactúan entre sí. Usemos puntos gruesos para representar todos los objetos de nuestro programa en la pizarra. Dibujaremos flechas desde cada objeto (punto) hacia todos los objetos (puntos) con los que interactúa".

Ahora combinemos los objetos (puntos) en grupos. Los puntos pertenecen al mismo grupo si están mucho más conectados entre sí que los otros puntos. Si la mayoría de las flechas de un punto apuntan a puntos en su grupo, entonces hemos agrupado los objetos correctamente. Se dice que los puntos dentro del mismo grupo están fuertemente acoplados, mientras que los puntos en diferentes grupos están débilmente acoplados.

Esto se llama el « principio de acoplamiento flexible ». Un programa se divide en varias partes, a menudo capas, cuya lógica está fuertemente ligada a su estructura interna y débilmente ligada a otras capas/partes. La interacción entre capas suele estar muy compartimentada. Una capa puede llamar a otra capa usando solo un pequeño subconjunto de sus clases.

"¿El mismo principio de 'división del trabajo', pero a mayor escala?"

"Precisamente. Esto nos permite reorganizar un departamento, hacerlo más eficiente y contratar aún más personas, y si no cambiamos los protocolos interdepartamentales, entonces todos nuestros cambios serán locales. Nadie tiene que volver a capacitarse. Nosotros no "Tengo que reelaborar todo el sistema. Cada departamento puede optimizar sus asuntos internos de esta manera si se eligen bien los mecanismos para la interacción departamental".

"Si se eligen bien. ¿Y si no se eligen bien?"

'Entonces se quedará rápidamente sin " margen de maniobra " para realizar cambios y tendrá que volver a trabajar en todo el sistema. Eso sucede de vez en cuando. No podemos predecir el futuro, pero podemos minimizar la cantidad de veces que tenemos que reescribir el programa".

"Está bien. Veo el beneficio de dividir el programa de esa manera, pero ¿cómo entra en escena la programación orientada a objetos?"

"Cuando elegimos cómo estructurar los departamentos y cómo interactuarán, aplicamos el ' principio de abstracción '. En programación, la abstracción se usa para determinar la mejor manera de dividir el programa y cómo deben interactuar las partes. Este principio puede también se aplicará repetidamente a las partes constituyentes hasta que hayamos desglosado el programa en clases individuales".

"Y ocultar la estructura interna de estas partes y limitar estrictamente la forma en que interactúan con otras partes, eso es encapsulación , ¿verdad?"

"Exactamente. La encapsulación y la abstracción son las piedras angulares de la programación orientada a objetos. Un buen programa debe adherirse a estos dos principios. Más adelante veremos otros principios y llegaremos a comprender sus ventajas".

"Buen material. ¡No puedo esperar!"