740 likes | 1.02k Views
第 4 章 Visual Prolog 概述. 在这一章,将首先给出 Visual Prolog 6 基本特性的一个简要介绍。然后通过实例,较为详细地介绍 Visual Prolog 6 的可视化开发环境 VDE ,包括创建项目、建立项目、浏览项目、开发项目、调试项目等。. 第 4 章 Visual Prolog 概述. 4.1 Visual Prolog 6 概述 4.2 Visual Prolog 6 基本特性 4.3 创建项目 4.4 建立项目 4.5 浏览项目 4.6 开发项目 4.7 调试项目 本章小结
E N D
第4章 Visual Prolog概述 • 在这一章,将首先给出Visual Prolog 6基本特性的一个简要介绍。然后通过实例,较为详细地介绍Visual Prolog 6的可视化开发环境VDE,包括创建项目、建立项目、浏览项目、开发项目、调试项目等。
第4章 Visual Prolog概述 4.1 Visual Prolog 6概述 4.2 Visual Prolog 6基本特性 4.3 创建项目 4.4 建立项目 4.5 浏览项目 4.6 开发项目 4.7 调试项目 本章小结 习 题 四
4.1 Visual Prolog 6概述 • Visual Prolog 6是最新一代的Visual Prolog逻辑程序设计语言,是Visual Prolog的PDC和Turbo Prolog的后继产品。Visual Prolog 6的目标是支持企业级的强调问题求解的复杂知识的程序设计。Visual Prolog 6的发布是PDC历时3年开发的结果。
4.1 Visual Prolog 6概述 • 经过持续不断的努力和对用户需求的深入考察,Visual Prolog已经增加了如下功能: • 一个独特的对象系统 • 多线程机制 • Unicode支持 • 改进的DLL支持 • 改进的函数支持 • 改进的异常处理 • 其他更多功能等
4.1 Visual Prolog 6概述 • 今天,Visual Prolog 6是一个功能非常强大的、非常安全的程序设计语言,它以一致和一流的方式将许多编程范例结合在一起。Visual Prolog是一个完备的程序设计环境,它提供如下设施: • 图形开发环境 • 编译器 • 连接器 • 调试器
4.1 Visual Prolog 6概述 • 开发环境已经得到极大的改善,从而使编写程序更加简单,对高级任务可提供更好的帮助。它支持先进的客户/服务器和多级解决方案。使用Visual Prolog,我们就能在Microsoft Windows平台建立企业级的应用程序。Visual Prolog特别适应于处理复杂的知识问题。PDC已经通过实例证明了这一点,它提供的一些成功的应用系统案例有: • 职员计划 • 医院预约登记 • 机场决策支持 • 航班决策支持 • 商店室内调度
4.1 Visual Prolog 6概述 • 上述所有这些系统全部是用Visual Prolog写成的。 • 通过使用功能强大的对象系统,我们能够非常迅速地构筑一个应用,同时受益于非常宽松的耦合环境。这将使我们能够缩短开发周期,减少维护费用。 • PDC提供免费的非商业的个人版本,从而为学习使用这个卓越的系统提供了良机。
4.2 Visual Prolog 6基本特性 • Visual Prolog 6是最新一代的Visual Prolog逻辑程序设计语言,它可以创建Win 32平台的企业级应用程序。 • Visual Prolog 6是基于Prolog的强类型的面向对象程序设计语言。下面从语言特性、图形化开发环境、编译器、链接器、调试器等方面简要予以介绍。
4.2 Visual Prolog 6基本特性 4.2.1 语言特性 Visual Prolog 6语言的主要特性: • 基于Horn子句的逻辑程序设计语言 • 完全面向对象 • 对象谓词值(委派) • 强类型 • 代数数据类型 • 模式匹配与合一 • 受控的不确定性机制 • 完全集成的事实数据库 • 自动的内存管理 • 支持与C/C++的直接联接 • 支持对Win32 API函数的直接访问
4.2 Visual Prolog 6基本特性 • 对象机制实现了系统和用户之间的松散耦合。对象只能通过接口来访问,接口与实现之间不过是松散耦合。类可以通过继承(或不继承)其它类来实现接口。 • 强大的类型检测、无需指针算法和自动内存管理的结合真正地避免了非法访问。 • 无非法访问一直是Visual Prolog的一个优势。正如PDC的一位用户所说:“对于Visual Prolog,那种错误不存在。” Visual Prolog 6毫无例外地继续保持这个优势。PDC的目标是:避免在必须调用外部代码或建立指针算法时引起的非法访问。
4.2 Visual Prolog 6基本特性 • 用非决定性搜索将符号数据类型、事实数据库和模式匹配结合起来,这样使得Visual Prolog非常适合于处理复杂的结构化知识。 • 除了谓词值和对象,所有的Visual Prolog数据都有一个人性化的可读文本表示,它可以被写入并返回到程序。
4.2 Visual Prolog 6基本特性 4.2.2 图形化开发环境 Visual Prolog集成开发环境可以更方便快捷地建立、测试和修改Visual Prolog应用程序。它在开发大型项目时非常有用。 • 项目窗口中的模块、包括文件和资源的树型结构,有助于将项目打包,从而给出了一个额外级别的抽象。 • 文本编辑器可以方便地进行文本编辑,浏览那些声明和实现。 • 对话框编辑器为设计对话框提供了标准控件。 • 菜单编辑器允许创建下拉式菜单和弹出式菜单。 • 工具栏编辑器允许创建各种工具栏。 • 图形编辑器可以方便地创建、查看和编辑图标、指针和小位图。 • 建造工具支持插入所需的程序包和包含指令。 • 浏览工具支持查找特定的实体,“go to definition”和“go to declaration”。
4.2 Visual Prolog 6基本特性 4.2.3 编译器 Visual Prolog编译器是二十世纪八十年代的Turbo Prolog 编译器的后继产品,Turbo Prolog是第一个Prolog编译器。自那时开始,PDC就一直开发并改进这个编译器,所以现在的Visual Prolog编译器是一个功能强大且高效的编译器,它可以用来: • 为产生可单独执行的程序或DLL而创建目标文件 • 解决声明间的交叉引用 • 验证谓词模式 • 执行强类型检查 • 在构造器中验证事实初始化 • 进行谓词分解
4.2 Visual Prolog 6基本特性 4.2.4 链接器 Visual Prolog拥有一个功能强大的链接器: • 产生EXE可执行文件和DLL文件 • 使用由最新的Microsoft Visual C编译器产生的LIB文件
4.2 Visual Prolog 6基本特性 4.2.5 调试器 Visual Prolog集成开发环境包含一个内建图形化调试器: • 显示常见的调试器视图:内存,堆栈,变量 • 显示类和对象事实的值 • 进行单步跟进(Trace Into),单步越进(Step Over),等等 • 包括额外的调试步骤:单步跳出,运行到Prolog代码 • Fail和Exit可视化等
4.3 创建项目 从这一节开始,我们将给出一个可视化开发环境VDE的综述。这个VDE是用来创建、开发和维护Visual Prolog项目的。简言之,在一个项目文件中,我们将使用这个VDE来完成如下任务: • 创建(Creation)项目:即用VDE来创建一个项目。在项目创建期间,可以选择该项目的一些重要特性,如该项目是产生一个可执行文件还是产生一个DLL,是使用GUI还是只使用文本方式等。 • 建立(Building)项目:即建立一个项目,在VDE中进行编译和连接等。 • 浏览(Browsing)项目:VDE和编译器收集关于该项目的信息,这些信息以各种方式被用来进行实体的快速定位等。
4.3 创建项目 • 开发(Development)项目:在项目的开发和维护期间,VDE被用来给项目添加源文件和GUI实体、删除源文件和GUI实体,以及编辑源文件和GUI实体。 • 调试(Debugging)项目:VDE还被用来调试项目。在程序运行期间,调试器可用来跟踪程序的执行,探索程序的状态。 本章最后,我们将较为详细地回顾一下上述这些事件。值得注意的是:我们将首先创建一个项目,并将这个项目贯穿于全章。
4.3 创建项目 首先,我们创建一个项目。在菜单中选择Project -> New...,VDE将对此做出响应,出现一个包含项目各种特性的对话框,如图4.1所示。 图4.1 项目设置选项对话框
4.3 创建项目 • 我们选择项目名为tut01。项目名亦作为将要产生的目标文件名。在此例中,目标文件是一个exe文件,故目标文件名将是tut01.exe。选择UI策略为GUI,即该程序是一个GUI程序,带有图形用户界面。 • 基本目录(Base Directory)是一切项目的“基地”。为此,我们可以选择一个方便的目录位置。新项目将在基本目录的一个子目录中进行创建,按照缺省,这个子目录名与项目名同名。
4.3 创建项目 • 在系统中创建项目时,常使用包前缀(Package Prefix)。关于包的概念,后面的章节还将详细解释。在此例中,源程序文件将与其他人共享前缀,如果这个前缀不与其他前缀相冲突,这是一个好的做法。此时,暂不需要考虑其余的选项。 • 现在,按下创建(Create)按钮,创建该项目。VDE将显示出如图4.2所示的情形。
4.3 创建项目 图4.2 项目创建过程
4.3 创建项目 • 左面的窗口是项目窗口(Project Window),它包含项目中有关实体的各种信息。这个窗口现在尚不包含大量的信息,但当我们编译该项目时,各种信息就会被添加进来。我们将会较详细地分析在编译该项目时这个窗口所包含的各种信息。 • 左面或底部是消息窗口(Messages Window),它将包含各种状态信息和进展信息。
4.4 建立项目 • 在我们做任何修改之前,我们将建立该项目,即编译和连接该项目。在建立(Build)菜单中,可以找到建立、编译和执行项目的菜单命令。 • 如果选择执行(Execute)命令,则该项目首先将会执行建立操作,这取决于执行程序的版本日期。因此,可以直接选择执行命令(或直接按下F9键)。 • 如果你还没有对Visual Prolog进行注册,将会出现一个专门的屏幕信息进行提醒。建议对Visual Prolog进行注册,也可以选择“继续”。
4.4 建立项目 • 在消息窗口(Messages Window),VDE显示哪些文件被编译,等等。 • 如果建立进程成功,就像此例一样,所创建的程序被执行。本例现在的结果是只可以看见一个小的什么也不做的GUI程序。值得注意的是,这个程序看起来有点像VDE本身。因为VDE实际上就是一个Visual Prolog程序,所以这一点并不是巧合。 • 在本章后面,我们还将看到,如果在程序建立过程中编译器或连接器检测到错误,将会发生什么样的情形。
4.5 浏览项目 • 现在,我们将把目光转到项目窗口(Project Window)中的项目树(Project Tree),并对其稍加解释。项目树本身是以标准的窗口树控件进行显示的,读者对此用法已经比较熟悉。在这里,我们将集中精力在该树的内容上。项目树的结构和内容如图4.3所示。
4.5 浏览项目 图4.3 项目窗口中的项目树
4.5 浏览项目 • 图中顶部节点代表项目,其余节点是项目目录。 • 紧下面是逻辑节点$(ProDir),它表示Visual Prolog的安装目录。这个目录包含来自Visual Prolog系统的库和库代码。 • 接下来的目录是任务窗口TaskWindow,它是该项目目录的一个子目录。这个目录包含产生任务窗口、菜单、工具栏及关于(about)对话框等所需要的全部代码。
4.5 浏览项目 最后,我们可以看到若干文件。Visual Prolog使用以下约定: • *.ph文件是程序包的头文件(package headers)。一个程序包是类和接口的一个集合,程序包常被当作一个积木块使用。 • *.pack文件是程序包。它们包含相应的.ph文件的实现或定义。 • *.i文件包含一种接口(interface)。 • *.cl文件包含一个类声明(class declaration)。 • *.pro文件包含一个类实现(class implementation)。 • 如果我们完全展开tut01.cl节点,其情形如图4.4所示。
4.5 浏览项目 图4.4 项目树展开的内容
4.5 浏览项目 • 这个子目录表明,文件tut01.cl包含一个叫做tut01的类,这个类又包含两个分别叫做classinfo和run的谓词。所谓“谓词”就是子例程,但是在本章中我们将不对它们做深层次的探究。 • 如果折叠起这个节点,重新展开任务窗口(TaskWindow)节点,可以看到如图4.5所示的这样一个目录树。
4.5 浏览项目 图4.5 任务窗口项目树的内容
4.5 浏览项目 新出现的几个类型的节点的含义如下: • *.dlg 文件包含一个对话框(dialog); • *.win文件包含一个窗口(window); • *.mnu文件包含一个菜单(menu); • *.cur文件包含一个光标(cursor); • *.ico文件包含一个图标(icon)。 继续考察后还可以发现: • *.tb文件包含工具栏(toolbars); • *.bmp文件包含位图(bitmaps); • *.lib文件包含库(libraries)。
4.5 浏览项目 • 如果右击一个节点,一个关联菜单将出现,菜单中包含有对这个特定节点进行适当操作的有关命令。 • 如果双击一个节点,则相应的实体将调出对应的编辑器。所有源代码文件都将在文本编辑器中进行编辑,而窗口资源,如对话框和菜单等将在图形编辑器中进行编辑。后面我们将进一步考察图形编辑器和文本编辑器。 • 某些实体在项目树中出现两次,这是因为它们既有一个声明,又有一个定义或实现。例如,tut01类中的谓词run,如图4.6所示。
4.5 浏览项目 图4.6 项目树展开后的内容
4.5 浏览项目 • 试着双击每一个run节点,可以看到,显示run谓词的声明和定义的两个编辑器分别被打开。 • VDE还有其他的工具,以浏览指定的实体,但这些工具在此将不进行讨论。
4.6 开发项目 • 现在试着对该项目做一修改。因为我们仍然未考虑如何用Visual Prolog进行编程,所以我们将使这些改变尽量简单一些。 • 我们开始故意引入一个错误,因而就可以看到错误窗口。首先,我们在文件tut01.pro中查找run谓词子句。如果在项目树中双击这两个run节点的后面的那个节点,文本编辑器将被打开,一个插字符号正好位于该节点处,如图4.7所示。
4.6 开发项目 图4.7 文本编辑器窗口
4.6 开发项目 • 试着插入一个fail,如下面的代码所示(注意show后面的逗号)。 clauses run():- TaskWindow = taskWindow_class::new(), TaskWindow:show(), fail. • 我们试图再次建立该项目,即直接按下F9键。系统将保存和编译该文件,但由于我们引入了一个错误,所以错误窗口被打开,如图4.8所示。
4.6 开发项目 图4.8 错误窗口
4.6 开发项目 • 我们将考虑错误信息的实际含义。一旦双击错误消息,就会发现,编辑器再次获得焦点,插字符号准确地指向我们刚刚插入的fail谓词。 • 去掉fail谓词,复原该代码,再次建立该项目。 • 接着,我们将试图在关于(about)对话框中进行修改。这并不是一个很明智的改变,但它却能说明一些问题。 • 首先,我们将用对话框编辑器(Dialog Editor)打开About对话框。为此,在项目树中双击该对话框。我们必须双击的节点如图4.9所示。
4.6 开发项目 图4.9 双击项目树中About对话框
4.6 开发项目 • 一旦双击了这个节点,就会在对话框编辑器中看到该对话框和两个工具栏,如图4.10所示。
4.6 开发项目 图4.10 对话框编辑器
4.6 开发项目 • 现在我们给这个对话框添加一个按钮。首先点击控件工具栏上的“按钮”,然后在AboutDialog对话框窗口中邻近项目图标的旁边点击一下该对话框。结果,一个窗口弹出来,如图4.11所示。
4.6 开发项目 图4.11 按钮属性标志对话框
4.6 开发项目 • 我们改变这里的文本(Text)为“Press Me”,这个文本将出现在按钮上。我们还标记常量(Constant)字段,但这时VDE已经选择该常量为idc_press_me。该常量将在各种上下文中标识这个特定的控件。 • 当我们按下Ok时,该按钮将被插入到这个对话框之中,结果情形如图4.12所示。
4.6 开发项目 图4.12 将按钮插入About对话框
4.6 开发项目 • 现在,我们就可以做一些按钮被按下后要完成的事。为此,我们将打开代码专家(Code Expert):右击该对话框,且选择代码专家(Code Expert)。代码专家被打开后,我们可以看到光标正好位于该按钮处(参见图4.13)。
4.6 开发项目 图4.13 对话框与窗口专家
4.6 开发项目 • 在图4.13所示的代码专家对话框中,蓝色圆点表示这个控件未被处理。对于处理谓词,VDE建议使用名字onControlPressMe。右击该项,选择添加(Add)按钮,以便将这个谓词添加到我们的代码中,并且将它与这个控件进行绑定。 • 在我们选择添加(Add)按钮之后,代码专家将发生变化,如图4.14所示。