从面向过程到面向对象

面向过程和面向对象已经是很成熟的编程范式,公司内最近有技术交流、分享的风气,考虑到小兄弟们普遍年轻,且部分同事以c语言起家,于是决定以面向对象范式作为分享的主题,同时借此机会整理下相关概念。

面向过程(POP,Procedure Oriented Programming)

面向过程是一种以过程为中心的编程思想,实践中需要分析出解决问题所需要的步骤,使用编程语言作为工具将这些步骤逐一实现,使用的时候依次调用。

面向对象(OOP,Object Oriented Programming)

面向对象是把问题分解、抽象为各个对象,建立对象的目的不是为了完成某一个步骤,而是为了描述某个事物在整个解决方案中的行为,对象和对象之间的消息传递分别表示事物的概念和事物之间的关系。

优缺点

一般情况下,面向过程范式相较于面向对象性能更高,主要原因是面向对象的实现往往会在类和对象中加入一些必要的机制;相比较于面向过程范式,面向对象更容易维护、扩展和复用,抽象出的类符合人类认知,更容易理解。

面向对象的三大特征

封装

现实世界的问题抽象为类,尽可能的隐藏内部实现细节,类的属性提供不同的访问权限给用户

继承

使用现有类的功能,并可以对这些功能进行扩展

多态

建立在封装和继承的基础上,为不同类型的实体提供统一的接口,使不同的对象完成某个行为时,产生出不同的状态

面向对象六大设计原则

开闭原则

面向对象设计总纲领,对扩展开放,对修改关闭。实践中,一个类的修改原因只能是因为错误,而不是需求的改变或软件的升级,需求的改变和软件升级通过创建新的类,继承并实现接口完成。

单一职责原则

一个类只承担自身特有的职责。通俗来讲即:一个类只做一件事。

里氏替换原则

基类出现的地方派生类就可以出现,且替换为派生类后不会导致任何错误和异常;派生类可以扩展基类功能,但不能改变基类原有的功能。

依赖倒置原则
  • 高层模块不能依赖底层模块,两者都应该依赖于抽象
  • 抽象不该依赖于细节
  • 细节应该依赖于抽象

这一原则并不容易贯彻,笼统来讲,工程思想为面向接口编程。实践中,底层模块的改变不该使使用该模块功能的高层模块改变。

接口隔离原则

客户端不应该依赖它不需要的接口,类与类之间的依赖应建立在最小的接口上;最小化接口,而不是建立一个庞大的接口供所有类使用;目的是解耦合,从而达到易于重构、更改和重新部署的效果。

迪米特法则

一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。工程思想:高内聚,低耦合。

你可能感兴趣的:(c++,软件工程,开发语言,面向对象,c++)