面向对象的思想:产品经理需要知道的技术知识
作为产品经理,了解面向对象思想,更好地理解开发人员的思维,与开发人员更好地沟通,实现产品设计、开发过程的流畅。
对于产品经理来说,了解了面向对象的思想才会更容易理解开发人员的程序思维。系统的构建过程就是对象的构建过程,了解了这些与程序人员的沟通会更加顺畅。程序人员要实现面向对象的开发(OOP)就要先做好面向对象的设计(OOD),要做好面向对象的设计(OOD)就要先做好面向对象的分析(OOA),只有理解了什么是面向对象的思想,才能更多的参与到产品的分析、设计、开发中来,赢得更多的尊重。
90年代的开发人员是不知道什么是面向对象的,那时大家还在用BASIC和C语言进行开发,程序都是一条条代码写出来的,编程也是一件非常苦逼和有技术含量的事,当时硬件的发展还不够,开发人员的关注点是内存的占用率和文件大小。随着社会的发展,硬件变得越来越廉价,程序人员的关注点变为软件的优化,软件开发思想也从面向过程式的开发转为面向对象式的开发。
面向过程与面向对象
面向过程:面向过程强调的是“过程”,体现的是操作流程。
如:早上起床的过程,1洗脸、2刷牙、3准备早餐、4吃早餐、5出门上班。面向过程的开发思想与人的思维逻辑过程很相似,但不易于了解事物的整体。面向过程的开发语言有BASIC、C。
面向对象:谈面向对象就先要了解什么是对象,对象是事物存在的实体。
如:人、车、房、鸟等。对象可以划分为动态部分和静态部分,动态就是对象的行为,静态就是对象的特征。如鸟的飞、叫、吃食,这些是行为;鸟有嘴、翅膀、瓜子,这些是对象的特征,我们把行为叫做方法,把特性叫做属性。面向对象的开发语言有JAVA、C#等。
面向过程过多的强调流程,关注细节就容易忽略整体,当我们只关注一个点时是很难了解事物的全貌,不利于大系统的开发。面向对象关注的是系统中的实体及实体间信息的交互,会更宏观的了解事物,有利于大系统的开发。
细说面向对象
对象就是实体,在系统中很多实体是有共性的(相同的特征与行为),把共性抽象出来就产生了“类”,类的具体化就是对象,对象的抽象就是类。
例如,一只大象是一个对象,大象的行为有喝水、走路、吃饭等,特征有长鼻子、四条腿、象牙等,把这些共性抽象成大象类。(类的方法:喝水、走路、吃饭;类的属性:长鼻子、四条腿、象牙),对于没有象牙的大象属于个性化对象,不属于大象类。软件工程的一个重要思想就是“高内聚、低耦合”,它是判断设计好坏的标准,应用于面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。
通过高内聚可以更好的增强对象内部的粘性,将复杂性交给对象内部解决,对外只需留有接口。对象与对象间的交互信息尽量减少,降低信息的关联性,通过低耦合可以有效的降低对象间的依赖,降低理解成本及交互成本。
面向对象的三个基本特性:封装、继承、多态。
封装是对象的最重要特性,对象的实现细节都被封装在类中,对于用户是隐藏的。
类与类之间通过消息进行信息的传递,类中对内的方法与属性是私有的,对向的方法与属性是公有的,只有公有的方法与属性才能与外部进行交互。
如:汽车,用户是不用关心汽车发动机、制动系统与导航系统,用户是通过方向盘、各种开关、刹车和油门与汽车进行交互,用户无须了解汽车的工作原理。
继承是对象的另一个重要特性,类与类之间是可以有继承关系的,子类继承了父类,就拥有了父类的属性与方法。
图形类的关系图如下:
上面说的继承,儿子(子类)继承父亲(父类),那么儿子就拥有了父亲的所有财产(父类的方法和属性),儿子可以直接用。但有的东西儿子继承来了不一定有用,需要根据儿子的特点改造,如:鸟(父类)有飞行的能力,但有的鸟飞行方式有所不同,像蜂鸟。蜂鸟就可以重写鸟类的飞行方法,以实现自己独特的飞行方式。继承可以让儿子拥有父亲的财产,那么父亲为什么不可以用儿子的财产呢?这就是向后兼容,让父亲(父类)指向儿子(子类),实现儿子(子类)的方法。
这种向后兼容,父类指向子类并调用子类的方法就是多态。多态实现了父类指向子类,并可调用子类的方法,这样有利于提高程序的扩展性和可维护性。
通过面向对象的方式,让大的系统开发变为可能,在系统中将对象抽象成类,再通过继承与信息交互建立起类与类的关系,增强了代码的重用性,减少了重复性劳动。将复杂的问题封装起来,对外只需要暴露出必要的接口,减少信息的交互,增强对象内部的内聚性,使系统分割清晰,简单明了。通过多态性,让对象增加了更多的可能性,增强对象的扩展性及维护性。通过对象的方式可以把世界看得更加清晰、透彻。
一座大厦的建立需要无数的砖头、水泥和钢筋,它们就是构建起这座大厦的对象,砖头如何烧制的我们不用管,只需要直接使用砖头对象就好了。
来源:人人都是产品经理