编程范式:彻底理解面向过程与面向对象

程序设计方法(编程范式):解决问题的思想(视点、思路、出发点)、组织代码的方法。

面对复杂性(问题和代码库的复杂度),问题如何简化?代码如何组织?如何提高可靠性和可扩展性?结构化、模块化,代码块可复用:首先是功能模块,然后又有了对象模块(功能模块的进一步分类),然后又是什么设计原则,设计模式。

下表从面向过程与面向对象的对比出发来理解各种编程范式:

编程范式:彻底理解面向过程与面向对象

表格:


面向过程(Procedure Oriented)

面向对象(Object Oriented)


核心

以功能为中心

面向功能

以数据为中心,类是表现数据的工具

模块

函数

高内聚、松耦合

类对象

高内聚、松耦合


模块构建

函数:由顺序、分支、循环三类结构来构建实现结构化

也称“结构化”程序设计

抽象、封装(识别对象及其属性、方法)


问题被看作一系列需要完成的任务。强调动词,名词也可动词化

强调名词,动词也可名词化(过程中的行为也可以归属到不同主体,函数归属到对象)

模块搭建

数据+算法(函数+函数+…)

对象(及方法调用、属性引用)+对象(及方法调用、属性引用)+…

思想(过程)

自顶向下
层层分解

函数→子函数→子子函数→…

自顶向下分解:设计类的横向组合关系:part-of, has-a, uses-a, member-of, depend-on

自底向上抽象:设计类的层次继承关系,is-a, 从具体到抽象,从抽象到具体

从问题领域的事物到软件模型中的对象的抽象





自底向上
层层实现

子函数→父函数→父父函数→…

因复杂的关系和代码重用性要求→设计模式

先父类、后子类

从对象到类的抽象





函数调用
实现问题求解



由类方法调用
实现问题求解

从子类到父类的抽象







优缺点

需求变动,功能改变

需求分析彻底。


不容易修改和扩展

功能改变,对象一般不会有大的变化。



容易修改:新建子类,重写虚函数即可。
把功能以对象为基本单位进行分类,当需要添加功能时,只需修改相应的类和极小的其他部分即可。

适应性

天然适合流程性强的小问题(如嵌入式)
面对一个问题,是按步骤、过程、功能分解为第一选择。

天然适合模块性强的大系统,接口很重要(面向接口编程)。
面对一个问题,按构建模块分解为第一选择。
图形用户界面组件能很好地映射到类上。

实例↓






人吃饭

eat(person, rice);

person.eat(rice);

构建计算系统

输入→处理→输出

输入设备+CPU(控制器+处理器)+输出设备

大象放冰箱

bool push(冰箱,大象);

冰箱.open();






冰箱.push(大象);






冰箱.close();




视角是怎么放的问题,准备一个冰箱、一个大象,准备一把刀把大象切小…

视角是冰箱,冰箱可以做什么。


关注的是如何做?也就是过程,是一种分而治之的思路,一个大的函数,不断地分解为小的函数。

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

计算圆的面积和周长

double area(double radius)

circle.area();

double circum(double radius)

circle.circum();







其它

重构与函数提取:
可以不要求一步到位,这样可以使用重构的方式,逐步抽离出一些可重用的功能或函数。

面向对象原则↓(因为面向大型系统,所以有了复杂性,有了所谓设计原则和模式)


1 迪米特法则:一个软件实体应该尽可能少的与其他实体发生相互作用。




2 合成聚合利用原则:尽量使用合成、聚合,而不是继承关系达到复用目的。




3 接口隔离原则:为客户端提供尽可能小的单独接口中,不要提供大的总接口。




4 开闭原则:对扩展开放,对修改关闭。




5 里氏代换原则:任何基类可以出现的地方,子类一定可以出现。




6 依赖倒转原则:依赖于抽象,不要依赖于实现。


将函数整合起来 - 高阶函数(函数做参数或返回值,如map, filter,g(f(x))的格式,filter(readFile(f)))→函数式编程(数据与功能进行松散的耦合以及泛型函数);

数据与操作(函数或算法)的关系


耦合:如类的封装;


分离:通过模板、迭代器,实现算法与容器的分离(泛型编程),与C++ STL

-End-

展开阅读全文

页面更新:2024-04-11

标签:过程   子类   范式   大象   分解   抽象   函数   冰箱   模块   接口   对象   原则   关系   功能   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top