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

createh56个月前 (01-06)技术教程95

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

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

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

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

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

上图也可以清晰地看到

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

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

数据与函数的耦合:


6 从代码的结构去理解:

附表格:

sn

理解角度

面向过程

面向对象

0

共性

都有模块分解、抽象、封装,都有面向接口、高内聚、低耦合的要求

1

模块抽象与分解的对象

任务或问题域中的动词

任务或问题域中的名词

2

模块逐级分解后的组合结构

树型

图型

3

数据与子模块的关系

分离
数据与函数:分离式耦合
数据与树型代码结构的耦合

封装
数据成员与成员函数:封装式耦合
数据耦合在图型代码结构的结点中

4

面向接口与ADT

用头文件去描述模块封装后的接口或ADT

ADT直接用类描述

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-

相关文章

java课程设计大作业 2048小游戏(设计实现文档+源代码)

目录一、 实现方案3二、 具体代码及程序框图分析4三、 参考资料14一、 实现方案本游戏采用Java语言编写,使用Eclipse编译器, jdk1.7.0_51编译环境。游戏的UI主要运用Java图形...

Java程序员必须掌握的15个设计模式,特点和使用场景汇总整理!

设计模式是一种广泛使用的编程思想,它是一种用于解决特定问题的经验性方法,提供了一套通用的解决方案,可用于不同的应用场景,可以帮助我们解决常见的问题并提高代码的可重用性和可维护性。设计模式分为三类:创建...

Java快速处理图片的方式(总结)

我们处理处理图片常见的一些处理操作有:生成图片缩略图(等比例缩放、指定图片大小缩放、按比例绽放)、裁判图片、旋转图片、给图片添加水印(文字水印、图片水印)、批量处理图片、水平翻转图片、图片转成黑白。今...

Java响应式编程 第五篇 flatMap vs map

1 作用不同1.2 映射?展平?map 只执行映射flatMap 既执行映射,也执行展平什么叫只能执行映射?我理解是把一个数据执行一个方法,转换成另外一个数据。举个例子:mapper 函数把输入的字符...