第二讲知识表示框架剧本对象表示法讲解材料_第1页
第二讲知识表示框架剧本对象表示法讲解材料_第2页
第二讲知识表示框架剧本对象表示法讲解材料_第3页
第二讲知识表示框架剧本对象表示法讲解材料_第4页
第二讲知识表示框架剧本对象表示法讲解材料_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

2024/9/271人工智能原理第二讲知识表示之框架/剧本表示主讲:王祖喜zuxiw@163.com华中科技大学图像所2024/9/272知识的表示方法谓词逻辑法状态空间法问题归约法语义网络法框架表示法面向对象表示剧本(script)表示过程(procedure)表示小结2024/9/273知识的框架表示2024/9/2741.概念知识的框架表示法1975年由M.Minsky提出,最早用作视觉感知、自然语言对话等问题的知识表示;目前已作为一种通用数据结构来表示知识对象(实体)。框架理论认为,人们对现实世界中各种事物的认识都是以一种类似于框架的结构存储在记忆中的,当面临一种新事物时,就从记忆中找出一个合适的框架并根据实际情况对其细节加以修改、补充,从而形成对当前事物的认识。例如:当一个人要走近一个教室时,他能根据以往的知识,想象到这个教室一定有四面墙,有门、窗、天花板和地板,有课桌、椅子、黑板等,尽管他对这个教室的细节还不清楚,但对教室的基本结构是可以预见的。他之所以能做到这一点,是由于他通过以往的认识活动已经在记忆中建立了关于教室的框架,该框架不仅指出了相应事物的名称(教室),而且还指出了事物各有关方面的属性(如有四面墙、有课桌、有黑板,……)。通过对该框架的查找,很容易得到教室的各有关特征。知识的框架表示2024/9/276<框架名>槽名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框架的一般结构:2024/9/277

例1:框架名:<假冒伪劣商品>

商品名称:生产厂家:出售商店:

处罚:处理方式:处罚依据:处罚时间:单位(年、月、日)经办部门:

在这个框架中,有4个槽,其中,“处罚”槽有4个侧面,侧面“处罚时间”用“单位”指出了一个填值时的标准限制。2024/9/278例2:框架名:<教师>

姓名:单位(姓、名)年龄:单位(岁)性别:范围(男、女)缺省(男)职称:范围(教授、副教授、 讲师、助教)缺省(讲师)部门:单位(系、教研室)住址:<住址框架>

工资:<工资框架>

开始工作时间:单位(年、月)

截止时间:单位(年、月)缺省:现在

把某教师的一组信息填入教师框架的各个槽,就得到了相应框架的一个事例框架:框架名:<教师-1>

姓名:夏冰年龄:36

性别:女职称:副教授部门:计算机教研室住址:<adr1>

工资:<sal-1>

开始工作时间:1988.9

截止时间:1996.9

