面向对象方法学-第三节:面向对象建模之对象模型

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象方法学-第三节:面向对象建模之对象模型相关的知识,希望对你有一定的参考价值。

文章目录

一:概念

(1)定义

对象模型表示静态的、结构化的系统的数据性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。对象模型为建立动态模型和功能模型,提供了实质性的框架。

(2)工具

使用UML(统一建模语言)提供的类图来建立对象模型。在UML中,类的实际含义是一个类及属于该类的对象

具体来说,UML提供了以下13种图

  • 用例图:从用户角度描述系统功能。
  • 类图:描述系统中类的静态结构。
  • 对象图:系统中的多个对象在某一时刻的状态。
  • 状态图:是描述状态到状态控制流,常用于动态特性建模
  • 活动图:描述了业务实现用例的工作流程
  • 顺序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互
  • 协作图:描述对象之间的协助关系
  • 构件图:一种特殊的UML图来描述系统的静态实现视图
  • 部署图:定义系统中软硬件的物理体系结构
  • 包图:对构成系统的模型元素进行分组整理的图
  • 组合结构图:表示类或者构建内部结构的图
  • 交互概览图:用活动图来表示多个交互之间的控制关系的图

二:类图的基本符号

(1)定义类

A:表示

UML中类的图形符号为长方形,用两条横线把长方形分上、中、下3个区域,3个区域分别放类的名字、属性和服务

B:命名规则

类名应该是富于描述的、简洁的而且无二义性的

  • 使用标准术语,不要随意创造名字
  • 使用具有确切含义的名词,不要使用空洞或含义模糊的词作名字
  • 必要时可用名词短语作名字,有时也可以加入形容词

(2)定义属性

具体格式为

  • 可见性:有公有的(+)、私有的(-)和保护的(#)
  • 类型名:表示该属性的数据类型
  • 赋值:在创建类的实例时应给其他属性赋值,如果给某个属性定义了初值,则该初值可作为创建实例时这个属性的默认值
  • 性质串:明确地列出该属性所有可能取值,用逗号隔开

(3)定义服务

具体格式为

  • 可见性:有公有的(+)、私有的(-)和保护的(#)
  • 参数表:用逗号隔开不同参数,每个参数语法为 “参数名:类型名=默认值

三:表示关系的符号

类与类之间通常具有以下四种关系

(1)关联

A:定义

关联表示两个类的对象之间存在某种语义上的联系

B:关联的角色

在任何关联中都会涉及参与此关联的对象所扮演的角色,在某些情况下显式标明角色名有助于别人理解类

  • 如果没有显式标出角色名,则意味着用类名作为角色名

C:普通关联

①:定义

普通关联是最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示

②:表示

  • 第一,普通关联的图示符号是连接两个类之间的直线,如下图
  • 第二,关联是双向的,可为关联起一个名字。在名字前面(或后面)加一个表示关联方向的黑三角
  • 第三,在表示关联的直线两端可以写上重数,它表示该类有多少个对象与对方的一个对象连接。未明确标出关联的重数,则默认重数是1

D:限定关联

①:定义

限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一, 或从多对多简化成多对一

②:表示

在类图中把限定词放在关联关系末端的一个小方框内

  • 利用限定词“文件名”表示了目录与文件之间的关系,利用限定词把一对多关系简化成了一对一关系

③:意义

限定提高了语义精确性,增强了查询能力

E:关联类

①:定义

为了说明关联的性质,可能需要一些附加信息。关联类可以用来记录相关信息

②:表示

关联类通过一条虚线与关联连接

  • 关联中的每个连接与关联类的一个对象相联系

(2)聚集(它是关联的特例)

聚集(聚合)是关联的特例。表示类与类之间的关系是整体与部分的关系。在陈述需求时使用的**“包含”、“组成”、“分为…部分”**等字句,往往意味着存在聚集关系。除了一般聚集之外,还有两种特殊的聚集关系,分别是共享聚集和组合聚集

A:共享聚集

如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集

  • 一般聚集和共享聚集的图示符号,都是在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形

B:组合聚集

如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失, 则该聚集称为组合聚集(组成)

  • 组成关系用实心菱形示例

(3)泛化(本质就是继承)

UML中的泛化关系就是继承关系,它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素

A:普通泛化

①:抽象类

没有具体对象的类称为抽象类。抽象类通常都有抽象操作,来指定该类的所有子类应具有哪些行为

  • 表示抽象类是在类名下方附加一个标记值abstract,表示抽象操作是在操作标记后面跟随一个性质串abstract

②:具体类

具体类有自己的对象,并且该类的操作都有具体的实现方法

B:受限泛化

①:定义

可以给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化

②:约束

预定义的约束有4种(都是语义约束)

  • 多重:一个子类可以同时多次继承同一个上层基类

  • 不相交:一个子类不能多次继承同一个基类。-般的继承都是不相交继承

  • 完全:父类的所有子类都已在类图中穷举出来了

  • 不完全:父类的子类并没有都穷举出来,随着对问题理解的深入,可不断补充和维护。是默认的继承关系

(4)依赖和细化

A:依赖关系

依赖关系描述两个模型元素之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素

  • 在UML类图中用带箭头的虚线连接有依赖关系的两个类,箭头指向独立的类。在虚线上可以带一个版类标签,具体说明依赖的种类

B:细化关系

对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系

  • 细化的图示符号为由元素B指向元素A的一端为空心三角形的虚线

以上是关于面向对象方法学-第三节:面向对象建模之对象模型的主要内容,如果未能解决你的问题,请参考以下文章

面向对象设计-第三节:系统分解和设计问题域子系统

面向对象建模所用图的简单总结

JavaScript设计模式:面向对象编程(第三节)

软件工程之系统建模篇设计实体类型模型

《需求工程-软件建模与分析之读书笔记之四》

面向对象建模