编程思想|深入理解面向过程与面向对象的区别

摘要:sn理解角度面向过程面向对象0共性都有模块分解、抽象、封装,都有面向接口、高内聚、低耦合的要求1模块抽象与分解的对象任务或问题域中的动词任务或问题域中的名词2模块逐级分解后的组合结构树型图型3数据与子模块的关系分离数据与函数:分离式耦合数据与树型代码结构的耦合

1 从抽象的角度去理解面向过程与面向对象:

2 从模块化的角度去理解面向过程与面向对象:

3 面向对象是面向过程的更高一层次的抽象:

4 用表格总结一下面向过程与面向对象的区别:

5 从数据约束的角度去理解

上图也可以清晰地看到

5.1 面向过程:子模块的树状结构,子模块与数据之间的耦合关系。

5.2 面向对象:子模块(类)之间的图状结构,数据耦合在类内作为数据成员。

数据与函数的耦合:

6 从代码的结构去理解:

附表格:

sn理解角度面向过程面向对象0共性都有模块分解、抽象、封装,都有面向接口、高内聚、低耦合的要求1模块抽象与分解的对象任务或问题域中的动词任务或问题域中的名词2模块逐级分解后的组合结构树型图型3数据与子模块的关系分离
数据与函数:分离式耦合
数据与树型代码结构的耦合封装
数据成员与成员函数:封装式耦合
数据耦合在图型代码结构的结点中4面向接口与ADT用头文件去描述模块封装后的接口或ADTADT直接用类描述5模块分解方式自顶向下自底向上6模块的颗粒度相对较小相对较大7代码复用有代码复用更好8约束思想约束代码指令方向(结构化控制语句形成一个入口一个出口结构)约束数据作用域(类作用域)9高内聚、低耦合完成一个功能的代码内聚为一个函数处理相同数据对象的多个函数与其处理的数据对象一起内聚为一个类10分类处理相同数据对象的多个函数放到同一个头文件中,如stack.h函数的二次分类,将处理相同数据对象的多个函数聚合成一个类,如stack类11抽象层次相对低一层相对高一层12编译一一对应汇编代码编译拆解封装,类拆解为结构,函数添加结构为参数,两者都有类作用域13代码扩展和维护需求变动,功能改变,不容易扩展容易扩展,新建子类,重写虚函数即可14类比产品生产按工艺流程生产一个产品按部件组装一个产品15适应性天然适合流程性强的小问题(如嵌入式)
面对一个问题,是按步骤、过程、功能分解为第一选择。天然适合模块性强的大系统,接口很重要(面向接口编程)。
面对一个问题,按构建模块分解为第一选择。
图形用户界面组件能很好地映射到类上。16实例1:人吃饭eat(person, rice);person.eat(rice);

17

实例2:
大象放冰箱

bool push(冰箱,大象);

视角是怎么放的问题,准备一个冰箱、一个大象,准备一把刀把大象切小…
关注的是如何做?也就是过程,是一种分而治之的思路,一个大的函数,不断地分解为小的函数。

冰箱.open;
冰箱.push(大象);
冰箱.close;
视角是冰箱,冰箱可以做什么。

关注的是数据(主体),这些数据可以做什么?以及一种数据上的抽象(类),比如对象由数据和行为(接口)构成,而对象本身也是一种数据,所以无论抽象、继承、封装其实都是针对的数据,因为行为也是数据的一部分。

-End-

来源:紫璇教育分享

相关推荐