Среда разработки

Материал из wikiru.visual-prolog.com

В этом руководстве мы рассмотрим Интегрированную Среду Разработки (Integrated Development Environment - IDE). IDE используется для создания, разработки и поддерки Visual Prolog - проектов.

Если говорить кратко, вы будете использовать IDE для решения следующих задач жизненного цикла проекта:

  • Создание:
    Если проект создается средствами IDE, то в момент создания Вы выбираете основные свойства Вашего проекта, такие как, является ли Ваш проект исполняемым приложением или DLL, использует ли он пользовательский интерфейс или основан на текстовом взоимодействии, и т.д.
  • Построение:
    Проект строится, т.е. он компилируется и связывается, используя IDE.
  • Просмотр:
    IDE и компилятор собирают информацию о проекте, которая используется различными способами для быстрой навигации по проекту, и т.д.
  • Разработка:
    В процессе разработки и поддержки проекта IDE используется для добавления и удаления в проект исходных файлов и элементов пользовательских интерфейсов и их редактирования.
  • Отладка:
    IDE используется также для отладки проекта. Отладчик используется для движения по тексту программы и наблюдения состояния ресурсов программы в процессе ее исполнения. Впоследствии мы рассмотрим детально каждую из этих функций.

Замечание. Руководство начинается с "чистого листа", и в процессе создается проект, который используется на протяжении всего руководства. Читателю предлагается сделать то же самое. Кроме того заметим, что нажатие на картинку маленького размера приводит к ее показу в полном размере в отдельном окне.

Создание

Прежде всего мы создадим проект, выбрав Project -> New... в меню. В ответ на это Вам представляется диалог, содержащщий различные свойства проекта.

Tut01 projectSettingsS.png

Мы выбираем имя для проекта tut01.

Имя проекта используется, кроме того, как имя сгенерированного продукта. Здесь мы выбираем исполняемое приложение как exe-файл, следовательно имя приложения будет tut01.exe.

Мы также выбираем, что это будет GUI-приложение (Graphic User Interface), то есть программа с графическим пользовательским интерфейсом.

Базовая директория (Base Directory) является базовой ("base") всех Ваших проектов; здесь Вы должны выбрать место, которое Вам кажется удобным на Вашем компьютере.

Новый проект будет создан как поддиректория (Sub-Directory) базовой директории. По умолчанию эта директория будет иметь то же имя, что и сам проект.

Префикс пакетов (Package Prefix) используется, когда создаются новые пакеты (packages) системы (позже в этом руководстве понятие пакета будет объяснено). В случае, если файлы с Вашими исходными кодами будут когда-либо разделяться с кем-либо еще, то было бы неплохо, если бы этот префикс не вступал бы в конфликт с другими префиксами. Поэтом неплохо использовать, например, преобразованное имя Вашего интернет-домена (как com/visual-prolog , который является обратным имени visual-prolog.com).

Пока Вам нет необходимости рассматривать остальные закладки и установки.

Теперь создадим проект нажатием OK.

Теперь IDE будет выглядеть примерно так:

Tut01 totalS.png Tut01 message.png


Слева у Вас Проектное окно (Project Window), которое содержит информацию о составе Вашего проекта. Пока там не очень много информации, но после первой же компиляции проекта будет добавлена новая информация. Мы вернемся к этому окну, когда мы откомпилируем этот проект.

Справа внизу у Вас имеется Окно сообщений (Messages Window), которое будет содержать сообщения о состоянии и процессах, протекающих в IDE.

Построение (Building)

Прежде чем вносить какие-либо изменения, мы построим (то есть, откомпилируем и свяжем - compile and link) проект. В меню Build (Построить) содержаться команды для построения, компиляции и вызова испоняемого результата проекта на исполнение.

Если выбрать Execute (Выполнить), то проект сначала будет построен, и таким образом на исполнение будет запущена именно последняя обновленная версия. Поэтому мы выбираем Execute (Выполнить).

Если Вы еще не зарегистрировались как пользователь Visual Prolog Вы будете уведомлены об этом на экране. Мы рекомендуем Вам зарегистрироваться, но Вы можете также выбрать "Continue Evaluation" (Продолжить пробный режим).

В окне сообщений Messages Window IDE выводит информацию о компилируемых файлах и т.д.

Если процесс построения завершается успешно, что верно в данном случае, то созданная программа запускается на выполнение. В результате Вы увидите небольшую ничего не делающую программу с пользовательским интерфейсом. Можно заметить, что программа выглядит очень похоже на саму среду разработки IDE. Это не удивительно, поскольку IDE в действительности является программой, созданной с помощью Visual Prolog.

