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

第167章 ICAI OOP组合体系

第167章 ICAI OOP组合体系

167.1 提出背景

第166章建立了ICAI的OOP继承体系。

通过Individual基类以及个体类型子类,可以表达:

Individual
    ↓
Individual Type
    ↓
Specific Type

继承解决的是:

不同类型的个体之间,哪些结构可以被共同继承。

但是,一个具体Individual并不是一个孤立的类。

一个个体内部还包含大量不同性质的认知对象。

例如,一个机器人个体可能包含:

Robot
    ├── Object
    ├── Attribute
    ├── Knowledge
    ├── Capability
    ├── Method
    ├── Behavior
    ├── Memory
    └── Experience

因此,ICAI还需要解决第二个问题:

一个Individual如何组织和管理内部的多个认知对象?

这不是继承问题,而是组合(Composition)问题

组合表示一个对象由其他对象构成,或者一个对象拥有、管理其他对象。

因此:

继承 → 是什么
组合 → 有什么

例如:

Robot is-a Individual

表示Robot是一种Individual。

而:

Robot has-a Capability
Robot has-a Knowledge
Robot has-a Object

表示Robot拥有Capability、Knowledge和Object。

由此建立ICAI OOP组合体系:

Individual
    ↓
Object
    ↓
Attribute

Individual
    ↓
Knowledge

Individual
    ↓
Capability

最终形成更加完整的:

Individual
    ├── Object
    │     └── Attribute
    │
    ├── Knowledge
    │
    ├── Capability
    │
    ├── Method
    │
    ├── Behavior
    │
    ├── Memory
    │
    └── Experience

167.2 组合定义

**组合(Composition)**是指一个对象由一个或多个其他对象共同构成,并通过这些对象形成更加完整的复合结构。

如果对象 AA 包含对象集合:

O={O1,O2,…,On}O=\{O_1,O_2,\ldots,O_n\}

则可以表示:

A={O,O1,O2,…,On}A=\{O,O_1,O_2,\ldots,O_n\}

其中:

  • AA:主体对象;
  • OO:对象集合;
  • OiO_i:主体对象内部的组成对象;
  • nn:组成对象数量。

例如:

Individual={Object,Knowledge,Capability,Method,Behavior,Memory,Experience}Individual=\{Object,Knowledge,Capability,Method,Behavior,Memory,Experience\}

这并不是说Individual等于这些对象,而是表示:

Individual通过组合这些对象形成完整的个体认知结构。


167.3 组合与继承的区别

ICAI必须严格区分继承与组合。

继承:

Robot
    ↓
Individual

表示:

Robot 是一种 Individual

组合:

Robot
    ↓
Capability

表示:

Robot 拥有 Capability

因此:

关系 含义 工程实现
is-a 类型关系 extends
has-a 对象组成 属性/集合/对象引用
relation 对象关联 Relation对象
depends-on 对象依赖 Service/Manager等

如果把组合关系错误地写成继承:

class Robot extends Capability
{
}

其认知意义就错误了。

Robot不是Capability。

正确结构应该是:

class Robot extends Individual
{
    protected $capabilities;
}

即:

Robot is-a Individual
Robot has-a Capability

167.4 Individual组合Object

167.4.1 Object定义

**Object(对象)**是ICAI用于表示现实世界或认知空间中具有身份、属性、状态和关系结构的基本认知实体。

Individual本身是一种特殊的主体对象,但Individual还需要认识、管理和操作其他Object。

例如:

Individual
    ↓
Object
        ├── Cup
        ├── Table
        ├── Door
        ├── Vehicle
        └── Device

因此:

Individual
    has-a
    ↓
Object Set

可以表示:

I=(O1,O2,…,On)I=(O_1,O_2,\ldots,O_n)

其中:

  • II:Individual;
  • OiO_i:Individual当前拥有、识别、管理或关联的Object。

这里的“拥有”不一定表示物理所有权。

它可以表示:

认识
管理
操作
观察
使用
关联

因此,更准确地说:

Individual组合Object表示个体内部存在一个可管理的对象集合。


167.5 Individual对象集合

工程上可以将Individual设计为拥有Object集合:

class Individual extends CognitiveObject
{
    protected $objects;

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

    public function addObject($object)
    {
        $this->objects[] = $object;
    }

    public function getObjects()
    {
        return $this->objects;
    }
}

于是:

Individual
    ↓
