提示:UML建模专栏持续更新中。。。。。。

文章目录

  • 前言
  • 1.概述
  • 2.元素
    • 2.1类的定义
    • 2.2类的表示
  • 3.接口
  • 4.关系
  • 5.类图总结

前言

UML静态模型描述了数据如何封装到对象中,类和对象的职责如何划分以及它们之间关系如何。

静态建模是建立开发系统的静态结构并识别系统的静态元素和它们的关系。

UML静态建模可以使用类图、对象图、包图和组成结构图。其中最重要的是类图,类图也是UML建模中最为常用的图形之一。


1.概述

  • 特点:类图在UML的静态机制中是重要的组成部分,它不但是设计人员关心的核心,更是实现人员关注的重点。建模工具也主要根据类图来产生代码。类图在UML的图中占据了一个相当重要的地位。
    类图是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型,它用于描述系统的结构。类图的建模贯穿系统的分析和设计阶段的始终,通常从用户能够理解的用例开始建模,最终到系统开发小组能够完全理解的类。
  • 分类:在软件开发不同阶段使用具有不同的抽象层次的类图,即概念层、说明层和实现层。类图建模是先建立概念层,然后说明层,进而到实现层,随着抽象层次的逐步降低并逐步细化的过程。
  1. 概念层类图
    概念层的类图描述的是现实世界中对问题领域的概念理解,类图中表达的类与现实世界的问题领域有着明显的对应关系,类之间的关系也与问题领域中实际事物的关系有着明显的对应关系。
  2. 说明层类图
    在说明层阶段主要考虑的是类的接口部分,而不是实现部分。这个接口可能因为实现环境、运行特性等有多种不同的实现
  3. 实现层类图
    实现层类图阶段主要考虑类的实现问题,提供实现的细节。在实现层阶段的类的概念才是真正严格意义上的类,它揭示了软件实体的构成情况。

概念层和说明层类图可以统称为领域UML类图,产生于分析阶段,主要作用是描述业务领域的静态结构,与具体实现技术无关。
实现层类图也称实现UML类图,产生于设计阶段,其作用是描述系统的架构结构和指导程序员编程,涵盖系统中的实体类、控制类、界面类及所有技术性信息。

  • 边界类(Boundary Class) :用于对系统外部环境与其内部运作之间的交互进行建模的类。
  • 控制类(Control Class) :对一个或多个用例所特有的控制行为进行建模的类.
  • 实体类(Entity Class) :用于对必须存储的信息和相关行为建模的类。

2.元素

2.1类的定义

类是具有相同属性、操作、关系的对象集合。类的状态由属性和关联来描述,个体行为由操作来描述,对象的生命周期则由附加给类的状态机来描述。
在系统中,每个类具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责(单一职责原则),在定义类的时候,将类的职责分解成为类的属性和操作。类的属性即类的数据职责,类的操作即类的行为职责。类的设计是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。

2.2类的表示

在UML中,类用一个矩形框表示,它包含三个区域,最上面是类名、中间是类的属性、最下面是类的方法,如图所示:

(1)类名
每个类都必须有一个能和其它类进行区分的名称,类名是不能省略的,属性和方法都可以省略。类名规则包括:
尽可能用明确、简短,业务领域中事物的名称,避免使用抽象、无意义的名词
例如:帐户,订单
一般以大写字母开头,大小写混合,每个单词首字母大写,避免使用特殊符号
例如:Shape, Person
可分为简单类名和带路径类名,路径用::表示
例如:学生::研究生

(2)属性
类可以有任意数目的属性,也可以没有属性。类如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等。
在UML中,类属性的语法为:
[可见性] 属性名 [:类型] [=初始值] [{属性字符串}]
①可见性:描述了该属性在哪些范围内可以被使用。类中属性的可见性主要包括公有(public)、私有(Private)和受保护(Protected)。UML类中不存在默认的可见性,如果没有显示任何一种符号,就表示没有定义该属性的可见性。可见性在UML中的描述如下表所示:

