Процедурные графические языки
Процедурные языки - это пакеты графических подпрограмм (графпакеты), доступные из программ на самых различных языках. Процедурные языки особенно удобны для тех приложений, в которых некоторой функции можно поставить в соответствие семантическую подпрограмму. Именно таким приложением и является изобразительная машинная графика, объектами которой являются искусственно созданные изображения. Тесно к этой области приложений прилегает и перцептивная машинная графика, объектами которой являются либо искусственно созданные изображения, либо изображения, выделенные из того или иного представления окружающего мира. Функционально генерацию изображений и манипуляцию с ними естественно представить в виде исполнения команд, использующих имена, координатные и иные данные, характеризующие объект манипулирования. Для выполнения таких действий нет необходимости в наличии графических типов данных, а сами действия удобно представить в соответствующих подпрограммах. Подпрограммы при этом фактически представляют собой мощное и легко модифицируемое семантическое расширение языка. Именно поэтому графические расширения языков за счет создания пакетов графических подпрограмм нашли самую широкую поддержку как со стороны разработчиков системного обеспечения, так и со стороны пользователей. Обрабатывающую систему можно представить как состоящую из базовой графической системы, осуществляющую чисто графические функции и прикладной программы, осуществляющей необходимые вычисления и управление. Концептуальная модель интерактивной системы при таком подходе представлена на следующем рисунке.
Рис. Концептуальная модель интерактивной системы машинной графики с явным выделением графической компоненты
Назначение графической системы в такой модели состоит в преобразовании двух или трехмерной модели объекта, формируемой прикладной программой, в графические команды и данные, либо передаваемые на устройства, либо запоминаемые в той или иной графической структуре данных.
На пути использования пакетов графических подпрограмм достигнуты наиболее впечатляющие успехи в использовании и развитии средств машинной графики в том числе связанные с:
– обеспечением аппаратной независимости прикладных программ, т.е. независимости от конкретных используемых графических устройств при условии приблизительного соответствия их возможностей;
– обеспечением адаптируемости прикладных программ, т.е. легкости приспособления к новым функциональным требованиям;
– обеспечением мобильности прикладных программ, т.е. легкости их переноса в иное окружение.
Аппаратная независимость средств отображения обеспечивается их построением по иерархическому принципу в виде некоторого набора логических уровней. Одна из разновидностей иерархического принципа - принцип перевернутой пирамиды. При этом подходе на нижнем уровне располагается аппаратно-зависимый драйвер с минимально допустимым набором возможностей, например, позиционирование, построение отрезка, дуги окружности и т.д. При необходимости использования другого устройства достаточно заменить драйвер. Системы, построенные по принципу перевернутой пирамиды, например, GINO-3D, ГРАФОР, как правило, ориентированы на работу с несложными устройствами. Использование устройств с более богатыми возможностями влечет за собой либо их неэффективное использование, либо переделку графической системы, т.е. в сущности тормозится развитие средств вывода. В этом заключается основной недостаток таких систем.
Более гибкое и мощное использование иерархического принципа заключается в разбиении средств вывода графпакета на три логических уровня с четкой фиксацией уровней и соблюдением интерфейсов между ними. Каждый уровень является для последующего некоторым виртуальным графическим устройством. Такой подход позволяет безболезненно модифицировать (улучшать) отдельные уровни, легко распределять программное обеспечение между различными ЭВМ, стыковать графическую систему с другими компонентами программного обеспечения.
На первом - нижнем уровне находятся аппаратно-зависимые драйверы устройств (иногда организованные в виде самостоятельных графпакетов), обладающие достаточным набором типичных элементарных функций. Назначение этого уровня - формирование файлов вывода на графические устройства.
На втором - среднем уровне находится аппаратно-независимый графпакет общего назначения.
На третьем - верхнем уровне находятся проблемно-ориентированные графпакеты.
По иерархическому принципу организовано большинство графических систем, наряду с упомянутыми GIND-3D и ГРАФОРом можно назвать, например, СМОГ, АТОМ, ДИГРАФ, ГРАФСМ, АНЕГРАФ, АТЛАНТ, УНИГРАФ, ГРАС и целый ряд других.
Адаптируемость прикладных программ в части средств вывода естественным образом обеспечивается последовательным использованием иерархического принципа, т.е. либо заменой требуемого уровня, либо надстройкой необходимых уровней.
Мобильность прикладных программ по отношению к изменению технических средств обеспечивается возможностью использования соответствующих драйверов устройств. Мобильность относительно ЭВМ обеспечивается реализацией функционально идентичных графпакетов для ЭВМ различных типов. Хорошие предпосылки для этого заключаются в решении вопросов стандартизации в машинной графике, которым посвящен раздел 3.
Основные преимущества подхода с использованием графпакетов состоят в следующем:
- Легкая обучаемость, так как пользователь пакета не выходит за рамки удобного либо привычного ему языка.
- Легкая расширяемость за счет написания самим пользователем подпрограмм, необходимых для его приложения. Задача системных программистов состоит в том, чтобы дать "базисный" пакет, пригодный для многих пользователей и многих приложений.
- Легкая переносимость прикладной программы на другие ЭВМ.
- Легкая адаптируемость к новым требованиям либо аппаратным возможностям.
- Легкое обеспечение многоязыковости либо за счет наличия функционально идентичного пакета для другого языка, либо за счет использования одной и той же библиотеки в рамках многоязыковой системы программирования, либо за счет единого исполнительного модуля, доступного с помощью пакетов процедур связи из различных систем программирования.
Очевидными недостатками такого подхода являются:
- Недостаточная гибкость, связанная с тем, что заранее фиксированный выбор "базисного пакета" со сравнительно ограниченными средствами может значительно усложнить прикладную программу, требующую функций, выходящих за рамки "базисных".
- Громоздкость, связанная с тем, что простота расширений в сочетании с недостаточной гибкостью провоцирует либо на создание множества подпрограмм по разному выполняющих схожие функции, либо на создание универсальных подпрограмм с большим числом разного рода дополнительных параметров для преодоления ограничений или неэффективностей.
Несмотря на отмеченные недостатки, можно уверенно утверждать, что создание пакетов графических подпрограмм является основным средством разработки графического программного обеспечения.
Языки диалога
Язык диалога, наряду с прочими атрибутами, такими как полнота, точность и скорость решения задачи, является одной из важнейших компонент прикладной интерактивной системы.
Обычно предполагается, что конечным пользователем интерактивной системы является специалист в некоторой предметной области, решающий с помощью ЭВМ требуемую задачу и взаимодействующий с ЭВМ на языке предметной области (входном языке).
Входные языки существенно отличаются от алгоритмических языков как внешне, так и по применению. Фразами такого языка являются изображения и действия. Применение такого языка отличается тем, что входные команды интерпретируются и исполняются по мере их поступления от пользователя, а не транслируются в объектный код и лишь затем исполняются. Наибольшее распространение получили два типа диалога - диалог инициируемый ЭВМ и диалог инициируемый пользователем [52]. Диалог в этих случаях ведется в форме "запрос-ответ". При диалоге 1-го типа пользователь либо заполняет форму, выдаваемую на экран, либо выбирает одну из альтернативных возможностей (команд). При диалоге 2-го типа пользователь подает те или иные допустимые в данный момент времени директивы. Альтернативные языки более просты в обучении и использовании, поскольку не требуют знаний форматов и символики различных директив, действия более просты, так как нет необходимости полностью вводить фразу или директиву и не надо помещать выбранный элемент данных в определенную позицию формата.
Различные аспекты проблемы взаимодействия человек-ЭВМ освещаются во многих работах. Так, например, в сформулированы требования, которым должен удовлетворять диалоговый входной язык:
· эффективность, полнота, естественность;
· расширяемость;
· обеспечение обратной связи;
· устойчивость к ошибкам;
· адаптируемость к пользователю.
В сущности входной язык состоит из двух компонент:
– язык формулирования пользователем команд и входных данных для ЭВМ (реплики человека);
– язык ответов пользователю (реплики ЭВМ).
Реплики человека выражаются в действиях с различными диалоговыми устройствами. Реплики ЭВМ выражаются в графических образах, либо звуковых сообщениях.
Как уже отмечалось, к числу существенных характеристик прикладных программ относятся аппаратная независимость от используемых графических устройств и мобильность – легкость переноса в иное окружение. Показано, что эти характеристики в части средств вывода – исполнения реплик ЭВМ обеспечиваются использованием виртуальных устройств отображения. Достижение аппаратной независимости при вводе реплик человека также обеспечивается введением понятий виртуальных устройств ввода, являющихся абстракциями реальных физических устройств. Программная поддержка средств ввода строится по иерархическому принципу и организуется в виде пакета подпрограмм. На нижнем уровне находятся драйверы устройств. На верхнем – виртуальные устройства ввода. При этом одно виртуальное устройство ввода может быть реализовано с использованием нескольких физических и наоборот.
В настоящее время общепринятым считается выделение шести классов виртуальных устройств ввода:
· ЛОКАТОР для ввода позиции;
· ШТРИХ для ввода последовательности позиций;
· ДАТЧИК для ввода скалярного значения (числа);
· ВЫБОР для выбора одной из альтернативных возможностей;
· УКАЗКА для указания объекта на изображении;
· КЛАВИАТУРА для ввода строки символов.
В стандарте CGI, определяющем интерфейс между аппаратно-независимой и аппаратно-зависимой частями графической системы, дополнительно к перечисленным предлагаются еще два класса виртуальных устройств:
· РАСТР (AREA) для ввода растровых картин;
· ОБЩЕЕ (GENERAL) для ввода иных данных, например, ввод голоса.