要对ECS有全面的认识,需要拿它和OOP进行对比
OOP并不是一种架构,而是一种编程范式,它太过流行且和几种经典架构深度绑定
要将OOP,需要拿它和PP进行对比
OOP
OOP的起源
在OOP大规模流行之前,主流的编程方式是面向过程编程,比如C语言
面向过程关注的是过程,反映到代码中就是函数和函数调用
但随着软件变得越来越复杂,面向过程的方式就暴露了严重的问题
- 代码难以维护:一个大型软件可能有成千上万个函数,修改一个数据结构,可能会引发连锁反应,牵一发而动全身
- 代码复用性差:很难把一套逻辑原封不动地搬到另一个项目里
- 与现实世界脱节:用函数和变量来描述现实世界的复杂关系(比如,一个“人”有“姓名”、“年龄”,可以“走路”、“说话”的动作)非常别扭
为解决这些问题,OOP应运而生。它的核心理念是:将数据和对数据的操作封装在一起,形成一个独立的“对象”,让计算机程序的结构更接近人类对现实世界的认知
在C中
struct Player {
int hp;
int atk;
};
void attack(struct Player* p) {
// ...
}
数据(Player)和行为(attack)是分离的
在OOP中
class Player {
public:
int hp;
int atk;
void attack() {
// ...
}
};
数据 + 行为 = 一个对象
OOP的核心概念:类与对象
- 类(Class):可以理解为一个蓝图或模具。它定义了一类事物应该具有什么样的属性(数据)和行为(方法/函数)
- 对象(Object):根据这个蓝图创造出来的实例