Programación Orientada a Objetos (OOP)
La programación orientada a Objetos no es nueva, lleva casi 70 años de existir. Desafortunadamente, y quizá por conveniencia o desconocimiento, las aplicaciones "legacy" se construyen históricamente de forma procesal o funcional. Es decir, no describen conceptos y comportamientos sino que simplemente crean funciones que utilizan donde se requiera y cuando se requiera. Cero arquitectura o metodología real.
Lo anterior hace que no exista un verdadero contexto o concepto que una a la aplicación. No existe un orden real ni relación entre las funciones o componentes. No se están "enforzando" ni reforzando la validez de variables, mucho menos se están creando clases que se puedan usar en lugar de esas variables. Un verdadero desperdicio.
Esto significa que el código funcional ("Procedural") se presta a errores, dificultades en pruebas, falta de encapsulación, repetición, limitación, desorganización y muchas otras situaciones aterradoras. Realmente es muy complejo mantener o escalar aplicaciones así, estoy seguro inclusive que al regresar a tu código de hace años, ni tu mismo te entiendes. Una de las grandes virtudes de OOP es la auto-descripción.
Los objetos llegaron a cambiar nuestros paradigmas. Vuelven el código algo descriptivo. Permiten aislar las cosas y manipularlas de forma eficiente garantizando su integridad y extendiendo su capacidad. La programación evoluciona a métodos, propiedades, comportamientos, eventos y herramientas con un tremendo potencial y casos de uso.
Además, el OOP nos da un marco de organización para poder "hablar" el mismo idioma no solo en nuestra app sino con muchos otros programadores, diseñadores, gente de producto y más, sin tener realmente que depender de un lenguaje específico, sino con un sistema de modelado UML.
Los conceptos siguen y seguirán vigentes por siempre. Se trata de principios, patrones y diseños básicos para construir aplicaciones modernas. Reglas claras y universalmente aceptadas. Las mejores prácticas.