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

第166章 ICAI OOP继承体系

第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个体对象接口与多态运行体系

Leave a Reply

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