objects[]
    ↓
Object

一个Individual可以拥有:

Object 1
Object 2
Object 3
...
Object N

这种结构能够支持个体认知空间。

例如:

Robot
    ├── Table
    ├── Cup
    ├── Box
    └── Door

Robot不是这些Object的父类。

Robot只是当前认知系统中的主体Individual。


167.6 Object组合Attribute

第166章解决了类型继承。

现在进一步建立Object内部的属性组合。

**Attribute(属性)**是描述Object某种特征、状态特征或可识别特征的数据对象。

例如:

Cup
    ├── color
    ├── material
    ├── size
    └── weight

因此:

Object
    ↓
Attribute

表示:

Object has-a Attribute

而不是:

Attribute is-a Object

167.7 Object与Attribute的组合模型

可以定义:

O=(ID,T,A,S,R)O=(ID,T,A,S,R)

其中:

  • OO:Object;
  • IDID:对象标识;
  • TT:对象类型;
  • AA:属性集合;
  • SS:状态;
  • RR:关系集合。

属性集合:

A={a1,a2,…,an}A=\{a_1,a_2,\ldots,a_n\}

其中:

  • aia_i:一个Attribute对象;
  • nn:属性数量。

例如:

Cup
    ↓
Attributes
    ├── Color = White
    ├── Material = Ceramic
    ├── Size = Small
    └── Weight = 300g

于是:

Cup
    ├── Attribute(Color)
    ├── Attribute(Material)
    ├── Attribute(Size)
    └── Attribute(Weight)

167.8 Attribute不是简单变量

在ICAI中,Attribute不能简单理解成PHP中的:

$color = 'white';

因为ICAI中的Attribute是一个认知对象。

它可以具有:

属性名称
属性值
属性类型
来源
状态
时间
可信状态
关系

例如:

A=(N,V,T,S,Time)A=(N,V,T,S,Time)

其中:

  • NN:Attribute Name;
  • VV:Attribute Value;
  • TT:Attribute Type;
  • SS:Attribute State;
  • TimeTime:属性产生或确认的时间。

因此:

Color = White

不仅可以保存“White”,还可以保存:

Color
    Value = White
    Source = Observation
    Time = ...
    State = Confirmed

这使Attribute能够进入后续的认知匹配、状态判断和知识结构。


167.9 Object组合Attribute的PHP结构

可以建立:

class AttributeObject
{
    protected $name;
    protected $value;
    protected $type;
    protected $state;

    public function __construct($name, $value, $type)
    {
        $this->name = $name;
        $this->value = $value;
        $this->type = $type;
        $this->state = 'active';
    }

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

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

Object则组合Attribute:

class ObjectEntity
{
    protected $id;
    protected $type;
    protected $attributes;

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

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

    public function getAttributes()
    {
        return $this->attributes;
    }
}

形成:

ObjectEntity
    ↓
attributes[]
    ↓
AttributeObject

167.10 Individual组合Knowledge

167.10.1 Knowledge定义

**Knowledge(知识)**是ICAI经过信息组织、对象关联、属性结构、关系确认和经验整理后形成的可保存、可检索、可应用的结构化认知内容。

Knowledge与Memory、Experience不同。

可以简单区分:

Memory
    → 保存过去信息

Experience
    → 从历史中形成经验

Knowledge
    → 形成可组织、可查询、可应用的认知结构

因此Individual需要组合Knowledge。

Individual
    ↓
Knowledge

表示:

一个个体具有自己的知识集合。


167.11 Individual Knowledge模型

可以定义:

K={k1,k2,…,kn}K=\{k_1,k_2,\ldots,k_n\}

其中:

  • KK:Individual的Knowledge集合;
  • kik_i:一个Knowledge对象;
  • nn:知识对象数量。

进一步:

Individual=(Objects,Knowledge,Capabilities,…)Individual=(Objects,Knowledge,Capabilities,\ldots)

例如:

Individual
    ├── Object Knowledge
    ├── State Knowledge
    ├── Relation Knowledge
    ├── Method Knowledge
    └── Experience Knowledge

知识可以描述:

Cup
    ↓
Object Type = Container
    ↓
Material = Ceramic
    ↓
UsedFor = Drinking

这些知识并不一定是某次瞬时观察所得,而可以经过多个历史信息和经验形成。


167.12 Knowledge的对象化

Knowledge也不应该直接全部写入Individual类。

错误方式:

class Individual
{
    protected $cupIsCeramic;
    protected $cupIsContainer;
    protected $cupIsForDrinking;
}

这种结构会导致Individual类不断膨胀。

更合理的方式是:

class Knowledge
{
    protected $id;
    protected $subject;
    protected $predicate;
    protected $object;
    protected $state;
}

例如:

Knowledge
    Subject = Cup
    Predicate = material
    Object = Ceramic

Individual只负责组合Knowledge:

class Individual
{
    protected $knowledge;

