本篇博客是对我上一篇"小计面向对象" 的简化,和大神聊了聊关于面向对象的东西,下面是讨论的结果分享出来给大家。
面向对象是一种思维方式。
和任何语言无关,无论是java,js,.net 都是对这种思维方式的编程语言实现。
面向对象中的特性封装,继承,多态只是人们在使用面向对象思维方式解决问题时一种经验总结。
封装:
在分析对象的时候我们将对象的属性和行为放到在一起这本身就是一种封装。
还有我们限定对象只对外提供服务隐藏具体的实现,这也是封装。
继承:
当我们在分析业务抽取对象时,发现两种对象有着极强的关系(相同的属性和行为)这个时候我们就可以
使用继承来解决重复出现的属性和行为。
多态:
简单的说就是:一个概念上的不同实现。
当我们根据需求和原型找出对象之后发现存在
相同行为有着不同种类的实现,我们可以试着对行为进行抽象。
比如:会员卡分为金卡,体验卡,教师卡,学生卡这些卡都必须经过激活才能使用,而且每种卡享受的服务是不一样的。
使用抽象的思维思考:抽取一个会员卡对象,会员卡有一个激活的行为。
这个时候我们只需要关注会员卡这个对象和激活这个行为就ok啦,无论有多少种类的卡各自自己管理自己的实现。
以前错误的认为没有面向对象必须得体现这些特性,否则就不叫面向对象,哎....太年轻啊。
其实这些特性都是为我们解决问题提供思路的,可以减少我们思考的长度和复杂度。
建议:
使用面向对象思考的过程中:不关注细节,不关注存储,不关注语言。
面向对象在对象产品需求建模的应用:
在需求分析的时候使用面向对象的思维方式解决问题是有思维层次的:
1.根据需求分析出流程
2.根据流程分析出对象。
3.使用对象模拟流程找出对象之间的关系。
3.在原型和需求中找出对象的属性。
4.根据这个对象在生命周期内和其他对象之间的消息传递找出对象的行为。
在这些层次中不要跨层思考,不要考虑存储,不要关注语言,不要关注细节。