第166章 ICAI OOP继承体系
166.1 提出背景
在前面的章节中,ICAI已经建立了对象、属性、状态、关系、场景、能力、方法、决策、行为、动作、执行、结果、反馈、记忆、经验、风险、冲突、诊断、保护和修复等一系列认知对象。
但是,当ICAI开始描述真实的“个体”时,会出现一个新的工程问题。
不同个体之间既存在大量共同结构,又存在明显的类型差异。
例如,可以定义:
- 人类个体;
- 动物个体;
- 机器人个体;
- 软件代理个体;
- 设备控制个体。
这些个体虽然类型不同,但都具有某些共同结构:
个体标识
个体名称
个体状态
个体属性
个体能力
个体方法
个体行为
个体记忆
个体经验
如果每一种个体都重新编写完整代码,就会产生大量重复结构。
例如:
HumanIndividual
属性
状态
能力
方法
行为
记忆
经验
RobotIndividual
属性
状态
能力
方法
行为
记忆
经验
SoftwareIndividual
属性
状态
能力
方法
行为
记忆
经验
这三个类中会出现大量相同代码。
因此,ICAI需要建立一个更加基础的对象:
Individual基类。
Individual基类用于定义所有ICAI个体共有的结构,而具体个体类型则通过继承Individual获得这些共同结构,并在此基础上增加自身特有的属性、方法、能力和行为。
因此,本章建立ICAI的OOP继承体系:
Individual
↓
个体类型
↓
具体个体
进一步形成:
Individual
↓
类型继承
↓
属性继承
↓
方法继承
↓
能力继承
↓
行为继承
↓
多层继承
继承由此成为ICAI将“个体分类理论”转换为“对象工程结构”的重要机制。
166.2 Individual基类
166.2.1 Individual定义
**Individual(个体)**是ICAI中能够拥有自身属性、状态、能力、方法、行为、记忆和经验,并能够参与认知、决策和执行过程的基本认知对象。
Individual不是某一种具体个体。
它表示所有个体共同具有的抽象结构。
可以定义:
I=(ID,T,A,S,C,M,B,MM,E)I=(ID,T,A,S,C,M,B,MM,E)
其中:
- II:Individual,个体对象;
- IDID:个体唯一标识;
- TT:个体类型;
- AA:个体属性;
- SS:个体状态;
- CC:个体能力;
- MM:个体方法;
- BB:个体行为;
- MMMM:个体记忆;
- EE:个体经验。
因此:
Individual
├── ID
├── Type
├── Attribute
├── State
├── Capability
├── Method
├── Behavior
├── Memory
└── Experience
Individual基类并不意味着所有个体拥有完全相同的能力和行为。
它只规定:
一个ICAI个体应该具有哪些基础对象结构。
166.3 Individual基类的工程职责
Individual基类主要负责保存个体的共同结构。
例如:
class Individual
{
protected $id;
protected $type;
protected $attributes;
protected $state;
protected $capabilities;
protected $methods;
protected $behaviors;
protected $memories;
protected $experiences;
public function __construct($id, $type)
{
$this->id = $id;
$this->type = $type;
$this->attributes = array();
$this->state = array();
$this->capabilities = array();
$this->methods = array();
$this->behaviors = array();
$this->memories = array();
$this->experiences = array();
}
public function getId()
{
return $this->id;
}
public function getType()
{
return $this->type;
}
public function addAttribute($attribute)
{
$this->attributes[] = $attribute;
}
public function addCapability($capability)
{
$this->capabilities[] = $capability;
}
public function addMethod($method)
{
$this->methods[] = $method;
}
public function addBehavior($behavior)
{
$this->behaviors[] = $behavior;
}
public function addMemory($memory)
{
$this->memories[] = $memory;
}
public function addExperience($experience)
{
$this->experiences[] = $experience;
}
}
这里没有使用现代PHP高版本特有的语法,而采用PHP 5.6 / PHP 7.0可以直接支持的OOP结构。
需要特别注意:
Individual不是把所有认知逻辑全部写入一个巨大类。
它只是个体的基础容器和共同行为入口。
例如:
Individual
↓
Capability对象
↓
Method对象
↓
Decision对象
↓
Behavior对象
↓
Action对象
↓
Execution对象
这样可以保持ICAI对象之间的职责分离。
166.4 个体类型子类
166.4.1 个体类型定义
**个体类型(Individual Type)**是按照个体结构、能力、行为和运行方式对Individual进行分类形成的对象类型。
例如:
Individual
├── Human
├── Animal
├── Robot
├── Device
└── SoftwareAgent
其中:
Human extends Individual
Animal extends Individual
Robot extends Individual
Device extends Individual
SoftwareAgent extends Individual
这些类型都继承Individual。
166.5 类型继承
**类型继承(Type Inheritance)**是指一个具体个体类型继承另一个更一般个体类型结构的机制。
最基本关系为:
Individual
↓
Human
↓
Engineer
其中:
- Individual是基础类型;
- Human是Individual的子类型;
- Engineer是Human的进一步子类型。
因此:
Engineer⊂Human⊂IndividualEngineer \subset Human \subset Individual
这里的“⊂”表示类型包含关系。
工程上可以表示:
class Human extends Individual
{
}
进一步:
class Engineer extends Human
{
}
于是:
Engineer
↓
Human
↓
Individual
Engineer自动获得Human和Individual中允许继承的结构。
166.6 属性继承
166.6.1 属性继承定义
**属性继承(Attribute Inheritance)**是指子类自动获得父类定义的共同属性结构。
Individual可以定义:
id
type
state
attributes
Human可以增加:
name
age
language
Engineer进一步增加:
skill
profession
project
于是形成:
Individual
id
type
state
attributes
Human
name
age
language
Engineer
skill
profession
project
Engineer对象实际上拥有:
Individual属性
+
Human属性
+
Engineer属性
这就是属性继承。
166.7 属性继承与认知结构
ICAI中的属性继承不能简单理解为“复制变量”。
它表达的是一种认知结构上的一般性与特殊性关系。
例如:
个体
有状态
人
是个体
有年龄
工程师
是人
有专业技能
因此:
Individual
↓
Human
↓
Engineer
不仅是代码继承关系,也是认知分类关系。
可以表示为:
A(E)=A(I)∪A(H)∪A(Es)A(E)=A(I)\cup A(H)\cup A(E_s)
其中:
- A(E)A(E):Engineer的属性集合;
- A(I)A(I):Individual继承的属性集合;
- A(H)A(H):Human增加的属性集合;
- A(Es)A(E_s):Engineer自身特有属性集合。
因此:
子类属性
=
父类属性
+
本类新增属性
166.8 方法继承
166.8.1 方法继承定义
**方法继承(Method Inheritance)**是指子类获得父类可继承方法的机制。
例如Individual具有:
addAttribute()
addCapability()
addMethod()
addBehavior()
addMemory()
addExperience()
那么Human继承Individual以后,可以直接使用这些方法。
class Human extends Individual
{
}
Human对象可以直接执行:
$human->addAttribute($attribute);
$human->addCapability($capability);
$human->addMethod($method);
因此不需要在Human中重复实现。
166.9 方法继承与认知能力
方法继承的意义不仅在于减少代码重复,更重要的是建立共同认知操作的统一入口。
例如所有个体都可能需要:
保存属性
加载状态
增加能力
增加方法
记录行为
保存记忆
保存经验
这些操作属于Individual层级。
而某种个体的特殊行为则属于具体类型。
例如:
Individual
manageMemory()
Human
communicate()
Robot
move()
SoftwareAgent
processTask()
于是形成:
共同方法
↓
Individual
特殊方法
↓
Individual Type
这样能够避免把个体特殊逻辑错误地放入基类。
166.10 方法覆盖
子类除了继承父类方法之外,还可能需要对某些方法进行特殊处理。
这称为方法覆盖(Method Override)。
例如Individual定义:
class Individual
{
public function execute()
{
return 'execute';
}
}
Robot可能需要使用不同的执行逻辑:
class Robot extends Individual
{
public function execute()
{
return 'robot_execute';
}
}
此时:
Individual::execute()
↓
Robot::execute()
Robot使用自己的执行实现。
但方法覆盖必须遵守一个基本原则:
子类改变的是实现方式,不应该破坏父类所表达的基本对象职责。
166.11 个体类型与Capability
前面第159章已经建立Capability类。
Capability表示:
个体在特定条件、状态和范围下能够完成某种任务的能力。
因此Capability应该属于Individual的组成结构,而不是简单写死在某一个类型类中。
例如:
Human
Capability
Walking
Communication
ToolOperation
Robot
Capability
Walking
ObjectGrasping
Navigation
因此:
Individual
↓
Capability
↓
Condition
↓
State
↓
Verification
类型继承只提供基础结构。
具体能力仍然应该通过Capability对象进行描述。
这可以防止出现:
class Robot extends Individual
{
// 把所有能力全部写死
}
这种过度耦合结构。
166.12 个体类型与Method
第160章定义Method为解决任务的具体方法。
不同类型个体可以拥有不同的方法集合。
例如:
Individual
Method
Human
WalkingMethod
ToolMethod
Robot
MotorWalkingMethod
MechanicalGraspingMethod
但Method本身仍然应该是独立对象。
因此:
Individual
↓
拥有Method
而不是:
Individual
↓
直接等于Method
这一区分非常重要。
Individual是执行主体。
Method是完成任务的方法。
二者不能混为一类对象。
166.13 多层继承
166.13.1 多层继承定义
**多层继承(Multilevel Inheritance)**是指继承关系连续存在多个层级。
例如:
Individual
↓
Animal
↓
Mammal
↓
Dog
或者:
Individual
↓
Machine
↓
Robot
↓
MobileRobot
PHP中可以直接表示:
class Animal extends Individual
{
}
class Mammal extends Animal
{
}
class Dog extends Mammal
{
}
此时Dog可以获得继承链上的公共结构。
Dog
↓
Mammal
↓
Animal
↓
Individual
166.14 多层继承的认知意义
多层继承可以表达ICAI中的层级分类。
例如:
Individual
↓
Animal
↓
Mammal
↓
Dog
它表达:
Dog 是 Mammal
Mammal 是 Animal
Animal 是 Individual
因此:
Dog → Mammal → Animal → Individual
是一条类型认知链。
这种结构使ICAI能够从一般概念逐步进入特殊概念。
可以表示为:
Tn⊂Tn−1⊂⋯⊂T1⊂IndividualT_n \subset T_{n-1} \subset \cdots \subset T_1 \subset Individual
其中:
- TnT_n:最具体的个体类型;
- Tn−1T_{n-1}:上一层类型;
- T1T_1:直接类型;
- Individual:最高层个体基类。
166.15 多层继承中的属性累积
多层继承会形成属性逐级增加的结构。
例如:
Individual
id
type
state
Animal
species
Mammal
temperature
Dog
breed
最终Dog具有:
id
type
state
species
temperature
breed
可以表示为:
An=⋃i=0nAiA_n=\bigcup_{i=0}^{n}A_i
其中:
- AnA_n:最终子类属性集合;
- AiA_i:第i层类型定义的属性集合;
- ⋃\bigcup:集合合并。
因此,多层继承形成:
基础属性
↓
类型属性
↓
专业属性
↓
具体属性
166.16 多层继承中的方法累积
方法同样可以逐级继承。
例如:
Individual
manageState()
Animal
move()
Mammal
breathe()
Dog
bark()
最终Dog拥有:
manageState()
move()
breathe()
bark()
因此:
Dog
↓
bark()
breathe()
move()
manageState()
这构成了一个逐级扩展的方法体系。
166.17 继承不是复制
ICAI工程中必须明确区分:
继承不是对象复制。
例如:
Individual
↓
Human
不是把Individual对象复制一份成为Human。
继承描述的是:
类型关系
而对象实例化描述的是:
具体对象产生
例如:
$human = new Human(1, 'human');
这里产生的是一个Human对象。
其类型关系为:
$human
↓
Human
↓
Individual
因此:
Class继承
≠
Object复制
这是ICAI OOP工程必须保持的基本原则。
166.18 继承与组合的区别
ICAI中还必须区分继承和组合。
继承表示:
is-a
例如:
Robot 是 Individual
Human 是 Individual
组合表示:
has-a
例如:
Individual 拥有 Capability
Individual 拥有 Memory
Individual 拥有 Experience
Individual 拥有 Method
因此:
Robot
is-a
↓
Individual
Robot
has-a
↓
Capability
Robot
has-a
↓
Memory
如果把所有关系都设计成继承,就会导致对象体系失去结构边界。
所以ICAI应当遵循:
类型关系 → 继承
对象组成 → 组合
对象之间关联 → Relation
166.19 ICAI个体继承模型
综合以上结构,可以建立ICAI基本继承模型:
Individual
│
┌──────────────────┼──────────────────┐
↓ ↓ ↓
Human Animal Robot
│ │ │
↓ ↓ ↓
Professional Mammal MobileRobot
│ │
↓ ↓
Engineer Dog
而每一个类型内部又可以组合:
Individual
│
├── Attribute
├── State
├── Capability
├── Method
├── Behavior
├── Memory
└── Experience
由此形成:
类型继承
+
对象组合
+
关系连接
三者共同构成ICAI个体对象体系。
166.20 ICAI OOP对象结构
可以进一步建立:
class Individual
{
protected $id;
protected $type;
protected $attributes;
protected $state;
protected $capabilities;
protected $methods;
protected $behaviors;
protected $memories;
protected $experiences;
}
class Human extends Individual
{
protected $language;
protected $age;
}
class Robot extends Individual
{
protected $device;
protected $powerState;
}
class SoftwareAgent extends Individual
{
protected $process;
protected $runtimeState;
}
这里的关键不是代码数量,而是职责边界。
Individual定义共同结构:
个体身份
个体类型
个体属性
个体状态
个体能力
个体方法
个体行为
个体记忆
个体经验
Human、Robot、SoftwareAgent只增加自身类型特征。
166.21 Individual与认知运行时
当ICAI进入运行阶段时,Individual可以成为多个认知对象的宿主。
其基本运行过程可以表示为:
Individual
↓
Current State
↓
Need
↓
Goal
↓
Capability
↓
Method Candidates
↓
Decision
↓
Behavior
↓
Action
↓
Execution
↓
Result
↓
Feedback
↓
Memory
↓
Experience
↓
Capability / Method Update
因此,Individual不是单纯的“用户资料对象”。
它是ICAI认知运行过程中的主体对象。
166.22 类型继承与运行时多态
当不同个体类型都继承Individual时,ICAI可以通过统一的Individual接口处理不同个体。
例如:
function runIndividual($individual)
{
return $individual->execute();
}
传入Human:
runIndividual(Human)
传入Robot:
runIndividual(Robot)
传入SoftwareAgent:
runIndividual(SoftwareAgent)
系统可以保持统一的调用结构:
Individual接口
↓
具体类型实现
而不同类型内部采用不同执行方式。
这种机制称为多态(Polymorphism)。
在ICAI中,多态使认知控制层不需要为每一种个体建立完全独立的调度结构。
166.23 继承与决策系统
第161章已经建立Decision。
Decision面对的不是“类”,而是运行时的Candidate。
例如:
Individual
↓
Capability
↓
Method Candidate
↓
Decision
因此继承结构提供的是:
个体是什么类型
Decision提供的是:
当前选择什么
两者职责不同。
例如:
Robot
↓
拥有多个Capability
↓
产生多个Method Candidate
↓
Decision
↓
选择Method
所以:
Inheritance解决“是什么”
Decision解决“选什么”
Method解决“怎么做”
Behavior解决“执行什么”
166.24 继承与能力差异
同一父类下的不同子类可以具有不同能力。
例如:
Individual
├── Human
│ ├── Communication
│ └── ToolOperation
│
└── Robot
├── ObjectGrasping
└── Navigation
因此不能简单定义:
Human = 一组固定能力
Robot = 一组固定能力
更准确的结构应该是:
Human Type
↓
Individual Capability Objects
Robot Type
↓
Individual Capability Objects
这样具体能力仍然可以受到:
Condition
State
Range
Verification
影响。
所以:
继承定义类型基础,Capability定义当前能力。
166.25 继承与状态
类型继承同样不能代替State。
例如两个Robot虽然都是:
Robot
但可能分别处于:
Ready
和:
Failed
因此:
Class Type
≠
Runtime State
即:
Robot
+
State(Ready)
和:
Robot
+
State(Failed)
属于同一类型,但处于不同运行状态。
这说明:
类型是结构稳定性,状态是运行变化性。
166.26 继承与经验
经验同样不应该直接等同于类型。
例如两个Robot都属于:
Robot
但是:
Robot A
Experience 1
Experience 2
Experience 3
Robot B
Experience 4
Experience 5
它们的经验可能完全不同。
因此:
Type
→ 定义共同结构
Experience
→ 记录个体历史形成的经验
这保证ICAI能够同时表示:
类型共性
+
个体差异
166.27 数据库工程映射
OOP继承最终需要映射到数据库中的持久化结构。
可以建立基础个体表:
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)
);
个体类型可以通过类型字段表示:
human
animal
robot
software_agent
而具体对象结构则通过独立表保存。
例如:
individuals
↓
individual_attributes
individuals
↓
individual_capabilities
individuals
↓
individual_methods
individuals
↓
individual_behaviors
individuals
↓
individual_memories
individuals
↓
individual_experiences
因此数据库不需要机械地把整个继承树复制成大量重复表。
166.28 IndividualManager
为了避免Individual基类承担数据库操作,可以建立独立的管理对象:
class IndividualManager
{
protected $repository;
public function __construct($repository)
{
$this->repository = $repository;
}
public function save($individual)
{
return $this->repository->save($individual);
}
public function load($id)
{
return $this->repository->find($id);
}
public function delete($id)
{
return $this->repository->delete($id);
}
}
这样形成:
Individual
↓
认知对象
IndividualManager
↓
对象管理
IndividualRepository
↓
数据库持久化
从而保持:
Entity
Service
Repository
Database
之间的职责分离。
166.29 继承体系的完整运行模型
ICAI的个体继承体系可以总结为:
Individual
↓
定义共同个体结构
↓
个体类型
↓
继承共同属性
↓
继承共同方法
↓
增加类型特有属性
↓
增加类型特有方法
↓
组合Capability
↓
组合Method
↓
组合Behavior
↓
组合Memory
↓
组合Experience
↓
进入认知运行
因此:
Individual=Type+CommonStructure+SpecificStructure+CognitiveObjectsIndividual = Type + CommonStructure + SpecificStructure + CognitiveObjects
其中:
- TypeType:个体类型;
- CommonStructureCommonStructure:所有个体共同结构;
- SpecificStructureSpecificStructure:具体类型特有结构;
- CognitiveObjectsCognitiveObjects:能力、方法、行为、记忆、经验等认知对象。
166.30 ICAI继承体系基本原则
ICAI OOP继承体系必须遵循以下原则。
第一,Individual是个体基类,不是具体个体。
第二,子类通过继承获得共同结构,而不是复制对象。
第三,属性继承表达类型结构的逐级扩展。
第四,方法继承表达共同操作的统一能力。
第五,子类可以增加特有属性和方法。
第六,方法覆盖只能改变实现,不应破坏对象基本职责。
第七,多层继承用于表达稳定的类型分类关系。
第八,Capability、Method、Behavior、Memory、Experience等属于Individual的认知对象组成,不应全部写死在继承体系中。
第九,类型、状态、能力、经验必须保持概念分离。
第十,继承表示is-a关系,组合表示has-a关系,Relation表示对象之间的关联关系。
最终形成:
继承 → 类型结构
组合 → 对象组成
关系 → 对象关联
状态 → 运行变化
能力 → 可执行条件
方法 → 解决路径
行为 → 执行组织
记忆 → 历史信息
经验 → 结构化学习结果
166.31 总结
第166章建立了ICAI的OOP继承体系。
Individual是ICAI所有个体类型的基础对象。它定义个体共同具有的身份、类型、属性、状态、能力、方法、行为、记忆和经验等基本结构。
在此基础上,可以通过类型继承形成:
Individual
↓
Individual Type
↓
Specific Type
↓
Concrete Individual
属性继承解决:
共同属性如何复用
方法继承解决:
共同操作如何复用
多层继承解决:
一般类型如何逐级形成特殊类型
而Capability、Method、Behavior、Memory、Experience等对象则通过组合方式进入Individual。
因此,ICAI个体工程结构不是简单的:
Individual → 子类
而是:
Individual
│
┌──────┴──────┐
↓ ↓
类型继承 类型特征
│
↓
Concrete Individual
│
┌─────────┼─────────┐
↓ ↓ ↓
Capability Method Behavior
│ │ │
└─────────┼─────────┘
↓
Cognitive Runtime
↓
Result → Feedback → Memory
↓
Experience
↓
Capability / Method
Update
由此,ICAI第一次建立了从**“个体理论”到“个体类体系”**的直接工程映射。
其核心关系可以概括为:
Individual→Type→InheritanceIndividual \rightarrow Type \rightarrow Inheritance
以及:
Individual→Composition→CognitiveObjectsIndividual \rightarrow Composition \rightarrow CognitiveObjects
前者解决个体类型的结构继承问题,后者解决个体认知对象的组成问题。
二者结合以后,ICAI才能形成既具有统一基础结构,又能够表达不同个体差异的OOP运行体系。
下一阶段需要进一步解决的问题是:当一个Individual拥有大量Capability、Method、Behavior、Memory和Experience以后,如何通过统一的对象接口管理这些对象,并使不同层级的继承对象能够进入同一个ICAI认知运行环境。这将进入下一章的ICAI个体对象接口与多态运行体系。