面向对象分析与设计(一、二)
一、复杂性
1.2.2 为什么软件在本质上是复杂的
1.问题域的复杂性
2.管理开发过程的困难性
3.软件中随处可能出现的灵活性
4.描述离散系统行为的问题
1.3 复杂系统的5个属性
1.层次结构
复杂性常常以层次结构的形式存在。复杂的系统由一些相关的子系统组成,这些子系统又有自己的系统,如此下去,直到达到某种最低层次的基本组件。
复杂系统的架构是它所有的组件以及这些组件之间的层次结构的函数。
2.相对本原
选择哪些作为系统的基础组件相对来说比较随意,这在很大程度上取决于系统观察者的判断。
对于一个观察者来说很基础的东西,对另外一个观察者可能具有很高的抽象层次。
3.分离关注
组件内的联系通常比组件间的联系更强。这一事实实际上将组件中高频率的动作(涉及组件的内部结构)和低频率的动作(涉及组件间的相互作用)分离开来。
组件内部作用和组件间作用的差异让我们在系统的不同部分之间实现“分离关注”,让我们能够以相对隔离的方式来研究每个部分。
4.共同模式
层次结构通常只是由少数不同类型的子系统按照不同的组合和安排方式构成的。
复杂系统具有共同的模式。这些模式可能涉及小组件的复用。
5.稳定的中间模式
复杂系统毫无例外都从能工作的简单系统演变而来的,从头设计的复杂系统根本不能工作,也不能通过打补丁的方式使其工作。必须从头开始,从能工作的简单系统开始。
随着系统的演变,曾经被认为是复杂的对象就变成了基础对象,在这些的基础上构建更复杂的系统。
1.4有组织和无组织的复杂性
基本上所有的复杂系统都具有相同的规范的形式。我们将系统的类结构和对象结构统称为它的“架构”
没有一种特定的架构可能被真正认为是“正确的”。这也是使得系统架构具有挑战性的原因——在可能的许多种系统组件结构中、复杂系统的5种属性中以及系统用于的需求中寻找平衡。
经验表明:最成功的复杂软件系统就是在设计中包含了深思熟虑的类结构和对象结构,并具备了前一节所描述的复杂系统的5中属性。
1.5从混沌到有序
1、分解的作用
面向对象分解极大地降低了构建复杂软件系统的风险,因为它们的思路是从我们有信心的、较小的系统开始增量式地演进。而且通过帮助我们明智地决定对巨大的状态空间进行分离关注,面向对象分解直接关注了软件的内在复杂性。
2、抽象的作用
不能够全面掌握一个复杂的对象,我们就选择忽略它的非本质的细节,转而处理这个对象的一般化的、理想化的模型。
我们仍然受到同时可以理解的事物数量的限制,但是通过抽象,我们利用了信息的分块和不断增大的语义内容。当我们采用面向对象的观点来看世界时,尤其是这样,因为对象作为真实世界中实体的抽象,代表了特定的一块密集而内聚的信息。
3、层次结构的作用
另一种增加单块信息的语义内容的方法,是在复杂的软件系统中显式地组织类和对象层次结构。
对象结构很重要,因为它展示了不同的对象之间如何通过一些交互模式进行协作,我们把这些交互模式称为“机制”
类结构也同样重要,因为它强调了系统中的公共结构行为。
1.6 复杂系统的设计
程序设计任务是应用抽象的大规模练习。
二、对象模型
2.2面向对象基础
OOP:面向对象编程是一种实现的方法,在这种方法中,程序被组织成许多组相互协作的对象,每个对象代表某个类的一个实例,而类则属于一个通过继承关系形成的层次结构。
OOD:面向对象设计是一种设计方法,包括面向对象分解的过程和一种表示法,这种表示法用于展现被设计系统的逻辑模型和物理模型、静态模型和动态模型。
OOA:面向对象分析是一种分析方法,这种方法利用从问题域的词汇表中找到类和对象来分析需求。
2.3对象模型要素
主要要素:
1.抽象
对一个系统的一种简单的描述或指称,强调系统的某些细节或属性同时抑制另一些细节或属性。
抽象描述了一个对象的基本特征,可以将这个对象和所有其他类型的对象区分开来,因此提供了清晰定义的概念边界,它与观察者的视角有关。
对于给定的问题域决定一组正确的抽象,就是面向对象设计的核心问题。
从那些准确地为问题域实体建模的对象到那些实际上没有什么理由存在的对象,存在一系列的抽象,按最有用到最没有用次序排列:实体抽象、动作抽象、虚拟机抽象、偶然抽象
2.封装
封装是一个过程,它分隔构成抽象的结构和行为的元素。封装的作用是分离抽象的概念接口及其实现。
抽象和封装是互补的概念:抽象关注对象的可以观察到的行为,而封装关注这种行为的实现。
抽象“帮助人们思考他们做什么”,而封装“让程序可以借助最少的工作进行可靠地修改”。
3.模块化
模块化是一个系统的属性,这个系统被分解为一组高内聚、低耦合的模块。
分割程序的更大理由是它在程序内部创造了一些良好的、有文档描述的边界。这些边界或者叫做接口,对于理解程序是非常有价值的。
4.层次结构
层次结构是抽象的一种分级或排序。二种层次结构:类结构(“是一种”层次结构)和对象结构(“组成部分”层次结构)。
次要要素:
1、类型
2、并发
3、持久