第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结构,为后续建立更加复杂的对象关系、对象聚合、对象生命周期以及个体认知空间提供了工程基础。