面向对象VS面向过程

面向对象VS面向过程

定义

  • 面向对象(OO,Object-Oriented)
    : 程序=对象s + 消息;
    对象=算法+数据结构;消息是对对象的控制;
    每组数据有特定用途,针对每种操作。
    以现实世界中的实物(即对象)为中心来思考,最小的程序单元是类,以对象为中心

  • 面向过程(PO,Procedure-Oriented)
    : 程序=算法+数据结构;
    算法和数据结构分开设计;
    所有数据公用,一个函数可以使用任何一组数据,一组数据可被多个函数使用。
    系统设计按照功能逐步细分,最小的程序单元是函数,以函数为中心。
    面向对象和面向过程不是矛盾的,各有用途,互为补充。

使用环境

  • 面向对象
    针对对象的操作基本不变,而对象可能有很大变动
  • 面向过程
    对象基本不变,而针对对象的操作可能有很大变动,如编译器(源和中间语言基本不变,但是总是在添加新的功能进行改进和优化)

面向对象的设计语言

Java,C++,C#,Python,PHP,Ruby,Perl,Object Pascal,Objective-C,Dart,Swift,Scala,Common Lisp、Smalltalk

C和C++都可以进行面向过程和面向对象的编程,不同的是C++对面向对象直接提供语言支持,而C中只能通过传统方式手动操作对象来模拟对象行为

面向对象的产生原因

  1. 封装:
    明确标识出允许外部使用的所有成员函数和数据项,以明确区分内外
    对内:提高了私有数据安全性;
    对外:修改封装内的东西而不影响外部调用者;

  2. 继承+多态
    继承和多态必须一起说。一旦割裂,就说明理解上已经误入歧途了。
    继承:子类继承基类的方法,并做出自己的改变和/或扩展

    • 实现代码重用[^footnote];
      实践中,代码重用意义并不很大,甚至常常是有害的。因为它使得子类与基类出现强耦合。[^footnote]: 代码重用:我们通常称为代码复用, 即把一个功能写成一个模块, 以便当再次需要相同功能的时候,可以直接使用,而不用重新开发。
    • 子类可以重写、扩展基类(外部调用者可无需关注其差别,内部机制会自动把请求派发到合适的逻辑)。
      接口继承实质上是要求“做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可一视同仁的处理实现了特定接口的所有对象”——这在程序设计上,叫做归一化。

    多态:基于对象引用所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。
    多态实质上是继承的实现细节;

面向对象的软件开发过程

  • 面向对象分析(OOA,Object Oriented Analyze)
    从宏观角度概括系统应该做什么(而不是怎么做),根据事物间关系归纳出对象间关系,将具有相同属性和行为的对象抽象成类,形成粗略的模型。
  • 面向对象设计(OOD,Object Oriented Design)
    根据分析阶段形成的模型,首先进行类(包括类的关系)的设计,然后以类为基础提出程序设计的思路和方法。
  • 面向对象编程(OOP,Object Oriented Programming)
    根据之前的设计结果,用一种带有面向对象机制的计算机语言(如c++,其包含面向对象程序设计的“类”)写成程序。
  • 面向对象测试(OOT,Object Oriented Test)
    以类作为测试的基本单元。
  • 面向对象维护(OOSM,Object Oriented Soft Maintenance)
    由于对象的封装性,修改一个对象对其他对象影响很小。

在如今的大型软件设计中,这5个阶段是由不同的人分别完成的,OOP只是面向对象开发过程中很小的一部分。


参考文献

[1]《C++面向对象程序设计》,谭浩强
[2] https://stackoverflow.com/questions/2078978/functional-programming-vs-object-oriented-programming
[3] https://www.zhihu.com/question/20275578
[4] https://www.cnblogs.com/1qaz/p/6492465.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值