2008-12-02 4 views
9

Меня попросили разработать простую графическую программу с использованием Matlab и GUIDE, которые будут взаимодействовать с отдельным движком бэкэнд (также Matlab). Я исхожу из фона Java и .Net.Разработка программного обеспечения и шаблонов в приложении GUI Matlab?

Документация Matlab сильная о том, как технически это сделать, но мало говорит о процессе «инжиниринг», в частности:

  • Как упаковать функции/пространства имен, или создавать библиотеки?

  • Как лучше всего размещать файлы в файловой системе?

  • Как реализовать типичные шаблоны графического интерфейса, например: MVC, наблюдатель?

  • Являются ли эти вопросы даже имеющими смысл в разработке Matlab?

  • Любые другие распространенные идиомы/подводные камни?

Прямой совет или указатель на хороший справочный материал были бы очень полезными. Благодарю.

ответ

9

Это вполне разумный вопрос, и с некоторой осторожностью можно написать GUI-код, который прост в обслуживании. Некоторые предложения:

  • Поместите код макета GUI и «бизнес-логику» в разные m-файлы. (см., например, код this FileExchange submission). Кроме того, используйте вложенные функции для поддержания состояния GUI вместо передачи с помощью setappdata и getappdata или прохождения вокруг структуры.

  • В целом, используйте обратные вызовы nested и anonymous functions. Вложенная функция похожа на внутренние классы в Java, а анонимные функции реализуют лексические замыкания (например, блоки в Ruby).

  • Используйте exceptions, чтобы грамотно справляться с ошибками.

  • Дайте каждому объекту GUI (например, слайдер, оси) уникальный и содержательный тег. Например, «frequencySlider» или «dataAxes». Это помогает укрепить разделение между графическим интерфейсом и логикой.

  • Элементы управления gui, предоставляемые GUIDE, довольно низкоуровневые, но вы можете реализовать многократно используемые компоненты более высокого уровня, выбирая системные имена тегов для различных элементов управления (например, «FrequencySlider» для слайдера и «frequencyLabel» для связанная текстовая метка). Процедура инициализации компонента может использовать findobj для поиска различных частей компонента и их инициализации. Например.

 
    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 
  • Если вы используете R2008a или более поздней версии, есть много дополнительной поддержки развития ОО:
    • поддержка для packages/namespaces
    • использование classes для реализации различных ОО парадигм.
    • встроенная поддержка для шаблона наблюдателя (см help on "listeners")
0

У меня нет опыта создания GUI в Matlab, но если ваша компания будет тратить на нее деньги, то Matlab для .net может быть более быстрым вариантом. Это позволит вам написать код Matlab, который будет удален в комком-компоненте, который может быть вызван из .net, что означает, что вы можете написать свой графический интерфейс на любом языке .net, который вам нужен. Ссылка на него приведена ниже. http://www.mathworks.com/products/netbuilder/

+0

Спасибо за предложение, но клиент твердо уверен, что пользовательский интерфейс нативный код Matlab. – 2008-12-03 18:42:28

3

Я предполагаю, что у вас (Дан Винтон) есть некоторые знания в области проектирования и дизайна, вы ищете обычную практику в мире MatLab. Для этого я хотел бы взглянуть на панели инструментов графического интерфейса MatLab, такие как оптимизация, подгонка кривой и т. Д. Графические интерфейсы всех этих наборов инструментов поставляются с исходным кодом (они являются регулярными скриптами MatLab). Вы также можете взглянуть на него или на исходный код нескольких пакетов с высоким рейтингом GUI от MatLab Central. Это даст вам хорошее представление о распространенной практике в MatLab.

+0

Ваше предположение верно: я счастливо писал программное обеспечение на годы, соответствующие определенным практикам, которые, похоже, не портятся на менее платформу OO, такую ​​как Matlab ... – 2008-12-03 18:41:52

Смежные вопросы