Создание средств визуального программирования
Что такое визуально-ориентированное программирование
Под визуально-ориентированным программированием обычно понимается автоматическая генерация кодов программ на некотором языке программирования при активизации различных графических объектов — чаще всего кнопок с наглядным изображением программируемых действий или с надписями, указывающими на-такие действия.
Mathematica изначально реализует визуально-ориентированное программирование с помощью палитр, содержащих математические операторы и символы. Однако язык программирования системы поддерживает возможность создания таких панелей для произвольных программных модулей. Целый ряд документов, готовящих средства визуально-ориентированного программирования, включен в справочную систему и дает наглядное представление о технике программирования в этой области.
Пример создания палитры функций
С помощью директивы Notebook [...] можно создать документ-«блокнот». Ниже представлен такой документ, создающий палитру из нескольких простых функций.
Notebook[{
Cell[BoxData[GridBox[{{
ButtonBox[\(Create\ a\ New\ Notebook\), ButtonFunction:>CompoundExpression[ Needs[ "Graphics"Graphics*"] , Needs[ "Graphics'Colors' "], Clear[ targetNB], Set[ targetNB,
NotebookCreate[ ] ] ] , ButtonEvaluator->Automatic]}, {ButtonBox[\(f[x_] := \)]},
{ButtonBox[\(Apply\ DefinitionX),
ButtonFunction:>CompoundExpression[ NotebookWrite[ targetNB, Cell[
BoxData[
FractionBox[ RowBox[ {
RowBox[ {"f", "[", "x", "]"}]/ "-", RowBox[ {"f", "[", "a", "]"}]}], RowBox[ {"x", "-", "a"}]]],
"Input"], All],
SelectionEvaluateCreateCell[ targetNB]], ButtonEvaluator->Automatic]},
{ButtonBox[\(Cancel[\[SelectionPlaceholder]]\)]}, {ButtonBox[\(Limit[\[SelectionPlaceholder] , x -> a]\)]}, {ButtonBox[\(DisplayX TogetherX),
ButtonFunction:>CompoundExpression[ NotebookWrite[ targetNB, Cell[
BoxData[
RowBox [ {
RowBox[ {"DisplayTogether", "[", "\n", "\t'V
RowBox[ {RowBox[ {"Plot", "[",
RowBox[ {RowBox[ {"f", "[", "x", "]"}], ",",
RowBox[ {"{", RowBox[ {"x", ",",
RowBox[ {"-", "5"}], ",", "5"}], "}"}],",",
RowBox[ {"PlotStyle", "->",
RowBox[ {"{", "Orange", "}"}]}]}], "]"]],
RowBox[ {"Plot", "[",
RowBox[ {"\[Placeholder]", ",",
RowBox[ {"{",
RowBox[ {"a", ",",
D/-M7i2^vr ;» "» "5"}] " , " , "5"}] '} " } ] , " , " KOWBOX [1~л -3)J, ,, Э ] \ , s ) J , ,,
RowBox[ {"PlotStyle", "->", RowBox [ {"{", "Violet", "}"}]}]}], "]"}]}']/ "]"}], ";"}]], "Input"], All]], ButtonEvaluator->Automatic]}}, RowSpacings->0, ColumnSpacings->0, GridDefaultElement:>ButtonBox[ "\\[Placeholder]"]]],
NotebookDefault,
CellMargins->{{Inherited, Inherited}, {5, Inherited}}, Evaluatable->True,
CellGroupingRules->"InputGrouping", PageBreakAbove->True, PageBreakWithin->False, GroupPageBreakWithin->False, CellLabelMargins->{{11, Inherited},
{Inherited, Inherited}},
DefaultFormatType->DefaultInputFormatType, LineSpacing->{!.25, 0}, AutoItalicWords->{}, FormatType->InputForm, ScriptMinSize->9, ShowStringCharacters->True, NumberMarks->True, Counterlncrements->"lnput", StyleMenuListing->None, FontFamily->"Courier", FontWeight->"Bold"]},
FrontEndVersion->"Microsoft Windows 3.0", ScreenRectangle->{{0, 800}, {0, 544}},
Editable->False, WindowToolbars->{},PageWidth->358 WindowSize->{151, 105}, WindowMargins->{{291, Automatic} Automatic, 19}},
WindowFrame->"Palette", WindowElements->{},
WindowFrameElements->"CloseBox",
WindowClickSelect->False,
ScrollingOptions->{"PagewiseScrolling"->True}, ShowCellBracket->False, CellMargins->{{0, 0}/ {Inherited, 0}}, Active->True, CellOpen->True, ShowCellLabel->False, ShowCellTags->False, ImageMargins->{{0, Inherited}, {Inherited! 0}}, Magnification->l]
Справа показано окно, в котором выполнены операции, шаблоны которых выводит созданная палитра функций. Это окно создается если нажать кнопку Create New Notebook (Создать новый документ)
Рис. 10.7. Работа с созданной палитрой функций
Созданная чисто демонстрационная палитра позволяет вводить в окно документа шаблоны нескольких операций. Например, если нажать кнопку f[x ]:= то шаблон этой операми (задание функции пользователя) Аналогично можно ввести в документ шаблоны и для ряда операций.
К сожалению, даже из приведенного простейшего примера видно, что программы, создающие визуально-ориентированные инструментальные средства, достаточно громоздки. Они используют целый ряд функций, не имеющих никакого отношения к математическим вычислениям и служащих лишь для создания элементов пользовательского интерфейса. Объем данной книги не позволяет описать эти функции более подробно. Читателю рекомендуется просмотреть функции, вошедшие в приведенный пример, и изучить ряд других примеров на создание элементов пользовательского интерфейса.
Среди этих примеров стоит отметить построение в виде палитры элементов периодической системы Менделеева (рис. 10.8). Активизация любой кнопки с именем химического элемента заносит в строку ввода текущего документа данные об этом элементе.
Рис. 10.8. Палитра периодической системы Менделеева и ее применение