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

第208章 Object Instance|对象实例 Class → Object Instance → Current State

这一章可以把重点收回来:第203章建立 Object Class,第208章专门解决“类如何在运行时成为一个真实对象实例”。这样后面才能进入认知运行时。

第208章 Object Instance|对象实例

Class → Object Instance → Current State

第203章已经建立:

Object Class
对象类

第204章建立:

Attribute Class
属性类

第205章建立:

Relation Class
关系类

第206章建立:

State Class
状态类

第207章建立:

Scene Class
场景类

现在需要解决一个更基础的工程问题:

Class 定义出来以后,机器运行时如何真正产生一个可以被感知、更新、计算和操作的 Object Instance?

因此,本章不再讨论“什么是对象”,而是进入:

Class
类
 ↓
Object Instance
对象实例
 ↓
Current State
当前状态

208.1 Class 不是现实对象

在 PHP OOP 中:

class Object
{
}

只是一个结构定义。

它本身并不是现实中的某一个具体对象。

例如:

Object Class
对象类

只是规定:

一个对象应该具有什么结构

真正运行以后才产生:

Object Instance
对象实例

例如:

$egg = new Object();

此时:

Object Class
      ↓
new
      ↓
$egg
      ↓
Object Instance

208.2 Object Instance|对象实例

Object Instance 是:

Object Class 在当前运行环境中形成的一个具体对象。

例如:

Object Class
     ↓
     new
     ↓
Egg Instance

可以同时存在:

Egg #001
Egg #002
Egg #003

它们来自同一个 Class:

Object Class

但每一个 Instance 都具有自己的:

Element
Attribute
Relation
State

208.3 为什么必须使用 Instance

ICAI 面对的是现实世界中的具体对象。

例如:

鸡蛋A
鸡蛋B
鸡蛋C

它们虽然都可以归属于:

Egg Object Type

但它们的实时状态不同:

Egg A
Position = ...
Pressure = 0.10

Egg B
Position = ...
Pressure = 0.00

Egg C
Position = ...
Pressure = 0.25

因此:

Class

描述共同结构。

而:

Instance

保存具体对象的实时信息。


208.4 Object Identity|对象身份

每一个 Object Instance 必须具有自己的身份。

例如:

$egg = new Object(
    1001,
    'Egg'
);

其中:

ID = 1001
Type = Egg

再创建:

$egg2 = new Object(
    1002,
    'Egg'
);

于是:

Egg Class
   │
   ├── Egg Instance #1001
   │
   └── Egg Instance #1002

两个对象属于同一种对象类型,但不是同一个对象。


208.5 Object Instance 的基本结构

可以把 Object Instance 看成:

Object Instance
│
├── ID
├── Type
├── Elements
├── Attributes
├── Relations
└── Current State

其中最重要的是:

Current State
当前状态

因为 ICAI 处理的不是静态对象,而是:

持续变化的现实对象。


208.6 Current State|当前状态

一个对象不能只表示:

Egg

还必须知道:

这个 Egg 现在怎么样?

例如:

Egg #1001

Position = [20,10,30]
Pressure = 0.12
Velocity = 0
Contact = true
Stability = 0.91

这些实时数据经过状态计算以后形成:

Current State
当前状态

例如:

State = being_contacted

因此:

Object Instance
       ↓
Current State

是运行时非常重要的一层。


208.7 State 属于 Instance,而不是 Class

这是本章一个重要原则。

Class 可以定义:

Egg Object

但是 Class 不应该保存:

Egg #1001 当前在哪里
Egg #1001 当前受到多大压力
Egg #1001 当前是否被抓取

因为这些都是 Instance 的实时信息。

因此:

Class
 ↓
定义结构

而:

Instance
 ↓
保存当前现实状态

形成:

Object Class
      ↓
Object Instance
      ↓
Current State

208.8 PHP Object Instance

建立基础 Object:

<?php

class Object
{
    protected $id;
    protected $type;
    protected $name;
    protected $attributes = array();
    protected $relations = array();
    protected $state = null;

    public function __construct(
        $id,
        $type,
        $name = null
    ) {
        $this->id = $id;
        $this->type = $type;
        $this->name = $name;
    }

    public function getId()
    {
        return $this->id;
    }

    public function getType()
    {
        return $this->type;
    }

    public function getName()
    {
        return $this->name;
    }
}

现在:

$egg = new Object(
    1001,
    'physical_object',
    'Egg'
);

就形成了:

Object Instance

ID   = 1001
Type = physical_object
Name = Egg

208.9 Instance Attribute|实例属性

继续把第204章的 Attribute 接入。

public function addAttribute(Attribute $attribute)
{
    $this->attributes[$attribute->getName()] = $attribute;
}

于是:

$egg->addAttribute($position);
$egg->addAttribute($pressure);
$egg->addAttribute($force);

形成:

Egg Instance
 │
 ├── Position
 ├── Pressure
 └── Force

这些属性属于:

Egg #1001

而不是所有 Egg 的公共状态。


208.10 Instance Relation|实例关系

同样,Relation 是具体对象之间的关系。

例如:

Hand #3001
      ↓
contacts
      ↓
Egg #1001

不是:

Hand Class
      ↓
contacts
      ↓
Egg Class

因此 Relation Instance 必须连接:

Object Instance
        ↓
Relation Instance
        ↓
Object Instance

也就是:

Hand Instance
      ↓
Relation
      ↓
Egg Instance

208.11 Current State 的更新

Object Instance 必须能够更新状态。

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

读取:

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

于是:

$egg->setState($eggState);

形成:

Egg Instance
      ↓
