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

第164章 State类

第164章 State类

164.1 本章提出背景

第162章建立了 Object Class,第163章进一步将 Attribute 独立为 Attribute Object。

在前面的模型中,Object 具有 State,Attribute 也可以具有 State。但是,如果 State 只是一个字符串:

$object->setState('intact');

那么系统只能知道“当前是什么状态”,却无法进一步描述:

  • 这个状态具有什么值;
  • 什么条件下成立;
  • 什么条件会导致状态变化;
  • 状态从哪里变化到哪里;
  • 过去经历过哪些状态。

因此,在 ICAI 工程中,State(状态)也必须成为独立的程序对象

本章建立 State Class 的基本结构:

State Object → State Value → State Condition → State Transition → State History

其核心目标是让系统从“保存当前状态”进一步进入“管理状态变化”。


164.2 State Object:状态对象

**State Object(状态对象)**是用于描述某个 Object、Attribute 或其他运行实体当前状态的程序对象。

例如:

Egg Object
    ↓
State Object
    ↓
intact

这里的 intact 不再只是一个字符串,而可以成为一个正式的 State Object。

基本结构:

State
├── Value
├── Condition
├── Transition
└── History

因此:

Object
   ↓
State Object

形成:

Egg
├── Object ID
├── Object Type
├── Attributes
├── State
└── Relations
          ↓
       State Object

State Class 的作用就是把对象的“当前状态”从普通数据提升为可管理的 OOP 对象。


164.3 State Class

可以建立基础 State Class:

class State
{
    protected $value;
    protected $condition;
    protected $history = array();

    public function __construct($value)
    {
        $this->value = $value;
    }

    public function getValue()
    {
        return $this->value;
    }

    public function setValue($value)
    {
        $this->value = $value;
    }
}

创建状态:

$state = new State('intact');

形成:

State Object
└── Value = intact

后续再加入 Condition、Transition 和 History,就可以形成完整的 State Runtime Object。


164.4 State Value:状态值

**State Value(状态值)**表示对象当前处于哪一种具体状态。

例如:

intact
held
broken
running
stopped
waiting
completed

对于 Egg:

State Value = intact

对于 Machine:

State Value = running

对于 Task:

State Value = completed

因此:

Object
   ↓
State
   ↓
Value

例如:

$state = new State('intact');

echo $state->getValue();

得到:

intact

State Value 是状态对象当前最基本的信息。


164.5 State Value与Attribute Value的区别

State Value 与 Attribute Value 都保存数据,但二者承担的语义不同。

例如:

Egg

具有:

Attribute:
shape = oval
color = white

这些属于对象特征。

而:

State:
intact

描述对象当前状态。

因此:

Attribute Value
    ↓
描述对象具有什么特征

State Value
    ↓
描述对象当前处于什么状态

例如:

Egg
├── Attribute
│   ├── shape = oval
│   └── color = white
│
└── State
    └── intact

这是 ICAI Object Model 中必须保持的结构区分。


164.6 State Condition:状态条件

**State Condition(状态条件)**描述一个状态成立所需要满足的条件。

例如:

State = held

其成立条件可能是:

Hand contacts Egg
AND
Hand applies grasp

又例如:

State = running

可以要求:

System = active
AND
Task = executing

因此 State 不仅需要记录:

Value = held

还可以记录:

Condition = grasped_by_hand

形成:

State
├── Value
└── Condition

PHP 中:

class State
{
    protected $value;
    protected $condition;

    public function __construct($value, $condition = null)
    {
        $this->value = $value;
        $this->condition = $condition;
    }

    public function getValue()
    {
        return $this->value;
    }

    public function getCondition()
    {
        return $this->condition;
    }
}

164.7 条件与状态的关系

状态条件可以表示为:

Condition → State

即:

满足条件
   ↓
状态成立

例如:

Hand contacts Egg
        +
Grasp action
        ↓
Egg = held

也可以反过来表示状态失效:

Egg = held
   ↓
Hand releases Egg
   ↓
held condition no longer exists
   ↓
Egg = released

