Среда разработки: различия между версиями

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

 
(не показаны 22 промежуточные версии этого же участника)
Строка 9: Строка 9:
*'''Просмотр''':<br>IDE и компилятор собирают информацию о проекте, которая используется различными способами для быстрой навигации по проекту, и т.д.
*'''Просмотр''':<br>IDE и компилятор собирают информацию о проекте, которая используется различными способами для быстрой навигации по проекту, и т.д.


*'''Разработка''':<br>В процессе разработки и поддержки проекта, IDE используется для добавления и удаления в проект исходных файлов и элементов пользовательских интерфейсов и их редактирования.
*'''Разработка''':<br>В процессе разработки и поддержки проекта IDE используется для добавления и удаления в проект исходных файлов и элементов пользовательских интерфейсов и их редактирования.


*'''Отладка''':<br>IDE используется также для отладки проекта. Отладчик используется для движения по тексту программы и наблюдения состояния ресурсов программы в процессе ее исполнения. Впоследствии мы рассмотрим детально каждую из этих функций.
*'''Отладка''':<br>IDE используется также для отладки проекта. Отладчик используется для движения по тексту программы и наблюдения состояния ресурсов программы в процессе ее исполнения. Впоследствии мы рассмотрим детально каждую из этих функций.


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


==Создание==
==Создание==


First we will create a project by selecting '''Project -> New...''' in the menu. In response to this you are presented to a dialog containing various properties of the project.
Прежде всего мы создадим проект, выбрав '''Project -> New...''' в меню. В ответ на это Вам представляется диалог, содержащщий различные свойства проекта.


[[Image:tut01_projectSettingsS.png]]
[[Image:tut01_projectSettingsS.png]]


I have chosen that my project should have the name ''tut01''.
Мы выбираем имя для проекта ''tut01''.


The project name is also used as the name of the target that is producedIn this case the target is an ''exe'' file so the target name will be ''tut01.exe''.
Имя проекта используется, кроме того, как имя сгенерированного продуктаЗдесь мы выбираем исполняемое приложение как ''exe''-файл, следовательно имя приложения будет ''tut01.exe''.


I have also chosen that the target should be a GUI program, i.e. a program with a graphical user interface.
Мы также выбираем, что это будет GUI-приложение ('''G'''raphic '''U'''ser '''I'''nterface), то есть программа с графическим пользовательским интерфейсом.


The '''Base Directory''' is the "base" of all your projects; you should choose a place that is convenient for you.
'''Базовая директория (Base Directory)''' является базовой ("base") всех Ваших проектов; здесь Вы должны выбрать место, которое Вам кажется удобным на Вашем компьютере.


The new project will be created in a '''Sub-Directory''' of the base directory. By default this directory have the same name as the project itself.
Новый проект будет создан как '''поддиректория''' ('''Sub-Directory''') базовой директории. По умолчанию эта директория будет иметь то же имя, что и сам проект.


The '''Package Prefix''' is used when creating new "packages" in the system (a later tutorial will explain about the package notion). In case your source files will ever be shared with somebody else it is a good idea if the prefix does not conflict with other prefixes. Therefore it is a good idea to use a prefix that start with a reverse Internet domain name, like ''com/visual-prolog ''(which is the reverse of ''visual-prolog.com'').
'''Префикс пакетов (Package Prefix)''' используется, когда создаются новые '''пакеты (packages)''' системы (позже в этом руководстве понятие пакета будет объяснено). В случае, если файлы с Вашими исходными кодами будут когда-либо разделяться с кем-либо еще, то было бы неплохо, если бы этот префикс не вступал бы в конфликт с другими префиксами. Поэтом неплохо использовать, например, преобразованное имя  Вашего интернет-домена (как ''com/visual-prolog '', который является обратным имени ''visual-prolog.com'').


For the moment you do not need to consider the remaining tabs and options.
Пока Вам нет необходимости рассматривать остальные закладки и установки.


Now create the project by pressing '''OK'''.
Теперь создадим проект нажатием '''OK'''.


The IDE will now look something like this:
Теперь IDE будет выглядеть примерно так:


[[Image:tut01_totalS.png]] [[Image:tut01_message.png]]
[[Image:tut01_totalS.png]] [[Image:tut01_message.png]]




To the left you have the '''Project Window''', which contains information about the entities in your project. Right now there is not very much information, but once we compile the project information will be added. We will explore this window more when we have compiled the project.
Слева у Вас  '''Проектное окно (Project Window)''', которое содержит информацию о составе Вашего проекта. Пока там не очень много информации, но после первой же компиляции проекта будет добавлена новая информация. Мы вернемся к этому окну, когда мы откомпилируем этот проект.


To the right/bottom you have the '''Messages Window''', which will contain various status and progress messages.
Справа внизу у Вас имеется '''Окно сообщений (Messages Window)''', которое будет содержать сообщения о состоянии и процессах, протекающих в IDE.


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


Before we make any modifications, we will build (i.e. compile and link) the project. In the '''Build''' menu you find commands for building, compiling and executing the project.
Прежде чем вносить какие-либо изменения, мы построим (то есть, откомпилируем и свяжем - compile and link) проект. В меню '''Build (Построить)''' содержаться команды для построения, компиляции и вызова испоняемого результата проекта на исполнение.


If you choose '''Execute''' the project is first build, so that it is an up to date version you execute. Therefore I will choose '''Execute'''.
Если выбрать '''Execute (Выполнить)''', то проект сначала будет построен, и таким образом на исполнение будет запущена именно последняя обновленная версия. Поэтому мы выбираем '''Execute (Выполнить)'''.


If you have not registered Visual Prolog you will be presented to a special screen telling you so. I will suggest that you register, but you can also choose "Continue Evaluation".
Если Вы еще не зарегистрировались как пользователь Visual Prolog Вы будете уведомлены об этом на экране. Мы рекомендуем Вам зарегистрироваться, но Вы можете также выбрать "Continue Evaluation" (Продолжить пробный режим).


In the '''Messages Window''' the IDE writes which files are compiled, etc.
В окне сообщений '''Messages Window''' IDE выводит информацию о компилируемых файлах и т.д.


If the build process succeeds, which it does in this case, the created program is executed. As a result you will see a little ''doing-nothing ''GUI program. You might notice that the program looks a bit like the IDE itself. This is no coincidence since the IDE is actually a Visual Prolog program.
Если процесс построения завершается успешно, что верно в данном случае, то созданная программа запускается на выполнение. В результате Вы увидите небольшую ничего не делающую программу с пользовательским интерфейсом. Можно заметить, что программа выглядит очень похоже на саму среду разработки IDE. Это не удивительно, поскольку IDE в действительности является программой, созданной с помощью Visual Prolog.


Later in this tutorial we will also see what happens, if the compiler or the linker detects errors in the build process.
Позже в этом же руководстве мы увидим что происходит, если компилятор или линкер обнаруживает ошибки в процессе построения.


==Browsing==
==Просмотр==


Right now we will turn our eyes to the '''Project Tree''' in the '''Project Window''', and explore that a bit. The tree itself is presented in a standard Windows tree control so you should already be familiar with its usage. Here we shall concentrate on the contents of the tree.
Теперь мы обратим внимание на '''Проектное Дерево (Project Tree)''' в '''Проектном окне (Project Window)''', и рассмотрим его внимательнее. Дерево само по себе представлено в виде, стандартном для элемента дерева системы Windows, поэтому Вы должно быть уже знакомы с принципами его использования. Мы же сконцентрируемся на содержании дерева.


Right now the project tree will look like this:
Пока дерево проекта выглядит так:


[[Image:tut01_projectWindow1.png|Project Tree]]
[[Image:tut01_projectWindow1.png|Project Tree]]


The top node represents the project, and the project directory.
Самый верхний узел представляет проект и проектную директорию.


Right below that is the logical node '''$(ProDir)''' which represents the directory in which Visual Prolog is installed. This directory contains (as we shall shortly see) libraries and library code from the Visual Prolog system.
Сразу ниже виден логический узел '''$(ProDir)''', который представляет директорию, в которой установлена сама система Visual Prolog. Эта директория содержит (как мы видим) библиотеки (libraries) и библиотеки исходных текстов системы Visual Prolog.


Then comes another directory '''TaskWindow,''' which is a subdirectory of the project directory. This directory contains all the code needed to produce the Task Window, its menu and toolbar and the about dialog.
Затем ниже следует директория '''TaskWindow''', которая является поддиректорией проектной директории. Эта директория содержит все необходимые коды для создания главного окна приложения (Task Window), его меню (Menu), панель инструментов (Toolbar) и диалог информации  (about dialog).


Finally, you see a number of files. Visual Prolog uses the following conventions:
Наконец, Вы видите ряд файлов. Visual Prolog использует следующие соглашения:


*.'''ph''' files are '''package headers'''. A package is a collection of classes and interfaces that are intended to be used as a chunk.*.'''pack''' files are '''packages'''. They contain the implementation/definition of the corresponding .ph files.*.'''i''' file contains an '''interface'''.*.'''cl''' file contains a '''class declaration'''*.'''pro''' file contains a '''class implementation'''If you expand the main.cl node completely you will see the following:
*.'''ph''' файлы есть '''заголовки пакетов (package headers)'''. Пакет является набором классов и интерфейсов, которые используются совместно.
*.'''pack''' файлы есть '''packages'''. Они содержат исполняемые разделы или конкретизации файлов, перечисленных в соответствующих .ph файлах.
*.'''i''' файл содерижт '''интерфейс (interface)'''.
*.'''cl''' файл содержит'''декларацию класса (class declaration)'''
*.'''pro''' файл содерижт '''имплементацию класса (class implementation)'''.
 
Если Вы теперь установите указатель на узел с классом main.cl, то вы увидите следующее:


[[Image:tut01_projectWindow2.png|Project Tree]]
[[Image:tut01_projectWindow2.png|Project Tree]]


This sub-tree shows that the file '''main.cl''' contains a class called '''tut01''', which contains two predicates called classinfo and run respectivelyPredicates are subroutines, but they will not be considered further in this tutorial.
Это поддерево показывает, что файл '''main.cl''' содержит класс, называемый '''main''', который содержит два предикта, с именами classinfo и run, соответственноПредикаты являются подпограммами, но мы их не будем рассматривать в этом руководстве.


If we collapse this node again and instead expand the '''TaskWindow''' node, you will see this tree:
Если теперь Вы раскроете узел '''TaskWindow''', то увидите дерево:


You will notice several new kinds of nodes:
[[Image:tut01_projectWindow3.png|Project Tree: TaskWindow]]


*.'''dlg''' file contains a '''dialog'''
Здесь видны несколько новых типов узлов:


*.'''frm''' file contains a '''form'''
*.'''dlg''' файл содержит '''диалог (dialog)'''


*.'''win''' file contains a '''window''' (task window or conventional PFC GUI window)
*.'''frm''' файл содержит '''форму (form)'''


*.'''mnu''' file contains a '''menu'''
*.'''win''' файл содержит '''окно (window)''' (окно приложения или обычное  окно класса window из PFC GUI)


*.'''ico''' file contains an '''icon'''
*.'''mnu''' файл содержит '''меню (menu)'''


If you continue to explore you might also meet:
*.'''ico''' файл содержит '''иконку (icon)'''


[[Image:tut01_projectWindow3.png|Project Tree: TaskWindow]]
Можно встретить также:


*.'''ctl''' files containing '''controls'''
*.'''ctl''' файлы, содежащие '''элементы управления (controls)'''


*.'''tb''' files containing '''toolbars'''
*.'''tb''' файлы, содежащие '''панели инструментов (toolbars)'''


*.'''cur''' files containing '''cursors'''
*.'''cur''' файлы, содежащие '''курсоры (cursors)'''


*.'''bmp''' files containing '''bitmaps'''
*.'''bmp''' файлы, содежащие '''картинки (bitmaps)'''


*.'''lib''' that are '''libraries'''
*.'''lib''' - это '''библиотеки (libraries)'''


