跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
GSXAB的知识库
搜索
搜索
外观
登录
个人工具
登录
Advertising:
查看“︁类图”︁的源代码
页面
讨论
简体中文
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
刷新
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
←
类图
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[分类:UML]] [[分类:软件建模]] {{InfoBox |name=类图 |eng_name=class diagram }} '''类图'''是系统的[[静态模型]]的一种,描述[[类(OOP)|类]]之间的关系。 描述: * 系统中可以存在的对象的类型 * 系统中的对象封装什么数据 * 系统中的对象如何互相联系 <blockquote> 部分图无法从当前的常见库渲染,不做绘制。 </blockquote> == 图例 == === 类及其数据和操作 === 使用矩形表示'''类'''('''class''')。 类总是要写类名,此外为了容纳类中的数据及方法,矩形中绘制水平的分隔线以分隔这三者。 {{GiteaSvg|plantuml/plantuml_class}} ==== 类名 ==== 矩形的上方中间写类名。 类名通常是非''斜体'','''抽象类使用''斜体'''''。 ==== 成员 ==== 类的数据域即'''属性'''('''attributes'''),由'''可见性'''(可选)、'''名称'''、'''重数'''(可选)、'''类型'''(可选)组成。 可见性格式见[[#可见性]],默认为私有。 重数使用括号,其格式见[[重数(UML)|重数]],默认为 1 。 若不是'''实例成员'''而是'''类成员''',加'''下划线'''以示区别。 {{GiteaSvg|plantuml/plantuml_class_symbol}} 每个类默认存在一个唯一标记,称为 '''identity''' 。通常对应于内存地址或类似信息。 <blockquote> 基于美观考虑,以下可见性使用常见的标记: {{GiteaSvg|plantuml/plantuml_class_attribute}} </blockquote> ==== 操作 ==== 类的[[方法(OOP)|方法]]在 UML 中称为操作。 通常情况下,由于单独考虑一个类时很难决定类所需的操作,因此操作会被省略。 操作由'''可见性'''(可选)、'''名称'''、'''参数列表'''、'''返回类型''组成。 可见性格式见[[#可见性]],默认为公开。 类的操作含有可选的参数列表和返回类型,前者与属性的表示方法相同,后者也是在方法后加括号和类型。 {{GiteaSvg|plantuml/plantuml_class_method}} 若不是'''实例成员函数'''而是'''类成员函数''',加'''下划线'''以示区别。若是**抽象**的,使用斜体。 ==== 类的重数 ==== 即类可能实例化出的对象个数,默认情况下是 `0..*`。对于重数,标记在类的右上角。格式见[[重数(UML)|重数]]。 注:制图的支持问题,这里不画。 === 关联 === 表示两个类之间关系的结构叫做'''关联'''('''association'''),用两个类的矩形间连线表示。 两个类之间可以有多个不同名的关联。 ==== 关联名及角色 ==== 关联可以有名字,如下图所示注明。 {{GiteaSvg|plantuml/plantuml_relation_role}} 线上的是关联的'''名称'''/标签('''label'''),线两侧的是这一关联中,两个类各自的'''角色'''('''role''')和'''重数'''('''multiplicity''')。传统上名称常常会使用三角形符号,使得这一带有名字的关联在这一方向上,角色、两侧的名字可以按顺序连接成正确的句子(如图为 employee works for company)。两侧除了角色还有重数,表示一个这一关联的实例中,涉及几个两侧的对象。 角色有可见性标记,见[[#可见性]]。一般对应于两侧类中互相访问时,对方使用的成员变量名。 通常不允许同样两个类间有相同名字的两个关系。 ==== 关联的方向 ==== 上述两个类中使用对方的成员变量名,但是关联不总是双向的。 关联中,对象间可以从哪一个对象访问到哪一个对象、可以对后者发送[[消息(OOP)|消息]],称为对象间的'''可导航性(navigability)'''。 若构成关联的两个对象互相可达,使用上图的直线; 若其中仅有一个对象能到达到对方,使用下图的箭头。 {{GiteaSvg|plantuml/plantuml_relation_navigability}} ==== 自关联 ==== 关联不总是'''二元'''的,可以处于同一个类之间,如图。 {{GiteaSvg|plantuml/plantuml_relation_self}} ==== 依赖 ==== 不像关联要求一个类的对象可以访问另一方,如果只是一个类使用到另一个类,且改变一个类的接口有可能会改变另一个类,称为'''依赖'''('''dependency''')。 依赖使用类似关联的记号,但是箭头上是虚线。 === 泛化 === ==== 类与接口的继承与实现 ==== {{Gitea|plantuml/plantuml_derivation}} 在'''基类'''和'''子类'''之间画一条空三角箭头,指向基类,且通常画成从下向上的方向。称基类为子类的'''泛化''',子类为基类的'''特化'''。 由于特化时自动获得基类的成员,这类成员通常不写出,但如果进行了重写,需要显式列出。 ==== 关联的泛化 ==== 与父类的关联变成与子类的关联时,在两个关联之间画一个有空三角的箭头。 ==== 实现 ==== 类似普通的泛化,但是使用虚线。 {{GiteaSvg|plantuml/plantuml_implementation}} === 聚合和组合 === 尽管对象与对象之间存在关联,可以通过名字表现,但是有部分关联是被特殊处理单独列出的。 ==== 聚合 ==== 类之间存在一种'''“部分-整体”'''语义的关联,称为'''聚合'''('''aggregation''')。 表示方法如图。注意菱形符号在整体一侧。 {{GiteaSvg|plantuml/plantuml_aggregation}} ===== 与普通关联的关系 ===== 与普通关联相似,但是聚合关系中,对象的关系额外地加入了限制: # [[传递关系|传递性]]:对象A包含B,对象B包含C,则认为A包含C。 # [[反自反关系|反对称]]:如果一个类上有一个一元聚合,对应的对象关系不能是自己和自己发生关联。 ==== 组合 ==== 类之间存在一种'''“部分-整体”'''语义的关联,且有额外语义'''“部分”生存周期依赖“整体”存在,随着“整体”消亡而消亡''',称为'''组合'''('''composition''')。 表示方法如图。与聚合相似,但是菱形被涂黑。 {{GiteaSvg|plantuml/plantuml_combination}} ===== 与普通聚合的关系 ===== 组合与普通聚合相似,但是加入了限制: # 部分的生命周期随整体的建立消亡限制。 # 部分依赖对应的整体,因此通常不会属于多个整体。 ==== 强化组合 ==== 一个类 A 包含另外两个有关联的类 B、C 时,可以把 B、C 画在 A 的框里。在这种情况下,如果一个 B、C 之间的关联画在 A 的框内部,代表这个关联的对象只能是同一个 A 对象内的两个对象,如果部分离开这个框,则表示可以跨 A 对象。 === 其它特殊情况 === ==== 关联类 ==== 对应着两个类之间关联的类,画法上是在类和关联之间加一条虚线。 {{GiteaSvg|plantuml/plantuml_relation_class}} ==== 限定关联 ==== 某类 A 可达一个 qualifier ,从这个 qualifier 可以确定一个类 B 的对象,这种称为'''限定关联'''('''qualified association''')。 <pre> --- --- | A |---- * 0..1| B | | |qual|---------| | | |---- | | --- --- </pre> ==== 多继承 ==== {{GiteaSvg|plantuml/plantuml_multiple_inheriting}} ==== 菱形继承 ==== UML 中若出现菱形继承,约定后代只包含有一个祖先类的对象。 {{GiteaSvg|plantuml/plantuml_diamond_inheriting}} ==== 混入类 ==== 叠加在其他类上的附加类。 ==== 多元关联 ==== 关联可能不只是两个类之间的。 ==== 接口 ==== 使用 <code><<interface>></code> 标注,其成员必然是未实现的,可以不必使用斜体标出。 ==== 棒棒糖接口 ==== 一般是组件图的符号,但是也有人会用在类图中。特征是用直线和圆圈(棒棒糖)来表示满足某个接口,并用反向圆弧表示这个类会需要什么接口。 {{GiteaSvg|plantuml/plantuml_lolipop_interface}} 一般棒棒糖接口在类图中只用于接口比较局部性,只需要表明相关两个类的对接关系时。 ==== 模板/泛型 ==== 通常虚线标注在类的上角。 {{UML}}
返回
类图
。
Advertising: