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

createh54个月前 (01-06)技术教程47

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-

相关文章

小高分享(63)Java中的图形、图像与音频

分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为你带来小高分享(63)Java中的图形、图像与音频欢迎您的访问!Share interests, sp...

java swing开发的人人五子棋图形界面版.

上次发表了二维数组版,这次是图形界面版,算法是一模一样,就是多了个图形.运行StartGame.java,出现如图界面:然后开始自己和自己下棋:所有的代码结构放入eclipse直接运行!如需全套代码!...

每个开发人员都应该知道的 Java 命令行界面工具

在基于 IDE 的开发世界中,程序员很容易脱离 JDK 和使他们的应用程序工作的底层技术。下面列出了开发人员需要掌握的五个最有用的 Java 命令行工具,才能成为他们团队的高效成员。 1. Java编...

一些JDK自带的性能分析利器

有时候碰到服务器CPU飙升或者程序卡死之类的问题,一般都不太好定位。这类bug一般都隐藏的比较深并且还可能是偶发性的,比较棘手。对于此类问题,一般我们都有固定的分析流程。借助于JDK自带的一些分析工具...

这款工具太实用了!一键搞定JAR包的反编译、动态调试、漏洞检测

工具简介Jar-Analyzer是一款功能强大的 JAR 包分析工具,支持批量分析、SCA 漏洞检测、方法调用关系搜索、字符串搜索、Spring 组件分析、信息泄露检查等多种功能。此外,还支持CFG...

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

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