Como você não é um programador profissional, eu recomendaria manter a simplicidade. Será muito mais fácil para o programador pegar seu código de procedimento modularizado e torná-lo OO mais tarde, do que para eles consertar um programa OO mal escrito. Se você não tem experiência, é possível criar programas de OO que podem se transformar em uma bagunça profana que não ajudará você nem quem quer que venha depois de você.
Eu acho que o seu primeiro instinto, o código "essa coisa - aquela coisa" no primeiro exemplo é o caminho certo. É claro e óbvio o que você quer fazer. Não se preocupe muito com a eficiência do código, a clareza é muito mais importante.
Se um segmento de código for muito longo, divida-o em pedaços pequenos, cada um com sua própria função. Se for muito curto, considere usar menos módulos e colocar mais em linha.
---- Postscript: Armadilhas de design OO
Trabalhar com sucesso com a programação OO pode ser complicado. Existem até pessoas que consideram todo o modelo defeituoso. Há um livro muito bom que eu usei quando aprendi a programação OO chamada Thinking in Java (agora em sua 4ª edição). O mesmo autor tem um livro correspondente para C ++. Na verdade, há outra questão sobre os programadores que lidam com armadilhas comuns na programação orientada a objetos .
Algumas armadilhas são sofisticadas, mas existem muitas maneiras de criar problemas de maneiras muito básicas. Por exemplo, alguns anos atrás, havia um estagiário na minha empresa que escreveu a primeira versão de algum software que eu herdei e ele fez interfaces para tudo o que pudesseum dia ter várias implementações. Obviamente, em 98% dos casos, havia apenas uma única implementação, então o código foi carregado com interfaces não utilizadas, o que tornou a depuração muito irritante porque você não pode voltar atrás em uma chamada de interface, então acaba fazendo uma pesquisa de texto para a implementação (embora agora eu uso o IntelliJ was tenha o recurso "Mostrar todas as implementações", mas antigamente eu não o tinha). A regra aqui é a mesma da programação procedural: sempre codifique uma coisa. Somente quando você tiver duas ou mais coisas, crie uma abstração.
Um tipo semelhante de erro de design pode ser encontrado na API Java Swing. Eles usam um modelo de publicação / assinatura para o sistema de menus Swing. Isso torna a criação e a depuração de menus no Swing um pesadelo completo. A ironia é que é completamente inútil. Praticamente nunca existe uma situação em que várias funções precisem "assinar" um clique no menu. Além disso, a publicação-assinatura foi um erro de ignição completo, porque normalmente um sistema de menus está sempre em uso. Não é como se as funções estivessem se inscrevendo e depois cancelando a inscrição aleatoriamente. O fato de os desenvolvedores "profissionais" da Sun terem cometido um erro como esse mostra apenas como é fácil para profissionais fazerem erros monumentais no design de OO.
Sou um desenvolvedor muito experiente, com décadas de experiência em programação OO, mas mesmo assim eu seria o primeiro a admitir que há toneladas que não conheço e mesmo agora sou muito cauteloso ao usar muito OO. Eu costumava ouvir longas palestras de um colega de trabalho que era um fanático por OO sobre como fazer projetos específicos. Ele realmente sabia o que estava fazendo, mas com toda a honestidade tive dificuldade em entender seus programas porque eles tinham modelos de design tão sofisticados.