If you right click on a node a context menu will appear, with commands that have relevance for that particular node.
Правая кнопка мышки вызывает контекстное меню с операциями, которые можно выполнить над текущим узлом.


If you double click on a node the corresponding entity will be brought up in a suitable editor. All code is edited in a text editor, but windows resources like dialogs and menus are edited in graphical editors. We will look closer to graphical editors below, here we shall try to bring up a text editor.
Двойной щелчок на узле вызывает редактор соответствующего элемента. Все коды редактируются с помощью текстового редактора, а ресурсы на основе окон, такие как диалоги, меню редактируются с помощью графических редакторов. Графические редакторы мы увидим позже, сейчас же мы попытаемся вызвать текстовый редактор.


Some entities are represented twice in the tree, because they have both a declaration and a definition/implementation. For example, the predicate run in the class '''tut01''':
Некоторые сущности представлены в дереве дважды, поскольку они имеют как декларацию, так и имплементацию. Например, предикат  run в классе '''main''':


[[Image:tut01_projectWindow2.png|Project Tree]] [[Image:tut01_projectWindow4.png|Project Tree]]
[[Image:tut01_projectWindow2.png|Project Tree]] [[Image:tut01_projectWindow4.png|Project Tree]]


Try double clicking on each of the run nodes, and notice that two editors open showing the declaration and the definition of the run predicate, respectively.
Попробуйте сделать двойной щелчок на каждому узле с именем run, и Вы увидите, что откроются два редактора, показывающих декларацию и имплементацию предиката run, соответственно.


The IDE has other facilities for browsing to specific entities, but these will not be considered here.
В IDE имеется ряд других способов и вызовов некоторых сущностей, которые мы здесь не будем рассматривать.


==Development==
==Разработка==


Now lets try to modify the project a bit. Since we have not yet concerned ourselves with how to program in Visual Prolog, we will keep the changes simple.
Давайте теперь немного модифицируем проект. Поскольку мы пока не очень опытны в программировании на Visual Prolog, будем делать простые изменения.


We will start by deliberately introducing an error, that way you will not be completely surprised if you make some thing wrong, at the same time you can see the error window.
Прежде всего мы умышленно сделаем ошибку с тем, чтобы Вы не были обескуражены, сделав ошибку и увидев окно с сообщением об ошибке.


First you should locate the clauses for the run predicate in the file '''main.pro'''. If you double click the last of the two run nodes in the project tree, an editor opens with the caret placed like this:
Сначала найдем клаузу для предиката run в файле '''main.pro'''. Сделав двойной щелчок на последнем из двух узлов с именем run в проектном окне, мы тем самым откроем текстовый редактор с указателем, помещенным так, как показано:


[[Image:tut01_editRun1S.png]]
[[Image:tut01_editRun1S.png]]


Try inserting a fail like this (notice the comma after show):
Попытаемся вставить предикат  fail, как показано (обратите внимание на запятую после предиката show):
 
<vip>clauses
<vip>clauses
     run():-
     run():-
Строка 139: Строка 144:
         TaskWindow:show(),
         TaskWindow:show(),
         fail.</vip>
         fail.</vip>
 
Попытаемся построить теперь проект опять: нажав '''F9'''. Система сохранит и откомпилирует файл, но, поскольку мы сделали ошибку, откроется '''Error Window (Окно ошибок)''':
After that we try to build the project again: simply press '''F9'''. The system will now save and compile the file, but since we have made an error, the '''Error Window''' will open:


[[Image:tut01_errorS.png|Error Wondow]]
[[Image:tut01_errorS.png|Error Wondow]]


We will consider what the error message actually means. Instead you should try to double-click on the error message. You will notice that the editor gets focus again and that the caret points exactly to the fail we inserted.
Посмотрим, что говорит сообщение об ошибке. Теперь попытайтесь сделать двойной щелчок на сообщении об ошибке. Как видите, редактор опять получает фокус и указатель устанавливается точно на предикат fail, который мы вставили.


Reestablish the code without the fail and build the project again.
Восстановим код без fail и запустим опять построение проекта.


