面向对象分析与设计(三、四)

三、类与对象

3.1.1什么是对象?什么不是对象

对象:一个可以触摸或可以看见的东西、在智力上可以理解的东西、可以指导思考或行动的东西
一个对象具有状态,能展示某种定义良好的行为,且具有唯一的标识符。
一个对象是一个具有状态、行为和标识符的实体。结构和行为类似的对象定义在他们共同的类中。“实例”和“对象”这两个术语可以互换使用。

3.1.2状态

对象的状态包括这个对象的所有属性(通常是静态的)以及每个属性当前的值(通常是动态的)。
一个对象的状态代表了它的行为的累积效果。

3.1.3行为

行为是对象在状态改变和消息传递方面的动作和反应的方式。
1、操作:修改、选择、遍历、构造、析构(java中无)
2、角色和责任
3、对象像自动机

3.2对象之间的关系

1、链接
2、聚合

3.3.1什么是类?什么不是类

类是一组对象,它们拥有共同的结构、共同的行为和共同的语义。

3.4类之间的关系

存在三种基本类型的类关系:第一种是一般、特殊关系,表示“是一种”关系;第二种是整体、部分关系,表示“组成部分”关系;第三种是关联关系,表示某种语义上的依赖关系;
1、关联
2、继承
3、聚合
4、依赖

3.5.2类与对象在分析和设计中的角色

在分析阶段和设计的早期阶段,开发者主要有两项主要任务:
1、从问题域的词汇表中确定出类
2、创建一些结构,让对组对象一起工作,提供满足问题需求的行为
我们将这样的类和对象统称为问题的“关键抽象”,把这些协作结构称为实现的“机制”。
在开发这些的阶段中,开发者必须关注这些关键抽象和机制的外部视图。外部视图代表了系统的逻辑框架,因此包含了系统的类结构和对象结构。
在设计阶段的后期以及随后的实现开发,开发者的任务发生了变化,其关注的焦点放在了这些抽象和机制的内部视图上,包括它们的物理实现。

3.6.1 评判一种抽象的品质

1、耦合
2、内聚
	内聚的思想也来自于结构化设计,内聚测量了单个模块内各个元素的联系程度。最不希望出现的内聚就是偶然性内聚,即将完全无关的抽象塞进同一个类或模块中。
	最希望的内聚是功能性内聚,即一个类或模式的各元素一同工作,提供某种清晰界定的行为。
3、充分性
	所谓充分指的是类或模块应该记录某个抽象足够多的特征,从而允许有意义的、有效的交互。否则,将使该组件变得无用。
4、完整性
	所谓完整指的是类或模块的接口记录了某个抽象全部有意义的特征。
5、基础性
	基础性操作就是只有访问该抽象的底层表现形式才能够有效地实现的那些操作。如:集合添加一个元素属于基础性操作,添加4个元素则不属于。

3.6.2选择操作

1、语义功能
	对于一个给定的类,我们的风格是让所有的操作保持基础性,这样每个操作都展示出小的、定义良好的行为。
	将一个行为提取为一个方法还是多个方法的决定有两个相互竞争的原因:将一个行为塞进一个方法中将导致更简单的接口,但方法会更大、更复杂;将一个行为分散到多个方法中将导致更复杂的接口,但方法会更简单。
	好的设计者知道如何在太多契约和太少契约之间平衡折中,太多契约导致片段化,太少契约导致无法管理的大模块。
	在面向对象开发中,通常会整体设计一个类的所有方法,因为所有这些方法共同构成了这个抽象的完整协议。
	对于某个期望的行为,我们需要考虑如下因素来决定将它放到哪个类中:可复用性、复杂性、适用性(这个行为与打算放入的类相关程度如何)、实现知识(这个行为的实现依赖类的内部细节?)
2、时间和空间语义
	决定完成操作需要的时间以及存储空间。

3.6.3选择关系

耦合是度量访问程度的指标。
1、Demeter法则
	定义:类的方法不应该以任何方式依赖于任何类的结构,除了它自己类的当前结构之外。而且,每个方法只能够对一个非常有限的类集的对象发出消息。
	从另外一个角度看,如果对象的行为超过了它的部分之和,在相关的类之间创建聚合关系而不是继承关系可能更好。