②属性名:每个属性都必须有一个名字以区别于类中的其他属性。属性名由描述类特性的名词或名词短语组成。按照UML的约定:单字属性名小写。如果属性名包含多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。
③类型:说明属性的数据类型,可以系统固有,也可以用户自定义。属性的类型决定了该属性所有可能取值的集合。属性值可能的类型包括字符串(string)、浮点型(float)、整型(int)和布尔型(boolean)(以及其他的枚举类型)。用冒号分隔属性名和属性的类型。
④初始值:为了保护系统的完整性,防止漏掉取值或被非法的值破坏系统的完整性,可以设定属性的初始值。 例如:#visibility:boolean =false,表示属性”visibility”的数据类型是boolean,初始值取”false”。
⑤属性字符串:属性字符串用来指定关于属性的其他信息,例如某个属性应该是永久的。任何希望添加在属性定义字符串值但又没有合适地方可以加入的规则,都可以放在属性字符串里。

(3)方法
方法是类的对象所能做的事务的一个抽象。方法是类的行为特征或动态特征.一个类可以有任意数量的方法或者没有方法。类如果有方法,则每一个方法都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和方法的返回值的类型等。
在UML中,类方法的语法为:
[可见性] 方法名 [(参数表)] [:返回类型] [{属性字符串}]
①可见性:描述该方法在哪些范围内可以被使用。在UML中,用“+”、“-”、“#”分别表示公有类型、私有类型、受保护类型,用“~”表示包内公有类型。表示方法及含义如下表所示:

②方法名:类的方法名应该用首字母小写的动词,如果方法名中包括多个单词,除了第一个单词外,应该把其余单词的首字母大写。
③参数表:定义了方法的输入,如果该方法没有参数,则参数列表可以省略,但空括号必须保留。参数的定义方式:“名称:类型”,若存在多个参数,则用逗号隔开。
④返回类型:是指该方法的返回值的类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void)
⑤属性字符串:在方法的定义中加入一些除预定义元素之外的信息。

(4)职责
职责是类的契约或责任。当创建一个类时,就声明了这个类的所有对象具有相同种类的状态和相同种类的行为。在较高的抽象层次上,这些相应的属性和方法是要完成类的职责的特征。
类的职责是自由形式的文本,在非正式的类图中,可以将职责列在类图方法下的另一分割栏中。
(5)约束
说明类的职责是消除二义性的一种非形式化的方法,形式化的方法是使用约束。约束指定了该类所要满足的一个或多个规则。在UML中,约束是用{}的格式写在类的边上,指定个别属性的取值范围。

3.接口

接口(interface):是描述类的部分行为的一组操作,它也是一个类提供给另一个类的一组操作。通常接口被描述为抽象操作,也就是只用标识(返回值、操作名称、参数表)说明它的行为,而真正实现部分放在使用该接口的对象中,即:接口只负责定义操作而不具体的实现。
接口不包含属性与方法实现,但可以有一组操作。接口的所有内容都是公有的。
在UML中,接口由一个带名称的小圆圈表示;也可以在类名前加描述interface表示。

4.关系

关系是指事物之间的联系。在图形上,把关系画成一条线,并用不同的线来区别关系的种类。在类图中,很少有类是独立为系统发挥作用的,大部分的类以某些方式彼此协作进行工作。在进行系统建模时,不仅要抽象出形成系统词汇的事物,还必须对这些事物之间的关系进行建模。
类图中涉及到了UML中最常用的四种关系,即依赖关系、泛化关系、关联关系和实现关系。

依赖关系(Dependency)表示两个或多个模型元素之间语义上的关系。它表示了这样一种情形,对于一个元素(服务提供者)的某些改变可能会影响或提供消息给其他元素(使用者),即使用者以某种形式依赖于其他类元。
在UML图形上,把依赖关系画成一条有向的虚线,指向被依赖的事物,箭尾处的模型元素(客户)依赖于箭头处的模型元素。箭头上可带有表示依赖关系类型的关键字。依赖关系如图所示。

