Si recuerdas por qué se inventó la OO, verás que no necesitas OOP en absoluto, pero a veces te hace la vida mucho más fácil.
En los días de la codificación C, un programa muy grande podría volverse bastante complicado y difícil de seguir trabajando. Entonces inventaron formas de dividirlo en trozos modulares. OOP adopta este enfoque y lo hace aún más modular, colocando datos con esos fragmentos de lógica de programa para que estén aún más separados del resto del código.
Esto le permite escribir programas cada vez más grandes, con la seguridad de que ha cambiado su enorme elefante de tarea en cien tareas del tamaño de un ratón. ¡La ventaja adicional es que puedes tomar algunos de estos 'ratones' y reutilizarlos en otros programas!
Por supuesto, el mundo real no es así, y la reutilización de objetos nunca se dio cuenta de la forma en que se pretendía, pero eso no significa que sea un paradigma inútil.
Lo que es inútil es una excesiva dependencia de cualquiera de los estilos de codificación. Cualquiera que haga OO con mil clases pequeñas e insignificantes no lo está haciendo bien, está haciendo una pesadilla de mantenimiento para sí mismo (o para otra persona). Cualquiera que escriba una aplicación de procedimiento que tenga solo 3 funciones también está dificultando la vida. La mejor manera es la tierra media, objetos de gran tamaño (a veces llamados componentes que es donde buscamos estar alguna vez) que pueden proporcionar una buena cantidad de código independiente y datos que es mucho más probable que se reutilicen de forma aislada del resto de tu aplicación.
Mi consejo para la próxima vez: intente escribir su código de procedimiento habitual, pero cree un solo objeto de su estructura de datos principal. Vea cómo le resulta más fácil trabajar con él que pasar datos de una función a otra.