2008-12-02 12 views
9

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

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

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

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

  • Cómo implementar patrones típicos de GUI, p. Ej .: MVC, observador?

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

  • ¿Algún otro idioma común/trampas?

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

Respuesta

9

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:

  • Ponga el código de diseño de la GUI y la "lógica de negocios" en diferentes archivos m. (ver this FileExchange submission 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 nested y anonymous functions para devoluciones de llamada. 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).

  • Usa exceptions para ocuparse correctamente con errores.

  • Proporcione a cada objeto de la GUI (por ejemplo, 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 guiados proporcionados por GUIDE son de un nivel bastante bajo, pero puede implementar componentes reutilizables de alto nivel eligiendo nombres de etiquetas sistemáticos para los distintos 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 
  • Si está utilizando R2008a o temprano, hay mucho apoyo adicional para el desarrollo OO:
0

No tengo experiencia en la creación de GUI en matlab, pero si su empresa gastará mony en él, matlab para .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/

+0

Gracias por la sugerencia, pero el cliente está convencido de que la interfaz de usuario es Matlab código nativo. –

3

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 al código fuente de varios paquetes de GUI de alto rango del MatLab Central. Estos le darán una buena representación de la práctica común en MatLab.

+0

Su suposición es correcta: felizmente he estado escribiendo software durante años conforme a ciertas prácticas que parecen no tener acceso a una plataforma de OO como Matlab ... –

Cuestiones relacionadas