design-patterns matlab

design patterns - Ingeniería de software y patrones en la aplicación Matlab GUI?



design-patterns (3)

Me han pedido que desarrolle una aplicación GUI simple usando Matlab y GUIDE, que interactuarán con un motor back-end separado (también Matlab). Vengo de un fondo Java y .Net.

La documentación de Matlab es sólida sobre cómo hacer esto técnicamente, pero dice poco sobre el proceso de "ingeniería", en particular:

  • ¿Cómo empaquetar / funciones de espacios de nombres, o crear bibliotecas?

  • ¿Cuál es la mejor forma de colocar archivos en el sistema de archivos?

  • Cómo implementar patrones típicos de GUI, por ejemplo: MVC, observador?

  • Si estas preguntas incluso tienen sentido en el desarrollo de Matlab?

  • ¿Algún otro idioma / trampas comunes?

El asesoramiento directo o un puntero a un buen material de referencia sería muy útil. Gracias.


Supongo que usted (Dan Vinton) tiene algunos conocimientos en ingeniería de ingeniería y en patrones de diseño y está buscando la práctica común en el mundo de MatLab. Para este propósito, echaré un vistazo a los paquetes de la GUI de las cajas de herramientas de MatLab, como optimización, ajuste de curva, etc. Las GUI de todas estas cajas de herramientas vienen con su código fuente (son scripts MatLab regulares). También puede echarle un vistazo o en el código fuente de varios paquetes de GUI de alto rango de MatLab Central . Estos le darán una buena representación de la práctica común en MatLab.


No tengo experiencia en la creación de GUI en matlab, pero si su empresa gastará dinero en él, el .NET puede ser una opción más rápida. Le permitirá escribir el código de matlab que será rapeado en un componente com que se puede llamar desde .net, lo que significa que puede escribir su GUI en cualquier idioma .NET que desee. El enlace para esto está abajo. http://www.mathworks.com/products/netbuilder/


Esta es una pregunta perfectamente razonable, y con un poco de cuidado es posible escribir un código GUI que sea fácil de mantener. Algunas sugerencias:

  • Coloque el código de diseño de la GUI y la "lógica de negocios" en diferentes archivos m. (vea este envío de FileExchange para el código de ejemplo). Relacionado, use funciones anidadas para mantener el estado de la GUI en lugar de pasar de usar setappdata y getappdata o pasar alrededor de una estructura.

  • En general, use funciones anidadas y anónimas para devoluciones de llamadas. La función anidada es similar a las clases internas en Java, y las funciones anónimas implementan cierres léxicos (como bloques en Ruby).

  • Use excepciones para tratar con gracia los errores.

  • Dé a cada objeto de GUI (p. Ej., Deslizador, ejes) una etiqueta única y significativa. Por ejemplo, "frequencySlider" o "dataAxes". Esto ayuda a reforzar la separación entre el diseño de la GUI y la lógica.

  • Los controles gui proporcionados por GUIDE son bastante de bajo nivel, pero puede implementar componentes reutilizables de alto nivel eligiendo nombres de etiquetas sistemáticos para los diversos controles (por ejemplo, ''frequencySlider'' para un control deslizante y ''frequencyLabel'' para la etiqueta de texto asociada) . La rutina de inicialización de componentes puede usar findobj para buscar las diversas partes del componente e inicializarlas. P.ej

function myComponent(fig, basename) sliderHandle = findobj(fig, ''tag'', [basename ''Slider'']); textHandle = findobj(fig, ''tag'', [basename ''Label'']); % initialize ... set(sliderHandle, ''Callback'', @sliderCallback); % nested function for callback; note use of sliderHandle function sliderCallback(h,e) fprintf(''current value is %g/n, get(sliderHandle,''Value'')); end end