Current State

208.12 状态不是固定的

例如最初:

Egg #1001
State = stationary

机械手靠近:

State = being_approached

接触:

State = contacted

抓取:

State = held

移动:

State = moving

释放:

State = released

注意:

这不是给鸡蛋写:

Egg.php

然后把所有行为写死。

而是同一个:

Object Instance

随着实时数据、属性和关系发生变化:

Current State

不断更新。


208.13 Object Instance 是动态的

因此:

Object Instance

不是:

创建一次
 ↓
永远不变

而是:

Create
创建
 ↓
Observe
感知
 ↓
Update
更新
 ↓
Evaluate
计算
 ↓
State Change
状态变化
 ↓
Continue
继续运行

这就是后面 Cognitive Runtime 的对象基础。


208.14 从实时数据到对象实例

在 ICAI 中,Object Instance 并不一定必须由人工直接写死。

可以由实时数据逐步形成:

Real-Time Data
实时数据
 ↓
Element
元素
 ↓
Element Group
元素集合
 ↓
Object Instance
对象实例

例如传感器获得:

Position
Pressure
Contact
Velocity
Shape

系统通过 Object Model 将这些元素组织成:

Egg Instance

于是:

Real World
现实世界
 ↓
Real-Time Data
 ↓
Element
 ↓
Object Instance

208.15 Object Instance 与 Scene Instance

第207章建立了 Scene。

因此现在可以形成:

Scene Instance
      ↓
Object Instance

例如:

Scene #5001
 │
 ├── Hand #3001
 ├── Egg #1001
 └── Table #2001

每一个都是具体 Instance。

而不是 Class。

完整结构:

Scene Instance
│
├── Object Instance
│    ├── Attributes
│    └── Current State
│
├── Object Instance
│    ├── Attributes
│    └── Current State
│
└── Relations

208.16 一个完整实例

例如当前场景:

Scene #5001

其中:

Hand #3001
Egg #1001
Table #2001

Egg 当前:

Position = [20,10,30]
Pressure = 0.15
Velocity = 0
Contact = true

于是:

Egg #1001
      ↓
Attributes
      ↓
Current State
      ↓
contacted

同时:

Hand #3001
      ↓
contacts
      ↓
Egg #1001

最终形成:

Scene #5001
       │
       ├── Hand #3001
       │
       ├── Egg #1001
       │      │
       │      └── Current State
       │
       ├── Table #2001
       │
       └── Hand #3001
                 ↓
             contacts
                 ↓
             Egg #1001

208.17 Instance 与行为逻辑的连接

到这里,ICAI 的对象已经具备:

Identity
身份

Attributes
属性

Relations
关系

Current State
当前状态

下一步才能真正讨论:

Current State
      ↓
Cognition
      ↓
Method
      ↓
Action

也就是说:

行为不是直接从 Class 产生,而是从运行中的 Object Instance 当前状态出发。

这对于模拟人的行为逻辑非常重要。

人不是面对:

Egg Class

而是面对:

这个具体的鸡蛋

并根据:

它现在在哪里
它现在是否接触
它现在受到多大压力
它现在是否稳定

决定下一步行为。


208.18 不为每个对象写专用行为程序

同样保持前面确定的原则:

不能建立:

GrabEgg.php
GrabGlass.php
GrabFruit.php
GrabBottle.php

然后分别编写固定行为。

而应该:

Object Instance
       ↓
Current State
       ↓
Dynamic Parameters
       ↓
Method
       ↓
Action

例如:

Object = Egg
Pressure = 0.15
Distance = 0
Stability = 0.91

这些参数进入后面的 Method。

方法根据动态输入计算动作。

因此:

对象不同、状态不同、参数不同,并不意味着必须重新编写一套行为程序。

这才符合你前面提出的“模拟人的行为逻辑”。


208.19 Object Instance 的生命周期

一个完整 Object Instance 可以经历:

Create
创建
 ↓
Detect
检测
 ↓
Instantiate
实例化
 ↓
Update
更新
 ↓
Relate
建立关系
 ↓
State Change
状态变化
 ↓
Cognition
认知
 ↓
Action
动作
 ↓
Feedback
反馈
 ↓
Update
再次更新

因此 Object Instance 实际上是:

连接现实世界数据与机器行为逻辑的运行对象。


208.20 本章软件结构

到第208章,可以形成:

Object Class
│
├── Object Identity
├── Attribute Collection
├── Relation Collection
└── State
        ↓
Object Instance
        ↓
Current State

更完整地:

Real-Time Data
      ↓
Element Instance
      ↓
Object Instance
      │
      ├── Attributes
      │
      ├── Relations
      │
      └── Current State
      ↓
Scene Instance

208.21 本章核心结论

第208章真正解决的是:

如何让 ICAI 的“对象类”进入实时运行,成为一个具有身份、属性、关系和当前状态的具体对象实例。

因此:

Class
类
 ↓
定义对象结构

Object Instance
对象实例
 ↓
代表现实中的具体对象

Current State
当前状态
 ↓
表示这个具体对象此时此刻的现实状态

最终形成:

Object Class
对象类
      ↓
Instantiate
实例化
      ↓
Object Instance
对象实例
      ↓
Attributes
属性
      ↓
Relations
关系
      ↓
Current State
当前状态

而这个 Object Instance 将成为后续认知方法、行为逻辑和动作执行的直接运行主体。

换句话说,从这一章开始,ICAI 中的 Object 不再只是理论上的“认知对象”,而开始成为一个可以在软件运行时持续存在、持续变化、持续被计算的工程对象

Leave a Reply

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