É um problema - você está trabalhando a partir do aspecto funcional do design, e não dos dados. O que você realmente tem são 3 funções autônomas que foram OO-ified.
Por exemplo, você tem uma classe VideoCompressor. Por que você está trabalhando com uma classe projetada para compactar vídeo - por que você não tem uma classe Video com métodos para compactar os dados (de vídeo) que cada objeto desse tipo contém?
Ao projetar sistemas OO, é melhor criar classes que representem objetos, em vez de classes que representem atividades que você possa aplicar. Antigamente, as classes eram chamadas de tipos - OO era uma forma de estender uma linguagem com suporte para novos tipos de dados. Se você pensar em OO dessa forma, terá uma maneira melhor de projetar suas aulas.
EDITAR:
deixe-me tentar me explicar um pouco melhor, imagine uma classe de string que tenha um método concat. Você pode implementar tal coisa onde cada objeto instanciado da classe contém os dados da string, então você pode dizer
string mystring("Hello");
mystring.concat("World");
mas o OP quer que funcione assim:
string mystring();
string result = mystring.concat("Hello", "World");
agora há lugares onde uma classe pode ser usada para armazenar uma coleção de funções relacionadas, mas isso não é OO, é uma maneira prática de usar os recursos OO de uma linguagem para ajudar a gerenciar melhor sua base de código, mas não é maneira qualquer tipo de "OO Design". O objeto em tais casos é totalmente artificial, simplesmente usado assim porque a linguagem não oferece nada melhor para gerenciar esse tipo de problema. por exemplo. Em linguagens como C # você usaria uma classe estática para fornecer essa funcionalidade - ela reutiliza o mecanismo de classe, mas você não precisa mais instanciar um objeto apenas para chamar os métodos nele. Você acaba com métodos como string.IsNullOrEmpty(mystring)
, o que eu acho ruim em comparação com mystring.isNullOrEmpty()
.
Então, se alguém estiver perguntando "como faço para projetar minhas aulas", recomendo pensar nos dados que a classe conterá, e não nas funções que ela contém. Se você optar pela "classe é um monte de métodos", você acaba escrevendo o código de estilo "melhor C". (o que não é necessariamente uma coisa ruim se você está melhorando o código C), mas não vai lhe dar o melhor programa projetado por OO.