В прошлой заметке я описал составные части исполняемой программы. Теперь посмотрим, как она работает.
При запуске программы начинает работать startup код, который:
- Читает схему и код в оперативную память
- Совершает некие подготовительные действия
- Запускает «первую часть» программы
Вот здесь придется остановиться и определить, что же такое первая и последующие части.
Лирическое оправдание: Трудность описания Вира в том, что в нем слишком много не так. Мне приходится идти небольшими шагами, каждый раз срезать небольшой поверхностный слой и все время писать приблизительно. Было бы гораздо проще, если бы вложенных идей было мало и их можно было бы описывать по отдельности. К сожалению, это не так.
В прошлый раз я рисовал схему из абстрактных компонент, теперь рассмотрим, из каких частей состоит программа на самом верхнем уровне.
Устройство программы верхнего уровня: программа состоит из рабочих столов.
Рабочий стол – это обобщение окна или экрана (для мобильных приложений), самый крупный строительный блок для сборки программы. Рабочий стол не обязательно является видимым (не обязательно имеет GUI), это скорее «смысловая» или «логическая» единица программы и/или интерфейса.
Рассмотрим рабочие столы на примере программы «Анализатор текстов». Программа разрабатывается компанией Синергетик Лаб (http://synergetic-lab.ru/) на Вире, как вспомогательная программа в одном из проектов. Скриншоты и описание программы использую с разрешения руководства Синергетик Лаб.
Почему я использую эту программу в качестве примера? Во-первых, она достаточно простая по устройству, а, во-вторых, делается прямо сейчас.
Вот то, как выглядит работающий «Анализатор текстов»:
А так выглядит программа, точнее основной рабочий стол, открытый в визуальном редакторе Вира:
Разница в том, что в Вире вместо открытых закладок – пустое место, а в рабочей программе слева по умолчанию открыт рабочий стол с именем «Корпус», а справа рабочий стол «Слова». Если нажать на кнопки «Анализ», «Проверка» слева или «Слоги» справа, то откроются соответствующие рабочие столы.
Рабочие столы «Корпус», «Слова» и остальные редактируются в Вире отдельно. Переключится на редактирование другого рабочего стола можно выбрав его в модели программы:
Каждая единица в модели – это рабочий стол. Если в модели щелкнуть по строке «Корпус», то в визуальном редакторе откроется рабочий стол «Корпус»:
В рабочей программе, рабочий стол «Корпус» открывается при запуске программы в левом поле закладок, а рабочий стол «Слова» в правом поле закладок.
Посмотрим на то, как это происходит. На модели программы выше главного стола стоит «Лицо» — это самый первый рабочий стол, который готовит к работе startup код. Как именно готовит, нам пока не важно, главное, что среди инструментов, которые стоят на «Лице» есть инструмент, которые открывает «Главный стол».
Этот инструмент:
- По схеме создает «объекты» (компоненты) рабочего стола, то есть выделяет память под данные и создает структуру в виде дерева.
- Запускает инициализацию всех «объектов» (по дереву), во время которой, в том числе для видимых столов создаются окна (Windows windows :)). Забегу вперед, инициализация делается рассылкой уведомления (сообщения). Если у компоненты есть соответствующая «приемная часть», то код приемной части выполнится, если нет, то ничего не произойдет.
- После инициализации, рассылается еще одно уведомление: «начать работу»
Это последовательность работает при создании любого рабочего стола. Теперь рассмотрим конкретно работу инструментов на «Главном столе» Анализатора текста:
- К уведомлению «начать работу» подключен инструмент, открывающий закладку (рабочий стол) «Корпус» и помещающий его на подложку в левой части интерфейса
- К уведомлению «начать работу» подключен точно такой же второй инструмент, открывающий закладку «Слова»
Другими словами: есть два одинаковых инструмента – два экземпляра инструмента, один из которых «настроен» открывать «Корпус» слева, а второй «Слова» справа. Естественно, что код используется один и тот же, а вот данных два экземпляра. В каком-то смысле экземпляр инструмента – это «объект», но я не хочу использовать терминологию ООП, потому что она скорее помешает пониманию, чем поможет.
О «настройке» подробнее поговорим позже, пока достаточно сказать, что нужный рабочий стол в настройках инструмента можно указать по имени, точнее пути «Главный стол\Корпус» или по уникальному идентификатору.
Подведу промежуточный итог:
Программа есть дерево рабочих столов, рабочие столы можно разрабатывать независимо или почти независимо друг от друга.
Замечу, что в модели программы мы видим «образцы» (классы) рабочих столов. Никто не мешает открыть «Корпус» в двух местах – слева и справа.
В качестве примера независимых столов, посмотрим в модели программы раздел «Вспомогательные столы»:
Зеленый цвет здесь означает, что эти рабочие столы взяты целиком из репозитория, то есть они могут использоваться в любой программе (без изменения!).
Для полной «универсальности» этим рабочим столам не хватает возможности смены «кожи». Я как-то двигался к этому, но не доделал. Смена кожи без изменения (условно) бизнес-логики — это еще один механизм который желательно бы сделать для того, чтобы Вир был отчуждаемым (или продаваемым тем или иным способом).