• 4面向对象之类的继承





    我们不能因为学习了面向对象编程思维,就把整个世界都想成各种各样的对象.

    面向对象得目标是大规模重用代码。
    面向对象的手段是绑定结构和函数。
    面向对象的哲学含义是给客体下定义来完成形式化抽象。 目的说白了就是为了尽可能重用代码来减少程序员工作。但是矛盾的地方在于,真实世界中的客体的定义随着主体的看法而改变,换句话,不存在固定的形式化抽象,一切都要符合环境(上下文)。最简单的例子就是,中文词的含义天天变,只有根据环境知识才能知道是什么含义。
    而代码是为了具体问题而出现的,所以不存在通用抽象,也就不存在可以无限重用的定义和逻辑。
    所以对象也就是用于计算的模型而已,技术手段是正确的(给数据绑定操作) 但是对于目标(大规模代码重用)相去甚远,能重用的应该只有为了解决问题的方法,而不是只有模型。

    另外的难点,不同人为了解决相似问题,开发出来的模型可以十万八千里,为了重用模型,修改之后又能适应新问题,于是这叫泛化,它估计你去制造全能模型,但是不仅难,还没法向后兼容,有时候就硬是要把飞机做成鱼……这就是面向对象思维的硬伤,创造出一个大家都懂,大家都认为对,大家都能拿去用的模型太难!


    面向对象要解决的就是物理世界到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");

    }

  • 相关阅读:
    IIC/I2C从地址之7位,8位和10位详解
    ARM uxtw
    ARM(CM3)的汇编指令
    WZR/XZR ARM
    LDR r, label 和 LDR r, =label的区别
    Distinguishing between 32-bit and 64-bit A64 instructions
    03JavaScript程序设计修炼之道_2019-06-18_20-39-14_事件onload&onmouseover&out
    02-CSS基础与进阶-day6_2018-09-05-20-18-21
    02-CSS基础与进阶-day5_2018-09-03-22-10-39
    02-CSS基础与进阶-day5_2018-09-03-21-41-57
  • 原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/9221747.html
Copyright © 2020-2023  润新知