编程范式游记
陈皓(网名“左耳朵耗子”)
资深技术专家
立即订阅
2 人已学习
课程目录
已更新 11 讲 / 共 11 讲
01 | 编程范式游记:起源
免费
02 | 编程范式游记:泛型编程
03 | 编程范式游记:类型系统和泛型的本质
04 | 编程范式游记:函数式编程
05 | 编程范式游记:修饰器模式
06 | 编程范式游记:面向对象编程
07 | 编程范式游记:基于原型的编程范式
08 | 编程范式游记:Go 语言的委托模式
09 | 编程范式游记:编程的本质
10 | 编程范式游记:逻辑编程范式
11 | 编程范式游记:程序世界里的编程范式
编程范式游记
登录|注册

06 | 编程范式游记:面向对象编程

陈皓 2019-07-16
前面我们谈了函数式编程,函数式编程总结起来就是把一些功能或逻辑代码通过函数拼装方式来组织的玩法。这其中涉及最多的是函数,也就是编程中的代码逻辑。但我们知道,代码中还是需要处理数据的,这些就是所谓的“状态”,函数式编程需要我们写出无状态的代码。
而这天下并不存在没有状态、没有数据的代码,如果函数式编程不处理“状态”这些东西,那么,状态会放在什么地方呢?总是需要一个地方放这些数据的。
对于状态和数据的处理,我们有必要提一下“面向对象编程”(Object-oriented programming,OOP)这个编程范式了。我们知道,面向对象的编程有三大特性:封装、继承和多态
面向对象编程是一种具有对象概念的程序编程范型,同时也是一种程序开发的抽象方针,它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的可重用性、灵活性和可扩展性,对象里的程序可以访问及修改对象相关联的数据。在面向对象编程里,计算机程序会被设计成彼此相关的对象。
面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对计算机下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。
目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。
现在,几乎所有的主流语言都支持面向对象,比如:Common Lisp、Python、C++、Objective-C、Smalltalk、Delphi、Java、Swift、C#、Perl、Ruby 与 PHP 等。
说起面向对象,就不得不提由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合作出版的《设计模式:可复用面向对象软件的基础》(Design Patterns - Elements of Reusable Object-Oriented Software)一书,在此书中共收录了 23 种设计模式。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编程范式游记》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(5)

  • 儒雅。
    上面的缺点不算缺点
    1.代码都需要附着在一个类上,从一侧面上说,其鼓励了类型。
    答:比如Java 本来就是强类型语言
    2.代码需要通过对象来达到抽象的效果,导致了相当厚重的“代码粘合...
    答:面向对象本身就需要抽象,要实现业务逻辑,肯定会有多个对象实际业务交互,这是避免不了的
    3.因为太多的封装以及对状态的鼓励,导致了大量不透明并在并发下出...
    答:封装的好处就是不透明,对外隐藏内部实现细节,要知道实现细节自己去查看源码就好了。对于使用者来说很多时候并不需要知道实现细节,只需要知道可以用,怎么用就好。

    2019-08-31
    2
  • 我倒觉得职责单一更能做好事情.
    按照接口协议约定,你只管用就行了,若想知道怎么实现的这些细节自己去看源码好了.
    不过这个对于个人的发展就不太好了:
    1. 只做好自己的事情,导致自己变得目光狭隘,
    2.按照接口约定去与其他对象交互,而现实世界并非一切都按照约定发展.
    2019-08-20
    2
  • 天使也有爱
    入行两年初级程序员看这类文章还是有些吃力
    2019-07-25
    2
  • Fs
    这个时候,也可以使用依赖倒置和反转控制的思想来解决问题:开发一个插件模型、工作流引擎和 Pub/Sub 系统,让业务...

    这个道理都懂,有没有实际的例子?如何在各个系统之间实现,通过提供出去的可扩展的jar包来扩展,富客户端。这些方式都不是很优雅啊。



    2019-08-23
  • 臭臭
    耗子哥,请问下class Order里面的这个strategy是干嘛的? 我看没有被用到吖
    2019-07-24
    1
收起评论
5
返回
顶部