Dato che non sei un programmatore professionista, consiglierei di attenermi alla semplicità. Sarà molto più facile per il programmatore prendere il tuo codice procedurale modulare e renderlo OO più tardi, di quanto non sarà per loro correggere un programma OO scritto male. Se non si ha esperienza, è possibile creare programmi OO che possono trasformarsi in un disordine diabolico che non aiuterà né te né chi viene dopo di te.
Penso che il tuo primo istinto, il codice "questa cosa-quella cosa" nel primo esempio sia la strada giusta. È chiaro e ovvio cosa vuoi fare. Non preoccuparti troppo dell'efficienza del codice, la chiarezza è molto più importante.
Se un segmento di codice è troppo lungo, suddividilo in blocchi di dimensioni ridotte, ognuno con la propria funzione. Se è troppo corto, considera di usare meno moduli e di metterne più in linea.
---- Postscript: OO Design Traps
Lavorare con successo con la programmazione OO può essere complicato. Ci sono anche alcune persone che considerano imperfetto l'intero modello. C'è un ottimo libro che ho usato quando ho appreso per la prima volta la programmazione OO chiamata Thinking in Java (ora alla sua quarta edizione). Lo stesso autore ha un libro corrispondente per C ++. C'è in realtà un'altra domanda sui programmatori che affrontano le insidie comuni nella programmazione orientata agli oggetti .
Alcune insidie sono sofisticate, ma ci sono molti modi per creare problemi in modi molto semplici. Ad esempio, un paio di anni fa c'era un tirocinante presso la mia azienda che ha scritto la prima versione di alcuni software che ho ereditato e ha creato interfacce per tutto ciò che potrebbeun giorno avranno implementazioni multiple. Ovviamente, nel 98% dei casi c'è stata una sola implementazione in assoluto, quindi il codice è stato caricato con interfacce inutilizzate che hanno reso il debug molto fastidioso perché non è possibile tornare indietro attraverso una chiamata di interfaccia, quindi si finisce per dover fare un ricerca di testo per l'implementazione (anche se ora uso IntelliJ era dotato di una funzione "Mostra tutte le implementazioni", ma in passato non ce l'avevo). La regola qui è la stessa della programmazione procedurale: codificare sempre una cosa. Solo quando hai due o più cose, crea un'astrazione.
Un simile tipo di errore di progettazione si trova nell'API Java Swing. Usano un modello di sottoscrizione / pubblicazione per il sistema di menu Swing. Ciò rende la creazione e il debug dei menu in Swing un incubo completo. L'ironia è che è completamente inutile. Non c'è praticamente mai una situazione in cui più funzioni dovrebbero "iscriversi" a un clic di menu. Inoltre, pubblicare-abbonarsi è stato un completo errore in quanto un sistema di menu è normalmente sempre in uso. Non è che le funzioni si stiano iscrivendo e quindi annullando l'iscrizione in modo casuale. Il fatto che gli sviluppatori "professionisti" di Sun abbiano commesso un errore del genere dimostra solo quanto sia facile anche per i professionisti fare enormi problemi nel design di OO.
Sono uno sviluppatore molto esperto con decenni di esperienza nella programmazione OO, ma anche io sarei il primo ad ammettere che ce ne sono tonnellate che non conosco e anche ora sono molto cauto nell'usare molto OO. Ascoltavo lunghe lezioni tenute da un collega che era un fanatico di OO su come realizzare progetti particolari. Sapeva davvero cosa stava facendo, ma in tutta onestà ho avuto difficoltà a capire i suoi programmi perché avevano modelli di design così sofisticati.