2024/9/279例1:硕士生的具体框架框架名:<硕士生>姓名:单位(姓,名)性别:范围(男,女)默认:男年龄:单位(岁)条件:岁>16学习专业:单位(专业名)研究方向:单位(方向名)导师姓名:单位(姓,名)参加课题:范围(国家级,省部级,其它)默认:国家级学籍:<硕学籍>住址:单位(楼号,房间号)电话:单位((区号),话机号)入学时间:单位(年,月)学制:单位(年)默认:4年2024/9/2710硕士生的实例框架框架名:<硕士生-1>姓名:杨杨性别:女年龄:23学习专业:计算机应用技术研究方向:人工智能导师姓名:林海参加课题:学籍:<硕学籍-1>住址:16号楼316房间号电话:(010)66668888入学时间:2000年9月学制:2024/9/2711框架的BNF描述:<框架>::=<框架头><槽部分>[<约束部分>]<框架头>::=框架名<框架名的值><槽部分>::=<槽>,[<槽>]<约束部分>::=约束<约束条件>,[<约束条件>]<框架名的值>::=<符号名>|<符号名>(<参数>,[<参数>])<槽>::=<槽名><槽值>|<侧面部分><槽名>::=<系统预定义槽名>|<用户自定义槽名><槽值>::=<静态描述>|<过程>|<谓词>|<框架名的值>|<空><侧面部分>::=<侧面>,[<侧面>]<侧面>::=<侧面名><侧面值><侧面名>::=<系统预定义侧面名>|<用户自定义侧面名><侧面值>::=<静态描述>|<过程>|<谓词>|<侧面名的值>|<空><静态描述>::=<数值>|<字符串>|<布尔值>|<其它值><过程>::=<动作>|<动作>,[<动作>]<参数>::=<符号名>2024/9/2712框架系统的基本结构框架系统的基本结构是通过诸框架之间的横向或纵向联系来实现的。(1)框架之间的横向联系一个框架的槽值或侧面值可以是另外一个框架的名字。如,“硕士生”框架合“硕学籍”框架之间为横向联系。(2)框架之间的纵向联系用框架表示具有演绎关系的知识结构时,下层框架与上层框架之间具有一种继承关系,这种具有继承关系的框架之间的联系称为纵向关系。2024/9/2713学生框架为:框架名:<学生>姓名:单位(姓,名)性别:范围(男,女)默认:男年龄:单位(岁)住址:单位(楼号,房间号)电话:单位((区号),话机号)入学时间:单位(年,月)学制:单位(年)2024/9/2714硕士生框架为:框架名:<硕士生>继承:<学生>学籍:<硕学籍>研究方向:单位(方向名)导师姓名:单位(姓,名)参加课题:范围(国家级,省部级,其它)默认:国家级学位论文:单位(论文题目)默认:题目未定2024/9/2715计算机系硕士生框架为:框架名:<计算机系硕士生>继承:<硕士生>专业:范围(计算机应用技术,计算机软件及理论)默认:计算机应用技术使用计算机:单位(计算机的型号)2024/9/2716例:一个计算机系硕士生的实例框架框架名:<计算机系硕士生-1>继承:<硕士生>姓名:柳青性别:女年龄:23研究方向:人工智能......2024/9/2717例1:一个教室A的框架上下层是part-of关系,黑板是教室A的一部分,但黑板的结构、性能与教室是完全不同的。最上面是主框架,最上面记着框架名,其他部分是由槽和值组成。槽用中文写出,值用小长方形表示。(1)某些值可以是另一个子框架。如左墙、右墙、前墙,而且子框架可以共享。(2)某些值可以空着,等适当的时候再去填写。2024/9/2718例2:拱框架2024/9/2719例3:动物分类框架2024/9/27203.框架网络框架间的横向联系:由于框架中的槽值或侧面值都可以是另一个框架的名字,这就在框架之间建立起了联系,通过一个框架可以找到另一个框架,这称为横向联系;框架间的纵向联系:举例说明:在一个学校中,无论是教师,还是学生以及在学校工作的其他人员,如干部,实验员,工人等,尽管他们所承担的任务不同,但由于他们都处于学校这个环境中,必然会有一些共同的属性,因此,在对他们进行描述时,可以将它们具有的共同属性抽取出来,构成一个上层框架,然后再对各类人员独有的属性分别构成下层框架,为了指明框架间的这种上,下关系,可在下层框架中设立一个专用的槽,用以指出他的上层框架是哪一个。这样就在框架间建立了纵向联系;而且对于这种联系,下层框架还可以继承上层框架的属性及值,避免了重复描述,节约了时间和空间的开销。框架间的继承性:继承性是框架表示法的一个重要特性,它不仅可以在两个框架之间实现继承关系,而且还可以通过两两的继承关系,从最低层追搠到最高层,使高层的信息逐层向低层传递。2024/9/2721

像这样具有横向联系及纵向联系的一组框架称为框架网络。

下图是一个关于师生员工的框架网络。师生员工框架教职工框架学生框架教师框架工人框架

电子系学生框架机械系学生框架教师1

教师n

学生n

学生1………………•师生员工框架——用于描述师生员工的共同属性,例如姓名,性别,年龄等;•教职工框架——用于描述教师,干部,工人的共同属性,凡是在师生员工框架中已指出的属性在这里可不再重复描述;(以此类推)•教师框架,工人框架——其中也只需描述只有他们自己具有的属性。2024/9/2722

[注意]

1.如果一个在上层框架中描述的属性在下层框架需作进一步说明时,则需要在下层框架中再次给出描述。例如,设在师生员工框架中对年龄槽的描述是:年龄:单位(岁)由于学生一般都在七岁开始上学,因此学生的年龄可由年龄=学龄+7

得到,所以在学生框架中仍可设置年龄槽,并在该槽的描述中给出计算年龄的过程。

2.如果在下层框架中对某些槽没有作特别的声明,那么它将自动继承上层框架相应槽的槽值。