因此 State Condition 是状态转换的重要基础。


164.8 State Transition:状态转换

**State Transition(状态转换)**是一个状态从当前值进入另一个状态值的过程。

例如:

intact
   ↓
grasp
   ↓
held

或者:

held
   ↓
release
   ↓
released

再例如:

running
   ↓
stop
   ↓
stopped

因此:

State Transition = Current State → Event/Condition → New State

可以表示为:

Current State
      ↓
Condition
      ↓
Transition
      ↓
New State

164.9 状态转换对象

为了使状态转换能够独立管理,可以建立 Transition Class:

class StateTransition
{
    protected $from;
    protected $condition;
    protected $to;

    public function __construct($from, $condition, $to)
    {
        $this->from = $from;
        $this->condition = $condition;
        $this->to = $to;
    }

    public function getFrom()
    {
        return $this->from;
    }

    public function getCondition()
    {
        return $this->condition;
    }

    public function getTo()
    {
        return $this->to;
    }
}

例如:

$transition = new StateTransition(
    'intact',
    'grasp',
    'held'
);

形成:

intact
   ↓
grasp
   ↓
held

这样状态转换就成为可以被系统保存和管理的结构。


164.10 状态转换规则

状态转换不是任意变化。

可以定义基本规则:

Current State
      ↓
Check Condition
      ↓
Condition Satisfied?
    ↓          ↓
   Yes         No
    ↓           ↓
New State     Keep State

例如:

Current State = intact

Condition:
hand_grasp = true

       ↓

Condition satisfied

       ↓

New State = held

如果:

hand_grasp = false

那么:

State remains intact

因此:

状态转换必须由条件或事件触发。

这使 State 从简单变量进入规则驱动的动态结构。


164.11 State History:状态历史

**State History(状态历史)**用于保存对象过去经历过的状态变化。

例如一个 Egg:

intact
  ↓
held
  ↓
released
  ↓
broken

如果只保存当前状态:

State = broken

系统无法知道它之前经历过什么。

加入 History:

State History
├── intact
├── held
├── released
└── broken

这样就形成了对象状态变化轨迹。


164.12 状态历史的工程结构

可以在 State Class 中增加:

class State
{
    protected $value;
    protected $condition;
    protected $history = array();

    public function __construct($value)
    {
        $this->value = $value;

        $this->history[] = array(
            'value' => $value
        );
    }

    public function update($value)
    {
        $this->value = $value;

        $this->history[] = array(
            'value' => $value
        );
    }

    public function getHistory()
    {
        return $this->history;
    }
}

例如:

$state = new State('intact');

$state->update('held');
$state->update('released');
$state->update('broken');

历史结构:

History
1. intact
2. held
3. released
4. broken

于是系统不仅知道:

Current State = broken

还知道:

Previous States:
intact → held → released

164.13 状态历史与时间

更完整的状态历史应该记录变化发生的时间。

例如:

State History
├── Value
├── Time
└── Condition

可以形成:

$history[] = array(
    'value' => 'held',
    'time' => time(),
    'condition' => 'grasp'
);

形成:

Time 1 → intact
Time 2 → held
Time 3 → released
Time 4 → broken

因此:

State History = 状态变化的连续记录

它可以成为后续 Experience 和 Learning 系统读取的重要基础数据。


164.14 State完整对象结构

综合本章,可以建立:

State Object
│
├── State Value
│
├── State Condition
│
├── State Transition
│
└── State History

形成:

State
├── Current Value
├── Condition
├── Transition Rules
└── History

其核心关系:

Condition → Transition → New State

以及:

Old State → Transition → New State → History


164.15 完整State Class

可以进一步建立基础版本:

class State
{
    protected $value;
    protected $condition;
    protected $history = array();

    public function __construct($value, $condition = null)
    {
        $this->value = $value;
        $this->condition = $condition;

        $this->recordHistory($value, $condition);
    }

    public function getValue()
    {
        return $this->value;
    }

    public function getCondition()
    {
        return $this->condition;
    }