Next we will try to make a modification in the about dialog. It is not a very sensible change, but it will illustrate a number of things.
Теперь попробуем сделать изменение в about dialog (информационный диалог). Это не чувствительное изменение, но это позволит нам проиллюстрировать ряд важных свойств.


First we will open the '''About''' dialog in the '''Dialog Editor''', to do this you double click the dialog in the project tree. The node you have to double click is shown here:
Откроем диалог '''About''' в '''Dialog Editor (Редакторе Диалогов)'''. Для этого сделаем двойной щелчок на диалоге в проектном окне. Узел, на котором Вы должны сделать двойной щелчок показан здесь:


[[Image:tut01_projectWindowAbout.png|Project Window: About Dialog]]
[[Image:tut01_projectWindowAbout.png|Project Window: About Dialog]]


Once you have clicked it you will see the dialog in the '''Dialog Editor''', two toolbars and properties window.
Как только Вы сделали это, Вы увидите диалог в '''Dialog Editor (Редакторе Диалога)''', две панели инструмантов и окно свойств.


We will add a button to the dialog. You click on the "button" on the controls toolbar, and then you click in the dialog next to the project icon in the '''AboutDialog''' window. As a result you can see the properties of the new control and you can edit them. I have changed the '''Text''' to "Press Me", this is the text that will appear on the button. I can also see the '''Name''' field, the IDE will identify this particular control in various contexts by this Name.
Добавим кнопку в диалог. Кликните на "button (кнопку)" в панели инструментов с элементами  управления, а затем кликните в редактируемом диалоге '''AboutDialog''' где-то после проектой иконки. В результате Вы увидите свойства нового элемента управления, которые Вы сможете редактировать. Поменяем текст '''Text''' на "Press Me (Нажми Меня)" - текст, который появится на поверхности кнопки. Мы, кроме того, видим поле '''Name (Имя)''' - IDE будет идентифицировать именно этот элемент управления в различных обстоятельствамх под этим именем.


Now it should look something like this:
Теперь это должно выглядеть примерно так:


[[Image:tut01_dialogEditorAbout2.png|Dialog Editor: About Dialog with new button]]
[[Image:tut01_dialogEditorAbout2.png|Dialog Editor: About Dialog with new button]]


Now we want to do something whenever the button is pressed. To do this we will open the '''Code Expert''': Right click the dialog and select '''Code Expert'''. The code expert will open and I have located my button.
Теперь надо сделать что-то по нажатию кнопки. Для этого в том же редакторе свойств выберем закладку '''Events (События)'''.
 
The blue dot indicates that the control is not handled. The IDE has suggested the name onPushButton for the handling predicate. We will choose '''Add''' to add this predicate to our code and to bind it to this control.


If you double-click the line corresponding to the control in the code expert, an editor will open positioned at the newly inserted code.
[[Изображение:tut01_EventProperties.png|Редактор Свойств: События]]


We will change the button text when the button is pressed. To do this we modify the code as follows:
В поле для редактирования свойства с именем ClickResponder (приемник события Click) наберем имя предиката, который будет обрабатывать это событие. Поле можно оставить и пустым, при этом мы даем возможность IDE самой создать это имя. Сделаем теперь двойной щелчок, находясь в этом поле. Управление теперь вернется к текстовому редактору (он откроется, если не был открыт) и указатель будет установлен на код, созданный средой (IDE).


Давайте менять текст на кнопке, когда она нажимается. Для этого модифицируем код, как показано:
<vip>predicates
<vip>predicates
     onPushButtonClick : button::clickResponder.
     onPushButtonClick : button::clickResponder.
Строка 176: Строка 179:
         pushButton_ctl:setText("Pressed").</vip>
         pushButton_ctl:setText("Pressed").</vip>


Now try to build and execute the program again (i.e. press '''F9''').  If you have followed the steps carefully this should be a success. In the program you should of course open the '''About''' dialog, by selecting the menu entry '''Help -> About'''; and then press the new button.
Теперь построим и запустим приложение опять (то есть, нажав '''F9''').  Если Вы все правильно сделали, это должно выполниться успешно. В программе Вы, естественно, должны открыть диалог '''About''', выбрав в меню '''Help -> About''' и затем нажав эту вновь созданную кнопку.


