第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 开始形成真正的对象关系结构。