2、机制和可见性
	决定对象之间的关系主要是设计这些对象进行交互的机制。

3.6.4选择实现

当我们使某个类或对象的外部视图稳定下来之后,才会转向它的内部视图。这个视图涉及两个不同的决定:为类或对象选择表示形式,以及将类和对象放入一个模块。
1、表示形式
2、打包

四、分类

没有所谓的“完美”的类结构,也没有一组“正确”的对象。像所有工程学科一样,我们设计选择是对许多竞争因素的折中。
即使在十分严格的科学学科中,分类也高度取决于进行分类的原因。
发现一种秩序不是容易的任务,但是一旦秩序被发现,了解它是没有什么难度的。

4.1.2 分类的增量与迭代本质

分类之所以很难是因为:不存在“完美”的分类,任何分类都与进行分类的观察者的视角有关;明智的分类要求大量的创造性思维。

4.2 .1经典方法和现代方法

1、经典分类
	所有具有某一个或某一组共同属性的实体构成的一个分类
2、概念聚集
	在这种方法中,类(一些实体的聚集)的产生首先是形成类的概念描述,然后再根据这些描述对实体进行分类。
3、原型理论
对象的类是由一个原型对象来代表的,如果一个对象与这个原型表现出重要的相似性,那么这个对象就被认为是这个类中的一员。
在概念聚集中,我们根据明确的概念对事物进行分组。在原型理论中,我们根据事物与具体原型的关系对他们进行分组。

4.2.2面向对象分析ooa

分析关注的重点是分析面临的问题域,从问题域的词汇表中发现类和对象,实现
对真实世界的建模。
设计时我们在模型中发明一些抽象和机制,为要构建的解决方案提供设计。
分析方法:
1、经典方法
实物、角色、事件、交互
数据库建模角度:人、地点、物、组织、概念、事件
结构、其他系统、设备、要记住的事件、扮演的角色、位置、组织机构单位
2、行为分析
经典方法关注问题领域中实实在在的事物,但面向对象分析的另一种思路是关注
动态的行为,将这些行为作为类和对象的主要来源。这类方法更像是概念聚集
对象的责任是针对它支持的所有契约而提供的全部服务,在这种方式中,我们将
具有共同责任的事物划分为一组,让超类包含一般的责任,让子类包含特殊的行为,
从而构成类的层次结构。
根据系统的功能来确定类和对象,将系统的行为分配到系统的各个部分,并试图理解
谁发起了活动,谁参与了活动,扮演重要角色的发起者和参与者被确定为对象。
3、领域分析
定义:确定对象、操作和关系的尝试,领域专家认为这些对象、操作和关系对这个领域很重要
4、用例分析
定义:一个执行者通过与系统进行对话的方式执行的一个行为上相关的事物序列,目的是为执行
者提供某种可度量的价值。
5、crc卡
6、非正式英语描述
7、结构化分析

4.3关键抽象与机制

关键抽象是一个类会对象,它是问题域词汇表的一部分。确定这样的抽象的主要价值在于,它们给出了问题的边界,突出了系统中的事物。
机制是描述对象协作的结构,这些对象协作结构提供了某种行为,满足了问题的一项需求。
一个类的设计包含了单个对象如何行为的知识,而一种机制则是关于一组对象如何协作的设计决策,机制代表了行为的模式。

4.3.1确定关键抽象

确定关键抽象与具体领域高度相关,正确选择对象当然取决于应用的目的,以及要操作信息的粒度。
1、精华关键抽象
这个类的对象是如何创建的?可以被复制或销毁吗?在这样的对象上可执行什么操作?
2、命名关键抽象
合适的名词词组、常见的名词词组、尽量使用领域专家使用的名词、修改操作应该用动词词组、选择操作应该表示出查询的意思

4.3.2识别机制

关键抽象反映了问题域的抽象,而机制是设计的灵魂。
1、机制即模式
2、机制示例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章