    public function addKnowledge($knowledge)
    {
        $this->knowledge[] = $knowledge;
    }
}

因此:

Individual
    ↓
Knowledge[]
    ↓
Knowledge Objects

这样可以保持知识结构独立。


167.13 Individual组合Capability

第159章已经定义Capability。

Capability表示:

个体在特定条件、状态、范围和验证条件下能够完成某项任务的能力。

因此Capability是Individual的重要组成对象。

Individual
    ↓
Capability[]

例如:

Robot
    ├── Capability: Move
    ├── Capability: Grasp
    ├── Capability: Lift
    └── Capability: Navigate

这些Capability不是Robot类中的简单布尔值。

错误:

$robot->canMove = true;
$robot->canGrasp = true;

这种方式只能表达非常简单的静态状态。

ICAI需要:

Capability
    ├── Type
    ├── Condition
    ├── State
    ├── Range
    └── Verification

因此Individual组合的是完整Capability对象。


167.14 Individual与Capability的组合模型

定义Individual的Capability集合:

CI={c1,c2,…,cn}C_I=\{c_1,c_2,\ldots,c_n\}

其中:

  • CIC_I:Individual的Capability集合;
  • cic_i:一个Capability对象;
  • nn:能力数量。

某个Capability是否可以实际使用,还需要判断:

Available(ci)=Ti∧Ci∧Si∧Ri∧ViAvailable(c_i)=T_i\land C_i\land S_i\land R_i\land V_i

其中:

  • TiT_i:Capability类型条件;
  • CiC_i:条件满足情况;
  • SiS_i:当前状态;
  • RiR_i:适用范围;
  • ViV_i:验证状态。

因此:

Individual拥有Capability
    ↓
Capability当前状态
    ↓
Condition
    ↓
Range
    ↓
Verification
    ↓
是否可用

这比简单的:

canMove = true

更加符合ICAI认知工程。


167.15 Capability组合PHP结构

例如:

class Capability
{
    protected $id;
    protected $type;
    protected $condition;
    protected $state;
    protected $range;
    protected $verification;

    public function __construct($id, $type)
    {
        $this->id = $id;
        $this->type = $type;
        $this->state = 'unknown';
    }

    public function setCondition($condition)
    {
        $this->condition = $condition;
    }

    public function setRange($range)
    {
        $this->range = $range;
    }

    public function setVerification($verification)
    {
        $this->verification = $verification;
    }
}

Individual:

class Individual
{
    protected $capabilities;

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

    public function addCapability($capability)
    {
        $this->capabilities[] = $capability;
    }

    public function getCapabilities()
    {
        return $this->capabilities;
    }
}

形成:

Individual
    ↓
Capability[]
    ↓
Capability

167.16 Individual组合Method

Individual不仅需要知道“能不能做”,还需要拥有解决问题的方法。

因此:

Individual
    ↓
Method[]

例如:

Robot
    Capability
        Grasp

    Method
        GraspFromFront
        GraspFromSide
        GraspWithTwoSteps

Capability回答:

能不能做?

Method回答:

怎么做?

因此二者都是Individual的组成对象,但职责不同。

Individual
    ├── Capability
    └── Method

167.17 Individual组合Behavior

Behavior是进入实际执行阶段的行为组织对象。

因此Individual还可以组合Behavior:

Individual
    ↓
Behavior[]
    ↓
Action[]
    ↓
Execution

完整结构:

Individual
    └── Behavior
          ├── Action
          ├── Action
          └── Action

这里形成了多层组合。


167.18 Individual组合Memory与Experience

根据第164章:

Memory是保存过去信息的结构化记忆对象。

Experience是从历史、Memory、条件、结果和关系中形成的结构化经验对象。

因此:

Individual
    ├── Memory[]
    └── Experience[]

形成:

Individual
    ↓
Memory
    ↓
Experience

但这里不是简单的父子继承,而是对象组合。

一个Individual可以:

拥有多个Memory
拥有多个Experience

同时Experience又可以引用相关Memory。

因此:

Individual
    ↓
Memory[]
    ↓
Memory Relation

Individual
    ↓
Experience[]
    ↓
Experience Relation

167.19 Individual的完整组合模型

经过前面的对象扩展,可以定义:

I=(O,K,C,M,B,MM,E)I=(O,K,C,M,B,MM,E)

其中:

  • II:Individual;
  • OO:Object集合;
  • KK:Knowledge集合;
  • CC:Capability集合;
  • MM:Method集合;
  • BB:Behavior集合;
  • MMMM:Memory集合;
  • EE:Experience集合。

因此:

Individual
    ├── Object
    ├── Knowledge
    ├── Capability
    ├── Method
    ├── Behavior
    ├── Memory
    └── Experience

这就是ICAI的个体组合模型


167.20 复合对象

167.20.1 复合对象定义

**复合对象(Composite Object)**是由多个对象按照一定结构组合形成的更高层对象。

如果:

O={O1,O2,…,On}O=\{O_1,O_2,\ldots,O_n\}

并且这些对象按照一定结构:

R(O1,O2,…,On)R(O_1,O_2,\ldots,O_n)

形成一个新的整体 CC,则:

C=Composite(O1,O2,…,On)C=Composite(O_1,O_2,\ldots,O_n)

其中:

  • CC:复合对象;
  • OiO_i:组成对象;
  • RR:对象之间的结构关系。

167.21 Object复合Object

复合对象不仅可以是:

Individual → Object

还可以是:

Object
    ↓
Object

例如:

Car
    ├── Engine
    ├── Wheel
    ├── Door
    └── Seat

Car是一个复合对象。

其结构可以表示为:

Car={Engine,Wheel,Door,Seat}Car=\{Engine,Wheel,Door,Seat\}

因此ICAI中的Object本身也可以继续组合Object。

形成:

Object
    ↓
Object[]
    ↓
Sub Objects

这使ICAI能够表达现实世界中的层级对象。


167.22 复合对象与Object Tree

大量对象组合以后,可以形成对象树:

Individual
    │
    ├── Object A
    │     ├── Attribute
    │     └── Object A1
    │
    ├── Object B
    │     ├── Attribute
    │     └── Object B1
    │
    └── Object C
          └── Attribute

因此ICAI可以建立:

ObjectTree=(O,R)ObjectTree=(O,R)

其中:

  • OO:对象集合;
  • RR:对象之间的组成关系。

例如:

Robot
    ↓
Arm
    ↓
Joint
    ↓
Gripper

每一层都是对象。

这种结构对于机器人、设备、机械系统、软件系统等复杂个体尤其重要。


167.23 Individual复合认知对象

Individual本身也可以被视为一个大型复合对象:

Individual
    │
    ├── Object[]
    ├── Knowledge[]
    ├── Capability[]
    ├── Method[]
    ├── Behavior[]
    ├── Memory[]
    └── Experience[]

因此:

Individual=Composite(O,K,C,M,B,MM,E)Individual=Composite(O,K,C,M,B,MM,E)

这里的Composite表示:

Individual通过多个认知对象组合形成完整的个体认知结构。


167.24 复合对象的PHP工程模型

可以建立一个通用的Composite接口:

interface CompositeInterface
{
    public function addComponent($component);

    public function removeComponent($component);

    public function getComponents();
}

然后Object实现:

class ObjectEntity implements CompositeInterface
{
    protected $components;

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

    public function addComponent($component)
    {
        $this->components[] = $component;
    }

    public function removeComponent($component)
    {
        foreach ($this->components as $key => $item) {
            if ($item === $component) {
                unset($this->components[$key]);
            }
        }
    }

    public function getComponents()
    {
        return $this->components;
    }
}

Individual也可以采用类似结构:

class Individual implements CompositeInterface
{
    protected $components;

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

    public function addComponent($component)
    {
        $this->components[] = $component;
    }

    public function removeComponent($component)
    {
        foreach ($this->components as $key => $item) {
            if ($item === $component) {
                unset($this->components[$key]);
            }
        }
    }