Позже в этом же руководстве мы увидим что происходит, если компилятор или линкер обнаруживает ошибки в процессе построения.

Просмотр

Теперь мы обратим внимание на Проектное Дерево (Project Tree) в Проектном окне (Project Window), и рассмотрим его внимательнее. Дерево само по себе представлено в виде, стандартном для элемента дерева системы Windows, поэтому Вы должно быть уже знакомы с принципами его использования. Мы же сконцентрируемся на содержании дерева.

Пока дерево проекта выглядит так:

Project Tree

Самый верхний узел представляет проект и проектную директорию.

Сразу ниже виден логический узел $(ProDir), который представляет директорию, в которой установлена сама система Visual Prolog. Эта директория содержит (как мы видим) библиотеки (libraries) и библиотеки исходных текстов системы Visual Prolog.

Затем ниже следует директория TaskWindow, которая является поддиректорией проектной директории. Эта директория содержит все необходимые коды для создания главного окна приложения (Task Window), его меню (Menu), панель инструментов (Toolbar) и диалог информации (about dialog).

Наконец, Вы видите ряд файлов. Visual Prolog использует следующие соглашения:

  • .ph файлы есть заголовки пакетов (package headers). Пакет является набором классов и интерфейсов, которые используются совместно.
  • .pack файлы есть packages. Они содержат исполняемые разделы или конкретизации файлов, перечисленных в соответствующих .ph файлах.
  • .i файл содерижт интерфейс (interface).
  • .cl файл содержитдекларацию класса (class declaration)
  • .pro файл содерижт имплементацию класса (class implementation).

Если Вы теперь установите указатель на узел с классом main.cl, то вы увидите следующее:

Project Tree

Это поддерево показывает, что файл main.cl содержит класс, называемый main, который содержит два предикта, с именами classinfo и run, соответственно. Предикаты являются подпограммами, но мы их не будем рассматривать в этом руководстве.

Если теперь Вы раскроете узел TaskWindow, то увидите дерево:

Project Tree: TaskWindow

Здесь видны несколько новых типов узлов:

  • .dlg файл содержит диалог (dialog)
  • .frm файл содержит форму (form)
  • .win файл содержит окно (window) (окно приложения или обычное окно класса window из PFC GUI)
  • .mnu файл содержит меню (menu)
  • .ico файл содержит иконку (icon)

Можно встретить также:

  • .ctl файлы, содежащие элементы управления (controls)
  • .tb файлы, содежащие панели инструментов (toolbars)
  • .cur файлы, содежащие курсоры (cursors)
  • .bmp файлы, содежащие картинки (bitmaps)
  • .lib - это библиотеки (libraries)

Правая кнопка мышки вызывает контекстное меню с операциями, которые можно выполнить над текущим узлом.

Двойной щелчок на узле вызывает редактор соответствующего элемента. Все коды редактируются с помощью текстового редактора, а ресурсы на основе окон, такие как диалоги, меню редактируются с помощью графических редакторов. Графические редакторы мы увидим позже, сейчас же мы попытаемся вызвать текстовый редактор.

Некоторые сущности представлены в дереве дважды, поскольку они имеют как декларацию, так и имплементацию. Например, предикат run в классе main:

Project Tree Project Tree

Попробуйте сделать двойной щелчок на каждому узле с именем run, и Вы увидите, что откроются два редактора, показывающих декларацию и имплементацию предиката run, соответственно.

В IDE имеется ряд других способов и вызовов некоторых сущностей, которые мы здесь не будем рассматривать.

Разработка

Давайте теперь немного модифицируем проект. Поскольку мы пока не очень опытны в программировании на Visual Prolog, будем делать простые изменения.

Прежде всего мы умышленно сделаем ошибку с тем, чтобы Вы не были обескуражены, сделав ошибку и увидев окно с сообщением об ошибке.

Сначала найдем клаузу для предиката run в файле main.pro. Сделав двойной щелчок на последнем из двух узлов с именем run в проектном окне, мы тем самым откроем текстовый редактор с указателем, помещенным так, как показано:

Tut01 editRun1S.png

Попытаемся вставить предикат fail, как показано (обратите внимание на запятую после предиката show):

clauses
    run():-
        TaskWindow = taskWindow::new(),
        TaskWindow:show(),
        fail.

Попытаемся построить теперь проект опять: нажав F9. Система сохранит и откомпилирует файл, но, поскольку мы сделали ошибку, откроется Error Window (Окно ошибок):

Error Wondow

Посмотрим, что говорит сообщение об ошибке. Теперь попытайтесь сделать двойной щелчок на сообщении об ошибке. Как видите, редактор опять получает фокус и указатель устанавливается точно на предикат fail, который мы вставили.