下面具体给出上述几个框架的描述:2024/9/2723师生员工框架为:框架名:<师生员工>

姓名:单位(姓,名)年龄:单位(岁)性别:范围(男,女)缺省:男健康状况:范围 (健康,一般,差)缺省:一般住址:<住址框架>教职工框架为:

框架名:<教职工>

继承:<师生员工>

工作类别:范围 (教师,干部,工人)缺省:教师开始工作时间:单位(年,月)截止工作时间:单位(年,月)缺省:现在离退休状况:范围(离休,退休)缺省:退休2024/9/2724教师框架为:

框架名:<教师>

继承<教职工>

部门:单位(系,教研室)语种:范围(英语,法语,日语,德语,俄语)缺省:英语外语水平:范围(优,良,中,差)缺省:良职称:范围(教授,副教授,讲师,助教)缺省:讲师研究方向:某个教师的事例框架为:框架名:<教师-1>

继承:<教师>

姓名:孙林年龄:28

健康状况:健康部门:计算机系软件教研室语种:德语开始工作时间:1985.9……..2024/9/2725

由以上框架描述可以看出:

(1)在框架网络中。既有用“继承“槽指出的上、下层框架间的纵向联系,也有以框架名作为槽值指出的框架间的横向联系,因此框架网络之间是一个纵横交错的复杂的框架体系结构。

(2)

原则上说,事例框架中的每一个槽都应给出槽值,但对可以继承上层框架槽值的槽,其槽值可不给出。例如在上面的教师-1的框架中,虽然没有给出性别,职称槽及其槽值,但由继承性可知孙林的性别为“男“,职称为讲师。2024/9/27264.框架中槽的设置与组织框架是一种集事物各方面属性的描述为一体,并反映相关事物间各种关系的数据结构。在此结构中,槽起至关重要的作用,因为不仅要用他描述事物各方面的属性,而且还要用他指出相关事物间的复杂关系。因此要注意以下几个方面的关系:

(1)充分表达事物各有关方面的属性——合理地设置槽在以框架作为知识表示模式的系统中,知识是通过事物的属性来表示的。为使系统具有丰富的知识,以满足问题的求解的需要,就要求框架中有足够的槽把事物各方面的属性充分表达出来。这里说的“各有关方面的属性”有两方面的含义:

•要与系统的设计目标相一致,凡是系统设计目标所要求的属性,或者问题求解中有可能要用到的属性都应该用相应的槽把他们表示出来;

•仅仅需要对有关的属性设立槽,不可面面俱到,以免浪费空间和降低系统的运行效率。2024/9/2727

(2)充分表达相关事物间的各种关系——由槽中的框架名建立联系

现实世界中的事物一般不是孤立的,彼此之间存在千丝万缕的联系。为了将其中有关的联系反映出来,以构成完整的知识体系,需要设置相应的槽来描述这些联系。在框架系统中,事物间的联系是通过在槽中填入相应的框架名来实现,至于它们之间究竟是一种什么样的关系,则是由槽名来指明的。

在框架表示系统中通常定义一些标准槽名,应用时不用说明就可直接使用称这些槽名为系统预定义槽名。现简单介绍几个:

Ⅰ.

ISA槽

ISA槽用于指出事物间抽象概念上的类属关系。其直观含义是“是一个”,“是一种”,“是一只”……。当它用作某下层框架的槽时,表示该下层框架所描述的事物是其上层框架的一个特例,上层框架是比下层框架更一般或更抽象的概念。设有下面两个框架:2024/9/2728框架名:<运动员>

姓名:单位(姓,名)年龄:单位(岁)性别:范围(男,女)缺省:男框架名:<棋手>ISA:<运动员>

脑力:特好在此例中,棋手框架中的ISA槽指出该框架所描述的事物是运动员框架所描述事物的属性及值。Ⅱ.AKO槽

AKO槽用于具体的指出事物间的类属关系。其直观含义是“是一种”,当它用作某下层框架的槽时,就明确的指出该下层框架所描述的事物是其上层框架所描述事物的一种,下层框架可以继承其上层框架所描述的属性及值。对上面的例子,可将棋手框架中的ISA改为AKO。2024/9/2729Ⅲ.Subclass槽

subclass槽用于指出子类与类(或子集与超集)之间的类属关系。当用它作为某下层框架的槽时,表示该下层框架是其上层框架的一个子类(或子集)。在上例中,由于“棋手”是“运动员的一个子类,故可将ISA该为Subclass。Ⅳ