This is how it looked in my application:
В моем приложении это выглядит таким образом:


[[Image:tut01_AboutPressMe.png|About: Press Me]][[Image:tut01_AboutPressed.png|About Pressed]]
[[Image:tut01_AboutPressMe.png|About: Press Me]][[Image:tut01_AboutPressed.png|About 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.
Нет смысла вдаваться в подробности отладки до тех пор, пока Вы не освоимли язык программирования системы Visual Prolog. Одноко краткое объяснение будет полезно, поскольку это даст возможность понимания и экспериментирования с языком.


To start the debugger, select '''Debug -> Run''' in the menuIf the project is not up-to-date it will first be build, after that the debugging session will start.
Для запуска отладчика выберите '''Debug -> Run (Отладка -> Пуск)''' в менюЕсли исполняемый файл проекта не соответсвует исходным текстам, то проект сначала будет перестроен, после чего начнется сессия отладки.


'''Notice''' you can stop the debugging at any time by selecting '''Debug -> Stop Debugging''' in the menu.
'''Обратите внимание''' - Вы всегда можете остановить отладку путем выбора '''Debug -> Stop Debugging (Отладка -> стоп отладки)''' в меню.


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:
Когде отладка начинается, IDE прежде всего загружает отладочную информацию и только потом приступает к запуску программы. Действия IDE приостанавливаются непосредственно перед началом исполнения раздела goal. Для указания на это открывается текстовый редактор и указатель устанавливается на ключевое слово goal:


[[Image:tut01_debug1.png|Editor: Current Position]]
[[Image:tut01_debug1.png|Editor: Current Position]]


You can single step in the program using the '''Step Into '''and '''Step Over''' commands in the '''Debug '''menu.
Вы можете вызывать выполнение программой одиночных шагов используя команды '''Step Into (Шаг внутрь)''' и '''Step Over (Шаг Поверх)''' в меню '''Debug (Отладка)'''.


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.
Попробуйте '''Step Into (Шаг внутрь)''': это окрывает другое окно редактора с кодом mainExe::run, а указатель устанавливается на начале этого кода.


In the view menu you can open various debugger windows, which I will briefly explain.
Через меню '''View (Просмотр)''' Вы можете открывать различные окна отладчика, которые мы кратко поясним.


The '''Run Stack''' window:
Окно '''Run Stack (Стек исполнения)''':


[[Image:tut01_runStack.png|Run Stack]]
[[Image:tut01_runStack.png|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.
содержит "picture" (картину) стека исполнения. Точнее говоря то, что Вы видите, зависит от установок в панели '''Tools -> Options... -> Debugger (Инструменты -> Опции ... -> Отладчик)'''.  В целом, стек исполнения содержит набор строк, соответствующих вызовам, которые были сделаны. Однако, следует иметь в виду, что внутренние меры оптимизации, предпринятые компилятором на этапе компиляции (так называемые оптимизации последнего вызова) могут удалить некоторые вызовы.


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 run stack) не только показывает Вызовы, но и показывает точки нейтрализации исключений (trap points) и точки перебора (backtrack points), это объясняется в других руководствах, гда мы объясняем окно со стеком вызовов более детально.


The '''Local Variables''' window:
Окно '''Local Variables (Локальные переменные)''':


[[Image:tut01_localVariables.png|Local Variables]]
[[Image:tut01_localVariables.png|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 (Факты)''':


[[Image:tut01_factsWindow.png|Facts]]
[[Image:tut01_factsWindow.png|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.
Содержит данные о глобальном состоянии программы. Это состояние сохраняется в базе фактов. ''Fact databases (Базы данных фактов)'' являются уникальным свойством системы Visual Prolog, которое будет пояснено в другом руководстве. Вы можете добавлять объекты из окна '''Local Variables (Локальные Переменные)''' в окно '''Facts (Факты)''', и, таким образом, контролировать изменение состояний интересующих Вас объектов.


The '''Breakpoints '''window:
Окно '''Breakpoints (Точки Останова)''':


[[Image:tut01_breakPointsWindow.png]]
[[Image: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'''.
показывает текущие точки остнова программы (Мы установили одну точку, чтобы окно не было бы пустым). Вы можете установить/удалить точки останова с помощью меню '''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.
==Заключение==
Интегрированная Среда Разработки (IDE) делает возможными:
*Создание
*Построение
*Поддержку и
*Отладку
проектов. Она содержит ряд инструментов, в том числе редакторов и помощников, обеспечивющих возможность выполнения задач программирования.


==References==
==Ссылки==
[[en:Environment_Overview]]
[[en:Environment_Overview]]
[[Категория:VipРуководства]]
[[Категория:VipРуководства]]
[[Категория:VipIDE]]

Текущая версия на 13:36, 1 ноября 2007

В этом руководстве мы рассмотрим Интегрированную Среду Разработки (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

Отладка

Среда разработки включает отладчик. С его помощью Вы можете трассировать исполнение Вашей программы и контролировать состояние программы.

Нет смысла вдаваться в подробности отладки до тех пор, пока Вы не освоимли язык программирования системы Visual Prolog. Одноко краткое объяснение будет полезно, поскольку это даст возможность понимания и экспериментирования с языком.

Для запуска отладчика выберите Debug -> Run (Отладка -> Пуск) в меню. Если исполняемый файл проекта не соответсвует исходным текстам, то проект сначала будет перестроен, после чего начнется сессия отладки.

Обратите внимание - Вы всегда можете остановить отладку путем выбора Debug -> Stop Debugging (Отладка -> стоп отладки) в меню.

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

Editor: Current Position

Вы можете вызывать выполнение программой одиночных шагов используя команды Step Into (Шаг внутрь) и Step Over (Шаг Поверх) в меню Debug (Отладка).

Попробуйте Step Into (Шаг внутрь): это окрывает другое окно редактора с кодом mainExe::run, а указатель устанавливается на начале этого кода.

Через меню View (Просмотр) Вы можете открывать различные окна отладчика, которые мы кратко поясним.

Окно Run Stack (Стек исполнения):

Run Stack

содержит "picture" (картину) стека исполнения. Точнее говоря то, что Вы видите, зависит от установок в панели Tools -> Options... -> Debugger (Инструменты -> Опции ... -> Отладчик). В целом, стек исполнения содержит набор строк, соответствующих вызовам, которые были сделаны. Однако, следует иметь в виду, что внутренние меры оптимизации, предпринятые компилятором на этапе компиляции (так называемые оптимизации последнего вызова) могут удалить некоторые вызовы.

Стек исполнения (The run stack) не только показывает Вызовы, но и показывает точки нейтрализации исключений (trap points) и точки перебора (backtrack points), это объясняется в других руководствах, гда мы объясняем окно со стеком вызовов более детально.

Окно Local Variables (Локальные переменные):

Local Variables

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

Окно Facts (Факты):

Facts

Содержит данные о глобальном состоянии программы. Это состояние сохраняется в базе фактов. Fact databases (Базы данных фактов) являются уникальным свойством системы Visual Prolog, которое будет пояснено в другом руководстве. Вы можете добавлять объекты из окна Local Variables (Локальные Переменные) в окно Facts (Факты), и, таким образом, контролировать изменение состояний интересующих Вас объектов.

Окно Breakpoints (Точки Останова):

Tut01 breakPointsWindow.png

показывает текущие точки остнова программы (Мы установили одну точку, чтобы окно не было бы пустым). Вы можете установить/удалить точки останова с помощью меню Debug -> Toggle Breakpoint (Отладчик -> Сброс точек останова).

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

Заключение

Интегрированная Среда Разработки (IDE) делает возможными:

  • Создание
  • Построение
  • Поддержку и
  • Отладку

проектов. Она содержит ряд инструментов, в том числе редакторов и помощников, обеспечивющих возможность выполнения задач программирования.

Ссылки