Il punto di orientamento all'oggetto non è quello di contare le classi definite dall'utente e giudicare tramite "more == better".
L'istanziazione di un oggetto è utile se si hanno realmente più cose nel campo del problema che hanno un comportamento identico ma un'identità distinta. Hai visto come funziona con i flussi: si legge da una fonte, la successiva da un'altra; leggere e scrivere i flussi sono diversi ma strettamente correlati, quindi ha senso che entrambi ereditino dalla stessa classe, ecc. Questi sono tutti buoni motivi per usare gli idiomi OOP; è meglio scrivere la logica per fare qualcosa una volta e quindi riutilizzarlo, e se la logica è legata a dati specifici dell'istanza (es. il nome del file sorgente), allora il modo logico di raggrupparli è quello di creare una classe con i dati e i metodi che funzionano su di essa.
Tuttavia , se il tuo problema è così piccolo che non ripeti nulla, cioè se leggi veramente un paio di cose da un posto, esegui una trasformazione e poi le scrivi in un altro posto, c'è un piccolo uso nella definizione di oggetti e classi per farlo quando è davvero solo un elenco di passaggi da eseguire. (Separare le fasi in metodi più piccoli, anche se ognuno è chiamato una sola volta, è comunque una buona idea, ma non è strettamente correlato a OOP - è una buona idea anche in linguaggi non-object.)
In breve, non abbatterti per non aver creato la tua classe. Una volta che hai incontrato la nostra prima classe di problemi in cui ha ha senso definire una classe con più istanze, diventa più facile giudicare quando ciò ha senso e quando si tratterà di una finestra per fondamentalmente non - Soluzione per problemi dinamici.