.Instance槽

Instance槽用来建立AKO槽的逆关系。当用它作为某上层框架的槽值时,可用来指出它的下层框架是哪些。

框架名:<运动员>Instance:<棋手>,<足球运动员>,<排球运动员>

姓名:单位(姓,名)年龄:单位(岁)性别:范围(男,女)缺省:男2024/9/2730Ⅴ.

Part-of槽

Part-of槽用于指出部分与全体的关系。当它用作某下层框架的槽时,它指出该下层框架所描述的事物只是其上层框架所描述的事物的一部分。例如,上层框架是对汽车的描述,下层框架是对轮胎的描述。显然,轮胎是汽车的一部分。这里应注意将Part-of槽与上面讨论的那四种槽区分开来:前述4种槽是上、下层框架间的类属关系,它们由共同的特性,可以继承;Part-of槽只指出下层是上层的一个子结构,两者一般不具有共同的特征,不能继承。如:上层描述汽车,而下层描述轮胎,轮胎是汽车的一部分,但两者的结构、性能缺完全不同,这是可选用Part-of槽指出其上下层的关系——部分与全体。2024/9/2731Ⅵ.Infer槽

Infer槽用于指出两个框架所描述的事物间的逻辑推理关系,用它可以表示相应的产生式规则。

例如:设有下面知识:如果咳嗽,发烧且流涕,则八成是患了感冒,需服用感冒清,一日三次,每次2-3粒,多喝开水对该知识,可用如下两个框架表示:

框架名:<诊断规则>

症状1:咳嗽症状2:发烧症状3:流涕

Infer:<结论>

可信度:0.8框架名:<结论>

病名:感冒治疗方法:服用感冒清,一日三次,每次2-3粒

注意事项:多喝开水预后:良好Ⅶ.Possible-Reason槽。其作用与Infer槽作用相反,它用来把某个结论与可能的原因联系起来。2024/9/2732(3)对槽及侧面进行合理的组织——利用其上下层间的继承性基于框架上、下层的继承性,尽量将不同框架中的相同属性抽取出来,放入其上层框架,而在下层框架中只描述相应事物独有的属性。

这样可大大减少信息的重复性,其且有利于知识的一致性。例如:将鸽子、啄木鸟、布谷鸟、燕子等动物,用框架将其特征描述出来?上层:有羽毛、会飞、有两只爪等共同特性;下层:各种鸟独有的特征各建一个框架;联系:用AKO或Instance将上下层联系起来。(4)有利于进行框架推理用框架表示知识的系统一般由两大部分组成:

1.由框架及其相互关联构成的知识库(提供求解问题所需要的知识);

2.由一组解释程序构成的框架推理机(针对用户提出的问题,通过运用知识库中的相关知识完成求解问题的任务,给出问题的解)。

框架推理是一个反复进行框架匹配的过程,为了使推理得以进行,通常需要设置相应的槽来配合。怎样设置?与推理方法有关。2024/9/27335.框架系统中求解问题的基本过程

在用框架表示知识的系统中,问题的求解主要是通过匹配与填槽实现的。要求解某个问题时:(1)首先把这个问题用一个框架表示出来;

(2)然后通过与知识库中已有的框架进行匹配,找出一个或几个可匹配的预选框架作为初步假设,并在此初步假设的引导下收集进一步的信息;

(框架的匹配是通过对相应的槽的槽名及槽值逐个比较实现的。如果两个框架的各对应槽没有矛盾,或者满足预先规定的某些条件,就认为这两个框架可以匹配。)

(3)最后用某种评价方法对预选框架进行评价,以便决定是否接受它。由于框架间存在继承关系,两个框架的比较往往牵涉到上层、上上层框架;而且框架间的匹配都有不确定性,所以匹配比较困难。在不同的系统中,可采用不同的解决方法,如设置“必要条件槽”、“充分条件槽”等。2024/9/2734框架的推理框架没有固定的推理机理,框架是一种复杂结构的语义网络。因此语义网络推理中的匹配和特性继承在框架系统中也可以实行。框架系统的推理和语义网络一样遵循匹配和继承原则。2024/9/2735除此以外,由于框架用于描述具有固定格式的事物、动作和事件,因此可以在新的情况下,推论出未被观察到的事实。框架用以下几种途径来帮助实现这一点:(1)框架包含它所描述的情况或物体的多方面的信息。这些信息可以被引用,就像已经直接观察到这些信息一样。例如,当一个程序访问一个ROOM框架时,不论是否有证据说明屋子里有门,都可以推论出,在屋子里至少有一个门。之所以能这样做,是因为ROOM框架中包含对屋子的描述,其中包括在屋子里必须有门的事实。2024/9/2736(2)框架包含物体必须具有的属性。在填充框架的各个槽时,要用到这些属性。建立对某一情况的描述要求先建立对此情况的各个方面的描述。与描述这个情况的框架中的各个槽有关的信息可用来指导如何建立这些方面的描述。(3)框架描述它们所代表的概念的典型事例。如果某一情况在很多方面和一个框架相匹配,只有少部分相互之间存在不同之处。这些不同之处很可能对应于当前情况的重要方面,也许应该对这些不同之处作出解答。因此,如果一个椅子被认为应有4条腿,而某一椅子只有3条腿,那么或许这把椅子需要修理。2024/9/2737在以某种方式应用框架以前,首先要确认这个框架是适用于当前所研究的情况的。这时可以利用一定数量的部分证据来初步选择候选框架。这些候选框架就被具体化,以建立一个描述当前情况的实例。这样的框架将包含若干个必须填入填充值的槽。2024/9/2738然后程序通过检测当前的情况,试图找到合适的填充值。如果可以找到满足要求的填充值,就把它们填入到这个具体框架的相应槽中去。如果找不到合适的填充值,就必须选择新的框架。从建立第一个具体的框架试验失败的原因中可为下一个应该试验什么框架提供有用的线索。在另一方面,如果找到了合适的值,框架就被认为适合于描述当前的情况。2024/9/2739当然,当前的情况可能改变。那么,关于产生什么变化的信息(例如,我们可以按顺时针方向沿屋子走动)可用来帮助选择描述这个新情况的框架。用一个框架来具体体现一个特定情况的过程,经常不是很顺利的。但当这个过程碰到障碍时,经常不必放弃原来的努力去从头开始,而是有很多办法可想的:2024/9/2740框架系统的问题求解办法:(1)选择和当前情况相对应的当前的框架片断,并把这个框架片断和候补框架相匹配。选择最佳匹配。如果当前的框架,总的来说差不多是可以接受的,则许多已经做的,有关建立子结构以填入这个框架的工作将可保留。(2)尽管当前的框架和要描述的情况之间有不相匹配的地方,但是仍然可以继续应用这个框架。例如,所研究的只有3条腿的椅子,可能是一个破椅子或是有另一个在椅子前面的物体挡住了一条腿。框架的某一部分包含关于哪些特性是允许不相匹配的信息。同样的,也有一般的启发性原则,比如一个漏失某项期望特性的框架(可能由于被挡住视线造成的)比另一个多了某一项不应有的特性的框架更适合当前的情况。举例来说,一个人只有一条腿比说一个人有3条腿或有尾巴更合乎情理些。2024/9/2741(3)查询框架之间专门保存的链,以提出应朝哪个方向进行试探的建议。例如,如果和CHAIR框架匹配时,发现没有靠背,并且太宽,这时就建议用BENCH(条凳)框架;如果太高,并且没有靠背,就建议用STOOL(凳子)框架。图相似网络2024/9/2742(4)沿着框架系统排列的层次结构向上移动(即从狗框架→哺乳动物框架→动物框架),直到找到一个足够通用,并不与已有事实矛盾的框架。如果框架足够具体,可以提供所要求的知识,那就采用这个框架。或者建立一个新的、正好在匹配的框架下一层的框架。2024/9/2743框架推理的例子例1:关于学生的框架系统已建立在知识库中,要找出一个满足如下条件的计算机系硕士生:女性,年龄25岁以下,专业为计算机应用技术,研究方向为人工智能。问题框架为:框架名:计算机系研究生-x----姓名:----年龄:<25----性别:女----专业:计算机应用技术----研究方向:人工智能“年龄”槽、“性别”槽、“研究方向”槽都可以与“计算机系研究生-1”框架相匹配。虽然这里没有给出“专业”的槽值。由于继承性可知它取默认值“计算机应用技术”,完全符合初始问题框架“计算机系研究生-x”的要求,所以要找的学生有可能是柳青。2024/9/2744例:假设前面提出的关于师生员工的框架网络已建立在知识库中,当前要解决的问题是从知识库中找出一个满足以下条件的教师:男性,年龄在30岁以下,身体健康,职称为讲师把这些条件用框架表示出来,就可得到如下的初始问题框架:

框架名:教师-x

姓名:年龄:<30

性别:男健康状况:健康职称:讲师用此框架与知识库中的框架匹配:1.教师_1可与之匹配,(年龄、健康状况与之相符);

2.职称、性别可有其继承性在上层、上上层得到;故:孙林可能是要找的教师(符合条件的可能不止孙林一个,此框只能作为预选框,还需进一步收集更多的信息,以从中选出一个)。2024/9/27456.知识的框架表示法的特点

(1)框架能进行结构化深层知识表示:

•框架可为实体、属性关系和默认值等提供显示表示;其中提供默认值相当于用人的经验预测。

•适合表示常识性知识;

•表示实体固有的因果模型,便于知识的解释;

(2)容易附加过程信息框架主要描述静态知识,它的if_needed,if_added,if_removed侧面可进行附加。

(3)框架之间的层次结构提供了继承特性一个框架的属性及附加过程可从高层次的框架继承下来。

(4)框架间的组织结构化框架可组织成层状;每个框架形成了一个独立的知识单元;可利用系统扩展、模块化。2024/9/2746框架表示法的优点(1)结构性

---框架表示法善于表示结构型知识,把知识的内部结构关系以及知识间的特殊联系表示出来。知识的基本单位是框架,而框架又由若干个槽组成,一个槽又由若干个侧面组成,这样就把知识的内部结构显式地表示出来。(2)深层性

---框架表示法不仅可以从多个方面、多重属性表示知识,可以以嵌套结构分层地对知识进行表示,或表示事物间的因果关系,因此能用来表示事物间的复杂的深层联系。(3)继承性

---在框架系统中,下层框架可以继承上层框架的槽值,也可进行补充,这不仅可以减少知识的冗余,而且较好地保证了知识的一致性。(4)自然性

---框架系统把某个实体或实体集的相关特性都集中在一起,从而高度模拟了人脑对实体的多方面、多层次的存储结构,直观自然,易于理解。2024/9/2747框架表示法的缺点(1)缺乏框架的形式理论---至今没有建立框架的形式理论,其推理和一致性检查机制并非基于良好定义的语义。(2)缺乏过程性知识表示---不便于表示过程性知识,推理过程中用到一些与领域无关的推理规则,在框架系统中又很难表达。(3)清晰性难以保证---各框架本身的数据结构不一定相同,从而框架系统的清晰性很难保证。

2024/9/2748剧本(script)表示2024/9/2749剧本(script)表示剧本是框架的一种特殊形式,他用一组槽来描述某些时间的发生序列,就像剧本中的事件序列一样。2024/9/2750剧本(script)表示

1剧本的构成

一个剧本一般由以下各部分组成:

(1)开场条件:给出在剧本中描述的事件发生的前提条件。

(2)角色(支撑物):用来表示在剧本所描述的事件中可能出现的有关人物的一些槽。

(3)道具(线索):这是用来表示在剧本所描述的事件中可能出现的有关物体的一些槽。

(4)场景(场次):描述事件发生的真实顺序,可以由多个场景组成,每个场景又可以是其它的剧本。

