我们首先要知道我们要做什么,然后要确定需要有哪些较小的工作,接着对各工作再分析直到较为独立,最后才是完成特定的每个小部分。这是大的方面和流程。千万不要过多沉沉溺于地具体的技巧,否则你永远只是个饲养员要面对痛苦的代码。软件工程没有固定的对错和明确答案,只要能完成既定的要求,我们的目标是“让猪工作的尽量简单些,让猪干的尽量多一些”。
单一职责原则是一个既简单又实用的原则。我们遵守了这一原则,可能会多写一些类和代码,但磨刀不误砍柴工。该原则既有利于我们编码思路的清晰,又大大增强了代码的可维护性和扩展性。
你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。
两位研究面向对象软件工程的美国学者 (Stave Halladay和Michael Wiebel) 曾这样说:“一般的面向对象编程(OOP)思路不过是一批乌合之众,把灵机一动、随机应变的技巧用于他们绞尽脑汁抽象出来的‘对象’而已。即使是最优秀的 OOP 程序员,他们所能对付的极限也莫过于中等规模的开发项目。倘若程序员经验不足,系统规模又很大,那么采用 OOP 只能把你引入漫无边际的泥沼之中。”
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。面向对象设计模式描述了面向对象设计过程中、特定场景下、类与相互通信的对象之间常见的组织关系。
在面向对象设计中,如何通过很小的设计改变就可以应对设计需求的变化,这是令设计者极为关注的问题。为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发。下面是几条与类设计相关的设计原则。
SOA和基于标准的Web服务以及基于互联网的交付模式的出现为新的软件平台的技术创新提供了重要的基础。我们称作SOP(面向服务编程)的一种突破性的软件组件化技术就是这些技术创新之一。
面向对象编程(OPP)是一种编程语言模式,它的组织方式是围绕“对象”,而不是围绕“行为”;围绕数据,而非逻辑。过去,一个程序被视作一个逻辑过程,接收输入值,对输入值处理,然后产生输出值。
八十年代末以来,随着面向对象技术成为研究的热点出现了几十种支持软件开 发的面向对象方法。其中,Booch, Coad/Yourdon, OMT, 和Jacobson的方法在面 向对象软件开发界得到了广泛的认可。特别值得一提的是统一的建模语言UML (Unified Modeling Language),该方法结合了Booch, OMT, 和Jacobson方法 的优点,统一了符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验 的概念和技术。
90年代出现的分布式对象技术为网络计算平台上软件的开发提供了强有力的解决方案。目前,分布式对象技术已经成为建立服务应用框架和软件构件的核心技术,在开发大型分布式应用系统中表现出强大的生命力,逐渐形成了3种具有代表性的主流技术,即Microsoft的COM/DCOM技术、Sun公司的Java技术和OMG的COBRA技术。
面向对象方法被人谈论了二十多年了。我接触它比较晚,直到九十年代中期才开始学习使用它。若说对这个方法做些评价,那还真是大言不惭了。不过这么些年来,也周期性的对面向对象做些思考。或对或错,我想都值得总结一下。
观察者模式(Observers) 定义了对象之间的一对多依赖,这个一来,当一个对象改变状态时,它所有的依赖者都会收到通知并自动更新,主题和观察者定义了一对多的关系 观察者依赖于主题,只要主题状态一有改变,观察者就会接受到通知 根据通知的风格。
业务用例视图:业务主角视角 业务模块视角 其他视角,业务用例实现视图,概念用例视图,系统用例视图,系统用例实现视图
面向过程方法把世界看成一个相互联系的系统,无法满足复杂多变变化软件需求。面向对象方法把世界看成一个个独立的对象,在外力的作用下相互联系。
计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到。但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c、ctrl-v用得更加纯熟了。在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO;二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数。如果你现在还是个普通的程序员,希望继续在技术这条路上前进的话,我想你还是应该先补充一点软件工程的思想,学习一点有关设计模式的知识,只有具备这些能力,你才能从整体和宏观层面来考虑问题、分析问题和解决问题。本人Coding了很多年,中间走了不少弯路,虽然最终没什么大成就,但总算有一些心得,很愿意把自己的一些经验拿出来跟大家分享,这或许对你的发展有所帮助。
按照书中作者的意思,“抽象”是OO的关键,什么是抽象呢?是一个具有对现实事物的性质的描述,而且这个描述是能有效的区别(Distingnish)于其它事物,并且这个描述能提供一个清楚的概念边界,这个概念的提出依赖于观察者的角度