面向对象的思想:产品经理需要知道的技术知识

37 评论 96879 浏览 522 收藏 9 分钟

作为产品经理,了解面向对象思想,更好地理解开发人员的思维,与开发人员更好地沟通,实现产品设计、开发过程的流畅。

对于产品经理来说,了解了面向对象的思想才会更容易理解开发人员的程序思维。系统的构建过程就是对象的构建过程,了解了这些与程序人员的沟通会更加顺畅。程序人员要实现面向对象的开发(OOP)就要先做好面向对象的设计(OOD),要做好面向对象的设计(OOD)就要先做好面向对象的分析(OOA),只有理解了什么是面向对象的思想,才能更多的参与到产品的分析、设计、开发中来,赢得更多的尊重。

0

90年代的开发人员是不知道什么是面向对象的,那时大家还在用BASIC和C语言进行开发,程序都是一条条代码写出来的,编程也是一件非常苦逼和有技术含量的事,当时硬件的发展还不够,开发人员的关注点是内存的占用率和文件大小。随着社会的发展,硬件变得越来越廉价,程序人员的关注点变为软件的优化,软件开发思想也从面向过程式的开发转为面向对象式的开发。

面向过程与面向对象

面向过程:面向过程强调的是“过程”,体现的是操作流程。

如:早上起床的过程,1洗脸、2刷牙、3准备早餐、4吃早餐、5出门上班。面向过程的开发思想与人的思维逻辑过程很相似,但不易于了解事物的整体。面向过程的开发语言有BASIC、C。

图片1

面向对象:谈面向对象就先要了解什么是对象,对象是事物存在的实体。

如:人、车、房、鸟等。对象可以划分为动态部分和静态部分,动态就是对象的行为,静态就是对象的特征。如鸟的飞、叫、吃食,这些是行为;鸟有嘴、翅膀、瓜子,这些是对象的特征,我们把行为叫做方法,把特性叫做属性。面向对象的开发语言有JAVA、C#等。

面向过程过多的强调流程,关注细节就容易忽略整体,当我们只关注一个点时是很难了解事物的全貌,不利于大系统的开发。面向对象关注的是系统中的实体及实体间信息的交互,会更宏观的了解事物,有利于大系统的开发。

细说面向对象

对象就是实体,在系统中很多实体是有共性的(相同的特征与行为),把共性抽象出来就产生了“类”,类的具体化就是对象,对象的抽象就是类。

例如,一只大象是一个对象,大象的行为有喝水、走路、吃饭等,特征有长鼻子、四条腿、象牙等,把这些共性抽象成大象类。(类的方法:喝水、走路、吃饭;类的属性:长鼻子、四条腿、象牙),对于没有象牙的大象属于个性化对象,不属于大象类。软件工程的一个重要思想就是“高内聚、低耦合”,它是判断设计好坏的标准,应用于面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。

图片2

通过高内聚可以更好的增强对象内部的粘性,将复杂性交给对象内部解决,对外只需留有接口。对象与对象间的交互信息尽量减少,降低信息的关联性,通过低耦合可以有效的降低对象间的依赖,降低理解成本及交互成本。

面向对象的三个基本特性:封装、继承、多态。

封装是对象的最重要特性,对象的实现细节都被封装在类中,对于用户是隐藏的。

类与类之间通过消息进行信息的传递,类中对内的方法与属性是私有的,对向的方法与属性是公有的,只有公有的方法与属性才能与外部进行交互。

如:汽车,用户是不用关心汽车发动机、制动系统与导航系统,用户是通过方向盘、各种开关、刹车和油门与汽车进行交互,用户无须了解汽车的工作原理。

图片3

继承是对象的另一个重要特性,类与类之间是可以有继承关系的,子类继承了父类,就拥有了父类的属性与方法。

图形类的关系图如下:

图片4

上面说的继承,儿子(子类)继承父亲(父类),那么儿子就拥有了父亲的所有财产(父类的方法和属性),儿子可以直接用。但有的东西儿子继承来了不一定有用,需要根据儿子的特点改造,如:鸟(父类)有飞行的能力,但有的鸟飞行方式有所不同,像蜂鸟。蜂鸟就可以重写鸟类的飞行方法,以实现自己独特的飞行方式。继承可以让儿子拥有父亲的财产,那么父亲为什么不可以用儿子的财产呢?这就是向后兼容,让父亲(父类)指向儿子(子类),实现儿子(子类)的方法。

这种向后兼容,父类指向子类并调用子类的方法就是多态。多态实现了父类指向子类,并可调用子类的方法,这样有利于提高程序的扩展性和可维护性。

通过面向对象的方式,让大的系统开发变为可能,在系统中将对象抽象成类,再通过继承与信息交互建立起类与类的关系,增强了代码的重用性,减少了重复性劳动。将复杂的问题封装起来,对外只需要暴露出必要的接口,减少信息的交互,增强对象内部的内聚性,使系统分割清晰,简单明了。通过多态性,让对象增加了更多的可能性,增强对象的扩展性及维护性。通过对象的方式可以把世界看得更加清晰、透彻。

