第201章 ICAI Object-Oriented Engineering|ICAI 面向对象工程
201.1 从机器认知对象进入软件对象
在前面的章节中,ICAI 已经建立了机器认知对象体系:
Real-Time Data
实时数据
↓
Element
元素
↓
Object
对象
↓
Relation
关系
↓
State
状态
↓
Scene
场景
↓
Cognition
认知
↓
Method
方法
↓
Behavior
行为
↓
Action
动作
到这里,问题已经发生变化。
前面的核心问题是:
机器如何形成认知对象?
从第201章开始,核心问题变成:
这些认知对象如何真正存在于软件系统中,并能够被创建、更新、计算、调用和运行?
因此,ICAI 开始进入面向对象软件工程阶段。
201.2 Cognitive Object|认知对象
ICAI 中的 Cognitive Object(认知对象)不是单纯的数据名称。
它代表机器对现实世界某个对象形成的可计算认知实体。
例如:
Egg
鸡蛋
机器并不是简单保存:
name = "egg"
而是形成:
Egg
↓
Position
位置
↓
Orientation
姿态
↓
Mass
质量
↓
Fragility
脆弱性
↓
Contact
接触状态
↓
Pressure
压力
↓
Stability
稳定性
这些信息共同构成当前对象状态。
因此:
CognitiveObject=Object+Attributes+Relations+StateCognitiveObject = Object + Attributes + Relations + State
即:
认知对象 = 对象 + 属性 + 关系 + 状态
201.3 Software Object|软件对象
当 Cognitive Object 进入软件工程以后,需要转换成 Software Object(软件对象)。
软件对象必须能够:
Create
创建
Read
读取
Update
更新
Calculate
计算
Interact
交互
Change State
改变状态
因此:
Cognitive Object
认知对象
↓
Software Object
软件对象
这个转换非常重要。
因为如果认知对象只存在于理论描述中,那么它仍然不能运行。
只有进入软件对象之后,才可以:
Create
↓
Update
↓
Calculate
↓
Execute
↓
Feedback
形成实际运行过程。
201.4 Software Object → PHP Object
ICAI 当前的软件工程采用 PHP OOP(PHP 面向对象编程)。
因此:
Software Object
软件对象
↓
PHP Class
PHP 类
↓
PHP Object
PHP 对象实例
例如现实中的鸡蛋:
现实对象
Egg
↓
认知对象
Cognitive Egg
↓
软件对象
Egg Object
↓
PHP Object
$egg
因此:
$egg = new Egg();
这个 $egg 不再只是一个普通变量。
它代表:
ICAI 认知系统中的一个具体对象实例。
201.5 Class|类
PHP Class(类)负责定义一个认知对象的结构和行为。
例如:
class CognitiveObject
{
protected $id;
protected $attributes = array();
protected $relations = array();
protected $state = array();
}
这里:
$id
对象标识
$attributes
对象属性
$relations
对象关系
$state
对象状态
Class 定义的是:
这种对象应该具有什么结构和能力。
201.6 Object Instance|对象实例
Class 本身不是现实中的具体对象。
例如:
class Egg
{
}
只是定义:
Egg 这种对象是什么。
真正创建对象:
$egg = new Egg();
此时:
Egg Class
鸡蛋类
↓
$egg
鸡蛋对象实例
因此:
Class
类
↓
Object Instance
对象实例
这是 ICAI 从理论对象进入程序对象的第一层真正转换。
201.7 Property|属性
ICAI 的 Object(对象)必须具有动态属性。
例如:
class Egg
{
public $position;
public $orientation;
public $pressure;
public $force;
public $stability;
}
于是:
$egg->position;
$egg->pressure;
$egg->force;
$egg->stability;
都成为可以被程序实时读取和修改的数据。
但是这里必须注意:
属性不是静态标签,而是认知系统中的动态状态数据。
例如:
Pressure = 0.20
执行动作以后:
Pressure = 0.35
再执行以后:
Pressure = 0.50
对象本身没有改变,但对象的当前认知状态发生了变化。
201.8 Method|方法
对象不仅需要保存属性,还必须能够执行行为逻辑。
因此进入 Method(方法)。
例如:
class Egg
{
public function updatePressure($pressure)
{
$this->pressure = $pressure;
}
}
调用:
$egg->updatePressure(0.35);
形成:
Object
对象
↓
Method
方法
↓
State Change
状态变化
这与传统数据结构最大的区别就在这里。
ICAI 对象不是:
Data Only
只有数据
而是:
Data
+
State
+
Method
+
Behavior
201.9 动态对象
ICAI 不应该建立大量静态对象。
因为现实世界是动态变化的。
例如:
Egg
↓
Position = A
Pressure = 0
Contact = false
经过行为:
Move
移动
↓
Position = B
接触以后:
Contact = true
Pressure = 0.2
进一步变化:
Pressure = 0.4
Stability = 0.8
因此:
Objectt≠Objectt+1Object_t \neq Object_{t+1}
更准确地说:
State(Objectt)→State(Objectt+1)State(Object_t)\rightarrow State(Object_{t+1})
对象持续存在,而对象状态持续变化。
201.10 从对象到认知运行时
当多个对象进入系统以后:
Egg
Hand
Table
Obstacle
系统开始建立:
Object
↓
Attribute
↓
Relation
↓
State
↓
Scene
然后进入:
Cognition
↓
Method
↓
Behavior
↓
Action
因此 PHP OOP 并不是单纯为了“代码写得漂亮”。
它承担的是一个更重要的任务:
把 ICAI 的机器认知对象变成能够持续存在、相互作用、状态变化和执行方法的软件实体。
201.11 第一条工程转换链
因此,第201章可以正式确定 ICAI 的第一条软件工程转换链:
Cognitive Object
认知对象
↓
Software Object
软件对象
↓
Class
类
↓
Object Instance
对象实例
↓
Property
属性
↓
Method
方法
↓
State Change
状态变化
↓
Behavior
行为
最终:
Cognitive Object
↓
Software Object
↓
PHP Object
↓
Dynamic State
↓
Method
↓
Behavior
201.12 本章结论
第201章的意义不是重新定义 Object。
前面的理论已经完成了:
现实世界
↓
认知对象
第201章开始完成的是:
认知对象
↓
软件对象
↓
PHP Object
因此,从本章开始:
ICAI 的 Element、Object、Relation、State、Scene、Cognition、Method、Behavior、Action 不再只作为理论概念存在,而开始逐步成为真正的软件 Class、Object、Property、Method 和 Runtime。
最终形成:
Reality
现实世界
↓
Cognitive Object
认知对象
↓
Software Object
软件对象
↓
PHP Object
PHP对象
↓
Method
方法
↓
Behavior
行为
↓
Action
动作
↓
Device
设备
↓
Feedback
反馈
第201章完成“机器认知对象 → 软件对象”的架构转换。
下一章 第202章 Element Class|元素类,正式开始把 ICAI 的第一个核心认知对象写成 PHP Class。