第三部分:第10章Ⅵ sual Prolog语言元素 第10章isua| Prolog语言元素 本章介绍Ⅵsua| Prolog6程序设计语言的语法和语义。 Visual Prolog是基于逻辑程序设计语言 Prolog的一种强类型的面向对象的程序 设计语言。一个 Visual Prolog程序包括一个目标、大量的接口声明和类 的实现程序。 接口、类声明和类实现包括 Prolog实体的定义和声明,即 论域 常量 谓词 事实数据库 Visual Prolog程序的实际代码中的谓词定义由谓词声明和子句定义 来声明。 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 1 第10章 Visual Prolog语言元素 本章介绍Visual Prolog 6程序设计语言的语法和语义。Visual Prolog是基于逻辑程序设计语言Prolog的一种强类型的面向对象的程序 设计语言。一个Visual Prolog程序包括一个目标、大量的接口声明和类 的实现程序。 接口、类声明和类实现包括Prolog实体的定义和声明,即 • 论域 • 常量 • 谓词 • 事实数据库 Visual Prolog程序的实际代码中的谓词定义由谓词声明和子句定义 来声明
第三部分:第10章Ⅵ sual Prolog语言元素 第10章isua| Prolog语言元素 10.1类型 10.2对象系统 10.3作用域和可视性 10.4词法结构 本章小结 本章习题 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 2 第10章 Visual Prolog语言元素 10.1 类型 10.2 对象系统 10.3 作用域和可视性 10.4 词法结构 本章小结 本章习题
人第三部分;第10章 sual Prolog语言元素 10.1类型 Visua| Prolog的类型(Type)分为对象类型和数值类型。对象类型是可 变的,而数值类型是不可变的。 对象类型由接口( interface)进行定义。 数值类型包括:数值型、字符串型、字符型以及复合论域。复合论域也可 以看作代数类型数据。复合论域的简化形式是结构和枚举类型,而更多的复杂 形式是树型结构。 此外, Visua| Prolog还有一种特殊类型,叫做引用论域,它可以由任意其 它类型派生而来。引用类型与 Prolog执行模型或语义密切相关。在下面将详细 进行介绍。 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 3 10.1 类型 Visual Prolog的类型(Type)分为对象类型和数值类型。对象类型是可 变的,而数值类型是不可变的。 对象类型由接口(interface)进行定义。 数值类型包括:数值型、字符串型、字符型以及复合论域。复合论域也可 以看作代数类型数据。复合论域的简化形式是结构和枚举类型,而更多的复杂 形式是树型结构。 此外,Visual Prolog还有一种特殊类型,叫做引用论域,它可以由任意其 它类型派生而来。引用类型与Prolog执行模型或语义密切相关 。在下面将详细 进行介绍
人第三部分;第10章 sual Prolog语言元素 10.1类型 类型以子类型层次结构进行组织。子类型用来引入包容多态性:希望某种类 型的一个值能够同样接受任意的一个子类型值的任何上下文。或者我们倒过来说, 在需要时把一定类型的值自动地转化为任意超类型,这样可以不需要显式的类型 转换而访问该超级类型。 子类型可源于除代数数据类型外的其它任意数值类型。源于代数数据类型的 类型是同义类型而不是子类型,也就是说它们是同一类型而不是一子类型。 子类型的概念与子集概念密切相关。但是特别值得注意的是,尽管一个类型 是另一类型子集的精确描述,但它并不需要成为一个子类型。一个类型只在特别 声明时才是另一类型的子类型。例如 domains t1是一个整型变量,取值从1到17(包括端点在内) 同样,t2取值从5到13,但是t2不是t1的子类型。另 t2=[5.13].、外,t3(包含与t2-样的取值则是t的子类型,因 t3=t1[5.13].为这是声明了的。 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 4 10.1 类型 类型以子类型层次结构进行组织。子类型用来引入包容多态性:希望某种类 型的一个值能够同样接受任意的一个子类型值的任何上下文。或者我们倒过来说, 在需要时把一定类型的值自动地转化为任意超类型,这样可以不需要显式的类型 转换而访问该超级类型。 子类型可源于除代数数据类型外的其它任意数值类型。源于代数数据类型的 类型是同义类型而不是子类型,也就是说它们是同一类型而不是一子类型。 子类型的概念与子集概念密切相关。但是特别值得注意的是,尽管一个类型 是另一类型子集的精确描述,但它并不需要成为一个子类型。一个类型只在特别 声明时才是另一类型的子类型。例如 domains t1 = [1..17]. t2 = [5..13]. t3 = t1 [5..13]. t1是一个整型变量,取值从1到17(包括端点在内)。 同样,t2取值从5到13,但是t2不是t1的子类型。另 外,t3 (包含与t2一样的取值)则是t1的子类型,因 为这是声明了的
人第三部分;第10章 sual Prolog语言元素 10.1类型 语言中包含了少数隐含的子类关系,但其它情况下子类 关系都是在类型定义中具体规定的。 对象类型采用子类型层次结构组织,该结构是源于预定 义对象类型的对象的,也就是说,任意对象类型是一个对 象的子类型。对象类型用接口相互支持的方式来规定。如 果一个对象是支持某一其它接口的接口或对象类型,那么 该对象也具有那个类型并且能够不受限制地作为这样的对 象应用。 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 5 10.1 类型 语言中包含了少数隐含的子类关系,但其它情况下子类 关系都是在类型定义中具体规定的。 对象类型采用子类型层次结构组织,该结构是源于预定 义对象类型的对象的,也就是说,任意对象类型是一个对 象的子类型。对象类型用接口相互支持的方式来规定。如 果一个对象是支持某一其它接口的接口或对象类型,那么 该对象也具有那个类型并且能够不受限制地作为这样的对 象应用
人第三部分;第10章 sual Prolog语言元素 10.2对象系统 Visua| Prolog的对象系统( object systen) 包括外部视图( Externa|VieW)和内部视图 ( Interna|VieW)。 2004.11.3 A|程序设计 6
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 6 10.2 对象系统 Visual Prolog的对象系统(object system), 包括外部视图(External View)和内部视图 (Internal View)
人第三部分;第10章 sual Prolog语言元素 10.2.1外部视图 Visua| Prolog的类的概念基于以下3项语义实体: ·对象( object):一个对象是指若干命名对象成员谓词和一组支持 接口的集合。实际上对象也有一个状态,这个状态只能通过成员谓 词来改变或观察。我们称对象中的这种状态为封装。 ·接口( interface):一个接口是一种对象类型。它有一个名字且定 义了一组命名对象谓词。 类(C|ass):一个类是一个命名的对象工厂。它可以创建与某一接 口相对应的对象。任何对象都由类创建。 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 7 10.2.1 外部视图 Visual Prolog的类的概念基于以下3项语义实体: • 对象(object):一个对象是指若干命名对象成员谓词和一组支持 接口的集合。实际上对象也有一个状态,这个状态只能通过成员谓 词来改变或观察。我们称对象中的这种状态为封装。 • 接口(interface):一个接口是一种对象类型。它有一个名字且定 义了一组命名对象谓词。 • 类(Class):一个类是一个命名的对象工厂。它可以创建与某一接 口相对应的对象。任何对象都由类创建
人第三部分;第10章 sual Prolog语言元素 10.2.1外部视图 由一特定类创建的所有对象共享统一的对象成员谓词定义,但是每 个对象又有其自身的状态。这样,对象成员谓词实际上是类的一部分, 然而对象的状态却是对象自身的一部分。 个类也包括另外一系列命名的谓词及一个封装的状态,分别作为 类的成员和类的状态。类的成员和类的状态存在于每一个基类中,然而 对象成员和对象状态存在于每一个基对象中。类的状态既可以通过类的 成员访问,也可以通过对象成员访问。 注意,由一个类定义的一系列对象成员谓词是该类的接口中声明的 谓词的联合。这特别意味着,如果不同的两个接口中声明了同一谓词, 那么该类就只能为该谓词提供惟一的定义。因此,该类只有在含义清楚 的时候才有效,也就是说,在这两个继承性的谓词的预定语义相同的情 况下,该类才合理。 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 8 10.2.1 外部视图 由一特定类创建的所有对象共享统一的对象成员谓词定义,但是每 一个对象又有其自身的状态。这样,对象成员谓词实际上是类的一部分, 然而对象的状态却是对象自身的一部分。 一个类也包括另外一系列命名的谓词及一个封装的状态,分别作为 类的成员和类的状态。类的成员和类的状态存在于每一个基类中,然而 对象成员和对象状态存在于每一个基对象中。类的状态既可以通过类的 成员访问,也可以通过对象成员访问。 注意,由一个类定义的一系列对象成员谓词是该类的接口中声明的 谓词的联合。这特别意味着,如果不同的两个接口中声明了同一谓词, 那么该类就只能为该谓词提供惟一的定义。因此,该类只有在含义清楚 的时候才有效,也就是说,在这两个继承性的谓词的预定语义相同的情 况下,该类才合理
人第三部分;第10章 sual Prolog语言元素 10.2.1外部视图 同一性( Identity):每个对象都是惟一的:对象有可变的状态, 并且由于对象的状态可以通过它们的成员谓词进行观测,因此一个对象 只与自身完全相同。也就是说,即使两个对象的状态完全相同,对象也 是不同的,因为改变一个对象的状态并不能改变另一个对象的状态。 不能直接访问对象的状态,我们通常通过该对象的引用访问对象状 态,同时一个对象是与自身同一的。同一对象可以有许多的引用。这样, 就可以通过许多不同的引用访问同一对象。 类和引用也是惟一的:它们通过自身的名字进行识别。两个引用或 类在同一程序中不能有相同的名字。 实质上,对象、类或接口的结构相同并不意味着它们就一样 2004.11.3 A|程序设计
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 9 10.2.1 外部视图 同一性(Identity): 每个对象都是惟一的:对象有可变的状态, 并且由于对象的状态可以通过它们的成员谓词进行观测,因此一个对象 只与自身完全相同。也就是说,即使两个对象的状态完全相同,对象也 是不同的,因为改变一个对象的状态并不能改变另一个对象的状态。 不能直接访问对象的状态,我们通常通过该对象的引用访问对象状 态,同时一个对象是与自身同一的。同一对象可以有许多的引用。这样, 就可以通过许多不同的引用访问同一对象。 类和引用也是惟一的:它们通过自身的名字进行识别。两个引用或 类在同一程序中不能有相同的名字。 实质上,对象、类或接口的结构相同并不意味着它们就一样
人第三部分;第10章 sual Prolog语言元素 10.2.2内部视图 前面一节从外部行为的角度介绍了对象、类和接口,本节将从内部问题的角 度展开这些描述。 类的程序语义:这些内部问题更具有程序语义上的自然属性。可以考虑将类 分为声明部分和实现部分。 从程序语义上的角度看,类是核心项,类中包含了代码。 接口主要具有静态价值。事实上,接口只存在于程序的正文描述中,并没有 直接的运行描述。另一方面,对象则主要具有动态价值。在程序中对象并不能 直接可见,它只有在程序真正运行时才存在 一个类由声明和实现两部分组成。声明部分声明了类的公共存取部分以及产 生的对象。实现部分则定义了类声明中声明的实体。谓词的基本实现自然是子 句,但是谓词也可以借助于继承进行定义,或由外部程序库解决。 2004.11.3 A|程序设计 10
第三部分:第10章 Visual Prolog语言元素 2004.11.3 AI程序设计 10 10.2.2 内部视图 前面一节从外部行为的角度介绍了对象、类和接口,本节将从内部问题的角 度展开这些描述。 类的程序语义:这些内部问题更具有程序语义上的自然属性。可以考虑将类 分为声明部分和实现部分。 从程序语义上的角度看,类是核心项,类中包含了代码。 接口主要具有静态价值。事实上,接口只存在于程序的正文描述中,并没有 直接的运行描述。另一方面,对象则主要具有动态价值。在程序中对象并不能 直接可见,它只有在程序真正运行时才存在。 一个类由声明和实现两部分组成。声明部分声明了类的公共存取部分以及产 生的对象。实现部分则定义了类声明中声明的实体。谓词的基本实现自然是子 句,但是谓词也可以借助于继承进行定义,或由外部程序库解决