程序设计方法(编程范式):解决问题的思想(视点、思路、出发点)、组织代码的方法。
面对复杂性(问题和代码库的复杂度),问题如何简化?代码如何组织?如何提高可靠性和可扩展性?结构化、模块化,代码块可复用:首先是功能模块,然后又有了对象模块(功能模块的进一步分类),然后又是什么设计原则,设计模式。
下表从面向过程与面向对象的对比出发来理解各种编程范式:
表格:
面向过程(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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号