最近对这句古话非常喜欢:工欲善其事必先利其器!
首先,我们需要学会怎么利用工具去辅助我们去了解别人的代码,那怎么有效快速的了解别人的代码,而自己又不会犯糊涂呢?那就需要我们借助powerdesigner这个强大的工具了。
可以参考这些文章:【PowerDesigner】【10】绘制类图
powerDesigner绘制类图_zhouguizhi-CSDN博客_powerdesigner类图
#1.如何创建类图
打开,点【file】-【New Model】
选择【Model types】-【Object-Oriented Model】-【Class Diagram】-【java】-【ok】
#2.创建成功后,就可以使用右侧栏进行画图了
#3.统⼀建模语⾔简介
统⼀建模语⾔(
Unified Modeling Language
,
UML
)是⽤来设计软件蓝图的可视化建模语⾔,
1997
年 被国际对象管理组织(OMG
)采纳为⾯向对象的建模语⾔的国际标准。它的特点是简单、统⼀、图形化、能表达软件设计中的动态与静态信息。
统⼀建模语⾔能为软件开发的所有阶段提供模型化和可视化⽀持。⽽且融⼊了软件⼯程领域的新思想、 新⽅法和新技术,使软件设计⼈员沟通更简明,进⼀步缩短了设计时间,减少开发成本。它的应⽤领域很宽,不仅适合于⼀般系统的开发,⽽且适合于并⾏与分布式系统的建模。
UML
从⽬标系统的不同⻆度出发,定义了
⽤例图、类图、对象图、状态图、活动图、时序图、协作图、 构件图、部署图等 9
种图。
当前业界使⽤最⼴泛的是
Rational Rose,但作为开发人员的我,还是喜欢使用powderdesigner。
这次主要介绍软件设计模式中经常⽤到的类图,以及类之间的关系。
总体关系总结表
#3.1.类
类(
Class
)是指具有相同属性、⽅法和关系的对象的抽象,它封装了数据和⾏为,是⾯向对象程序设计 (OOP
)的基础,具有封装性、继承性和多态性等三⼤特性。
在 UML 中,类使⽤包含类名、属性和操作且带有分隔线的矩形来表示。
#3.1.1.类名
类名(Name)是⼀个字符串。
#3.1.2.属性
属性(Attribute)是指类的特性,即类的成员变量。UML 按以下格式表示:
[可⻅性]属性名:类型[=默认值]
例如:
-name:String
(注意:这里的中括号代表可以忽略不写“可见性”和“默认值”)
注意:
“
可⻅性
”
表示该属性对类外的元素是否可⻅,包括
公有(Public)、私有(Private)、受保护(Protected)和朋友(Friendly
)
4
种,在类图中分别⽤符号
+、-、#、~
表示。
#3.1.3.操作
操作(
Operations
)是类的任意⼀个实例对象都可以使⽤的⾏为,是类的成员⽅法。
UML
按以下格 式表示:
[可⻅性]名称(参数列表)[:返回类型]
例如:
+display():void
。
完整的实例:
接着,我们看看这个图是怎么画出来的:
接着就是添加类中的属性了:
最后就是添加类中的操作方法了:
#3.2.接口
接⼝(
Interface)是⼀种特殊的类,它具有类的结构但不可被实例化,只可以被⼦类实现。它包含抽象操作,但不包含属性。它描述了类或组件对外可⻅的动作。在
UML
中,是这样展示的:
该图代表的是Graph接口
#3.2.1.接口和抽象类的区别
抽象类官方点的定义就是:如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。
实际点来说,一个抽象类不能实例化,因为“没有包含足够多的信息来描述一个具体的对象”。但终归属于类,所以仍然拥有普通类一样的定义。依然可以在类的实体(直白点就是能在{}里面)定义成员变量,成员方法,构造方法等。
接口官方定义:接口在java中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。
从定义上看,接口是个集合,并不是类。类描述了属性和方法,而接口只包含方法(未实现的方法)。接口和抽象类一样不能被实例化,因为不是类。但是接口可以被实现(使用 implements 关键字)。实现某个接口的类必须在类中实现该接口的全部方法。虽然接口内的方法都是抽象的(和抽象方法很像,没有实现)但是不需要abstract关键字。
因此,可以得到一个结论就是:我们在画UML图中的时候,如果该类是抽象类,那么我们还是需要和画普通类那样,直接定义就好。
#3.3.类图
类图(ClassDiagram
)是⽤来显示系统中的类、接⼝、协作以及它们之间的静态结构和关系的⼀种静态模型。它主要⽤于描述软件系统的结构化设计,帮助⼈们简化对软件系统的理解,它是系统分析与设计阶段的重要产物,也是系统编码与测试的重要模型依据。
类图中的类可以通过某种编程 语⾔直接实现。类图在软件系统开发的整个⽣命周期都是有效的,它是⾯向对象系统的建模中最常⻅的图。
#4.类之间的关系
在软件系统中,类不是孤⽴存在的,类与类之间存在各种关系。
根据类与类之间的耦合度从弱到强排列,
UML
中的类图有以下⼏种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中
泛化
和
实现
的耦合度相等,它们是最强的。
#4.1.依赖关系 Dependency
依赖(Dependency
)关系是⼀种使⽤关系,它是对象之间耦合度最弱的⼀种关联⽅式,是临时性的关联。在代码中,某个类的⽅法通过【局部变量、⽅法的参数或者对静态⽅法
】的调⽤来访问另⼀个类(被依赖类)中的某些⽅法来完成⼀些职责。
在
UML
类图中,依赖关系使⽤
带箭头的虚线
来表示,箭头从使⽤类指向被依赖的类
。
#4.2.关联关系 Association
关联(Association
)关系是对象之间的⼀种引⽤关系,⽤于表示⼀类对象与另⼀类对象之间的联系,如⽼师和学⽣、师傅和徒弟、丈夫和妻⼦等。
关联关系
是类与类之间最常⽤的⼀种关系,分为
⼀般关联关系、聚合关系和组合关系
。
关联可以是双向的,也可以是单向的。
在
UML
类图中,双向的关联可以⽤
带两个箭头或者没有箭头的实线
来表示,单向的关联⽤
带⼀个箭头的实线来表示,
箭头从使⽤类指向被关联的类
。
也可以在关联线的两端标注⻆⾊名,代表两种不同的⻆⾊。
#4.2.1.PowerDesigner默认双向关联修改为单向关联
PowerDesigner中的关联(Association)默认如下,是双向关联的形式。
每个老师可以教多个学生,每个学生可以向多个老师学,他们是双向关联。
有时候我们期望使用单向关联,如下:
中国只属于亚洲的关联关系。
具体修改方式如下:
补充一个知识点,那就是“多重性关联”
#4.2.2.具体实例
这里还有一个问题,需要弄清楚,在powerdesigner中如何创建List<Student>类型的参数。
#4.3.聚合关系Aggregation
聚合(
Aggregation
)关系
是关联关系的⼀种,是强关联关系,是整体和部分之间的关系,
是
has-a
的关系
。
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的⼀部分,但是成员对象可以脱离整体对象而独⽴存在。例如,学校与⽼师的关系,学校包含⽼师,但如果学校停办了,⽼师依然存在。
在
UML
类图中,聚合关系可以⽤
带空⼼菱形的实线
来表示,菱形指向整体。
#4.4.组合关系 Composition
组合(
Composition
)关系
也是关联关系的⼀种,也表示类之间的整体与部分的关系,但它是⼀种更强烈的聚合关系,
是
contains-a
关系
。
在组合关系中,整体对象可以控制部分对象的⽣命周期,⼀旦整体对象不存在,部分对象也将不存在部分对象不能脱离整体对象⽽存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。
在
UML
类图中,组合关系⽤
带实⼼菱形的实线
来表示,菱形指向整体
。
#4.5.泛化关系(继承)Generalization
泛化(
Generalization
)关系
是对象之间耦合度最⼤的⼀种关系,表示⼀般与特殊的关系,
是⽗类与⼦类之间的关系,是⼀种继承关系
,
是
is-a
的关系
。
在
UML
类图中,泛化关系⽤
带空⼼三⻆箭头的实线
来表示,
箭头从⼦类指向⽗类
。
在代码实现时,使⽤⾯向对象的继承机制来实现泛化关系。
例如,Student
类和
Teacher
类都是
Person
类的⼦类。
#4.6.实现关系(接⼝)Realization
实现(
Realization
)关系是接⼝与实现类之间的关系。
在这种关系中,类实现了接⼝,类中的操作实现了接⼝中所声明的所有的抽象操作。
在
UML
类图中,实现关系使⽤
带空⼼三⻆箭头的虚线
来表示,箭头从实现类指向接⼝。
例如,汽⻋和船实现了交通⼯具,如图所示:
#5.总结
类与类之间的关系
1.
依赖关系(局部变量、形参、静态⽅法的调⽤)
2.
关联关系(成员变量)
1.
⼀般关联关系
2.
聚合关系(
has - a
)
3.
组合关系(
contains-a
)
3.
继承关系(⽗类和⼦类的关系)
is - a
4.
实现关系(接⼝和实现类)
看到最后,画重点了,如果您需要(智慧餐厅)有关设备,或者身边有这样的资源,可以推荐给我,达成合作后,你懂的,致富链接: