-
2009-05-04
CLIPS中文用户手册(22) - [日志纪事]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://penning.blogbus.com/logs/38904634.html
非法继承类
现在你已经对类有了初步的认识,让我们在图表1.1的UPPIE中增加一些其他的类,以使的例子更具有实际意义。通过增加低层类的开发类型正是OOP的方式,由最一般到最特殊的方式增加类。
图1.5所示的是非合法YUKKIE的继承图表。为了简便,这里没有标出OBJECT和USER类。图1.5是一个树(tree)形分级系统,每个节点有唯一的父节点。

一个常见的树形组织结构例子是经常用在公司中,由总裁,副总裁,部门领导,经理等组成的雇员等级分层(hierarchy)。在这种情况下的等级分层反映的是组织中每个人权利的大小。树通常被用来表示人的组织关系,因为每个人都有唯一的老板,当然CEO除外。组织图表中的节点代表着人在组织中的职位,如总裁,副总裁等。连接各职位的线指代各职能部门分支。在树中的链接通常被称之为分支。
图1.5中,除了YUKKIE意外的类都是合法或不合法的。举个例子,SUPPIE is-a UPPIE,MUPPIE is-a UPPIE,YUPPIE is-a UPPIE,PUPPIE is-a YUPPIE(没有中年YUPPIE妈妈允许的)。我们也同样可以说YUKKIE is-a YUPPIE和通过继承,YUKKIE is-a UPPIE。然而,我们不想因YUKKIE与PIPPIE之间的is-a链接,说YUKKIE is-a PUPPIE。
YUKKIE与PUPPIE之间的is-a链接是一个自然错误,让人误以为YUKKIE是PIPPIE的子辈(事实上,当她生孩子后是前PUPPIE)。尽管在YUKKIE与PUPPIE之间的is-a链接允许YUKKIE可以继承YUPPIE和UPPIE,但同时也产生了一个说YUKKIE is-a PUPPIE的不合法的关系。这意味着YUKKIE将继承PUPPIE所有的槽。假设PUPPIE的一个槽用来指定PUPPIE怀孕的月份数,这意味着每个Yuppie小孩将拥有相同的槽来表示他或她怀孕的月份数了。
更正图表是有可能的。然而,我们需要使用图表来代替树,与树对比,树中除根节点,每个节点都有唯一的父节点,图表中的每个节点可以有零个或多个节点与之连接。一个类似的例子是地图,每个城市都是一个节点,道路将他们互相链接。树与图表的另一个不同是,多数类型的树都有分层结构,而普通的图表没有。
图1.6显示的是非法Yuppie类YUKKIE。一个新类CHILD被创建,YUKKIE与他的两个超类YUPPIE和CHILD之间用is-a链接。注意,YUKKIE与PUPPIE之间的非法链接不再存在了。

这里采用图表,因为YUKKIE类有两个直接的超类,所以代替了只能有一个的树。图表中同样有分层结构,因为所有的类通过is-a链接自最一般的USER到最特殊的SUPPIE,MUPPIE,PUPPIE和YUKKIE安排。通过图1.6,我们可以说YUKKIE is-a YUPPIE,同时也可以说YUKKIE is-a CHILD。
下面显示的是增加如图1.6子类的命令。
CLIPS>(clear)
CLIPS>(defclass UPPIE (is-a USER))
CLIPS>(defclass CHILD (is-a USER))
CLIPS>(defclass SUPPIE (is-a UPPIE))
CLIPS>(defclass MUPPIE (is-a UPPIE))
CLIPS>(defclass YUPPIE (is-a UPPIE))
CLIPS>(defclass PUPPIE (is-a YUPPIE))
CLIPS>(defclass YUKKIE (is-a YUPPIE CHILD))
定义类的顺序必须如上,一个类必须在他的子类之前被定义,如:
(defclass CHILD (is-a USER))
必须在下面之间输入:
(defclass YUKKIE (is-a YUPPIE CHILD))
当你试图在CHILD之前输入YUKKIE类时,CLIPS会产生一个错误的消息。
注意图1.6中SUPPIE,MUPPIE和YUPPIE自左到右的出现顺序。这对应了我们在CLIPS中输入顺序的惯例。你同样可以看到为什么CLILD被画在UPPIE的右边,因为它是在UPPIE类的后面输入。
在图1.6中,注意到YUKKIE-YUPPIE的链接出现在YUKKIE-CHILD的左边。另一个惯例是,我们通常由图表中自左到右出现的顺序,来自左到右书写优先表中的直接超类。YUKKIE优先表中的YUPPIE,CHILD顺序符合这种惯例。
随机文章:
CLIPS中文用户手册(31) 2009-10-20CLIPS中文用户手册(30) 2009-09-02CLIPS中文用户手册(29) 2009-08-30CLIPS中文用户手册(28) 2009-08-23CLIPS中文用户手册(27) 2009-08-19
收藏到:Del.icio.us