    public function update($value, $condition = null)
    {
        $this->value = $value;
        $this->condition = $condition;

        $this->recordHistory($value, $condition);
    }

    protected function recordHistory($value, $condition)
    {
        $this->history[] = array(
            'value' => $value,
            'condition' => $condition,
            'time' => time()
        );
    }

    public function getHistory()
    {
        return $this->history;
    }
}

使用:

$state = new State(
    'intact',
    'object_created'
);

$state->update(
    'held',
    'grasp'
);

$state->update(
    'released',
    'release'
);

形成:

Current State
    ↓
released

History
    ↓
intact
→ held
→ released

164.16 State与Object的关系

第162章的 Object 可以将 State 作为独立对象保存。

class CognitiveObject
{
    protected $objectId;
    protected $objectType;
    protected $state;

    public function setState(State $state)
    {
        $this->state = $state;
    }

    public function getState()
    {
        return $this->state;
    }
}

于是:

Object
│
├── ID
├── Type
├── Attributes
├── State
│   ├── Value
│   ├── Condition
│   ├── Transition
│   └── History
│
└── Relations

Object 的 State 不再是一个简单字符串,而是一个完整的 State Object。


164.17 Attribute与State的关系

第163章中的 Attribute 也具有自己的 State。

因此 ICAI 中可能同时存在:

Object State

和:

Attribute State

例如:

Egg Object
State = held

Color Attribute
Value = white
State = confirmed

形成:

Object
│
├── Attributes
│   └── Color
│       ├── Value = white
│       └── State = confirmed
│
└── State
    └── Value = held

这样可以分别管理对象状态和属性状态。


164.18 State与Behavior的关系

Behavior 可以导致 State Transition。

例如:

State = intact
      ↓
Behavior = grasp
      ↓
State = held

再例如:

State = held
      ↓
Behavior = release
      ↓
State = released

形成:

State → Behavior → State

更完整地:

Current State → Behavior → Condition → State Transition → New State → History

这是 ICAI 动态运行模型的重要组成部分。


164.19 State与Experience的关系

状态历史可以进一步形成经验数据。

例如:

intact
 ↓
grasp
 ↓
held
 ↓
release
 ↓
released

系统保存这一完整过程以后,就获得了一条状态变化经验:

State₁
→ Behavior
→ State₂

多次发生后可以形成:

State₁
→ Behavior
→ State₂

的重复经验结构。

因此:

State History → Experience

成为 ICAI Learning System 与 Cognitive System 之间的重要数据连接之一。


164.20 Object动态状态模型

现在可以建立完整的 Object 状态运行模型:

Object
   ↓
Current State
   ↓
Condition
   ↓
Behavior / Event
   ↓
State Transition
   ↓
New State
   ↓
State History
   ↓
Experience

例如:

Egg
 ↓
intact
 ↓
Hand grasps Egg
 ↓
condition satisfied
 ↓
transition
 ↓
held
 ↓
history recorded

这已经不是单纯的 PHP 属性赋值,而是一个基本的状态运行模型。


164.21 本章小结

第164章建立了 State Class(状态类)

State 在 ICAI 中不再只是 Object 中的一个字符串,而成为具有独立结构的 State Object。

其核心组成包括:

State Object → 状态实体

State Value → 当前状态值

State Condition → 状态成立条件

State Transition → 状态转换过程

State History → 状态变化历史

因此可以建立完整关系:

Current State → Condition → Transition → New State → History

进一步与 ICAI 的对象行为结合:

Object → State → Condition → Behavior → State Transition → New State → History

再向 Learning System 延伸:

State History → Experience

至此,ICAI 的基础对象体系已经从:

Individual → Object → Attribute

进一步扩展为:

Individual → Object → Attribute + State

其中 Object 描述对象本身,Attribute 描述对象特征,State 描述对象当前运行状态,而 State History 则使对象具备可追踪的动态变化轨迹。

下一章继续建立 Relation Class(关系类),正式实现:

Object A → Relation → Object B

使目前独立存在的 Object、Attribute、State 开始形成真正的对象关系结构。

Leave a Reply

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