第5章 类关系理论
5.1 提出背景
前一章已经建立了“类—对象结构关系”。
其基本结构为:
世界
↓
基础类
↓
对象实例
↓
属性
↓
状态
↓
关系
↓
场景
但是,当机器建立了大量基础类以后,一个新的问题立即出现:
这些类之间是什么关系?
例如:
动物类
↓
鸟类
↓
鸡类
这里存在父类与子类关系。
又例如:
汽车类
├── 发动机类
├── 车轮类
├── 车身类
└── 制动系统类
这里存在包含和组合关系。
再例如:
人类
↓ 使用
手机类
这里存在使用关系。
如果机器只能知道“有苹果类、锅类、鸡蛋类、人类、机械臂类”,却不知道这些类之间如何连接,那么这些知识仍然只是孤立的类别集合。
真正的世界知识必须具有结构:
类
↓
类关系
↓
类结构
↓
对象结构
↓
场景结构
因此,**类关系(Class Relationship)**是描述不同类之间结构联系的理论。
类关系不是对象本身,也不是对象的属性,而是对世界中类别结构之间连接方式的抽象描述。
5.2 类关系的定义
**类关系(Class Relationship)**是两个或多个类之间按照继承、包含、组成、关联、依赖、控制、使用等方式建立的结构联系。
可以抽象表示为:
ClassA → Relation → ClassB
其中:
- ClassA 表示关系的起始类;
- ClassB 表示关系的目标类;
- Relation 表示两类之间的关系类型。
例如:
人类 → 使用 → 手机类
表示:
人类与手机类之间存在使用关系。
又如:
汽车类 → 包含 → 发动机类
表示:
汽车结构中包含发动机结构。
再如:
动物类 → 继承 → 鸟类
表示:
鸟类属于动物类的下位类别。
因此,类关系的核心作用是:
把孤立的类组织成具有方向、层次、结构和功能意义的机器世界知识网络。
5.3 类关系的基本分类
类关系可以划分为不同结构类型:
类关系
├── 继承关系
├── 兄弟关系
├── 包含关系
├── 组合关系
├── 关联关系
├── 依赖关系
├── 控制关系
└── 使用关系
这些关系虽然都表现为“类与类之间的连接”,但是它们表达的语义完全不同。
因此不能把所有关系简单定义为:
ClassA → ClassB
而应该进一步确定:
ClassA
↓
RelationType
↓
ClassB
其中 RelationType 决定机器应该如何理解这两个类之间的结构。
5.4 父类与子类
**父类(Parent Class)**是具有较一般结构的类。
**子类(Child Class)**是在父类结构基础上进一步限定或扩展的类。
二者形成继承关系:
父类
↓
子类
例如:
动物类
↓
鸟类
↓
鸡类
这里:
动物类 = 父类
鸟类 = 动物类的子类
鸡类 = 鸟类的子类
继承关系形成类别层级。
可以表示为:
ChildClass ⊂ ParentClass
其中:
- ChildClass 表示子类;
- ParentClass 表示父类;
- ⊂ 表示子类属于父类结构范围中的更具体类别。
例如:
鸡类 ⊂ 鸟类
鸟类 ⊂ 动物类
因此:
鸡类
↓
鸟类
↓
动物类
形成由特殊到一般的层次结构。
5.5 父类与子类的结构继承
子类不仅仅是父类的名称变化,而是可以继承父类已有的结构,并增加自身特有结构。
例如:
动物类
├── 生命状态
├── 位置
└── 移动能力
鸟类进一步增加:
鸟类
├── 羽毛
├── 翅膀
└── 飞行能力
鸡类进一步增加:
鸡类
├── 鸡冠
├── 鸣叫
└── 产蛋
于是:
动物类
↓
鸟类
↓
鸡类
形成结构逐级具体化。
因此,继承关系的主要作用是:
建立类别层级和结构传递。
5.6 兄弟类
**兄弟类(Sibling Classes)**是具有共同父类,但彼此之间不存在直接继承关系的多个类。
例如:
动物类
├── 鸟类
├── 鱼类
├── 哺乳动物类
└── 爬行动物类
其中:
鸟类
鱼类
哺乳动物类
爬行动物类
属于兄弟类。
兄弟类之间的核心关系不是:
鸟类 → 继承 → 鱼类
而是:
鸟类
↘
动物类
↗
鱼类
二者共享更高层的结构。
兄弟类理论的重要作用,是帮助机器理解:
两个类别既具有共同上位结构,又保持各自独立的特征结构。
例如:
鸟类
├── 翅膀
├── 羽毛
└── 飞行能力
鱼类
├── 鳞片
├── 鳃
└── 游动能力
它们具有共同的“动物”上位结构,但不能因此互相继承。
5.7 包含关系
**包含关系(Containment Relationship)**表示一个类的结构范围中包含另一个类。
基本形式:
整体类
↓ 包含
组成类
例如:
汽车类
↓ 包含
发动机类
表示发动机属于汽车整体结构的一部分。
进一步:
汽车类
├── 发动机类
├── 车轮类
├── 车身类
└── 制动系统类
包含关系强调的是:
A的结构中具有B。
因此:
汽车类 → 包含 → 发动机类
不是说汽车类继承发动机类,而是说明两者存在整体—部分结构。
5.8 包含关系与继承关系的区别
继承关系:
鸟类 → 动物类
表达:
鸟类属于动物类别体系。
包含关系:
汽车类 → 发动机类
表达:
发动机是汽车结构的一部分。
因此:
继承:
类 → 类
类别层次
包含:
整体类 → 部分类
结构组成
二者虽然都是类之间的关系,但机器的处理逻辑不同。
5.9 组合关系
**组合关系(Composition Relationship)**是比一般包含关系更强的整体—部分结构关系。
它表示:
一个整体类由若干具有明确结构意义的部分类共同组成。
例如:
机械臂系统类
↓
├── 底座类
├── 关节类
├── 连杆类
└── 末端执行器类
这些组成部分共同形成机械臂系统。
因此:
机械臂系统类
↓ 组合
底座类
关节类
连杆类
末端执行器类
组合关系强调:
多个部分
↓
结构组合
↓
整体
因此:
组合关系 = 整体结构由多个类共同形成。
5.10 包含与组合的区别
包含关系强调:
整体中存在某个部分。
组合关系进一步强调:
多个部分按照结构共同形成一个整体。
例如:
房屋类
↓ 包含
门类
可以表示房屋中存在门。
而:
汽车类
↓ 组合
发动机类
车轮类
车身类
制动系统类
表示这些部分共同构成汽车结构。
因此:
包含 → 部分存在
组合 → 整体形成
在机器结构建模中,这一区分能够避免把所有整体—部分关系简单地使用同一种关系表示。
5.11 关联关系
**关联关系(Association Relationship)**表示两个类之间存在稳定或可识别的结构联系,但一个类并不构成另一个类的组成部分。
例如:
人类
↓ 关联
公司类
人类与公司之间存在工作、管理、雇佣等结构关系,但公司不是人的组成部分,人也不是公司的组成部分。
又例如:
学生类
↓ 关联
学校类
学生与学校之间存在组织关系。
关联关系的基本形式是:
ClassA
↓ 关联
ClassB
它主要表达:
A与B之间存在结构上的联系。
关联关系通常比包含和组合更加宽泛。
5.12 依赖关系
**依赖关系(Dependency Relationship)**表示一个类在完成某种行为、方法或处理过程中,需要另一个类提供条件、资源或能力。
基本形式:
ClassA
↓ 依赖
ClassB
例如:
烹饪类
↓ 依赖
炉具类
表示烹饪过程中的某些方法需要炉具提供加热能力。
又例如:
加工类
↓ 依赖
工具类
加工过程需要工具才能完成。
依赖关系的特点是:
A不一定包含B,也不一定永久使用B,但A的某项能力实现需要B。
因此:
依赖 ≠ 包含
依赖 ≠ 继承
依赖描述的是能力实现上的条件关系。
5.13 控制关系
**控制关系(Control Relationship)**表示一个类能够对另一个类的行为、状态或运行过程产生控制作用。
例如:
控制器类
↓ 控制
机械臂类
控制器类负责向机械臂发送动作指令。
再例如:
炉具控制类
↓ 控制
加热设备类
可以控制:
启动
停止
温度调整
加热时间
控制关系的核心不是“拥有”,而是:
A能够改变B的运行行为。
因此:
ClassA
↓ 控制
ClassB
表示:
A
↓
控制指令
↓
B
↓
状态 / 行为变化
控制关系因此与动态行为密切相关。
5.14 使用关系
**使用关系(Usage Relationship)**表示一个类在执行某项任务时使用另一个类所提供的对象、能力、工具或资源。
例如:
人类
↓ 使用
手机类
表示人类可以使用手机。
又例如:
机械加工类
↓ 使用
机械工具类
表示加工过程使用工具完成任务。
使用关系可以表示:
使用者类
↓ 使用
资源类
与依赖关系相比,使用关系更加直接。
例如:
厨师类
↓ 使用
锅类
表达的是使用行为。
而:
烹饪类
↓ 依赖
加热能力
表达的是完成烹饪能力所需要的条件。
因此可以区分:
使用 → 谁使用什么
依赖 → 谁需要什么才能完成
5.15 控制关系与使用关系
控制与使用也不能混为一体。
例如:
人类
↓ 使用
汽车类
人可以使用汽车,但并不意味着“人类类控制汽车类”。
而:
控制系统类
↓ 控制
汽车动力系统类
表示一个系统对另一个系统的运行状态产生直接控制。
因此:
使用:
A → 使用 → B
控制:
A → 控制 → B
二者表达完全不同的结构意义。
5.16 七类主要结构关系的统一比较
类关系可以形成如下结构:
| 关系 | 核心含义 | 基本形式 |
|---|---|---|
| 继承 | 类别层级 | 子类 → 父类 |
| 兄弟 | 共享父类的平行类别 | 子类A ↔ 子类B |
| 包含 | 整体包含部分 | 整体类 → 部分类 |
| 组合 | 多个部分形成整体 | 部分类 → 整体类 |
| 关联 | 两类存在结构联系 | A → B |
| 依赖 | A完成能力需要B | A → 依赖 → B |
| 控制 | A改变B的行为或状态 | A → 控制 → B |
| 使用 | A使用B提供的资源或能力 | A → 使用 → B |
这里的“兄弟类”严格来说不是一种与其他关系完全相同的有向关系,而是一种类层级结构状态。
例如:
父类
├── 子类A
└── 子类B
子类A和子类B因此形成兄弟结构。
5.17 类关系的方向性
类关系通常具有方向。
例如:
汽车类 → 包含 → 发动机类
与:
发动机类 → 包含 → 汽车类
并不是同一个意思。
同样:
控制器类 → 控制 → 机械臂类
不能随意写成:
机械臂类 → 控制 → 控制器类
因此机器必须保存:
source_class
relation_type
target_class
也就是:
起始类
↓
关系类型
↓
目标类
这样才能准确表达世界结构。
5.18 类关系的传递性
不同关系具有不同的传递性质。
例如继承关系通常可以形成层级传递:
鸡类
↓
鸟类
↓
动物类
因此机器可以推导:
鸡类属于鸟类结构
鸡类属于动物类结构
但是使用关系不能简单地这样传递:
人类 → 使用 → 手机类
手机类 → 使用 → 网络类
不能因此直接推出:
人类 → 使用 → 网络类
是否成立必须由具体知识确定。
控制关系同样如此。
因此:
类关系不仅需要记录“连接”,还必须记录关系本身的逻辑性质。
机器不能把所有关系都当成同一种可传递关系。
5.19 类关系与对象关系
类关系解决:
类别之间是什么关系?
对象关系解决:
具体对象之间是什么关系?
例如类层:
人类
↓ 使用
手机类
对象层:
张三
↓ 使用
手机01
类层表达的是一般结构。
对象层表达的是现实实例。
因此:
类关系
↓
可能的结构范围
↓
对象关系
↓
现实中的具体结构
例如:
锅类
↓ 包含
食材类
现实中:
锅01
↓ 包含
鸡蛋01
但是,类关系不能机械决定所有对象关系。
对象关系还必须受到:
对象属性
+
对象状态
+
时间
+
空间
+
场景
的影响。
这为下一阶段的“对象关系理论”提供了理论基础。
5.20 类关系与场景形成
类关系的最终意义不是建立一张静态关系表,而是为机器理解现实场景提供结构基础。
例如:
机械臂类
↓ 控制
夹持器类
夹持器类
↓ 使用
抓取方法类
鸡蛋类
↓ 可被处理
烹饪类
现实对象形成:
机械臂01
↓ 控制
夹持器01
夹持器01
↓ 抓取
鸡蛋01
最终形成:
机械臂01
+
夹持器01
+
鸡蛋01
+
桌面01
构成一个动态场景。
因此:
类关系
↓
结构知识
↓
对象关系
↓
场景结构
↓
认知
类关系是场景认知的上层结构基础。
5.21 类关系的动态性
基础类具有相对稳定性,但类之间的组织关系并不是绝对静态的。
例如,在不同任务中:
机械臂类
↓ 使用
抓取工具类
在另一个任务中:
机械臂类
↓ 使用
焊接工具类
类本身没有改变:
机械臂类
抓取工具类
焊接工具类
变化的是任务场景中的结构组织。
进一步:
任务
↓
认知匹配
↓
相关类被选择
↓
类关系被激活
↓
形成任务结构
因此可以提出:
基础类相对稳定,类关系具有情境激活性,动态场景则是类关系在具体对象上的现实展开。
这为后面的动态类组织理论提供基础。
5.22 类关系与认知匹配
机器面对一个新场景时,并不是简单寻找一个类,而是寻找:
对象
+
属性
+
状态
+
关系
+
行为
+
场景
然后匹配已有类结构。
例如机器面对:
机械臂01
鸡蛋01
锅01
炉具01
机器需要判断:
机械臂类
鸡蛋类
锅类
炉具类
以及它们之间可能存在:
控制关系
使用关系
包含关系
依赖关系
处理关系
于是:
类匹配
+
关系匹配
+
对象匹配
+
状态匹配
↓
场景认知
这说明:
类关系是认知匹配的重要结构依据。
机器不是只匹配“这个东西是什么”,还必须匹配:
“这个东西与其他东西是什么关系。”
5.23 类关系的工程表示
在工程系统中,可以建立统一的类关系对象:
ClassRelation
{
id
source_class_id
target_class_id
relation_type
direction
weight
conditions
status
}
其中:
- source_class_id:起始类;
- target_class_id:目标类;
- relation_type:关系类型;
- direction:关系方向;
- weight:关系强度或优先级;
- conditions:关系成立条件;
- status:关系当前状态。
关系类型可以定义为:
INHERIT
CONTAIN
COMPOSE
ASSOCIATE
DEPEND
CONTROL
USE
兄弟类则可以通过共同父类推导:
ParentClass
├── ClassA
└── ClassB
这样无需人为保存大量重复的“兄弟关系”。
5.24 类关系数据库结构
如果映射到结构化数据库,可以建立:
classes
├── id
├── name
└── parent_id
以及:
class_relations
├── id
├── source_class_id
├── target_class_id
├── relation_type
├── direction
└── status
例如:
source_class_id = 汽车类
target_class_id = 发动机类
relation_type = COMPOSE
表示:
汽车类
↓ 组合
发动机类
而:
source_class_id = 鸟类
target_class_id = 动物类
relation_type = INHERIT
表示:
鸟类
↓ 继承
动物类
通过统一的关系结构,机器就能够计算、查询和维护类之间的结构网络。
5.25 类关系网络
当类数量增加以后,类关系会形成网络:
动物类
↙ ↘
鸟类 哺乳动物类
↙ ↘
鸡类 鹰类
↓
鸡蛋类
人类
↓ 使用
锅类
↓ 包含
炉具类
此时机器获得的已经不再是:
类A
类B
类C
类D
而是:
类
↓
关系
↓
结构网络
这意味着机器知识从“类别集合”发展为“结构化类别体系”。
5.26 类关系理论的核心原则
本章可以归纳出八项基本原则。
第一,层级原则。
父类与子类建立类别层级。
父类
↓
子类
第二,兄弟类原则。
共享父类的平行子类形成兄弟结构。
父类
├── A类
└── B类
第三,包含原则。
整体类可以包含部分类。
整体类 → 包含 → 部分类
第四,组合原则。
多个部分类可以共同形成整体类。
部分A
+
部分B
+
部分C
↓
整体
第五,关联原则。
两个类可以通过一般结构联系建立关联。
第六,依赖原则。
一个类的能力实现可能依赖另一个类提供的条件或能力。
第七,控制原则。
一个类可以对另一个类的行为或状态产生控制作用。
第八,使用原则。
一个类可以在任务执行过程中使用另一个类提供的资源或能力。
5.27 类关系统一模型
综合本章,可以建立:
类A
│
├── 继承 → 类B
├── 包含 → 类C
├── 组合 → 类D
├── 关联 → 类E
├── 依赖 → 类F
├── 控制 → 类G
└── 使用 → 类H
因此,一个类并不是孤立节点,而是具有多个方向和多个语义层次的结构节点。
最终形成:
类
↓
类关系
├── 层级关系
├── 结构关系
├── 功能关系
├── 依赖关系
└── 控制关系
↓
类结构网络
5.28 本章总结
本章建立了机器世界中的类关系理论。
类关系解决的问题不是“一个类是什么”,而是:
一个类与其他类之间是什么关系。
由此形成:
父类 → 子类
建立类别层级;
共同父类
├── 兄弟类A
└── 兄弟类B
建立平行类别结构;
整体类 → 包含 → 部分类
建立整体—部分关系;
多个部分类
↓
组合
↓
整体类
建立组合结构;
类A → 关联 → 类B
建立一般结构联系;
类A → 依赖 → 类B
表示能力实现上的依赖;
类A → 控制 → 类B
表示行为或状态控制;
类A → 使用 → 类B
表示资源和能力的使用。
最终形成:
世界
↓
基础类
↓
类关系
↓
类结构网络
↓
对象实例
↓
对象关系
↓
场景
↓
认知
因此,本章最核心的理论结论是:
类不是孤立存在的类别节点,而是通过继承、包含、组合、关联、依赖、控制和使用等不同关系形成具有层次、结构和功能意义的类关系网络。类关系规定了类别之间可能存在的结构联系,对象实例则把这些抽象关系进一步展开为现实世界中的具体关系。
由此,第1章至第5章已经形成了一条完整的世界结构基础链:
世界
↓
基础类
↓
对象实例
↓
类—对象结构关系
↓
类关系
↓
对象关系
↓
场景
下一阶段的关键问题将从“类与类是什么关系”进一步进入“对象与对象在现实世界中是什么关系”。也就是说,需要研究类关系如何在具体对象之间实例化,以及位置、接触、包含、拥有、操作、作用、依赖等对象关系如何共同形成动态场景。