一座大厦的建立需要无数的砖头、水泥和钢筋,它们就是构建起这座大厦的对象,砖头如何烧制的我们不用管,只需要直接使用砖头对象就好了。

#专栏作家#

老吴,微信公众号:ChanPinLaoWu,人人都是产品经理专栏作家,产品讲学堂自媒体人。十多年软件行业从业经验,做过软件开发、项目管理、产品经理,希望在这里能够与大家分享更多产品经验和知识。

本文原创发布于人人都是产品经理。未经许可,禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 大神啊,对于技术小白来说,很生动易懂!可惜不更新了

    来自河南 回复
  2. 优秀啊 我可以加你微信向你请教学习吗 我的微信号是15093437454

    来自河南 回复
  3. 其实把面向对象编程的第一章贴出来就够了。。。。这不过这里篇幅做了简化。
    推荐PM都去学一下面向对象编程。这是后端开发的基础。

    来自浙江 回复
  4. 这篇文章的思路是好的讲解思路,但没有讲完,戛然而止的样子!主题是 需要懂得的技术知识,思路有了,具体的技术知识能否穿插在本文的思路中。

    来自甘肃 回复
  5. 同一父类下的子类们可以相互继承吗?

    来自广东 回复
  6. 好文

    来自广东 回复
  7. 这种向后兼容,父类指向子类并调用子类的方法就是多态。多态实现了父类指向子类,并可调用子类的方法,这样有利于提高程序的扩展性和可维护性。
    对于方法的重写和多态好像不是这样的。
    这个明显是不满足java的设计规范的,父类调用子类好神奇的逻辑。

    来自浙江 回复
  8. 产品应该掌握的重要技术思想,点赞

    来自天津 回复
  9. 讲的形象生动易懂,而且容易记忆!

    来自广东 回复
  10. 当初要是教我面向对象的老师是你,我现在也不会去搞设计

    来自山东 回复
  11. 好文

    来自浙江 回复
  12. 写过android的,表示看起来无压力,面向过程,面向对象

    来自陕西 回复
  13. 深入浅出,通俗易懂,文章写的真棒!!所以懂了以后呢,对实际产生了什么帮助?

    来自浙江 回复
  14. 深入浅出,比喻和类比都很恰当!

    来自江苏 回复
  15. 文章写的挺好,做产品的,确实应了解些技术,这样有利于同开发的沟通

    来自北京 回复
  16. 写的真好

    来自上海 回复
  17. 感谢分享,小羊肖恩~~

    来自四川 回复
  18. 理论与例子的结合总是能够让人毛瑟顿开。

    来自广东 回复
  19. 其实单纯的讲面向对象这篇文章写得很好了,只是很多人没写过代码所以对抽象的概念进行实例化的操作就有点迷,所以还是鼓励大家去学点编程的东西吧!哈哈!

    来自江西 回复
  20. 写的很好

    来自广东 回复
  21. 写得不够通俗,看不懂,也许是我水平太差吧 🙁

    来自北京 回复
    1. 已经十分通俗易懂了

      来自四川 回复
    2. 面向对象是相对于面向过程而言的。一个事物有两种思考方式,一种是过程,一种是对象。比如多个过程如果从属于同一个对象,在过程思维里,分了多个过程;在对象思维角度,会被整合到一起。比如洗脸,刷牙,面向过程思考,会认为这是两个过程,面向对象,就是都属于对象的方法,会被整合到对象的方法集里去。可以直接感受到,这是两种不同的认知逻辑,面向对象,划分逻辑更加大一些,认知更高阶,所以处理大型系统,面向对象会有更加有利。面向过程和面向对象都可以做到对方能到的事情,只是思维角度不一样。说不定未来又来一个面向XX,来进行更高级的开发。

      来自浙江 回复
    3. 已经很好懂了。。

      来自北京 回复
  22. 写得很棒,我做开发2年了,也没仔细总结过面向对象,一直是半醒半睡,描述不出来的状态,今天算是醍醐灌顶了.

    来自北京 回复
  23. 会前端html+css+js就能理解这篇文章的意思,作者写的很通俗易懂,只是函数类的定义写法不一样,原理是通用的,最近在自学后端php语言中……..

    来自上海 回复
  24. 不用会什么技术,懂得尊重技术就行

    来自上海 回复
  25. 产品还是得懂点技术的吧!最基础的最起码。

    来自北京 回复
    1. 对的,所以我还自学了安卓

      来自江苏 回复
  26. 初级产品经理表示完全萌比,真的理解不了 太深奥了!

    回复
    1. 自学一个月java就行

      来自江苏 回复
    2. 没关系,这就是开发的面向对象思维,产品对这要求应该还好

      来自北京 回复
    3. 就是一个猪,他有大鼻子、大耳朵这是特征,能吃、哼哼叫这是行为也就是属性。子类可以继承父类的属性。就是这样

      来自四川 回复
    4. 有个问题,文中说行为是方法,特征是属性,你说行为是属性,谁的正确?

      来自北京 回复
    5. 特征是属性,行为是方法~

      来自广东 回复
  27. 以前是做java吧

    回复
    1. 自学了Android的,感觉就很理解,蛮好

      来自江苏 回复