Se ripensi al motivo per cui OO è stato inventato, vedrai che non hai bisogno di OOP affatto, ma a volte ti rende la vita molto più facile.
Ai tempi della codifica C, un programma molto grande poteva diventare piuttosto complicato e difficile da lavorare. Quindi hanno inventato modi per dividerlo in blocchi modulari. OOP adotta questo approccio e lo rende ancora più modulare, mettendo i dati con quei blocchi di logica del programma in modo che siano ancora più separati dal resto del codice.
Questo ti permette di scrivere programmi sempre più grandi, sicuro di aver cambiato il tuo enorme elefante di un compito in cento compiti come topi. Il bonus aggiuntivo è che puoi prendere alcuni di questi "mouse" e riutilizzarli in altri programmi!
Naturalmente, il mondo reale non è proprio così, e il riutilizzo degli oggetti non è mai stato preso come previsto, ma non significa che sia un paradigma inutile.
Ciò che è inutile è un'eccessiva fiducia in entrambi gli stili di codifica. Chiunque faccia OO con un migliaio di classi minuscole e insignificanti, non lo sta facendo nel modo giusto - sta creando un incubo di manutenzione per se stessi (o qualcun altro). Chiunque stia scrivendo un'applicazione procedurale con solo 3 funzioni sta rendendo la vita difficile. Il modo migliore è la base, gli oggetti di grandi dimensioni (a volte chiamati componenti, ovvero il luogo in cui cercavamo di passare una volta) in grado di fornire una buona quantità di codice e dati autonomi che è molto più probabile che vengano riutilizzati in isolamento dal resto della tua app.
Il mio consiglio per la prossima volta: prova a scrivere il tuo normale codice procedurale, ma crea un singolo oggetto della tua struttura dati principale. Guarda come trovi che lavorare con esso è più semplice che passare dati da una funzione all'altra.