    public function getComponents()
    {
        return $this->components;
    }
}

实际工程中可以进一步通过专门的类型集合管理Object、Knowledge、Capability等,避免所有对象混入同一个数组。


167.25 类型化组合

ICAI不应该只使用一个没有类型约束的:

components[]

因为这样无法明确知道某个组件属于:

Object
Knowledge
Capability
Method
Behavior
Memory
Experience

更合理的结构是:

Individual
    ├── objects[]
    ├── knowledge[]
    ├── capabilities[]
    ├── methods[]
    ├── behaviors[]
    ├── memories[]
    └── experiences[]

这样可以保持认知对象边界。

PHP:

class Individual
{
    protected $objects;
    protected $knowledge;
    protected $capabilities;
    protected $methods;
    protected $behaviors;
    protected $memories;
    protected $experiences;

    public function __construct()
    {
        $this->objects = array();
        $this->knowledge = array();
        $this->capabilities = array();
        $this->methods = array();
        $this->behaviors = array();
        $this->memories = array();
        $this->experiences = array();
    }
}

这比把所有东西塞入一个components数组更加符合ICAI认知对象模型。


167.26 数据库组合结构

OOP中的组合关系需要映射到数据库。

Individual基础表:

CREATE TABLE individuals (
    id INT NOT NULL AUTO_INCREMENT,
    type VARCHAR(100) NOT NULL,
    name VARCHAR(255),
    state VARCHAR(100),
    created_at DATETIME,
    updated_at DATETIME,
    PRIMARY KEY (id)
);

Individual与Object:

CREATE TABLE individual_objects (
    id INT NOT NULL AUTO_INCREMENT,
    individual_id INT NOT NULL,
    object_id INT NOT NULL,
    relation_type VARCHAR(100),
    created_at DATETIME,
    PRIMARY KEY (id)
);

Object与Attribute:

CREATE TABLE object_attributes (
    id INT NOT NULL AUTO_INCREMENT,
    object_id INT NOT NULL,
    attribute_name VARCHAR(150) NOT NULL,
    attribute_value TEXT,
    attribute_type VARCHAR(100),
    state VARCHAR(100),
    created_at DATETIME,
    PRIMARY KEY (id)
);

Individual与Knowledge:

CREATE TABLE individual_knowledge (
    id INT NOT NULL AUTO_INCREMENT,
    individual_id INT NOT NULL,
    knowledge_id INT NOT NULL,
    relation_type VARCHAR(100),
    created_at DATETIME,
    PRIMARY KEY (id)
);

Individual与Capability:

CREATE TABLE individual_capabilities (
    id INT NOT NULL AUTO_INCREMENT,
    individual_id INT NOT NULL,
    capability_id INT NOT NULL,
    state VARCHAR(100),
    created_at DATETIME,
    PRIMARY KEY (id)
);

这里的关键原则是:

数据库中的外键关系,是对OOP组合关系的持久化表达。

数据库本身不是认知对象。


167.27 组合生命周期

复合对象需要管理生命周期。

例如:

Individual创建
    ↓
Object加载
    ↓
Attribute加载
    ↓
Knowledge加载
    ↓
Capability加载
    ↓
Method加载
    ↓
Behavior加载
    ↓
Memory加载
    ↓
Experience加载
    ↓
形成完整Individual运行对象

可以表示:

Load(I)=O+K+C+M+B+MM+ELoad(I)=O+K+C+M+B+MM+E

其中:

  • II:Individual;
  • OO:Object;
  • KK:Knowledge;
  • CC:Capability;
  • MM:Method;
  • BB:Behavior;
  • MMMM:Memory;
  • EE:Experience。

这说明Individual的加载不是只加载一条individual记录。

而是:

从持久化层恢复一个完整的复合认知对象。


167.28 组合与运行时更新

Individual运行过程中,其组成对象可以发生变化。

例如:

Individual
    ↓
Capability变化
    ↓
Method变化
    ↓
Behavior变化
    ↓
Result
    ↓
Feedback
    ↓
Memory
    ↓
Experience

最终:

Experience
    ↓
Capability Update
    ↓
Method Update

因此复合对象不是静态结构。

它可以随着运行过程进行:

创建
    ↓
加载
    ↓
组合
    ↓
运行
    ↓
修改
    ↓
保存
    ↓
更新

167.29 Individual组合体系与认知闭环

将前面的章节连接起来:

Individual
    ↓
Object
    ↓
Attribute
    ↓
State
    ↓
Relation
    ↓
Scene
    ↓
Knowledge
    ↓
Need
    ↓
Goal
    ↓
Capability
    ↓
Method
    ↓
Decision
    ↓
Behavior
    ↓
Action
    ↓
Execution
    ↓
Result
    ↓
Feedback
    ↓
Memory
    ↓
Experience

这说明OOP组合体系不是单纯的数据组织。

它实际上为ICAI认知闭环提供了对象容器。


167.30 组合体系中的对象边界

为了避免ICAI工程对象不断膨胀,必须保持明确的对象职责。

Individual
    → 个体主体

Object
    → 被认知对象

Attribute
    → 对象特征

Knowledge
    → 结构化知识

Capability
    → 能力

Method
    → 方法

Behavior
    → 行为组织

Action
    → 操作单位

Execution
    → 实际执行

Result
    → 执行结果

Feedback
    → 结果反馈

Memory
    → 历史信息

Experience
    → 结构化经验

因此:

Individual ≠ Object
Object ≠ Attribute
Knowledge ≠ Memory
Capability ≠ Method
Method ≠ Behavior
Behavior ≠ Action
Action ≠ Execution
Execution ≠ Result
Result ≠ Feedback
Feedback ≠ Experience

这些边界必须保持稳定。


167.31 继承与组合的统一模型

第166章和第167章可以组合起来形成ICAI OOP基础结构。

继承方向:

Individual
    ↓
Human
    ↓
Engineer

表示:

类型继承

组合方向:

Individual
    ├── Object
    │     └── Attribute
    ├── Knowledge
    ├── Capability
    ├── Method
    ├── Behavior
    ├── Memory
    └── Experience

表示:

对象组成

因此:

ICAI OOP=Inheritance+CompositionICAI\ OOP = Inheritance + Composition

其中:

Inheritance→TypeStructureInheritance \rightarrow Type Structure Composition→CognitiveStructureComposition \rightarrow Cognitive Structure

两者结合:

IndividualType→Individual→CognitiveObjectsIndividualType \rightarrow Individual \rightarrow CognitiveObjects

形成完整的个体对象体系。


167.32 复合对象的核心认知意义

复合对象最重要的意义,是允许ICAI从简单对象逐步构建复杂认知对象。

例如:

Attribute
    ↓
Object
    ↓
Composite Object
    ↓
Scene
    ↓
Knowledge
    ↓
Individual Cognitive Space

一个杯子可以由:

Cup
    ├── Shape
    ├── Color
    ├── Material
    └── State

形成对象。

一个桌面可以由:

Table
    ├── Cup
    ├── Book
    ├── Device
    └── Object Relations

形成复合对象。

一个场景可以由:

Scene
    ├── Table
    ├── Chair
    ├── Cup
    ├── Person
    └── Relations

形成更高层结构。

因此:

简单对象
    ↓
对象组合
    ↓
复合对象
    ↓
复杂场景

这为后续ICAI复杂场景认知提供了OOP基础。


167.33 ICAI组合体系完整模型

最终可以建立:

I=(O,K,C,M,B,MM,E)I= \left( O, K, C, M, B, MM, E \right)

同时:

O=(A,S,R,Oc)O= \left( A, S, R, O_c \right)

其中:

  • II:Individual;
  • OO:Object集合;
  • KK:Knowledge集合;
  • CC:Capability集合;
  • MM:Method集合;
  • BB:Behavior集合;
  • MMMM:Memory集合;
  • EE:Experience集合;
  • AA:Object的Attribute集合;
  • SS:Object的State;
  • RR:Object的Relation;
  • OcO_c:Object内部的子对象集合。

于是形成:

Individual
│
├── Object
│   ├── Attribute
│   ├── State
│   ├── Relation
│   └── Object
│
├── Knowledge
│
├── Capability
│
├── Method
│
├── Behavior
│
├── Memory
│
└── Experience

这就是ICAI的核心OOP组合模型。


167.34 工程架构映射

在PHP MVC工程中,可以进一步划分:

Entity
    ├── Individual
    ├── ObjectEntity
    ├── Attribute
    ├── Knowledge
    ├── Capability
    ├── Method
    ├── Behavior
    ├── Memory
    └── Experience

Repository
    ├── IndividualRepository
    ├── ObjectRepository
    ├── KnowledgeRepository
    ├── CapabilityRepository
    └── MemoryRepository

Manager / Service
    ├── IndividualManager
    ├── ObjectManager
    ├── KnowledgeManager
    ├── CapabilityManager
    └── CompositionManager

其中:

Entity
    → 表示认知对象

Repository
    → 负责持久化

Manager / Service
    → 负责对象组织和业务处理

这样可以防止Individual成为一个拥有所有数据库操作、所有认知计算和所有对象管理功能的“巨型类”。


167.35 CompositionManager

当组合关系越来越复杂以后,可以建立独立的CompositionManager。

class CompositionManager
{
    public function addObject($individual, $object)
    {
        $individual->addObject($object);
    }

