- 统一建模语言 Unified Modeling Language
- UML建模工具
- Rational Rose
- PowerDesigner
- StartUML
- Office Visio
- Drawio
- UML类图
- 类元
- 组成部分
- 类元名
- 关键字
- 属性
- 可见性
- 方法
- 可见性
- 关系
- 继承关系 Inheritance
- 实现关系 Realize
- 聚合关系 Aggregation
- 组合关系 Composition
- 关联关系 Association
- 依赖关系 Dependency
统一建模语言 Unified Modeling Language本文为我设计模式相关博客的前置内容,所以只会整理学习设计模式中需要用到的知识。
学习统一建模语言需要有面向对象编程的知识和经验,务必在学习UML之前学习面向对象编程。
“统一建模语言(Unified Modeling Language)是描述、构造和文档化系统产品的可视化语言。”
在上述中,UML的关键点在于可视化;UML是图形化表示法的事实标准,用来描绘和展示与软件相关的体系。
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对日常的工作和交流; 同时,我们应该能将类图所表达的含义和最终的代码对应起来; 有了这些知识,看后面章节的设计模式结构图就没有什么问题了;
UML建模工具 Rational RoseRational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具。用于可视化建模和公司级水平软件应用的组件构造。
PowerDesignerPowerDesigner最初由Xiao-Yun Wang(王晓昀)在SDP Technologies公司开发完成。PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。
StartUMLStarUML是一种生成类图和其他类型的UML图表的工具。本文是一个使用StarUML创建类图(Java语言描述)的简明手册。StarUML,是一种创建UML类图,并能够自动生成Java的“stub code” 的工具。StarUML也可以做JAVA逆向工程,以产生相应的UML图表。
Office VisioOffice Visio 是Office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用 Office Visio 图表,可以促进对系统和流程的了解。
DrawiodrawioDrawio是一款强大、免费的绘图工具(基本可以替代收费的Visio等),使用起来非常方便。支持网页版使用(网页版可以自己部署一套)以及客户端使用(支持windows,MacOS以及Linux)。
该项目开源在github上的源码:https://github.com/jgraph/drawio-desktop
官方的教程链接:https://www.diagrams.net/doc/
哔哩哔哩:【流程绘制】开源免费!drawio 中文简易教程
UML类图UML用类图(class diagram)表示类、接口的内部结构 (属性, 方法)和类之间的关系(泛化、实现、依赖、关联、聚合、组合)。类图用于静态对象建模。
你可以通过这个10分钟的视频(10 分钟学会 UML 类图(UML Class Diagram Tutorial)
)更高效地了解UML类图的基础知识。如果已有UML类图的相关知识,可以跳过这部分。
UML类元(classifier)是“描述行为和结构特性的模型元素”。在类图中,最常用的两种类元是类和接口。
组成部分在UML类图中,类元一般由三部分组成:类名、类的属性和类的方法。如下图所示,这是一个表示Animal类的类元。
类元名类元中最上面的部分是类元名;每个类元都必须有一个名字,类元名是一个字符串。
关键字UML关键字是对模型元素分类的文本休息。例如,定义类元框图的类别为接口的关键字是《interface》。
大部分关键字使用“《》”符号表示,但是有些关键字用大括号表示,例如{abstract},这是包含了abstract关键字的约束
属性类元中第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性。
属性语法 : [可见性]属性名[ :类型][ =初始值][{属性字符串}]
属性字符串用来指定关于属性的其它信息 , 不一定是是属性值, 如果希望添加一个属性定义规则 , 但是没地方添加, 可以写在属性字符串中 ;
可见性属性的可见性只有公有(Public),私有(Private)和受保护(Protected);UML中不存在默认的可见性, 如果没有显示任何符号, 就表示没有定义该属性;
公有(Public),用 “+” 表示,可以在此类的外部使用查看该属性;
私有(Private),用 “-” 表示,不可以从外部类中访问该属性;
受保护(Protected),用 “#” 表示,常与继承一起使用。
方法方法语法:[可见性] *** 作名[( 参数表 )][:返回类型][ { 属性字符串 } ]
可见性方法的可见性有公有(Public),私有(Private),受保护(Protected)和包内(Package)四种;
公有(Public),用 “+” 表示,只要调用对象能访问 *** 作所在的包, 就能访问公有 *** 作;
私有(Public),用 “-” 表示,同一个类的对象才能调用私有的 *** 作;
保护(Public),用 “#” 表示,子类对象才可以调用受保护 *** 作;
包内(Package),用 “~” 表示,同一个包内的对象才可以调用包内公有的 *** 作。
关系 继承关系 Inheritance继承关系(Inheritance)又被成为泛化关系(Generalization);
继承的含义是is-a,如果两个对象之间可以用is-a来表达,那就是继承关系。例如:狗是动物。
实现关系 Realize实现关系(Realize)又被成为实现关系(Impalemention);
实现关系用一条带空心箭头的虚线表示;:”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才 可以用来定义对象(”车”这个类在C++中用抽象类表示,在JAVA中有接口这个概念,更容易理解)。
聚合关系 Aggregation聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;
聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门不存在了,职员仍不会消失,他们依然存在;
组合关系 Composition,如下图表示职员代表组成B,或者B由A组成;
与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;
但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 访客中心不存在了,访客大厅也就不存在了;
关联关系 Association它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;
比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;
在最终代码中,关联对象通常是以成员变量的形式实现的;
依赖关系 Dependency依赖关系是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;
与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;
显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;
注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)