Mon projet peut-il survivre sans orientation d'objet?

9

J'écris un petit paquet MATLAB qui résoudra certains problèmes numériques de classe. Il y a 3 étapes de l'algorithme et l'utilisateur a 5 choix pour chaque étape. Je mis en œuvre en utilisant l'ensemble du problème fonctions et 3 cas de commutation (un pour chaque étage de l' algorithme). Cela fonctionne bien mais j'envisage de lui faire faire plus de choses (plus de 5 choix et une étape de plus) et aussi de faire un port Python (certaines personnes sont intéressées).20

Je me demandais si je devrais me convertir à un cadre OOP (auquel je ne suis pas bon du tout) ou si je devrais m'en tenir au cadre procédural que j'ai (dans lequel je suis bon). Je me suis assuré dans mon code procédural qu'aucune fonction ne fait deux choses et qu'il y a un chevauchement minimal (2 segments de code ne font presque jamais la même chose).

Veuillez migrer vers SO si vous pensez que cela convient mieux à leur domaine.

MATLABOOP
la source

Réponses:

6

Il n'est pas nécessaire de se convertir à un cadre OOP, afin de bénéficier de l'orientation des objets là où cela est utile. Notez que le nombre de fonctions est moins un indicateur que la duplication de code dans et entre ces fonctions, ou la longueur de ces fonctions. (Une fonction avec plus de 100 lignes de code serait une indication typique de "potentiel d'amélioration".)

Si vous ne parvenez pas à repérer les pièces où l'orientation de l'objet serait utile, la conversion en une structure POO ne serait pas la meilleure première étape. Demandez plutôt à quelqu'un familier avec l'orientation des objets ce qui pourrait être simplifié ou amélioré, puis essayez de comprendre pourquoi il s'agit d'une simplification ou d'une amélioration.

Si vous souhaitez utiliser un framework comme deal.II ou PETSc, utilisez-les si les fonctionnalités qu'ils offrent vous sont utiles, pas parce que vous pensez que cela rendra votre propre code meilleur ou plus facile à gérer. Mais vous êtes déjà dans le framework MATLAB, il est donc peu probable que vous souhaitiez passer à un framework C ++ OOP à la place. (MATLAB offre un support OOP complet, comme vous le savez probablement déjà.)

Pour le port Python, faites-le simplement en fonction de vos connaissances actuelles et commencez un deuxième démarrage plus tard après en avoir appris suffisamment pour le rendre nettement meilleur.

Thomas Klimpel
la source
Je suis d'accord avec vous que la conversion à un cadre ici est exagérée. Je pense que leurs API et leur architecture sont des exemples de bonne conception et méritent d'être utilisées comme guide.
Geoff Oxberry
3

Cette question pourrait convenir à Stack Overflow. Je pense que c'est aussi un bon choix ici parce que c'est un problème courant en science informatique.

En termes de composition d'algorithmes, un bon exemple d'une bibliothèque qui fait bien cela est PETSc, si vous pouvez lire le code C. Le style de programmation orienté objet peut aider à encapsuler des données, mais comme une première étape simple, vous pouvez simplement faire de chaque choix pour une étape une fonction avec une interface commune. Ensuite, pour votre algorithme, passez une fonction pour chaque étape en entrée et demandez à l'algorithme principal d'appeler la fonction pour chaque étape.

Geoff Oxberry
la source
Je suis intrigué. Proposez-vous PETSc comme une bonne bibliothèque pour apprendre la POO ou le codage procédural? Connaissez-vous une bibliothèque lisible qui fait bien la POO?
Enquête du
Je pense que PETSc est un bon exemple de logiciel dans son ensemble, et il est généralement très bien documenté. En science informatique, je pense que PETSc, Trilinos, deal.II et FEniCS font un bon travail d'être bien documentés, et tous sont écrits dans le style OOP. J'hésite à vous dire que vous devriez apprendre la POO d'eux vous feriez probablement mieux d'apprendre d'abord à partir d'un manuel, puis de regarder le code du monde réel.
Geoff Oxberry
2

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

Donc, ne pensez pas que vous devez forcer la cheville carrée dans le trou rond, si votre algorithme semble bon de manière procédurale, alors gardez-le comme ça. S'il doit être inclus dans un système OO, vous pouvez toujours mettre une interface OO sur votre code non OO. Les codeurs C ++ le font tous les jours (et sont même payés pour cela).

n00b
la source