试读《面向对象的分析与设计》——“Jolt大奖精选丛书”有奖征文

《面向对象的分析与设计》貌似是这次试读活动中页数最多的一本,总共提供了四章试读章节,一百来页……分别介绍了复杂性、对象模型、类与对象、分类。感觉这本书很像一本大学时代的教科书,因为语言的描述真的很有教科书的感觉,但是我并不是说这样不好,毕竟理论基础也是很重要的,就像”根基“的感觉。


整四章读下来感觉这全部都是理论叙述啊,有一种看着看着就想睡觉的感觉啊,还好中间会穿插有一些示例,不过这些示例所涉及的范围很广,还是有一种理不清、道不明的感觉,不过里面的插图感觉很有意思,那个描述与配图非常形象。比如1.2.2节中所描述的图:



                         软件开发团队的任务就是制造简单的假象

还有第三章中3.1.3-行为中的这张图:



 

看了一下这本书的目录,前面的都是一些基础知识的梳理,主要是介绍软件的复杂性以及类和对象,然后是分类;中间部分是面向对象的使用方法以及使用UML来分析面向对象的设计与实践;最后还有一组实际的应用程序。当然对于我这种职场新人而言,从前往后读是比较靠谱的方法,不能好高骛远……当然这次的试读部分就是上面所说的第一部分内容,这部分内容主要介绍了对象模型中的基本概念和面向对象开发的动机。


从最先学习java开始,听的最多的就是java是一门面向对象的语言,一切皆对象等类似这样的语言,直到现在,面向对象这样一个概念我也是比较模糊的,看看本书中是这样解释这样的概念的:

“面向对象编程是一种实现的方法,在这种方法中,程序被组织成许多组相互协作的对象,每个对象代表某个类的一个实例,而类则属于一个通过继承关系形成的层次结构。”

那么什么又是面向对象设计呢:

“面向对象设计是一种设计方法,包括面向对象分解的过程和一种表示法,这种表示法用于展现被设计系统的逻辑模型和物理模型、静态模型和动态模型。“

 本书把概念介绍的非常详细,关于软件复杂性以及类与对象的介绍,我觉得写的非常仔细,并有详细的资料以及示例说明,但是太细的后果是忘记了原本所要描述的信息了,但是多看几遍就能把书看薄,把话看明。


以下是看书的过程中的部分摘录(可以无视):


1、复杂性

“系统越复杂,就越容易全面崩溃”。建筑师一般不会想要为一幢100 层的大楼添加一个新的地下室,因为这样做成本会很高,无疑将失败。但让人吃惊的是,软件系统的用户在提出类似的改动时,都不会多想一下。相反,他们会说,这只是一个简单的编程问题。由于我们不能控制软件的复杂性,所以导致了项目延迟、超出预算,并在声称的需求中存在缺陷。

工业级软件的特征是,单个开发者要理解其设计的所有方面非常困难,几乎是不可能的。
这些应用表现出非常丰富的行为,它们存在于反馈式系统中,由真实世界的事件驱动或发出驱动事件。对这些应用来说,时间和空间都是稀有资源。从根本上来说,我们可以掌握这种复杂性,但不能消除这种复杂性。

软件在本质上是复杂的:问题域的复杂性、管理开发过程的困难性、软件中随处可能出现的灵活性(软件行业还是一种劳动密集型的产业),以及描述离散系统行为的问题。

复杂系统的5个属性:层次结构、相对本原(如多层次抽象)、分离关注、共同模式、稳定的中间形式

2、对象模型

面向对象的概念框架是对象模型,主要有四个要素:抽象、封装、模块化、层次结构(“是一种”和“组成部分”)

抽象和封装是互补的概念:抽象关注的是对象可以观察到的行为,而封装关注这种行为的实现。
多态(polymorphism)是动态类型和继承互相作用时出现的一种情况。


3、类与对象

“对象是一个具有状态、行为和标识符的实体。结构和行为类似的对象定义在他们共同的类中。
‘实例’和‘对象’这两个术语可以互换使用。”

对象是存在于时间和空间中的具体实体,而类仅代表一种抽象,即一个对象的“本质”。
“类是一组对象,它们拥有共同的结构、共同的行为和共同的语义。”
一个对象就是类的一个实例。

某些抽象非常复杂,所以不能够利用单个类定义的方式很方便地表达。将这些抽象表示为一组类,这些类的实例互相协作,提供我们所期望的结构和功能。这样的一组类定义为组件。

一个类的接口提供了它的外部视图,因此强调了抽象,隐藏了它的结构和行为的秘密。与接口不同,类的实现是它的内部视图,它包含类行为的秘密。当且仅当两个对象之间存在整体/部分关系时,它们对应的类之间必然存在一种聚合关系。


4、分类
分类是组织知识的手段
最好的软件设计看起来很简单,但是经验表明,需要很多艰苦的工作才能设计出简单的架构。
那么,为什么分类这么难?首先,不存在所谓的“完美”分类,尽管某些分类肯定比另外一些更好。任何分类都与进行分类的观察者的视角有关。其次,明智的分类要求大量的创造性思维。只有创造性的思维才能在这种似乎无关的事物之间发现共性。


命名关键抽象
对象应该用合适的名词词组来命名,如theSensor 或简单的shape。
类应该用常见的名词词组来命名,如Sensor 或Shape。
如果可能,选择的名称应该是领域专家使用和认识的名称。
修改操作应该用一个主动语态的动词词组来命名,如draw 或moveLeft。
选择操作应该表示出查询的意思,或者用be动词的形式来命名,如extentOf 或isOpen。
使用下画线和大写字母主要是个人的喜好。但不论采用哪种风格,至少在程序内要保持一致。

框架代表了大规模的复用。

猜你喜欢

转载自joyocaowei.iteye.com/blog/1662060