我们不能因为学习了面向对象编程思维,就把整个世界都想成各种各样的对象.
面向对象得目标是大规模重用代码。
面向对象的手段是绑定结构和函数。
面向对象的哲学含义是给客体下定义来完成形式化抽象。 目的说白了就是为了尽可能重用代码来减少程序员工作。但是矛盾的地方在于,真实世界中的客体的定义随着主体的看法而改变,换句话,不存在固定的形式化抽象,一切都要符合环境(上下文)。最简单的例子就是,中文词的含义天天变,只有根据环境知识才能知道是什么含义。
而代码是为了具体问题而出现的,所以不存在通用抽象,也就不存在可以无限重用的定义和逻辑。
所以对象也就是用于计算的模型而已,技术手段是正确的(给数据绑定操作) 但是对于目标(大规模代码重用)相去甚远,能重用的应该只有为了解决问题的方法,而不是只有模型。
另外的难点,不同人为了解决相似问题,开发出来的模型可以十万八千里,为了重用模型,修改之后又能适应新问题,于是这叫泛化,它估计你去制造全能模型,但是不仅难,还没法向后兼容,有时候就硬是要把飞机做成鱼……这就是面向对象思维的硬伤,创造出一个大家都懂,大家都认为对,大家都能拿去用的模型太难!
面向对象的手段是绑定结构和函数。
面向对象的哲学含义是给客体下定义来完成形式化抽象。 目的说白了就是为了尽可能重用代码来减少程序员工作。但是矛盾的地方在于,真实世界中的客体的定义随着主体的看法而改变,换句话,不存在固定的形式化抽象,一切都要符合环境(上下文)。最简单的例子就是,中文词的含义天天变,只有根据环境知识才能知道是什么含义。
而代码是为了具体问题而出现的,所以不存在通用抽象,也就不存在可以无限重用的定义和逻辑。
所以对象也就是用于计算的模型而已,技术手段是正确的(给数据绑定操作) 但是对于目标(大规模代码重用)相去甚远,能重用的应该只有为了解决问题的方法,而不是只有模型。
另外的难点,不同人为了解决相似问题,开发出来的模型可以十万八千里,为了重用模型,修改之后又能适应新问题,于是这叫泛化,它估计你去制造全能模型,但是不仅难,还没法向后兼容,有时候就硬是要把飞机做成鱼……这就是面向对象思维的硬伤,创造出一个大家都懂,大家都认为对,大家都能拿去用的模型太难!
面向对象要解决的就是物理世界到it世界的建模映射问题。
但是没有约定抽象的程度(也不好约定):你可以见山是山见水是水直接硬建模(一对一,这应该是最原始最易理解最易操作的方法),也可以抽象程度更高到大类。抽象程度的拿捏不好把控,易多样化,良莠不齐!
struct man {
int age;
char name[50] = { 0 };
};
struct myshcool:man {
char shcool[50] = { 0 };
};
struct mycompany:man {
char company[50] = { 0 };
};
void main() {
mycompany k;
k.age = 30;
strcpy(k.name, "小明");
strcpy(k.company, "腾讯");
printf("%s
", k.name);
printf("%s
", k.company);
printf("%d
", k.age);
system("pause");
}