Восстановим код без fail и запустим опять построение проекта.

Теперь попробуем сделать изменение в about dialog (информационный диалог). Это не чувствительное изменение, но это позволит нам проиллюстрировать ряд важных свойств.

Откроем диалог About в Dialog Editor (Редакторе Диалогов). Для этого сделаем двойной щелчок на диалоге в проектном окне. Узел, на котором Вы должны сделать двойной щелчок показан здесь:

Project Window: About Dialog

Как только Вы сделали это, Вы увидите диалог в Dialog Editor (Редакторе Диалога), две панели инструмантов и окно свойств.

Добавим кнопку в диалог. Кликните на "button (кнопку)" в панели инструментов с элементами управления, а затем кликните в редактируемом диалоге AboutDialog где-то после проектой иконки. В результате Вы увидите свойства нового элемента управления, которые Вы сможете редактировать. Поменяем текст Text на "Press Me (Нажми Меня)" - текст, который появится на поверхности кнопки. Мы, кроме того, видим поле Name (Имя) - IDE будет идентифицировать именно этот элемент управления в различных обстоятельствамх под этим именем.

Теперь это должно выглядеть примерно так:

Dialog Editor: About Dialog with new button

Теперь надо сделать что-то по нажатию кнопки. Для этого в том же редакторе свойств выберем закладку Events (События).

В поле для редактирования свойства с именем ClickResponder (приемник события Click) наберем имя предиката, который будет обрабатывать это событие. Поле можно оставить и пустым, при этом мы даем возможность IDE самой создать это имя. Сделаем теперь двойной щелчок, находясь в этом поле. Управление теперь вернется к текстовому редактору (он откроется, если не был открыт) и указатель будет установлен на код, созданный средой (IDE).

Давайте менять текст на кнопке, когда она нажимается. Для этого модифицируем код, как показано:

predicates
    onPushButtonClick : button::clickResponder.
clauses
    onPushButtonClick(_Source) = button::defaultAction() :-
        pushButton_ctl:setText("Pressed").

Теперь построим и запустим приложение опять (то есть, нажав F9). Если Вы все правильно сделали, это должно выполниться успешно. В программе Вы, естественно, должны открыть диалог About, выбрав в меню Help -> About и затем нажав эту вновь созданную кнопку.

В моем приложении это выглядит таким образом:

About: Press MeAbout Pressed

Debugging

The development environment contains a debugger. With the debugger you can trace the execution of your program and examine the program state.

It does not make much sense to go into details with debugging before you have learned the Visual Prolog language. But I will briefly explain the debugger anyway, because it can be very useful for understanding and experimenting with the language.

To start the debugger, select Debug -> Run in the menu. If the project is not up-to-date it will first be build, after that the debugging session will start.

Notice you can stop the debugging at any time by selecting Debug -> Stop Debugging in the menu.

When debugging starts the IDE will first load the debug information and then it will enter the program. The program execution is stopped just before the goal is executed. To indicate this, the goal is opened in an editor window, and the blue arrow points to the goal:

Editor: Current Position

You can single step in the program using the Step Into and Step Over commands in the Debug menu.

Try Step Into: this will open another editor with the code of mainExe::run, and the arrow will point to the entry of this code.

In the view menu you can open various debugger windows, which I will briefly explain.

The Run Stack window:

Run Stack

contains a "picture" of the run stack. Exactly what you see depends on your settings in Tools -> Options... -> Debugger. In principle, the run stack contains a number of lines corresponding to calls that has been made. However, optimization (so called last call optimization) might have removed some entries.

The run stack not only shows the calls, it also shows trap points and backtrack points, these is described in a later tutorial and there I also describe the run stack window in more details.

The Local Variables window:

Local Variables

contains the local variables corresponding to the selection in the run stack window. Some variables might not yet have received a value, these are show as an underscore (i.e. like originalraiser in the above picture).

The Facts window:

Facts

Contains the global state of the program, this state is stored in fact databases. Fact databases are a unique Visual Prolog feature, which will be described in a later tutorial. You can also add objects from the Local Variables window to the Facts window, that way you can track the state changes in interesting objects.

The Breakpoints window:

Tut01 breakPointsWindow.png

shows the current breakpoints in the program (I have set open breakpoint so that the window would not be empty). You can set/remove breakpoints by selecting Debug -> Toggle Breakpoint.

The remaining debug windows are for low level debugging and will not be considered here.

Summary

The Integrated Development Environment (IDE) makes it possible for you to:

  • create
  • build
  • maintain, and
  • debug

your projects. It contains a number of tools, editor and wizards that will help you in your tasks.

References