在UML中定义了四类基本依赖类型:
使用(Usage)依赖:一种非常直接的依赖,它通常表示使用者使用服务提供者所提供的服务,实现它的行为。
抽象(Abstraction)依赖:表示使用者和提供者之间的关系,它依赖于在不同抽象层次上的事物。
授权(Permission)依赖:表达了一个事物访问另一个事物的能力。提供者可以规定使用者的权限,这是提供者控制和限制对其内容访问的方法。
绑定(Binding)依赖:用于绑定模板以创建新的模型元素。

在系统实施阶段,依赖关系常常通过三种方式来实现:
第一种方式(最常用方式):是将一个类的对象作为另一个类中方法的参数;
第二种方式:是在一个类的方法中将另一个类的对象作为其局部变量;
第三种方式:是在一个类的方法中调用另一个类的静态方法。

泛化关系(Generalization)是一种存在于一般元素和特殊元素之间的分类关系,也可以称为继承关系。它只使用在类型上,而不是实例上。在类中,一般元素被称为超类或父类,而特殊元素被称为子类。父类拥有公共属性、方法和关联,子类除了具有父类的属性、方法和关联之外,还具有自己特征。
在UML中,泛化关系用一条从子类指向父类的空心三角箭头表示,如图所示。

泛化的作用
通过泛化对应的继承机制使子类共享父类的属性和操作,减小了模型的规模,同时也防止了模型的更新所导致的定义不一致的意外。
泛化关系的特征
传递性:一个类的子类的子类同样继承了这个类的特性。在父方向上经过了一个或几个泛化的元素被称为祖先,在子方向上则被称为后代。
反对称性:泛化关系不能成环,即一个类不可能是自己的祖先和自己的后代。

泛化关系的两种情况
单继承:每个类之多能拥有一个父类。
编程语言:Java等
多重继承:子类可以有多个父类并继承了所有父类的结构、行为和约束。
编程语言:C++等
泛化的实现
在代码实现时,使用面向对象的继承机制来实现泛化关系,例如在Java语言中使用extends关键字、在C++中使用冒号“:”来实现。

关联关系(Association)是一种结构关系,它指明一个事物的对象与另一个事物的对象之间的联系,如师傅和徒弟、班级和学生等等。关联描述了系统中对象或实例之间的离散连接。给定一个连接两个类的关联,可以从一个类的对象联系到另一个类的对象。
在UML图形中,关联关系用一条连接两个类的实线表示。在使用Java、C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量。

关联具有下面的属性:
关联名(association name)
关联角色(association role)
多重性(multiplicity)
聚合(aggregation)
组合(composition)
关联的方向/导航(direction/navigability)
关联类(association class)
约束(constraint)

实现关系:在很多面向对象语言中都引入了接口的概念,在接口中,一般没有属性,且所有的操作都是抽象的,只有操作的定义,没有操作的实现。
在类图中,实现关系主要用于接口与实现该接口的类之间。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。
一个类可以实现多个接口,一个接口也可以被多个类实现。

实现关系的两种表示:
当接口元素以带构造型的类的方式表示时,用带空心三角形的虚线来表示,箭头由实现接口的类指向被实现的接口。
当接口元素以小圆圈方式表示时,用实线表示。

5.类图总结


类图中各种关系表示:
接口:空心圆+直线(唐老鸭类实现了‘讲人话’);
依赖:虚线+箭头(动物和空气的关系);
关联:实线+箭头(企鹅需要知道气候才迁移);
聚合:空心四边形+实线+箭头(雁群和大雁的关系);
组合:实心四边形+实线+箭头(鸟和翅膀的关系);
泛化/继承:空心三角形+实线(动物和鸟的继承关系);
实现:空心三角形+虚线(实现大雁飞翔的接口);

