第165章 Relation类
165.1 提出背景
在第162章中,Object类已经能够描述一个独立对象;在第163章中,Attribute类解决了对象属性的独立表达;在第164章中,State类进一步描述对象当前所处的状态以及状态变化历史。
但是,仅仅能够描述多个独立对象,还不能形成完整的认知结构。
例如,系统中存在两个对象:
- Object A:人
- Object B:杯子
系统不仅需要知道“人”和“杯子”分别是什么,还需要知道:
人 → 拿着 → 杯子
这里的“拿着”不是人的属性,也不是杯子的属性,而是两个对象之间发生的结构性连接。
因此,在对象模型中必须建立Relation类。
Relation,中文称为“关系”,是用于描述两个或多个对象之间连接方式、关系类型、关系状态以及关系变化的对象。
Relation的基本结构为:
Subject → Relation → Object
例如:
人 → 拿着 → 杯子
其中:
- Subject:关系主体,即关系从谁开始;
- Relation:关系本身,即两个对象之间是什么关系;
- Object:关系客体,即关系指向谁。
因此,一个完整的关系不能简单表示为:
relation = "holding"
而应该表示为:
Subject + Relation + Object + State
进一步形成:
Subject → Relation → Object
↓
Relation State
↓
Relation Update
这使Relation成为ICAI对象认知工程中的核心结构之一。
165.2 Relation的概念定义
Relation是连接两个对象并描述对象之间结构关系的独立认知对象。
Relation最基本的定义为:
R=(S,T,O)R=(S,T,O)
其中:
- RR:Relation,关系;
- SS:Subject,关系主体;
- TT:Relation Type,关系类型;
- OO:Object,关系客体。
例如:
人A → 持有 → 杯子B
可以表示为:
S = 人A
T = 持有
O = 杯子B
因此:
Relation = Subject + Relation Type + Object
但是实际运行过程中,关系本身也会发生变化,因此还需要增加Relation State:
R=(S,T,O,State)R=(S,T,O,State)
进一步,如果关系可以发生更新,则形成:
R=(S,T,O,State,Update)R=(S,T,O,State,Update)
因此,工程上的Relation对象至少包含:
Subject
Relation
Object
Relation State
Relation Update
165.3 Subject
Subject是Relation的主体,也就是关系的起点对象。
例如:
张三 → 持有 → 手机
这里:
Subject = 张三
Subject必须能够唯一指向一个已经存在的Object。
因此,Relation不应该直接保存一个没有结构意义的字符串,而应该保存对象标识。
例如:
$subjectId = 1001;
其中:
1001 → 对应一个具体Object
这样关系就可以与Object系统建立稳定连接。
165.3.1 Subject的工程意义
Subject解决的是:
谁与其他对象建立关系?
例如:
人 → 拥有 → 房屋
公司 → 雇佣 → 员工
学生 → 学习 → 课程
机器 → 操作 → 工具
其中第一个对象都是Subject。
因此:
Subject → Relation → Object
构成关系方向。
165.3.2 Subject与Object的关系
Subject本身也是Object。
也就是说:
Object
↓
可以作为
↓
Subject
例如:
Object A = 人
Object B = 杯子
当建立关系:
Object A → 持有 → Object B
那么:
Object A = Subject
Object B = Object
因此Subject不是一种完全独立于Object之外的新实体,而是:
Object在关系结构中的主体角色。
165.4 Relation
Relation本身表示两个对象之间的关系类型。
例如:
持有
属于
连接
包含
依赖
使用
位于
认识
管理
这些都是不同的Relation Type。
例如:
人A → 持有 → 手机B
关系类型为:
持有
再例如:
房屋A → 位于 → 深圳B
关系类型为:
位于
因此:
Subject → Relation → Object
中的Relation是整个三元结构的核心连接部分。
165.5 Object
Object是Relation所指向的客体对象。
例如:
人A → 持有 → 手机B
其中:
Object = 手机B
需要注意,Relation中的Object与Object类中的Object不是两个不同概念。
这里的Object表示:
当前关系所指向的对象。
因此,一个Object既可以作为Subject,也可以作为Object。
例如:
人A → 使用 → 手机B
手机B → 连接 → 网络C
网络C → 位于 → 数据中心D
于是形成:
人A
↓
使用
↓
手机B
↓
连接
↓
网络C
↓
位于
↓
数据中心D
多个Relation连接多个Object以后,就可以形成对象关系网络。
165.6 Subject—Relation—Object模型
Subject、Relation、Object共同构成基本关系模型。
其结构为:
Subject
↓
Relation
↓
Object
例如:
张三
↓
持有
↓
手机
完整表示为:
Subject = 张三
Relation = 持有
Object = 手机
可以形式化为:
R=(S,T,O)R=(S,T,O)
其中:
S→T→OS \rightarrow T \rightarrow O
代表:
主体通过某种关系连接到客体。
165.7 Relation State
Relation State是关系当前所处的状态。
这是Relation工程化的重要扩展。
因为关系不是永远固定的。
例如:
张三 → 持有 → 手机
这个关系可能发生:
建立
保持
改变
解除
因此关系本身也需要状态。
例如:
Relation State = active
表示关系当前有效。
也可以:
Relation State = inactive
表示关系当前无效。
例如:
人A → 持有 → 手机B
当前:
active
后来手机交给了另一个人:
人A → 持有 → 手机B
关系变成:
inactive
同时建立:
人C → 持有 → 手机B
于是系统可以记录完整的关系变化。
165.8 Relation State的基本状态
Relation State可以根据具体工程定义状态集合。
例如:
unknown
active
inactive
changed
blocked
expired
其中:
unknown:关系未知;active:关系当前有效;inactive:关系当前无效;changed:关系发生变化;blocked:关系暂时受到限制;expired:关系已经失效。
关系状态不是固定字符串,而是Relation运行过程中的状态信息。
因此:
Relation
↓
Relation State
↓
Relation是否有效
成为系统判断关系是否可以继续参与认知计算的重要依据。
165.9 Relation Update
Relation Update表示关系发生变化时,对Relation对象进行更新。
例如:
人A → 持有 → 手机B
发生变化:
人A不再持有手机B
那么关系需要更新。
原关系:
Subject = 人A
Relation = 持有
Object = 手机B
State = active
更新后:
Subject = 人A
Relation = 持有
Object = 手机B
State = inactive
关系本身并没有被简单删除,而是发生了状态变化。
这一区别非常重要。
165.10 Relation Update模型
关系更新可以表示为:
Old Relation
↓
Change Detection
↓
Relation Update
↓
New Relation State
例如:
active
↓
检测到关系变化
↓
update
↓
inactive
因此:
Rold→Update→RnewR_{old} \rightarrow Update \rightarrow R_{new}
如果关系的主体、类型或者客体发生变化,则可以进一步形成新的关系对象。
例如:
人A → 持有 → 手机B
变化为:
人C → 持有 → 手机B
可以处理为:
Relation A → inactive
Relation B → active
这样可以保留关系历史。
165.11 Relation类的PHP工程实现
根据前面Object类、Attribute类和State类的工程设计,Relation也应该成为独立PHP类。
基础实现:
class Relation
{
protected $subject;
protected $relation;
protected $object;
protected $state;
protected $history = array();
public function __construct($subject, $relation, $object)
{
$this->subject = $subject;
$this->relation = $relation;
$this->object = $object;
$this->state = 'active';
$this->recordHistory();
}
public function getSubject()
{
return $this->subject;
}
public function getRelation()
{
return $this->relation;
}
public function getObject()
{
return $this->object;
}
public function getState()
{
return $this->state;
}
public function setState($state)
{
$this->state = $state;
$this->recordHistory();
}
protected function recordHistory()
{
$this->history[] = array(
'subject' => $this->subject,
'relation' => $this->relation,
'object' => $this->object,
'state' => $this->state,
'time' => time()
);
}
public function getHistory()
{
return $this->history;
}
}
这个类已经能够表达:
Subject
Relation
Object
State
History
165.12 Relation的更新方法
为了使Relation具备真正的运行能力,可以增加update方法。
public function update($subject, $relation, $object)
{
$this->subject = $subject;
$this->relation = $relation;
$this->object = $object;
$this->state = 'changed';
$this->recordHistory();
}
于是:
旧关系
↓
update()
↓
新关系
例如:
$relation = new Relation(
1001,
'holding',
2001
);
$relation->update(
1001,
'holding',
2002
);
关系就从:
1001 → holding → 2001
更新为:
1001 → holding → 2002
165.13 Relation与Object类的组合
Object类中不能只保存简单字符串关系。
前面的Object类可以进一步扩展:
class CognitiveObject
{
protected $objectId;
protected $objectType;
protected $attributes = array();
protected $state;
protected $relations = array();
public function addRelation(Relation $relation)
{
$this->relations[] = $relation;
}
public function getRelations()
{
return $this->relations;
}
}
于是Object与Relation形成组合关系:
Object
↓
Relations
↓
Relation
↓
Subject → Relation → Object
这使Object不再是孤立的数据实体,而成为关系网络中的节点。
165.14 Relation与State的关系
Relation本身具有State。
因此:
Object State
和:
Relation State
必须区别开。
例如:
手机状态 = 正常
表示手机对象本身的状态。
而:
张三 → 持有 → 手机
Relation State = active
表示张三与手机之间的关系当前有效。
所以:
Object State ≠ Relation State
一个对象状态发生变化,不一定意味着关系状态变化。
反过来,关系状态变化,也不一定意味着对象本身发生变化。
165.15 Relation与Attribute的区别
Attribute描述:
一个对象具有什么特征。
Relation描述:
一个对象与另一个对象之间有什么连接。
例如:
手机
颜色 = 黑色
重量 = 200g
品牌 = X
这些是Attribute。
而:
张三 → 持有 → 手机
手机 → 属于 → 张三
这些是Relation。
因此:
Attribute → Object内部特征
Relation → Object之间连接
二者共同构成对象认知结构。
165.16 Relation网络
当多个Object通过Relation连接以后,可以形成关系网络。
例如:
张三 → 持有 → 手机
手机 → 连接 → 网络
网络 → 位于 → 数据中心
可以表示为:
Object A
↓
Relation 1
↓
Object B
↓
Relation 2
↓
Object C
↓
Relation 3
↓
Object D
由此形成:
O1→R1→O2O_1 \rightarrow R_1 \rightarrow O_2 O2→R2→O3O_2 \rightarrow R_2 \rightarrow O_3 O3→R3→O4O_3 \rightarrow R_3 \rightarrow O_4
多个关系组合以后,就形成可计算的对象关系结构。
165.17 Relation的认知意义
Relation不是单纯的数据连接。
在ICAI中,关系承担的是对象之间结构信息的表达。
单独知道:
人
手机
系统只能获得两个对象。
知道:
人 → 持有 → 手机
系统才获得对象之间的结构。
因此:
Object
+
Relation
=
Object Relationship Structure
进一步:
Objects
↓
Relations
↓
Relationship Network
↓
Structure
↓
Cognition
这意味着Relation是从“对象识别”进入“结构认知”的重要工程节点。
165.18 Relation与行为
很多行为实际上会改变Relation。
例如:
人A → 手持 → 杯子B
执行行为:
放下杯子
结果:
人A → 手持 → 杯子B
关系状态:
active → inactive
所以:
Behavior
↓
Relation Update
↓
Relation State Change
反过来,关系状态也可以影响行为。
例如:
门 → 关闭 → 房间
如果关系状态表示门当前关闭,那么系统可能产生:
开门
这样的行为。
于是形成:
Relation State
↓
Condition
↓
Behavior
↓
Relation Update
↓
New Relation State
关系因此进入认知—行为闭环。
165.19 Relation与Individual
Individual并不是孤立存在的。
Individual内部可以拥有多个Object,而这些Object之间又通过Relation形成结构。
因此:
Individual
↓
Objects
↓
Relations
↓
Object Relationship Network
例如一个Individual处理:
人
手机
电脑
网络
文件
这些对象之间可以形成:
人 → 使用 → 手机
人 → 使用 → 电脑
手机 → 连接 → 网络
电脑 → 连接 → 网络
人 → 创建 → 文件
电脑 → 存储 → 文件
由此形成Individual内部的对象关系结构。
165.20 Relation的完整生命周期
Relation具有独立生命周期。
其基本过程为:
Relation识别
↓
Subject确定
↓
Relation Type确定
↓
Object确定
↓
Relation创建
↓
Relation State建立
↓
Relation运行
↓
Relation变化
↓
Relation Update
↓
Relation State更新
↓
Relation History记录
↓
Relation失效
因此:
Subject→Relation→Object→State→Update→HistorySubject \rightarrow Relation \rightarrow Object \rightarrow State \rightarrow Update \rightarrow History
构成Relation的完整运行过程。
165.21 Relation工程模型
综合本章内容,Relation可以建立如下工程模型:
R=(S,T,O,St,U,H)R=(S,T,O,St,U,H)
其中:
- RR:Relation对象;
- SS:Subject;
- TT:Relation Type;
- OO:Object;
- StSt:Relation State;
- UU:Relation Update;
- HH:Relation History。
因此完整关系模型为:
Relation
├── Subject
├── Relation Type
├── Object
├── Relation State
├── Relation Update
└── Relation History
165.22 ICAI对象关系运行链
经过第162~165章,ICAI的对象结构已经形成连续的工程链。
首先建立Object:
Object
Object具有Attribute:
Object
↓
Attribute
Object具有State:
Object
↓
State
多个Object之间建立Relation:
Object
↓
Relation
↓
Object
于是形成:
Object
↓
Attributes
↓
State
↓
Relation
↓
Object
进一步形成:
Individual
↓
Objects
↓
Attributes
↓
States
↓
Relations
↓
Relationship Network
这已经从单对象模型进入多对象结构模型。
165.23 Relation类在系统架构中的位置
在PHP OOP工程中,Relation类可以处于对象模型层。
例如:
Individual
↓
ObjectManager
↓
CognitiveObject
↓
Relation
↓
State
或者:
Individual
↓
Object Collection
↓
Relation Collection
↓
Relation Object
↓
Relation State
Relation可以进一步由专门的RelationManager进行管理:
class RelationManager
{
protected $relations = array();
public function addRelation(Relation $relation)
{
$this->relations[] = $relation;
}
public function getRelations()
{
return $this->relations;
}
}
这样系统就可以集中管理大量关系对象。
165.24 Relation的工程价值
Relation类解决了对象模型中的一个核心问题:
对象之间如何建立可以被系统计算、更新和追踪的关系?
如果没有Relation类:
Object A
Object B
Object C
只能形成对象集合。
有了Relation:
Object A → Relation → Object B
Object B → Relation → Object C
才形成结构。
因此:
Object = 节点
Relation = 连接
State = 当前关系状态
Update = 关系变化
History = 关系变化记录
最终形成:
Object
↓
Relation
↓
Structure
↓
State
↓
Update
↓
History
这为后续Scene、Method、Behavior以及更高层的认知计算提供对象结构基础。
165.25 本章总结
Relation类是ICAI对象关系工程中的核心基础类。
它将两个独立对象连接成为具有方向、类型、状态和变化过程的结构。
其核心模型为:
Subject→Relation→ObjectSubject \rightarrow Relation \rightarrow Object
进一步扩展为:
Subject→Relation→Object→Relation State→Relation UpdateSubject \rightarrow Relation \rightarrow Object \rightarrow Relation\ State \rightarrow Relation\ Update
最终形成:
Relation
=
Subject
+
Relation
+
Object
+
Relation State
+
Relation Update
+
Relation History
其中:
Subject
确定关系主体;
Relation
确定对象之间的连接类型;
Object
确定关系客体;
Relation State
描述关系当前是否有效以及处于什么状态;
Relation Update
负责关系变化;
Relation History
负责保存关系变化过程。
因此,第162章到第165章形成了完整的对象基础结构:
Object
↓
Attribute
↓
State
↓
Relation
↓
Object Relationship Network
而Relation的建立,使ICAI从“单个对象的认知”进一步进入“多个对象之间结构关系的认知”。
其核心运行链为:
Object
→ Subject
→ Relation
→ Object
→ Relation State
→ Relation Update
→ Relation History
→ Relationship Structure
这为下一阶段的Scene类、Method类和Behavior类提供了直接的对象关系基础。