    public function addKnowledge($individual, $knowledge)
    {
        $individual->addKnowledge($knowledge);
    }

    public function addCapability($individual, $capability)
    {
        $individual->addCapability($capability);
    }

    public function addMethod($individual, $method)
    {
        $individual->addMethod($method);
    }

    public function addBehavior($individual, $behavior)
    {
        $individual->addBehavior($behavior);
    }

    public function addMemory($individual, $memory)
    {
        $individual->addMemory($memory);
    }

    public function addExperience($individual, $experience)
    {
        $individual->addExperience($experience);
    }
}

这样:

Individual
    → 保存组合关系

CompositionManager
    → 管理组合过程

形成职责分离。


167.36 本章核心原则

ICAI OOP组合体系必须遵循以下原则。

第一,继承表示类型关系,组合表示对象组成。

第二,Individual可以组合多个Object。

第三,Object可以组合多个Attribute。

第四,Individual可以组合Knowledge。

第五,Individual可以组合Capability。

第六,Individual可以组合Method、Behavior、Memory和Experience。

第七,Object本身也可以继续组合Object,从而形成复合对象。

第八,复合对象可以形成对象树、场景和复杂认知结构。

第九,组合对象之间仍然保持独立的对象职责。

第十,数据库中的外键和关联表用于持久化组合关系,但数据库表本身不等于认知对象。

第十一,Individual不应该成为所有认知逻辑的巨型容器。

第十二,CompositionManager、Repository和Service可以承担对象管理和持久化职责。


167.37 总结

第167章在第166章OOP继承体系的基础上,建立了ICAI的OOP组合体系。

继承解决:

一个对象是什么类型?

组合解决:

一个对象由什么组成?

因此:

Robot
    is-a
    ↓
Individual

而:

Robot
    has-a
    ↓
Object
Capability
Knowledge
Method
Behavior
Memory
Experience

Object内部进一步形成:

Object
    ↓
Attribute
State
Relation
SubObject

于是ICAI形成了从简单对象到复杂对象的组合结构:

Attribute
    ↓
Object
    ↓
Composite Object
    ↓
Scene
    ↓
Knowledge
    ↓
Individual

同时,Individual内部形成:

Individual
    ├── Object
    ├── Knowledge
    ├── Capability
    ├── Method
    ├── Behavior
    ├── Memory
    └── Experience

因此,ICAI的OOP对象模型可以归纳为:

ICAI Object System=Inheritance+Composition+Relation+StateICAI\ Object\ System = Inheritance + Composition + Relation + State

其中:

Inheritance → 类型结构
Composition → 对象组成
Relation → 对象关联
State → 对象当前状态

第166章解决了**“个体类型如何形成层级结构”,第167章解决了“个体内部如何形成复合认知结构”**。

二者结合以后,ICAI不再只是一个由若干独立Class组成的程序,而开始形成真正具有类型层级 + 对象组成 + 认知对象集合 + 运行状态的个体OOP对象体系。

其核心结构最终可以表示为:

                    Individual
                 /      |       \
                /       |        \
          Type继承    Composition   State
             │           │
             ↓           ↓
        Individual   Cognitive Objects
                        │
       ┌────────────────┼────────────────┐
       ↓                ↓                ↓
     Object          Knowledge       Capability
       │                                  │
       ↓                                  ↓
   Attribute                            Method
       │                                  │
       ↓                                  ↓
   State / Relation                    Behavior
                                          │
                                          ↓
                                       Action
                                          │
                                          ↓
                                      Execution
                                          │
                                          ↓
                                        Result
                                          │
                                          ↓
                                       Feedback
                                          │
                              ┌───────────┴───────────┐
                              ↓                       ↓
                           Memory                 Experience

至此,ICAI已经具备了从类型继承对象组合的基础OOP结构,为后续建立更加复杂的对象关系、对象聚合、对象生命周期以及个体认知空间提供了工程基础。

Leave a Reply

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