对象与类的关系
对象的概念与特性
对象代表一个单独的、可确认的物体、单元或实体,它可以是具体的也可以是抽象的,在问题领域里有确切定义
的角色。换句话说,对象是边界非常清楚的任何事物。
状态(属性):对象的状态包括对象的所有属性(通常是静态的)和这些属性的当前(通常是动态的)。
行为(方法,事件):没有一个对象是孤立存在的,对象可以被操作,也可以操作别的对象。而行为就是一个对象
根据它的状态改变和消息传送所采取的行动和所做出的反应。
标识(名字):为了将一个对象与其它所有对象区分开来,我们通常会给它起一个"标识"。
对象与类
对象是一个存在于时间和空间中的具体实体,而类仅代表一个抽象,抽象出对象的"本质"。
类是共享一个公用结构和一个公共行为对象集合。
类是静态的,对象是动态的;类是一般化,对象是个性化;类是定义,对象是实例;类是抽象、对象是具体。
对象图简介
对象图是显示了一组对象和他们之间的关系。使用对象图来说明数据结构,类图中的类或组件等的实例的静态快
照。对象图和类图一样反映系统的静态过程,但它是从实际的或原型化的情景来表达的。
对象图显示某时刻对象和对象之间的关系。一个对象图可看成一个类图的特殊用例,实例和类可在其中显示。对
象也和合作图相联系,合作图显示处于语境中的对象原型。
UML对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于UML对象图显示类的多个对象实
例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存
在。
对于对象图来说无需提供单独的形式。类图中就包含了对象,所以只有对象而无类的类图就是一个对象图。然
而,对象图这条短语在刻画各方面特定使用时非常有用。
对象图显示对象集及其联系,代表了系统某时刻的状态。它包含带有值的对象,而非描述符,当然,在许多情况
下对象可以是原型。用合作图可显示一个可多次实例化的对象及其联系的总体模型,合作图包含对象和链的描述符。
如果合作图实例化,则产生了对象图。
UML对象图不显示系统的演化过程。为此目的,可用带消息的合作图,或用顺序图表示一次交互。
UML对象图的用途:
1)捕获实例和连接
2)在分析和设计阶段创建
3)捕获交互的静态部分
4)举例说明数据/对象结构
5)详细描述瞬态图
6)由分析人员、设计人员和代码实现人员开发
对象图的表示法
对象名:由于对象是一个类的实例,因此其名称的格式是“对象名:类名”,这两个部分是可选的,但如果是包
含了类名,则必须加上":",另外为了和类名区分,还必须加上下划线。
属性:由于对象是一个具体的事物,因此所有的属性值都已经确定,因此通常会在属性的后面列出其值。
阅读UML对象图
首先找出所有的类,即在":"之后的名称
整理完之后,就可以通过对象的名字来了解其含义
按类来归纳属性,然后再通过关联来确定含义
绘制对象图的过程
先找出类和对象,通常类在"class"、"new"、"implements"等关键字之后的,而对象名则通常是在类名之后的
然后对其进行细化的关联分析,绘制出相应的对象图
绘制对象图的过程
论证类模型的设计:当设计了类模型时,你可以通过对象图来模拟出一个运行时的状态,这样就可以研究在运行
时设计的合理性。同时,也可以作为开发人员讨论的一个基础。
分析和说明源代码:由于类图只是展示了程序的静态类结构,因此通过类图看懂代码的意图是很困难的。因此在
分析源代码时,可以通过对象图来细化分析。而对于开发人员,对于逻辑较复杂的类交互时,可以考虑画出一些UML
对象图来做补充说明。
UML对象图实例
下面的图是一个对象图的一个例子。它代表了订单管理系统,我们已经讨论了在类图。下图是该系统的一个实
例,在一个特定的时间购买。它具有以下的对象:顾客、订单、特殊订单、一般订单。
现在客户对象(C)是与三阶对象(O1,O2和O3)。这些订单对象相关联的特殊订单和一般订单对象(S1,S2和
N1)。顾客具有以下三个具有不同数目的订单(12,32和40),用于所考虑的特定的时间。
现在,客户可以在将来增加的订单数量,在这种情况下对象图将反映。如果订单、特殊订单和正常秩订单对象那
么观察会发现,他们有一些值。
订单的值是12,32和40,这意味着,这些对象都拥有这些实例时,捕获特定时刻的值(这里是购买时的时刻被
视为特定时间)。
相同特别订订单和正常订单对象所具有的订单数分别为20,30和60。如果被认为是一个不同的时间购买,那么
这些值将发生相应的变化。
因此,下面的对象图已经绘就考虑到所有上述提到的几点:
类图与对象图的区别
对象图(Object Diagram)描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类
图在某一时刻的实例。
在UML中,对象图使用的是与类图相同的符号和关系,因为对象就是类的实例。下图显示了对象图的模型。其
中节点可以是对象也可以是类,连线表示对象之间的关系。