首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第165章 Relation类

第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类提供了直接的对象关系基础。

Leave a Reply

Your email address will not be published. Required fields are marked *