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

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-

相关文章

JavaGUI——Java图形用户界面

1、Java GUI 概述GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用图形方式显示的计算机操作用户界面,与早期计算机使用的命令行界面相比,图形界面对于...

第十三章:Java图形用户界面编程

Java图形用户界面(Graphical User Interface,GUI)编程是一种创建交互式应用程序界面的技术。通过使用GUI,开发人员可以创建具有按钮、文本框、复选框等可视化组件的应用程序。...

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

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

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

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

Java-GUI编程之绘图

很多程序如各种小游戏都需要在窗口中绘制各种图形,除此之外,即使在开发JavaEE项目时,有时候也必须"动态"地向客户 端生成各种图形、图表,比如 图形验证码、统计图等,这都需要利用AW...

Java-GUI编程之处理位图

如果仅仅绘制一些简单的几何图形,程序的图形效果依然比较单调 。 AWT 也允许在组件上绘制位图, Graphics 提供了 drawlmage() 方法用于绘制位图,该方法需要一个Image参数一一代...