¿Puede mi proyecto sobrevivir sin Orientación a Objetos?


9

Estoy escribiendo un pequeño paquete MATLAB que resolverá ciertos problemas numéricos de clase. Hay 3 etapas del algoritmo y el usuario tiene 5 opciones para cada etapa. He implementado todo el problema usando funciones y 3 casos de cambio (uno para cada etapa de algoritmo). Funciona bien, pero estoy considerando hacer que haga más cosas (más de 5 opciones y una etapa más) y también hacer un puerto de Python (algunas personas están interesadas).20

Me preguntaba si debería convertirme a un marco de OOP (en lo que no soy bueno en absoluto) o si debería seguir con el marco de procedimiento que tengo (en lo que soy bueno). Me he asegurado en mi código de procedimiento de que ninguna función hace dos cosas y hay una superposición mínima (2 segmentos de código casi nunca hacen lo mismo).

Migre esto a SO si cree que es más adecuado en su dominio.

Respuestas:


6

No es necesario convertir a un marco OOP, para beneficiarse de la orientación a objetos donde ayuda. Tenga en cuenta que el número de funciones es un indicador menor que la duplicación de código dentro y entre estas funciones, o la longitud de estas funciones. (Una función con más de 100 líneas de código sería una indicación típica de "potencial de mejora").

Si no puede detectar las partes donde la orientación de los objetos ayudaría, la conversión a un marco OOP no sería el mejor primer paso. En lugar de eso, pregúntele a alguien familiarizado con la orientación a objetos qué se podría simplificar o mejorar, y luego trate de entender por qué es una simplificación o mejora.

Si desea usar un marco como deal.II o PETSc, úselos si la funcionalidad que ofrecen es útil para usted, no porque piense que mejorará o mantendrá su propio código. Pero ya está dentro del marco de trabajo de MATLAB, por lo que es poco probable que desee cambiar a un marco de trabajo de C ++. (MATLAB ofrece soporte completo de OOP, como probablemente ya sepa).

Para el puerto de Python, solo hágalo en base a su conocimiento actual para comenzar, y tenga un segundo inicio más tarde después de haber aprendido lo suficiente como para mejorarlo significativamente.


Estoy de acuerdo con usted en que la conversión a un marco aquí es excesivo. Creo que sus API y arquitectura son ejemplos de buen diseño, y vale la pena usar como guía.
Geoff Oxberry

3

Esta pregunta podría ser una buena opción para Stack Overflow. Creo que también encaja bien aquí porque es un problema común en la ciencia computacional.

En términos de algoritmos de composición, un buen ejemplo de una biblioteca que hace esto bien es PETSc, si puede leer el código C. El estilo de programación orientado a objetos puede ayudar a encapsular datos, pero como un simple primer paso, es posible que desee que cada opción para una etapa sea una función con una interfaz común. Luego, para su algoritmo, pase una función para cada etapa como entrada y haga que el algoritmo principal llame a la función para cada etapa.


Estoy intrigado. ¿Está proponiendo PETSc como una buena biblioteca para aprender OOP o codificación de procedimientos? ¿Conoces alguna biblioteca legible que funcione bien?
Investigación

Creo que PETSc es un buen ejemplo de software en general, y generalmente está muy bien documentado. En ciencia computacional, creo que PETSc, Trilinos, deal.II y FEniCS hacen un buen trabajo al estar bien documentados, y todos ellos están escritos en estilo OOP. Dudo en decir que deberías aprender POO de ellos; probablemente sea mejor aprender primero de un libro de texto y luego mirar el código del mundo real.
Geoff Oxberry

2

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

Por lo tanto, no sienta que necesita forzar la clavija cuadrada en el orificio redondo, si su algoritmo se ve bien en un procedimiento simple, manténgalo así. Si necesita ser incluido en un sistema OO, siempre puede poner una interfaz OO en su código no OO. Los codificadores de C ++ hacen esto todos los días (e incluso se les paga por ello).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.