(5)结果(结局):给出在剧本所描述的事件发生以后通常所产生的结果。2024/9/2751例子:餐厅剧本(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)餐厅食品少了2024/9/2752例子:音乐会剧本(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离开音乐厅2024/9/27532剧本的推理剧本是有用的知识表达结构,因为在现实世界中事件发生的某种模式来自事件之间的因果关系。事件中的主人公完成一个动作后才能完成另一个动作。剧本中所描述的事件形成一个巨大的因果链,这个链的起点是一组开场条件,满足这些开场条件,剧本中的事件才能产生。链的终点是一组结果,有了这组结果,以后的事件或事件序列(可能用其他的剧本来描述)才能发生。2024/9/2754在这个链内一件事情和前后的事情都相互联系。前面的事件,使当前的事件有可能产生,而当前事件又使后面的事件有可能产生。

如已知某一剧本适用于所给定的情形,剧本在预言一些没有直接提到的事件方面特别有用。同时剧本对表示已经提到的事件之间的关系也很有用。例如,要表示某人点了炖牛肉这道菜和此人吃牛肉之间是什么联系,就可以利用剧本。但在应用某一剧本以前,必须先准备好剧本,也就是先要确定这个剧本适用于当前的情形。根据剧本的重要性,可以有二种准备剧本的方法:(激活剧本)2024/9/2755

(1)对于不属于事件核心部分的剧本,只需设置指向该剧本的指针即可,以便当它成为核心时启用,如对于餐厅剧本,在下述事件中应采用这种方法:

苏珊在去博物馆的路上经过她喜欢的餐厅。她非常喜欢这次的毕加索作品展览会。

(2)对于符合事件核心部分的剧本,则应使用在当前事件中涉及到的具体对象和人物去填写剧本的槽。剧本的前提、道具、角色和事件等常能起到启用剧本的指示器的作用。

一旦剧本被启用(激活),则可以应用它来进行推理。其中最重要的是运用剧本可以预测没有明显提及的事件的发生。2024/9/2756---如对于以下情节:---“昨晚,约翰到了餐厅,他订了牛排,当他要付款时发现钱已用光。因为开始下雨了,所以他赶紧回家了”。有人问:“昨晚,约翰吃饭了吗?”。又如,“约翰走进餐厅,他被带到餐桌旁,订了一大块牛排之后,他坐在那儿等了许久。于是,他生气地走了。”根据剧本,可以得出结论。2024/9/2757面向对象表示2024/9/2758面向对象表示

1面向对象基础

人们认识世界是以世界划分为一些事和物为基础的,这里的物指物体,事指物体间的联系。面向对象表示法中的对象指物体,消息指物体间的联系,通过发送消息使对象间相互作用来求得所需的结果。

对象是由一组数据和与该组数据相关的操作构成的实体。如一个对象叫me。会有一组表征自身的数据:

name:Liming

age:20

相应的操作作为

birthday(岁数):每年实现age+1

消息是由(object,Selector,arguments)表示。其中object是消息要发送的对象,Selector是要求该对象完成的操作,arguments是Selector可选的参数。2024/9/2759简单地说,面向对象作为一种大有前途的方法和现今被广泛采用的技术,其基本原则有三条:一切事物都是对象;任何系统都是由对象构成的,系统本身也是对象;系统的发展和进化过程都是由系统的内部对象和外部对象之间(也包括内部对象与内部对象之间)的相互作用完成的2024/9/2760面向对象方法和技术之所以会如此流行,主要是因为它非常适合于人们认识和解决问题的习惯。首先它是一种从一般到特殊的演绎方法,这与人们认识客观世界时常用的分类的思想非常吻合;其次它也是一种从特殊到一般的归纳方法,由一大批相同或相似的对象抽象出新的类的过程,就是一个归纳过程。面向对象既提供了从一般到特殊的演绎手段,如继承等;也提供了从特殊到一般的归纳方法,如类等。因此它是一种很好的认知方法。2024/9/2761从狭义上看,面向对象的软件开发包括三个主要阶段:面向对象分析Object-OrientedAnalysis简称OOAOOA是指系统分析员对将要开发的系统进行定义和分析,进而得到各个对象类以及它们之间的关系的抽象描述。面向对象设计Object-OrientedDesign简称OODOOD是指系统设计人员将面向对象分析的结果转化为适合于程序设计语言中的具体描述,它是进行面向对象程序设计的蓝图。面向对象程序设计Object-OrientedProgramming简称OOP。OOP则是程序设计人员利用程序设计语言,根据OOD得到的对象类的描述,生成对象实例,建立对象间的各种联系,最终建立实际可运行的系统。2024/9/27622类与类继承

在面向对象表示中类和类继承是重要概念。类是面向对象的一个基本概念。类由一组变量和一组操作组成,它描述了一组具有相同属性和操作的对象。每个对象都属于某一类,每个对象都可由相关的类生成,类生成对象的过程就是例化。类封装了客观世界中的实体的主体和动作,即类的数据抽象和过程抽象两个方面。

类是对一组类似的对象的一般化的描述。同一个类中的对象继承类的属性和方法,对一组相似的类进行抽象可以得到这一组类的超类Superclass。相应地,超类中的每一个类称为子类Subclass类。超类和子类的定义隐含地表示了类层次Classhierarchy的概念。在类层次结构中,超类的属性和方法可以由子类继承,而子类中又可能加入新的属性和方法,而子类中从超类中继承而来的属性和方法,以及子类中新定义的属性和方法,都可以由这一子类的子类继承。2024/9/2763(1)客观世界是由各种对象Object组成的。任何事物都是对象。复杂的对象可以由比较简单的对象以某种方式组合起来。因此面向对象的软件系统是由对象组成的。软件中的任何元素都是对象。复杂的对象由比较简单的对象组合而成。(2)把所有的对象都划分为各种类(Class)。每个类都定义了一组数据和一组方法。数据用于表示对象的静态属性,描述对象的状态信息。方法是对象所能执行的操作,也就是类中所能提供的服务。(3)按照子类也称为派生类和父类也称为基类的关系,把若干个类组成一个层次结构的系统。在这种类层次结构中,通常下层的派生类具有和上层的基类相同的特性,包括数据和方法。我们把这一特性称为继承(Inheritance)。(4)对象与对象之间只能通过传递消息进行通信(CommunicationwithMessages)。

2024/9/2764以上四个要点概括了面向对象方法的精华。面向对象方法可用一个公式概括为:ObjectOriented=Objects+Classes+Inheritances+CommunicationwithMessages。2024/9/27653面向对象表示的实例1.举一个简单的例子说明面向对象程序设计中如何实现封装性

//日期类CDate的例子.定义日期字符串类型string80

typedefcharString80[80];

//定义日期类CDate

classCDate

{

//类的实现

private:

intyear,month,day;

//类的接口

public:

CDate(intmonth,intday,intyear);

CDateoperator+(intdays);

2024/9/2766voidGetDateString(String80&DateString);

//...

};

//部分成员函数的实现

voidCDate::GetDateString(String80&DateString)

{

sprintf(DateString,"%d-%d-%d",month,day,year%100);

}

CDate类中数据成员year,month和day是类的实现部分,构造函数和重载的加法运算符构成了类的对外接口。类的接口中构造函数可以用初始参数构造一日期型对象,重载的加法运算可以使得类的用户计算,并返回一增加或减少一个整数天之后或之前的一个新的日期型对象。2024/9/27672.举一个简单的例子说明面向对象程序设计中如何实现继承性以CDate类作为例子,假设CDate类中的GetDateString成员函数以美国日期格式MM-DD-YY返回日期字符串,现在如果要能够以欧洲日期格式DD-MM-YY返回日期字符串,该如何做呢?如果已经有CDate类的源代码,则可以复制整个类的源代码,然后修改GetDateString成员函数,使之能够返回欧洲日期格式的日期字符串,更好的办法是通过继承。//定义日期字符串类型string80

typedefcharString80[80];

//定义日期类CDate

classCDate

{

2024/9/2768//year,month,day改成了protected类型

protected:

intyear,month,day;

public:

CDate(intmonth,intday,intyear);

CDateoperator+(intdays);

voidGetDateString(String80&DateString);

//...

};

//部分成员函数的实现

voidCDate::GetDateString(String80&DateString)

{

sprintf(DateString,"%d-%d-%d",month,day,year%100);

}

//CEuropeDate类是从CDate类派生得到的

classCEuropeDate:publicCDate

2024/9/2769{

public:

//重载基类的成员函数

voidGetDateString(String80&DateString);

//...

};

//部分成员函数的实现

voidCEuropeDate::GetDateString(String80&DateString)

{

sprintf(DateString,"%d-%d-%d",day,month,year%100);

}类CEuropeDate与类CDate非常类似,只是继承下来的GetDateString()函数被重载并返回欧洲格式的日期字符串2024/9/27703.举一个简单的例子说明面向对象程序设计中如何实现多态性//以类CDate和类CEuropeDate类为例予以说明.定义日期字符串类型string80

typedefcharString80[80];

//定义日期类CDate

classCDate

{protected:

intyear,month,day;

public:

CDate(intmonth,intday,intyear);

CDateoperator+(intdays);

voidGetDateString(String80&DateString);

2024/9/2771voidDisplayDateString(void);//这里重点考察这一成员函数

//...

};

//部分成员函数的实现

voidCDate::GetDateString(String80&DateString)

{sprintf(DateString,"%d-%d-%d",month,day,year%100);}

voidCDate::DisplayDateString(void)

{String80DateString;

GetDateString(DateString);

cout<<"日期是"<<DateString<<endl;

}

//CEuropeDate类是从CDate类派生得到的

classCEuropeDate:publicCDate

2024/9/2772{public:

//重载基类的成员函数

voidGetDateString(String80&DateString);

CEuropeDate(intd

温馨提示

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

评论

0/150

提交评论