Meu projeto pode sobreviver sem a Orientação a Objetos?

9

Estou escrevendo um pequeno pacote MATLAB que resolverá certos problemas numéricos de classe. Existem 3 estágios do algoritmo e o usuário tem 5 opções para cada estágio. Eu implementei todo o problema usando funções e 3 casos de switch (um para cada estágio do algoritmo). Funciona bem, mas estou pensando em fazer mais coisas (mais de 5 opções e mais um estágio) e também criar uma porta Python (algumas pessoas estão interessadas).20

Eu queria saber se devo converter para uma estrutura OOP (na qual não sou bom de todo) ou se devo manter a estrutura processual que tenho (na qual sou bom). No meu código processual, verifiquei que nenhuma função faz duas coisas e há uma sobreposição mínima (2 segmentos de código quase nunca fazem a mesma coisa).

Migre para SO se achar que é mais adequado no domínio deles.

MATLABOOP
fonte

Respostas:

6

Não há necessidade de converter para uma estrutura OOP, a fim de se beneficiar da orientação a objetos, onde ela ajuda. Observe que o número de funções é menos um indicador do que a duplicação de código dentro e entre essas funções, ou o tamanho dessas funções. (Uma função com mais de 100 linhas de código seria uma indicação típica para "potencial de melhoria".)

Se você não conseguir identificar as partes em que a orientação a objetos ajudaria, a conversão para uma estrutura OOP não seria o melhor primeiro passo. Em vez disso, pergunte a alguém familiarizado com a orientação a objetos o que poderia ser simplificado ou aprimorado e tente entender por que isso é uma simplificação ou melhoria.

Se você deseja usar uma estrutura como deal.II ou PETSc, use-a se a funcionalidade que eles oferecem for útil para você, não porque você acha que isso tornará seu próprio código melhor ou mais sustentável. Mas você já está dentro da estrutura do MATLAB, portanto, é improvável que você queira mudar para uma estrutura C ++ OOP. (O MATLAB oferece suporte total ao POO, como você provavelmente já sabe.)

Para a porta Python, faça-o com base no seu conhecimento atual para começar e inicie uma segunda depois depois de aprender o suficiente para torná-lo significativamente melhor.

Thomas Klimpel
fonte
Concordo com você que a conversão para uma estrutura aqui é um exagero. Acho que suas APIs e arquitetura são exemplos de bom design e vale a pena usar como guia.
Geoff Oxberry
3

Esta pergunta pode ser uma boa opção para o estouro de pilha. Eu acho que também é um bom ajuste aqui, porque é um problema comum na ciência da computação.

Em termos de composição de algoritmos, um bom exemplo de uma biblioteca que faz isso bem é o PETSc, se você pode ler o código C. O estilo de programação orientada a objetos pode ajudar no encapsulamento de dados, mas como um primeiro passo simples, você pode querer fazer de cada opção de estágio uma função com uma interface comum. Em seguida, para o seu algoritmo, passe uma função para cada estágio como entrada e faça com que o algoritmo principal chame a função para cada estágio.

Geoff Oxberry
fonte
Estou intrigado. Você está propondo o PETSc como uma boa biblioteca para aprender OOP ou codificação processual? Você conhece alguma biblioteca legível que faça POO bem?
Inquérito
Eu acho que o PETSc é um bom exemplo de software em geral e geralmente é muito bem documentado. Na ciência da computação, acho que o PETSc, Trilinos, deal.II e FEniCS fazem um bom trabalho por serem bem documentados, e todos eles são escritos no estilo OOP. Hesito em dizer que você deve aprender OOP com eles; provavelmente é melhor aprender primeiro com um livro e depois analisar o código do mundo real.
Geoff Oxberry
2

1 1+1 11+1.plus(1)1 1+1 1plus(1,1)1plus__plus____rplus__

Portanto, não sinta que precisa forçar o pino quadrado no orifício redondo, se o algoritmo tiver uma boa aparência de maneira processual simples, mantenha-o assim. Se precisar ser incluído em um sistema OO, você sempre pode colocar uma interface OO no seu código não OO. Os codificadores C ++ fazem isso todos os dias (e até são pagos por isso).

n00b
fonte