令 第三部分:第13章编译单元 第13章编译单元 本章介绍 Visual Prolog编译单元的有关内容,包括接口、类声明、类实 现、各种类型转换、条件编译、异常处理、预处理程序指令等。 个程序由若干编译单元组成。编译器分别编译这些编译单元。编译的 结果是一个个目标文件。这些目标文件(可能还有其它文件)连接在 起形成项目的目标文件。一个程序必须确实包含一个目标段,它是程序 的入口点。 在一个单元中所有的引用名被声明或被定义的情况下,一个编译单元必 须自包含。在几个编译单元中可以包括接口定义和类声明(定义或声明 必须在包含它们的所有单元内一致)。然而类实现(定义)只能在一个 单独的单元中被定义。每个被声明的项也必须在项目中被定义,但是一 些项可以在程序库中定义,就是说它们不需要文本定义。 2004.113 A|程序设计
第三部分:第13章 编译单元 2004.11.3 AI程序设计 1 第13章 编译单元 本章介绍Visual Prolog编译单元的有关内容,包括接口、类声明、类实 现、各种类型转换、条件编译、异常处理、预处理程序指令等。 一个程序由若干编译单元组成。编译器分别编译这些编译单元。编译的 结果是一个个目标文件。这些目标文件(可能还有其它文件)连接在一 起形成项目的目标文件。一个程序必须确实包含一个目标段,它是程序 的入口点。 在一个单元中所有的引用名被声明或被定义的情况下,一个编译单元必 须自包含。在几个编译单元中可以包括接口定义和类声明(定义或声明 必须在包含它们的所有单元内一致)。 然而类实现(定义)只能在一个 单独的单元中被定义。每个被声明的项也必须在项目中被定义,但是一 些项可以在程序库中定义,就是说它们不需要文本定义
令 第三部分:第13章编译单元 第13章编译单元 个编译单元(可能用# include指令构成)是编译数据项的序列 compilationunit: compilationItem-list-opt 个编译数据项是一个接口、类声明、类实现、目标段,或者是在条件 编译中所说的一个有条件的编译数据项。 compilationitem conditionalitem interfaceDefinition classDeclaration classImplementation goa section 2004.113 A|程序设计
第三部分:第13章 编译单元 2004.11.3 AI程序设计 2 第13章 编译单元 一个编译单元(可能用#include指令构成)是编译数据项的序列。 compilationUnit : compilationItem-list-opt 一个编译数据项是一个接口、类声明、类实现、目标段,或者是在条件 编译中所说的一个有条件的编译数据项。 compilationItem : conditionalItem interfaceDefinition classDeclaration classImplementation goalSection
令 第三部分:第13章编译单元 第13章编译单元 13,1接口 132类声明 13.3类实现 134类型转换 13.5条件编译 13.6异常处理 13.7预处理程序指令 本章小结 本章习题 2004.113 A|程序设计
第三部分:第13章 编译单元 2004.11.3 AI程序设计 3 第13章 编译单元 13.1 接口 13.2 类声明 13.3 类实现 13.4 类型转换 13.5 条件编译 13.6 异常处理 13.7 预处理程序指令 本章小结 本章习题
第三部分:第13章编译单元 13.1接口 本节介绍Vsua| Prolog的接囗的有关概 念,内容包括接口的基本概念、接口于对象、 开放限定( Open Qualification)、支持限 定( Support Qualification)等。 2004.113 A|程序设计
第三部分:第13章 编译单元 2004.11.3 AI程序设计 4 本节介绍Visual Prolog的接口的有关概 念,内容包括接口的基本概念、接口于对象、 开放限定(Open Qualification)、支持限 定(Support Qualification)等。 13.1 接口
第三部分:第13章编译单元 13.1.1接口的基本概念 个接口定义定义了一个命名的对象类型。接口可以支持 其它接口。详细内容参见支持限定 在接口中声明的所有谓词都是接口类型对象的对象成员。 接口也是一个全局作用域,在其中可以定义常量和论域。 这样,在一个接口中被定义的常量和论域不是该接口指示的 类型的一部分(或具有该类型的对象)。 这样的论域和常量可以通过限定接口名 interface: constant或使用开放限定由其它作用域引用 2004.113 A|程序设计
第三部分:第13章 编译单元 2004.11.3 AI程序设计 5 13.1.1 接口的基本概念 一个接口定义定义了一个命名的对象类型。接口可以支持 其它接口。详细内容参见支持限定。 在接口中声明的所有谓词都是接口类型对象的对象成员。 接口也是一个全局作用域,在其中可以定义常量和论域。 这样,在一个接口中被定义的常量和论域不是该接口指示的 类型的一部分(或具有该类型的对象)。 这 样 的 论 域 和 常 量 可 以 通 过 限 定 接 口 名 interface::constant或使用开放限定由其它作用域引用
第三部分:第13章编译单元 13.1.1接口的基本概念 interface Declaration interface interfaceName scopeQualifications sections endinterface interfaceName-opt interfaceName lowerCaseldentifier 在构造器尾部的接口名 interfaceName(如果存在)必须 与构造器开始的接口名 linterfaceName相同 2004.113 A|程序设计 6
第三部分:第13章 编译单元 2004.11.3 AI程序设计 6 13.1.1 接口的基本概念 interfaceDeclaration : interface interfaceName scopeQualifications sections endinterface interfaceName-opt interfaceName : lowerCaseIdentifier 在构造器尾部的接口名interfaceName(如果存在)必须 与构造器开始的接口名interfaceName相同
第三部分:第13章编译单元 13.1.1接口的基本概念 在构造器尾部的接口名 interfaceName(如果存在)必须与构造器 开始的接口名 interfaceName相同 作用域限定 ScopeQualifications必须是下面的类型 支持限定 supports Qualification 开放限定 open Qualification 段 sections必须是下面的类型: 常量段 constants section 论域段 domains section 谓词段 predicates section 接口谓词段 predicates FromInterface 条件段 conditiona section 所有包含在条件段的部分也必须是这些类型。 2004.113 A|程序设计
第三部分:第13章 编译单元 2004.11.3 AI程序设计 7 13.1.1 接口的基本概念 在构造器尾部的接口名interfaceName(如果存在)必须与构造器 开始的接口名interfaceName相同。 作用域限定ScopeQualifications必须是下面的类型: 支持限定supportsQualification 开放限定openQualification 段sections必须是下面的类型: 常量段constantsSection 论域段domainsSection 谓词段predicatesSection 接口谓词段predicatesFromInterface 条件段conditionalSection 所有包含在条件段的部分也必须是这些类型
第三部分:第13章编译单元 13.1.2接口与对象 如果一个接口没有明确地支持任何接口,那么它就隐含 地支持内部接口对象。 对象是一个空接口,即它不包含谓词等内容。 对象的目的是作为所有对象的通用基本类型。 2004.113 A|程序设计 8
第三部分:第13章 编译单元 2004.11.3 AI程序设计 8 13.1.2 接口与对象 如果一个接口没有明确地支持任何接口,那么它就隐含 地支持内部接口对象。 对象是一个空接口,即它不包含谓词等内容。 对象的目的是作为所有对象的通用基本类型
第三部分:第13章编译单元 13.1.3开放限定 开放限定( Open Qualification)可以更方便地引用类层次的 实体。开放段把一个作用域名代入另一作用域,以使这些名字可 以在不受限制的情况下被引用。 开放对于对象成员的名字没有影响,因为无论如何它们只能被 个对象访问。但是类成员名、论域、算符和常量可以不受限制 地被访问。 当名字以这样的方式被带进一个作用域时,可能会出现有些名 字变得不明确。 开放段只会在它们所出现的作用域内产生影响。尤其是指,在 个类声明中的开放段不会影响类实现。 openQualification open scopeName-comma-sep-list 2004.113 A|程序设计
第三部分:第13章 编译单元 2004.11.3 AI程序设计 9 13.1.3 开放限定 开放限定(Open Qualification)可以更方便地引用类层次的 实体。开放段把一个作用域名代入另一作用域,以使这些名字可 以在不受限制的情况下被引用。 开放对于对象成员的名字没有影响,因为无论如何它们只能被 一个对象访问。但是类成员名、论域、算符和常量可以不受限制 地被访问。 当名字以这样的方式被带进一个作用域时,可能会出现有些名 字变得不明确。 开放段只会在它们所出现的作用域内产生影响。尤其是指,在 一个类声明中的开放段不会影响类实现。 openQualification : open scopeName-comma-sep-list
第三部分:第13章编译单元 13.1.4支持限定 支持限定( Supports qualification)只能在接口定义 interfaceDefinition 和类实现 classImplementation中使用。 支持限定用于以下两种情况 指定一个接口A扩展到另外一个接口B,因此,对象类型A是对象类型B的子 类型。 声明一个特定类的对象“私下”具有比一个指定作为构造类型的类更多的对 象类型。 支持存在一个传递关系:如果接口A支持接口B,并且接口B支持接口C,那接 口A也支持接口C。 如果一个接口没有明确支持任何接口,那么就暗指它支持预定义的接口对象。 当支持用于一个类的实现中时,结果是"This"不但可以与构造类型一起使用, 而且还能与任何私有的所支持的对象类型一起使用。 2004.113 A|程序设计 10
第三部分:第13章 编译单元 2004.11.3 AI程序设计 10 13.1.4 支持限定 支持限定(Supports Qualification)只能在接口定义interfaceDefinition 和类实现classImplementation中使用。 支持限定用于以下两种情况: • 指定一个接口A扩展到另外一个接口B,因此,对象类型A是对象类型 B的子 类型。 • 声明一个特定类的对象“私下”具有比一个指定作为构造类型的类更多的对 象类型。 支持存在一个传递关系:如果接口A支持接口B,并且接口B支持接口C,那接 口A也支持接口C。 如果一个接口没有明确支持任何接口,那么就暗指它支持预定义的接口对象。 当支持用于一个类的实现中时,结果是"This"不但可以与构造类型一起使用, 而且还能与任何私有的所支持的对象类型一起使用