人工智能知识表示系列课件第二讲知识表示5框架剧本对象表示法_第1页
人工智能知识表示系列课件第二讲知识表示5框架剧本对象表示法_第2页
人工智能知识表示系列课件第二讲知识表示5框架剧本对象表示法_第3页
人工智能知识表示系列课件第二讲知识表示5框架剧本对象表示法_第4页
人工智能知识表示系列课件第二讲知识表示5框架剧本对象表示法_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*1 人工智能原理 第二讲 知识表示 之 框架/剧本表示 主讲:王祖喜 华中科技大学图像所 *2 知识的表示方法 谓词逻辑法 状态空间法 问题归约法 语义网络法 框架表示法 面向对象表示 剧本(script)表示 过程(procedure)表示 小结 *3 知识的框架表示 *4 1. 概念 知识的框架表示法1975年由M.Minsky提出,最早用作视觉感知、自然语言对话 等问题的知识表示;目前已作为一种通用数据结构来表示知识对象(实体)。 框架理论认为,人们对现实世界中各种事物的认识都是以一种类似于框架的结 构存储在记忆中的,当面临一种新事物时,就从记忆中找出一个合适的框架并 根据实际情况对其细节加以修改、补充,从而形成对当前事物的认识。 例如:当一个人要走近一个教室时,他能根据以往的知识,想象到这个教室一 定有四面墙,有门、窗、天花板和地板,有课桌、椅子、黑板等,尽管他对这 个教室的细节还不清楚,但对教室的基本结构是可以预见的。他之所以能做到 这一点,是由于他通过以往的认识活动已经在记忆中建立了关于教室的框架, 该框架不仅指出了相应事物的名称(教室),而且还指出了事物各有关方面的 属性(如有四面墙、有课桌、有黑板,)。通过对该框架的查找,很容易 得到教室的各有关特征。 知识的框架表示 *5 当他进入教室后,经观察得到了教室的大小、门窗的个数、桌凳的数量、颜色 等细节,把它们填入到教室框架中,就得到了教室框架的一个具体事例,称为 事例框架。 2. 框架定义 1.框架是用于描述具有固定的静态对象的通用数据结构,该对象用“对象属性 属性值”表示; 2.一个框架由若干个槽(Slot)组成,槽用于描述属性; 3.一个槽又可由若干个侧面组成。侧面用于描述相应属性的一个方面; 4.槽和侧面所具有的属性值分别称为槽值和侧面值; 5.一个侧面可有一个或多个侧面值。 6.对框架、槽或侧面,都可以复加上一些说明性信息,一般是指一些约束条件, 用于指出什么样的值才能填入到槽或侧面中。 7.槽值或侧面值既可以是数值,字符串,布尔值,也可以是一个在满足某个给定 条件时要执行的动作或过程,特别是它还可以是另一个框架的名字,从而实现 一个框架对另一个框架的调用 8.框架实质上是一个层次的嵌套链接表。 *6 槽名1 侧面名1 值1,值2,值p1 侧面名2 值1,值2,值p2 侧面名m1 值1,值2,值pm1 槽名2 侧面名1 值1,值2,值q1 侧面名2 值1,值2,值q2 侧面名m2 值1,值2,值qm2 槽名n 侧面名1 值1,值2,值r1 侧面名2 值1,值2,值r2 侧面名mn 值1,值2,值rmn 约束: 约束条件1 约束条件n 框架的一般结构: *7 例1: 框架名: 商品名称: 生产厂家: 出售商店: 处 罚: 处理方式: 处罚依据: 处罚时间:单位(年、月、日) 经办部门: 在这个框架中,有4个槽,其中,“处罚”槽有4个侧面,侧面“处罚时间”用“单位”指 出了一个填值时的标准限制。 *8 例2: 框架名: 姓名:单位(姓、名) 年龄:单位(岁) 性别:范围(男、女) 缺省(男) 职称:范围(教授、副教授、 讲师、助教) 缺省(讲师) 部门:单位(系、教研室) 住址: 工资: 开始工作时间:单位(年、月) 截止时间:单位(年、月) 缺省:现在 把某教师的一组信息填入教师 框架的各个槽,就得到了相应框架 的一个事例框架: 框架名: 姓名:夏冰 年龄:36 性别:女 职称:副教授 部门:计算机教研室 住址: 工资: 开始工作时间:1988.9 截止时间:1996.9 *9 例1:硕士生的具体框架 框架名: 姓名:单位(姓,名) 性别:范围(男,女) 默认:男 年龄:单位(岁) 条件:岁 16 学习专业:单位(专业名) 研究方向:单位(方向名) 导师姓名:单位(姓,名) 参加课题:范围(国家级,省部级,其它) 默认:国家级 学籍: 住址:单位(楼号,房间号) 电话:单位(区号),话机号) 入学时间:单位(年,月) 学制:单位(年) 默认:4年 *10 硕士生的实例框架 框架名: 姓名:杨杨 性别:女 年龄:23 学习专业:计算机应用技术 研究方向:人工智能 导师姓名:林海 参加课题: 学籍: 住址:16号楼316房间号 电话:(010)66668888 入学时间:2000年9月 学制: *11 框架的框架的BNFBNF描述:描述: : : = : : = 框架名 : : = , : : = 约束 , : : = | (,) : : = | : : = | : : = | | | | : : = , : : = : : = | : : = | | | | : : = | | | : : = | , : : = *12 框架系统的基本结构 框架系统的基本结构是通过诸框架之间的横向或 纵向联系来实现的。 (1)框架之间的横向联系 一个框架的槽值或侧面值可以是另外一个框架的名字。 如,“硕士生”框架合“硕学籍”框架之间为横向联系。 (2)框架之间的纵向联系 用框架表示具有演绎关系的知识结构时,下层框架与上 层框架之间具有一种继承关系,这种具有继承关系的框 架之间的联系称为纵向关系。 *13 学生框架为: 框架名: 姓名:单位(姓,名) 性别:范围(男,女) 默认:男 年龄:单位(岁) 住址:单位(楼号,房间号) 电话:单位(区号),话机号) 入学时间:单位(年,月) 学制:单位(年) *14 硕士生框架为: 框架名: 继承: 学籍: 研究方向:单位(方向名) 导师姓名:单位(姓,名) 参加课题:范围(国家级,省部级,其它) 默认:国家级 学位论文:单位(论文题目) 默认:题目未定 *15 计算机系硕士生框架为: 框架名: 继承: 专业:范围(计算机应用技术,计算机软件及理 论) 默认:计算机应用技术 使用计算机:单位(计算机的型号) *16 例:一个计算机系硕士生的实例框架 框架名: 继承: 姓名:柳青 性别:女 年龄:23 研究方向:人工智能 *17 例1:一个教室A的框架 上下层是part-of关系,黑板是教 室A的一部分,但黑板的结构、 性能与教室是完全不同的。 最上面是主框架,最上面记着框 架名,其他部分是由槽和值组成 。槽用中文写出,值用小长方形 表示。 (1)某些值可以是另一个子框架 。如左墙、右墙、前墙,而且子 框架可以共享。 (2)某些值可以空着,等适当的 时候再去填写。 *18 例2:拱框架 *19 例3:动物分类框架 *20 3.框架网络 框架间的横向联系: 由于框架中的槽值或侧面值都可以是另一个框架的名字,这就在框架之间 建立起 了联系,通过一个框架可以找到另一个框架,这称为横向联系; 框架间的纵向联系: 举例说明:在一个学校中,无论是教师,还是学生以及在学校工作的其他人员,如 干部,实验员,工人等,尽管他们所承担的任务不同,但由于他们都处于学校这个 环境中,必然会有一些共同的属性,因此,在对他们进行描述时,可以将它们具有 的共同属性抽取出来,构成一个上层框架,然后再对各类人员独有的属性分别构成 下层框架,为了指明框架间的这种上,下关系,可在下层框架中设立一个专用的槽 ,用以指出他的上层框架是哪一个。这样就在框架间建立了纵向联系; 而且对于这种联系,下层框架还可以继承上层框架的属性及值,避免了重复描述, 节约了时间和空间的开销。 框架间的继承性: 继承性是框架表示法的一个重要特性,它不仅可以在两个框架之间实现继承关系, 而且还可以通过两两的继承关系,从最低层追搠到最高层,使高层的信息逐层向低 层传递。 *21 像这样具有横向联系及纵向联系的一组框架称为框架网络。 下图是一个关于师生员工的框架网络。 师生员工框架 教职工框架学生框架 教师框架工人框架 电子系学生框架 机械系学生框架 教师1 教师n 学生n 学生1 师生员工框架用于描述师生员工的共同属性,例如姓名,性别,年龄等 ; 教职工框架用于描述教师,干部,工人的共同属性,凡是在师生员工框 架中已指出的属性在这里可不再重复描述; (以此类推) 教师框架,工人框架其中也只需描述只有他们自己具有的属性。 *22 注意 1. 如果一个在上层框架中描述的属性在下层框架需作进一步说明时,则需要在 下层框架中再次给出描述。例如,设在师生员工框架中对年龄槽的描述是: 年龄:单位(岁) 由于学生一般都在七岁开始上学,因此学生的年龄可由 年龄=学龄+7 得到,所以在学生框架中仍可设置年龄槽,并在该槽的描述中给出计算年 龄的过程。 2. 如果在下层框架中对某些槽没有作特别的声明,那么它将自动继承上层框 架相应槽的槽值。 下面具体给出上述几个框架的描述: *23 师生员工框架为: 框架名: 姓名: 单位(姓,名) 年龄: 单位(岁) 性别: 范围(男,女) 缺省:男 健康状况: 范围 (健康,一般,差) 缺省:一般 住址: 教职工框架为: 框架名: 继承: 工作类别:范围 (教师,干部,工人) 缺省:教师 开始工作时间:单位(年,月) 截止工作时间:单位(年,月) 缺省:现在 离退休状况:范围(离休,退休 ) 缺省:退休 *24 教师框架为: 框架名: 继承 部门:单位(系,教研室) 语种:范围(英语,法语,日语,德语,俄语) 缺省:英语 外语水平:范围(优,良,中,差) 缺省:良 职称:范围(教授,副教授,讲师,助教) 缺省:讲师 研究方向: 某个教师的事例框架为: 框架名: 继承: 姓名:孙林 年龄:28 健康状况:健康 部门:计算机系软件教研室 语种:德语 开始工作时间:1985.9 *25 由以上框架描述可以看出: (1) 在框架网络中。既有用“继承“槽指出的上、下层框架间的纵向联系, 也有以框架名作为槽值指出的框架间的横向联系,因此框架网络之间是 一个纵横交错的复杂的框架体系结构。 (2) 原则上说,事例框架中的每一个槽都应给出槽值,但对可以继承上层 框架槽值的槽,其槽值可不给出。例如在上面的教师-1的框架中,虽然 没有给出性别,职称槽及其槽值,但由继承性可知孙林的性别为“男“, 职称为讲师。 *26 4. 框架中槽的设置与组织 框架是一种集事物各方面属性的描述为一体,并反映相关事物间各种关系的数据结构。 在此结构中,槽起至关重要的作用,因为不仅要用他描述事物各方面的属性,而且还要 用他指出相关事物间的复杂关系。因此要注意以下几个方面的关系: (1) 充分表达事物各有关方面的属性合理地设置槽 在以框架作为知识表示模式的系统中,知识是通过事物的属性来表示的。为使系统具有 丰富的知识,以满足问题的求解的需要,就要求框架中有足够的槽把事物各方面的属性 充分表达出来。这里说的“各有关方面的属性”有两方面的含义: 要与系统的设计目标相一致,凡是系统设计目标所要求的属性,或者问题 求解中有可能要用到的属性都应该用相应的槽把他们表示出来; 仅仅需要对有关的属性设立槽,不可面面俱到,以免浪费空间和降低系统 的运行效率。 *27 (2) 充分表达相关事物间的各种关系由槽中的框架名建立联系 现实世界中的事物一般不是孤立的,彼此之间存在千丝万缕的联系。为了将其中有关 的联系反映出来,以构成完整的知识体系,需要设置相应的槽来描述这些联系。 在框架系统中,事物间的联系是通过在槽中填入相应的框架名来实现,至于它们之间 究竟是一种什么样的关系,则是由槽名来指明的。 在框架表示系统中通常定义一些标准槽名,应用时不用说明就可直接使用称这些槽 名为系统预定义槽名。现简单介绍几个: . ISA槽 ISA槽用于指出事物间抽象概念上的类属关系。其直观含义是“是一个”,“是一种”, “是一只” 。当它用作某下层框架的槽时,表示该下层框架所描述的事物是其上层 框架的一个特例,上层框架是比下层框架更一般或更抽象的概念。设有下面两个框架: *28 框架名: 姓名:单位(姓,名) 年龄:单位(岁) 性别:范围(男,女) 缺省:男 框架名: ISA: 脑力:特好 在此例中,棋手框架中的ISA槽指出该框架 所描述的事物是运动员框架所 描述事物的 属性及值。 . AKO槽 AKO槽用于具体的指出事物间的类属关系。其直观含义是“是一种”,当 它用作某下层框架的槽时,就明确的指出该下层框架所描述的事物是其上层 框架所描述事物的一种,下层框架可以继承其上层框架所描述的属性及值。 对上面的例子,可将棋手框架中的ISA改为AKO。 *29 . Subclass槽 subclass槽用于指出子类与类(或子集与超集)之间的类属关系。当用它作为某下层 框架的槽时,表示该下层框架是其上层框架的一个子类(或子集)。 在上例中,由于“棋手”是“运动员的一个子类,故可将ISA该为Subclass。 . Instance槽 Instance槽用来建立AKO槽的逆关系。当用它作为某上层框架的槽值时,可用来指出 它的下层框架是哪些。 框架名: Instance:, 姓名:单位(姓,名) 年龄:单位(岁) 性别:范围(男,女) 缺省:男 *30 . Part-of槽 Part-of槽用于指出部分与全体的关系。当它用作某下层框架的槽时,它指 出该下层框架所描述的事物只是其上层框架所描述的事物的一部分。例如, 上层框架是对汽车的描述,下层框架是对轮胎的描述。显然,轮胎是汽车的 一部分。 这里应注意将Part-of槽与上面讨论的那四种槽区分开来: 前述4种槽是上、下层框架间的类属关系,它们由共同的特性,可以继承 ; Part-of槽只指出下层是上层的一个子结构,两者一般不具有共同的特征, 不能继承。 如:上层描述汽车,而下层描述轮胎,轮胎是汽车的一部分,但两者的结构 、性能缺完全不同,这是可选用Part-of槽指出其上下层的关系部分与全 体。 *31 . Infer槽 Infer槽用于指出两个框架所描述的事物间的逻辑推理关系,用它可以表示相应的产生 式规则。 例如:设有下面知识: 如果咳嗽,发烧且流涕,则八成是患了感冒, 需服用感冒清,一日三次,每次2-3粒, 多喝开水 对该知识 ,可用如下两个框架表示: 框架名: 症状1:咳嗽 症状2:发烧 症状3:流涕 Infer: 可信度:0.8 框架名: 病名:感冒 治疗方法:服用感冒清,一日三次,每次2-3粒 注意事项 :多喝开水 预后:良好 . Possible-Reason槽。 其作用与Infer槽作用相反,它用来把某个结论与可能的原因联系起来。 *32 (3) 对槽及侧面进行合理的组织利用其上下层间的继承性 基于框架上、下层的继承性,尽量将不同框架中的相同属性抽取出来,放入其上层框 架,而在下层框架中只描述相应事物独有的属性。 这样可大大减少信息的重复性,其且有利于知识的一致性。 例如: 将鸽子、啄木鸟、布谷鸟、燕子等动物,用框架将其特征描述出来? 上层:有羽毛、会飞、有两只爪等共同特性; 下层:各种鸟独有的特征各建一个框架; 联系:用AKO或Instance将上下层联系起来。 (4) 有利于进行框架推理 用框架表示知识的系统一般由两大部分组成: 1. 由框架及其相互关联构成的知识库(提供求解问题所需要的知识); 2. 由一组解释程序构成的框架推理机(针对用户提出的问题,通过运用知识库中的相关 知识完成求解问题的任务,给出问题的解)。 框架推理是一个反复进行框架匹配的过程,为了使推理得以进行,通常需要 设置相应 的槽来配合。怎样设置?与推理方法有关。 *33 5. 框架系统中求解问题的基本过程 在用框架表示知识的系统中,问题的求解主要是通过匹配与填槽实现的。 要求解某个问题时: (1) 首先把这个问题用一个框架表示出来; (2) 然后通过与知识库中已有的框架进行匹配,找出一个或几个可匹配的预选 框架作为初步假设,并在此初步假设的引导下收集进一步的信息; (框架的匹配是通过对相应的槽的槽名及槽值逐个比较实现的。如果两个框架的各 对应槽没有矛盾,或者满足预先规定的某些条件,就认为这两个框架可以匹配。) (3) 最后用某种评价方法对预选框架进行评价,以便决定是否接受它。 由于框架间存在继承关系,两个框架的比较往往牵涉到上层、上上层框架; 而且框架间的匹配都有不确定性,所以匹配比较困难。在不同的系统中,可 采用不同的解决方法,如设置“必要条件槽”、“充分条件槽”等。 *34 框架的推理 框架没有固定的推理机理, 框架是一种复杂结构的语义网络。因此语义网络 推理中的匹配和特性继承在框架系统中也可以实 行。框架系统的推理和语义网络一样遵循匹配和 继承原则。 *35 除此以外,由于框架用于描述具有固定格式的事 物、动作和事件,因此可以在新的情况下,推论 出未被观察到的事实。 框架用以下几种途径来帮助实现这一点: (1) 框架包含它所描述的情况或物体的多方面的信息。 这些信息可以被引用,就像已经直接观察到这些信息一 样。例如,当一个程序访问一个ROOM框架时,不论 是否有证据说明屋子里有门,都可以推论出,在屋子里 至少有一个门。之所以能这样做,是因为ROOM框架 中包含 对屋子的描述,其中包括在屋子里必须有门的 事实。 *36 (2) 框架包含物体必须具有的属性。在填充框架的各个 槽时,要用到这些属性。建立对某一情况的描述要求先 建立对此情况的各个方面的描述。与描述这个情况的框 架中的各个槽有关的信息可用来指导如何建立这些方面 的描述。 (3) 框架描述它们所代表的概念的典型事例。如果某一 情况在很多方面和一个框架相匹配,只有少部分相互之 间存在不同之处。这些不同之处很可能对应于当前情况 的重要方面,也许应该对这些不同之处作出解答。因此 ,如果一个椅子被认为应有4条腿,而某一椅子只有3条 腿,那么或许这把椅子需要修理。 *37 在以某种方式应用框架以前,首先要确认这个框 架是适用于当前所研究的情况的。这时可以利用 一定数量的部分证据来初步选择候选框架。这些 候选框架就被具体化,以建立一个描述当前情况 的实例。这样的框架将包含若干个必须填入填充 值的槽。 *38 然后程序通过检测当前的情况,试图找到合适的 填充值。如果可以找到满足要求的填充值,就把 它们填入到这个具体框架的相应槽中去。 如果找不到合适的填充值,就必须选择新的框架 。从建立第一个具体的框架试验失败的原因中可 为下一个应该试验什么框架提供有用的线索。在 另一方面,如果找到了合适的值,框架就被认为 适合于描述当前的情况。 *39 当然,当前的情况可能改变。那么,关于产生什 么变化的信息(例如,我们可以按顺时针方向沿屋 子走动)可用来帮助选择描述这个新情况的框架。 用一个框架来具体体现一个特定情况的过程,经 常不是很顺利的。但当这个过程碰到障碍时,经 常不必放弃原来的努力去从头开始,而是有很多 办法可想的: *40 框架系统的问题求解办法: (1) 选择和当前情况相对应的当前的框架片断,并把这个框架片断和 候补框架相匹配。选择最佳匹配。 如果当前的框架,总的来说差不多是可以接受的,则许多已经做的,有 关建立子结构以填入这个框架的工作将可保留。 (2) 尽管当前的框架和要描述的情况之间有不相匹配的地方,但是仍 然可以继续应用这个框架。 例如,所研究的只有3条腿的椅子,可能是一个破椅子或是有另一个在椅 子前面的物体挡住了一条腿。 框架的某一部分包含关于哪些特性是允许不相匹配的信息。同样的,也 有一般的启发性原则, 比如一个漏失某项期望特性的框架(可能由于被挡住视线造成的)比另一个多 了某一项不应有的特性的框架更适合当前的情况。举例来说,一个人只有一 条腿比说一个人有3条腿或有尾巴更合乎情理些。 *41 (3) 查询框架之间专门保存的链,以提出应朝哪个方向进行试探的建议 。 例如,如果和CHAIR框架匹配时,发现没有靠背,并且太宽,这时就建 议用BENCH(条凳)框架;如果太高,并且没有靠背,就建议用STOOL(凳 子)框架。 图 相似网络 *42 (4) 沿着框架系统排列的层次结构向上移动(即从狗框架哺乳动物框 架动物框架),直到找到一个足够通用,并不与已有事实矛盾的框架 。如果框架足够具体,可以提供所要求的知识,那就采用这个框架。 或者建立一个新的、正好在匹配的框架下一层的框架。 *43 框架推理的例子 例1:关于学生的框架系统已建立在知识库中,要找出一个满足如下条件的计算 机系硕士生:女性,年龄25岁以下,专业为计算机应用技术,研究方向为人 工智能。 问题框架为: 框架名:计算机系研究生-x -姓名: -年龄:25 -性别:女 -专业:计算机应用技术 -研究方向:人工智能 “年龄”槽、“性别”槽、“研究方向”槽都可以与“计算机系研究生-1”框架相匹配 。虽然这里没有给出“专业”的槽值。由于继承性可知它取默认值“计算机应用 技术”,完全符合初始问题框架“计算机系研究生-x”的要求,所以要找的学生 有可能是柳青。 *44 例: 假设前面提出的关于师生员工的框架网络已建立在知识库中,当前要解决的问题是从 知识库中找出一个满足以下条件的教师: 男性,年龄在30岁以下,身体健康,职称为讲师 把这些条件用框架表示出来,就可得到如下的初始问题框架: 框架名:教师-x 姓名: 年龄:30 性别:男 健康状况:健康 职称:讲师 用此框架与知识库中的框架匹配: 1. 教师_1 可与之匹配,(年龄、健康状况与之相符); 2. 职称、性别可有其继承性在上层、上上层得到; 故:孙林可能是要找的教师(符合条件的可能不止孙林一个,此框只能作 为预选框,还需进一步收集更多的信息,以从中选出一个)。 *45 6. 知识的框架表示法的特点 (1) 框架能进行结构化深层知识表示: 框架可为实体、属性关系和默认值等提供显示表示;其中提供默认值相当 于用人的经验预测。 适合表示常识性知识; 表示实体固有的因果模型,便于知识的解释; (2) 容易附加过程信息 框架主要描述静态知识,它的 if_needed,if_added,if_removed侧面可 进行附加。 (3) 框架之间的层次结构提供了继承特性 一个框架的属性及附加过程可从高层次的框架继承下来。 (4) 框架间的组织结构化 框架可组织成层状;每个框架形成了一个独立的知识单元;可利用系统 扩展、模块化。 *46 框架表示法的优点 (1)结构性 -框架表示法善于表示结构型知识,把知识的内部结构关系以及知识间 的特殊联系表示出来。知识的基本单位是框架,而框架又由若干个槽组 成,一个槽又由若干个侧面组成,这样就把知识的内部结构显式地表示 出来。 (2)深层性 -框架表示法不仅可以从多个方面、多重属性表示知识,可以以嵌套结 构分层地对知识进行表示,或表示事物间的因果关系,因此能用来表示 事物间的复杂的深层联系。 (3)继承性 -在框架系统中,下层框架可以继承上层框架的槽值,也可进行补充, 这不仅可以减少知识的冗余,而且较好地保证了知识的一致性。 (4)自然性 -框架系统把某个实体或实体集的相关特性都集中在一起,从而高度模 拟了人脑对实体的多方面、多层次的存储结构,直观自然,易于理解。 *47 框架表示法的缺点 (1)缺乏框架的形式理论 -至今没有建立框架的形式理论,其推理和一致性检查机制并非基于良 好定义的语义。 (2)缺乏过程性知识表示 -不便于表示过程性知识,推理过程中用到一些与领域无关的推理规则 ,在框架系统中又很难表达。 (3)清晰性难以保证 -各框架本身的数据结构不一定相同,从而框架系统的清晰性很难保证 。 *48 剧本(script)表示 *49 剧本(script)表示 剧本是框架的一种特殊形式,他用一组槽来描述 某些时间的发生序列,就像剧本中的事件序列一 样。 *50 剧本(script)表示 1 剧本的构成 一个剧本一般由以下各部分组成: (1) 开场条件:给出在剧本中描述的事件发生的前提条件。 (2) 角色(支撑物):用来表示在剧本所描述的事件中可能出现的有关 人物的一些槽。 (3) 道具(线索):这是用来表示在剧本所描述的事件中可能出现的有 关物体的一些槽。 (4) 场景(场次):描述事件发生的真实顺序,可以由多个场景组成, 每个场景又可以是其它的剧本。 (5) 结果(结局):给出在剧本所描述的事件发生以后通常所产生的结 果。 *51 例子:餐厅剧本 (1)开场条件 (a)顾客饿了,需要进餐厅 (b)顾客有足够的钱 (2)角色 顾客、服务员、厨师、老板 (3)道具 食品、桌子、菜单、钱 (4)场景 场景1 进入餐厅 (a)顾客走入餐厅 (b)寻找桌子 (c)在桌子旁坐下 场景2 点菜 (a)服务员给顾客菜单 (b)顾客点菜 (c)顾客把菜单还给服务员 (d)顾客等待服务员送菜 场景3 等待 (a)服务员把顾客所点的菜告诉厨师 (b)厨师做菜 场景4 吃菜 (a)厨师把做好的菜给服务员 (b)服务员给顾客送菜 (c)顾客吃菜 场景5 离开 (a)服务员拿来账单 (b)顾客付钱给服务员 (c)顾客离开餐厅 (5)结果 (a)顾客吃了饭,不饿了 (b)顾客花了钱 (c)老板挣了钱 (d)餐厅食品少了 *52 例子:音乐会剧本 (1)开场条件 A想听音乐会 E主办音乐会 A有钱 (2)角色 A为听众、B为售票员、C为收票员、D为 乐队、E为主办者 (3)道具 入场券、乐器、钱币、听众席、售票处 、演奏厅 (4)场景 场景1 购票 A注意到售票处 A朝售票处走去 A向B说:“我要入场券”。 A给B钱 B给A入场券 场景2 入场 A给C入场券 A进入演奏厅 A注意到听众席 A看往哪坐 A朝自己的听众席走去 A坐下 场景3 听演出 乐队演奏乐器 A听音乐 场景4 离开 A站起来 A离开座位 A离开音乐厅 *53 2 剧本的推理 剧本是有用的知识表达结构,因为在现实世界中事件发生 的某种模式来自事件之间的因果关系。事件中的主人公完 成一个动作后才能完成另一个动作。 剧本中所描述的事件形成一个巨大的因果链,这个链的起 点是一组开场条件,满足这些开场条件,剧本中的事件才 能产生。链的终点是一组结果,有了这组结果,以后的事 件或事件序列(可能用其他的剧本来描述)才能发生。 *54 在这个链内一件事情和前后的事情都相互联系。前面的事件,使当前 的事件有可能产生,而当前事件又使后面的事件有可能产生。 如已知某一剧本适用于所给定的情形,剧本在预言一些没有直接 提到的事件方面特别有用。同时剧本对表示已经提到的事件之间的关 系也很有用。例如,要表示某人点了炖牛肉这道菜和此人吃牛肉之间 是什么联系,就可以利用剧本。 但在应用某一剧本以前,必须先准备好剧本,也就是先要确定这个剧 本适用于当前的情形。根据剧本的重要性,可以有二种准备剧本的方 法:(激活剧本) *55 (1) 对于不属于事件核心部分的剧本,只需设置指向该剧本的指针即 可,以便当它成为核心时启用,如对于餐厅剧本,在下述事件中应采 用这种方法: 苏珊在去博物馆的路上经过她喜欢的餐厅。她非常喜欢这次的毕加索 作品展览会。 (2) 对于符合事件核心部分的剧本,则应使用在当前事件中涉及到的 具体对象和人物去填写剧本的槽。剧本的前提、道具、角色和事件等 常能起到启用剧本的指示器的作用。 一旦剧本被启用(激活),则可以应用它来进行推理。其中最重要的 是运用剧本可以预测没有明显提及的事件的发生。 *56 -如对于以下情节: -“昨晚,约翰到了餐厅,他订了牛排,当他要付款时 发现钱已用光。因为开始下雨了,所以他赶紧回家了” 。有人问:“昨晚,约翰吃饭了吗?”。又如,“约翰走 进餐厅,他被带到餐桌旁,订了一大块牛排之后,他坐 在那儿等了许久。于是,他生气地走了。”根据剧本, 可以得出结论。 *57 面向对象表示 *58 面向对象表示 1 面向对象基础 人们认识世界是以世界划分为一些事和物为基础的,这里的物指 物体,事指物体间的联系。面向对象表示法中的对象指物体,消息指 物体间的联系,通过发送消息使对象间相互作用来求得所需的结果。 对象是由一组数据和与该组数据相关的操作构成的实体。如一个 对象叫me。会有一组表征自身的数据: name: Li ming age: 20 相应的操作作为 birthday(岁数):每年实现age+1 消息是由(object,Selector,arguments)表示。其中object是消息要 发送的对象,Selector是要求该对象完成的操作,arguments是 Selector可选的参数。 *59 简单地说,面向对象作为一种大有前途的方法和现今被广 泛采用的技术,其基本原则有三条: 一切事物都是对象; 任何系统都是由对象构成的,系统本身也是对象; 系统的发展和进化过程都是由系统的内部对象和外部对象之间( 也包括内部对象与内部对象之间)的相互作用完成的 *60 面向对象方法和技术之所以会如此流行,主要是因为它非 常适合于人们认识和解决问题的习惯。 首先它是一种从一般到特殊的演绎方法,这与人们认识客观世界 时常用的分类的思想非常吻合; 其次它也是一种从特殊到一般的归纳方法,由一大批相同或相似 的对象抽象出新的类的过程,就是一个归纳过程。面向对象既提 供了从一般到特殊的演绎手段,如继承等;也提供了从特殊到一 般的归纳方法,如类等。因此它是一种很好的认知方法。 *61 从狭义上看,面向对象的软件开发包括三个主要阶段: 面向对象分析Object-Oriented Analysis简称OOA OOA是指系统分析员对将要开发的系统进行定义和分析,进而得到各 个对象类以及它们之间的关系的抽象描述。 面向对象设计Object-Oriented Design简称OOD OOD是指系统设计人员将面向对象分析的结果转化为适合于程序设计 语言中的具体描述,它是进行面向对象程序设计的蓝图。 面向对象程序设计Object-Oriented Programming简称OOP。 OOP则是程序设计人员利用程序设计语言,根据OOD得到的对象类 的描述,生成对象实例,建立对象间的各种联系,最终建立实际可运 行的系统。 *62 2 类与类继承 在面向对象表示中类和类继承是重要概念。类是面向对象的一个基本 概念。类由一组变量和一组操作组成,它描述了一组具有相同属性和 操作的对象。每个对象都属于某一类,每个对象都可由相关的类生成 ,类生成对象的过程就是例化。类封装了客观世界中的实体的主体和 动作,即类的数据抽象和过程抽象两个方面。 类是对一组类似的对象的一般化的描述。同一个类中的对象继承 类的属性和方法,对一组相似的类进行抽象可以得到这一组类的超类 Superclass。相应地,超类中的每一个类称为子类Subclass类。超类 和子类的定义隐含地表示了类层次Class hierarchy的概念。在类层次 结构中,超类的属性和方法可以由子类继承,而子类中又可能加入新 的属性和方法,而子类中从超类中继承而来的属性和方法,以及子类 中新定义的属性和方法,都可以由这一子类的子类继承。 *63 (1) 客观世界是由各种对象Object组成的。任何事物都是对象。复杂的对象可 以由比较简单的对象以某种方式组合起来。因此面向对象的软件系统是由对 象组成的。软件中的任何元素都是对象。复杂的对象由比较简单的对象组合 而成。 (2) 把所有的对象都划分为各种类(Class)。每个类都定义了一组数据和一组方 法。数据用于表示对象的静态属性,描述对象的状态信息。方法是对象所能 执行的操作,也就是类中所能提供的服务。 (3) 按照子类也称为派生类和父类也称为基类的关系,把若干个类组成一个 层次结构的系统。在这种类层次结构中,通常下层的派生类具有和上层的基 类相同的特性,包括数据和方法。我们把这一特性称为继承(Inheritance)。 (4) 对象与对象之间只能通过传递消息进行通信(Communication with Messages)。 *64 以上四个要点概括了面向对象方法的精华。 面向对象方法可用一个公式概括为: Object Oriented =Objects +Classes +Inheritances +Communication with Messages。 *65 3 面向对象表示的实例 1.举一个简单的例子说明面向对象程序设计中如何 实现封装性 /日期类CDate 的例子.定义日期字符串类型string80 typedef char String8080; /定义日期类CDate class CDate /类的实现 private: int year,month,day; /类的接口 public: CDate(int month,int day,int year); CDate operator+(int days); *66 void GetDateString(String80 / . ; /部分成员函数的实现 void CDate:GetDateString(String80 CDate类中数据成员year,month和day是类的实现部分,构造函数 和重载的加法运算符构成了类的对外接口。类的接口中构造函数可以 用初始参数构造一日期型对象,重载的加法运算可以使得类的用户计 算,并返回一增加或减少一个整数天之后或之前的一个新的日期型对 象。 *67 2.举一个简单的例子说明面向对象程序设计中如 何实现继承性 以CDate类作为例子,假设CDate类中的GetDateString成员函数以美 国日期格式MM-DD-YY返回日期字符串,现在如果要能够以欧洲日期 格式DD-MM-YY返回日期字符串,该如何做呢?如果已经有CDate类 的源代码,则可以复制整个类的源代码,然后修改GetDateString 成员 函数,使之能够返回欧洲日期格式的日期字符串,更好的办法是通过 继承。 /定义日期字符串类型string80 typedef char String8080; /定义日期类CDate class CDate *68 /year,month,day 改成了protected 类型 protected: int year,month,day; public: CDate(int month,int day,int year); CDate operator+(int days); void GetDateString(String80 / . ; /部分成员函数的实现 void CDate:GetDateString(String80 /CEuropeDate 类是从CDate 类派生得到的 class CEuropeDate : public CDate *69 public: /重载基类的成员函数 void GetDateString(String80 / . ; /部分成员函数的实现 void CEuropeDate:GetDateString(String80 类CEuropeDate与类CDate非常类似,只是继承下来的GetDateString()函 数被重载并返回欧洲格式的日期字符串 *70 3.举一个简单的例子说明面向对象程序设计中如 何实现多态性 /以类CDate 和类CEuropeDate 类为例予以说明.定义日期字符串类型 string80 typedef char String8080; /定义日期类CDate class CDate protected: int year,month,day; public: CDate(int month,int day,int year); CDate operator+(int days); void GetDateString(String80 *71 void DisplayDateString(void); /这里重点考察这一成员函数 / . ; /部分成员函数的实现 void CDate:GetDateString(String80 void CDate:DisplayDateString(void) String80 DateString; GetDateString(DateString); cout“日期是“DateStringendl; /CEuropeDate 类是从CDate类派生得到的 class CEuropeDate : public CDate *72 public: /重载基类的成员函数 void GetDateString(String80 CEuropeDate(int day, int month, int year): CDate(int month, int day, int year); /增加新的成员函数 / . ; /部分成员函数的实现 void CEuropeDate:GetDateString(String80 /main 函数 *73 void main(void) String80 DateString; CDate USDate(5, 26, 2001); CEuropeDate EUDate(6, 5, 2001); /以美国日期格式显示 USDate.DisplayDateString(); /期望以欧洲日期格式显示但结果仍是以美国日期格 式显示 EUDate.Displa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论