UML建模-5-类图相关推荐

  1. UML建模系列-类图(Class diagram)

    概述 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图基础上,可以使用状态图.协作图.组件图和配置图等进一步描 ...

  2. 【转】[完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分

    在线Visual Paradigm - UML编辑器 使用在线UML编辑器轻松绘制UML图,其中包含功能强大的UML编辑工具,即时UML语法检查和整洁的用户界面.Visual Paradigm在线UM ...

  3. UML建模之时序图(Sequence Diagram)转

    UML建模之时序图(Sequence Diagram) 一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) ...

  4. [完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分

    在线Visual Paradigm - UML编辑器 使用在线UML编辑器轻松绘制UML图,其中包含功能强大的UML编辑工具,即时UML语法检查和整洁的用户界面.Visual Paradigm在线UM ...

  5. 【设计模式】UML建模之包图、组件图和部署图学习笔记

    UML建模中包图.组件图和部署图学习笔记 对于较大的项目进行UML建模,由于有很多的类和用例,仅仅利用类图和用例图的话,常常会使结构变得更为复杂.此时如果可以以功能模块划将类图和用例图进行封装,可以很 ...

  6. UML之深入浅出类图讲义

    UML之深入浅出类图讲义 在面向对象方法中,类图是最重要的模型图,它描述了系统中各个对象的类型和它们之间存在的各种关系.建立类图是建模中最基本的任务. 一张类图应该注重表达系统静态结构的一个方面,这意 ...

  7. 3.UML中的类图及类图之间的关系

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  8. UML建模工具——活动图

    [面向对象分析UML建模工具全部文章] UML建模工具(1)--用例图 UML建模工具(2)--活动图 UML建模工具(3)--类图 UML建模工具(4)--顺序图 UML建模工具(5)--通信图 U ...

  9. C++(21)--Astah uml 画C++类图

    Astah uml 画C++类图 1.安装 2.使用 <老九学堂C++课程><老九学堂C++课程>详情请到B站搜索<老九零基础学编程C++入门> --------- ...

  10. Eclipse 插件用法:Eclipse 利用 Amateras UML 生成 Java 类图、时序图和 UML 类图

    文章目录 前言 一.安装 Eclipse 官方提供的安装框架 GEF 1.1.Eclipse 中第三方插件更新/安装策略 1.2.为什么选择 GEF 框架? 1.3.GEF 框架安装 二.安装 Ama ...

最新文章

  1. PL/SQL的快捷键设置
  2. 有关项目实施【老男孩】的经验分享
  3. 计算机专业大学生每天睡多久,大学生睡眠时间最少的10个专业!是你的专业吗?...
  4. linux 添加路由_linux网络知识:路由策略(ip rule,ip route)
  5. Quartus II 现有各版本之差异(方便选择), 以及 破解文件
  6. LoadRunner8.1破解汉化过程
  7. PP视频怎么设置可以运行多个客户端
  8. 2022年推出?特斯拉人形机器人被批就是个笑话
  9. 树莓派c语言实现modbus主机_特斯拉+树莓派实现车牌识别检测系统
  10. java多线程系类:JUC原子类:04之AtomicReference原子类
  11. 使用yo -v查看yeoman版本号
  12. java bl层,科普一下bl锁的知识,没解锁的必看!
  13. 【解题报告】Kattis - adjoin 树形dp
  14. Tomcat中 appBase和docBase配置及默认管理页面
  15. C语言中-是什么意思啊?比如说 p=p-next 到底表达了什么意思,请说清楚点,还有-这个符号是一个整体吗,什么意思??...
  16. 微信小程序之登录注册界面的实现
  17. PHP 使用 file_get_contents 接收 POST 的資料
  18. 如何使用iTunes制作iPhone铃声
  19. Android中实现类似探探中图片左右滑动切换效果
  20. 关于苹果公证(Apple Notarizition)机制的一些总结

热门文章

  1. 什么是宝塔面板?宝塔面板安装和使用教程(详细)
  2. js获取cookie对象
  3. openstack导出实例,制作镜像
  4. 栅格图像 转_RAC软件课堂丨这项AI图像描摹,90%的人都不知道!学会就是出图大佬!...
  5. 华为WATCH GT Runner手表全天健康管理,新护航
  6. linux磁盘格式有哪几种,硬盘的格式都有哪些?哪一种比较好都有什么区别?
  7. 微信JS-SDK PHP Demo JS接口安全域名 自定义分享接口 jsapi_ticket
  8. 51单片机基础之定时器中断(二)
  9. 【Flink】FlinkSQL代码格式问题
  10. [ant design vue] 关于ant design vue 表单报错合集