ОБОЛОЧКА TURBO-VISION
Объектно-ориентированный подход позволяет создавать объектные среды, библиотеки объектов для последующего использования при разработке программ. Особенно широкую известность получили объектные оболочки для разработки интерфейсов программ в некотором едином, ставшем стандартным, стиле.
Turbo-Vision - это оболочка для создания оконченных интерфейсов программ в среде Турбо-Паскаль версий 6.0, 7.0.
Объектно-ориентированная библиотека Turbo-Vision включает
• многократные перекрещивающиеся окна с изменяемыми размерами;
/
• выпадающие меню;
• поддержку мыши;
• встроенную установку цвета;
• кнопки, полосы скроллинга, окна ввода, зависимые и независимые кнопки;
• стандартную обработку клавиш и нажатий мышки и многое другое.
Стандартный отработанный интерфейс, создаваемый с помощью Turbo-Vision, имеет сверху строку меню, а снизу - строку статуса.
Текст, который появляется в строке статуса, обычно выводит сообщения о текущем состоянии программы, показывая доступные горячие клавиши или подсказки для команд, которые доступны пользователю в данный момент.
Когда «выпадает» меню. полоса подсветки пробегает по списку элементов меню при движении мыши или нажатии на клавиши курсора. Нажатием клавиши <Enter> или левой кнопки мыши выбирается подсвеченный элемент. Выбранный элемент меню посылает команду в определенную часть программы.
Программа обычно взаимодействует с пользователем через одно или более окон или диалоговых окон, которые появляются и исчезают на панели экрана в соответствии с командами от мышки или клавиатуры. Turbo-Vision предоставляет большой набор окон для ввода и отображения информации. Окна можно сделать со скроллингом, что позволяет выводить в окнах большие объемы данных. Скроллинг окна по информации выполняется передвижением по полосе скроллинга внизу окна, с правой стороны окна или обеим сторонам. Полоса скроллинга указывает относительную позицию окна в отображаемых данных.
Диалоговые окна часто содержат кнопки - подсвеченные слова - которые могут активизироваться с помощью мыши (или переходом через клавишу Tab и нажатием клавиши <Пробел>).
Отображаемые слова, выбранные мышью, могут быть установлены для передачи команд в программу.
Простейшая программа на Turbo-Vision выполняет следующие действия:
• заполняет панель экрана полутеневым шаблоном;
• выводит на экран полосу меню (наверху) и строку статуса (внизу);
• устанавливает обработчик для событий, инициированных от клавиш и мыши;
• строит объект меню и соединяет его с полосой меню;
• строит диалоговое окно;
• связывает диалоговое окно с меню;
• ожидает действий пользователя через мышь или клавиатуру. Краеугольным объектом любой программы является объект TApplication. TApplication - это абстрактный тип объекта. Он ничего не делает. TApplication используется для создания порожденных типов от TApplication. которые содержат программный код. Например, в простейшей демонстрационной программе HELLO.PAS, выводящей в стандартном для Turbo-Vision виде надпись HELLO, WORLD! определяется порожденный тип объекта THelloApp:
PHelloApp = ^HelloApp;
THelloApp = object(TApplication)
procedure GreetingBox;
procedure HadleEvent(var Event: TEvent); virtual;
procedure InitMenuBar; virtual;
procedure InitStatusLine; virtual;
end;
Как показано здесь, полезно определить тип указателя на каждый тип определяемого объекта, поскольку большая часть работы над объектами производится через указатели. Полиморфизм, главным образом, работает через указатели.
THelloApp содержит гораздо больше, чем четыре содержащихся в нем метода; порожденный объект наследует все от его предка. В определении THelloApp определяется, чем новый объект отличается от его предка TApplication. Все, что не переопределяется, наследуется в неизменном виде от TApplication.
Четыре метода, определенные в THelloApp, завершают приложения:
1) метод HadleEvent определяет, что некоторые события произошли (и указывает это) и как на эти события отвечать другим прикладным функциям; метод HadleEvent, определенный в TApplication, работает с общими событиями, которые возникают внутри любой программы, но необходимо обеспечить обработку событий, специфичных для программы;
2) метод InitMenuBar устанавливает меню для полосы Меню программы ( TApplication содержит полосу меню, но не сами меню);
3) метод InitStatusLine устанавливает текст строки статуса внизу экрана; этот текст обычно отображает сообщение о текущем состоянии программы, показывая доступные горячие клавиши или напоминая пользователю о некоторых действиях;
4) метод GreetingBox вызывает диалоговое окно в ответ на элемент меню Greeting; GreetingBox вызывается из метода HadleEvent в ответ на событие, переключаемое выбором элемента меню Greeting; в более сложных программах можно использовать различные методы в ответ на каждый элемент меню, определяемый в начальном меню.
На верхнем уровне абстракции главная программа на Turbo-Vision выглядит аналогично Hello и содержит три метода:
var
HelloWorld: THelloApp;
begin
HelloWorld.Init;
HelloWorld Run;
HelloWorld.Done;
end;
Каждый из этих трех методов требует небольшого пояснения.
Init - это необходимый вызов конструктора. Все объекты, содержащие виртуальные методы, должны быть созданы (через вызов их конструктора) до вызова любых других методов этого объекта. Все конструкторы Turbo-Vision имеют имя Init. Это удобное соглашение, которым мы рекомендуем пользоваться.
HelloWorld.Init устанавливает объекты главной программы для использования. Он очищает экран, устанавливает некоторые значения для важных переменных, заполняет панель экрана и выводит строку статуса и полосу меню. Он вызывает конструкторы многих других объектов, некоторые из которых никогда не видны, поскольку они вызываются внутри.
Почти вся работа программы в Turbo-Vision выполняется внутри метода главной программы Run. Определения метода Run здесь нет, поскольку Run наследуется от родительского объекта TApplication.
Этот метод состоит, главным образом, из цикла repeat...until, показанном здесь в псевдокоде;
repeat
<получить событие>;
<обработать событие>;
until Quit;
Это не точный код, а общая схема реализации Run.
В сущности программа Turbo- Vision циклически выполняет две задачи: получение события (где событие - это, в сущности, «сделать что-нибудь») и обработку этого события. Одно из событий вычисляется в некоторый вид команды выхода и цикл завершается.
Дестрактор Done в действительности очень прост: он уничтожает все объекты программы - полосу меню, строку статуса и панель экрана - и удаляет обработчик ошибок и драйверы Turbo-Vision. Метод Done должен отменять все действия, выполненные конструктором Init, а затем вызывать TApplication.Done, который обрабатывает все стандартные элементы.
Объектно-ориентированное программирование с использованием Turbo-Vision требует хорошего знания иерархии объектов и спецификаций их методов.
Помимо объектно-ориентированной оболочки Turbo-Vision для Турбо-Паскаля, существует аналогичная более развитая система для языка C++. Объектно-ориентированное программирование стало основой интерфейса системы Windows. Современные объектно-ориентированные системы типа Visual Basic, Delphi совершенно скрывают механизмы программирования и позволяют разрабатывать интерфейсы программ-приложений вообще без кодирования команд, пользуясь лишь средствами наглядного проектирования на экране дисплея.