UML静态图-类图
概述静态图包罗类图、对象图和包图的紧张目的是在系统详细设计阶段,资助系统设计职员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。
一、类图的表示法
类图(Class Diagram)是描述类、接口、协作及它们之间关系的图,用来显示系统中各个类的静态结构。类图是界说其他图的底子,在类图底子上,可以使用序列图、协作图、组件图和摆设图等进一步描述系统其他方面的特性。
类图包括6个元素:类(Class)、接口(Interface)、泛化关系(Generalization)、关联关系(Association)、依赖关系(Dependency)及实现关系(Realization)。
1.类图的表示法
类的名称是每个类中所必有的构成元素,用来区分其他的类。类名是一个字符串,称为简单名字。路径名字是在类名前加包罗类的包名为前缀。比方 User、java::uti::List 都是合法的类名。
类的 UML表示为一个长方形垂直地分为3个区。顶部地区显示类的名字,中间地区列出类的属性变量,底部地区列出类的操作函数。当在一个类图上画一个类元素时,必须要有顶端的地区,下面的两个地区是可选择的(当图描述仅仅用于显示分类期间关系的高层细节时,下面的两个地区是不必要的)。
https://img-blog.csdnimg.cn/direct/69044b8cdfed470283320b1f0b8e6787.png
对应代码为:
public class User{
}
2.类图属性的表示法
类的属性(中部地区)在分隔线上列出每一个类的属性,类可以有恣意多个属性,也可以没有属性。按照 UML的约定,单字的属性名必要小写。假如属性名包罗多个单词,这些单词要合并,且除了第一个单词外别的单词的首字母要大写。在类图中属性只要写上名字就可以了,如图3-2所示。
对于属性,还必要了解以下3个方面。
1)属性类型
也可以在属性名后通过冒号来执行属性的类型,如图3-3所示
https://img-blog.csdnimg.cn/direct/9242507a2e5846d3837758013c306609.png
对应的类代码为:
public class User {
private String username;
private String password:
}
2)属性默认值
也可以在属性名后跟上类型甚至默认值,如图3-4所示:
https://img-blog.csdnimg.cn/direct/efdc19fd981945da8d31acb694c5c560.png
对应的类代码为:
public class User {
private String username = "admin';
private String password = "123";
}
3)属性的可见性
类中属性的可见性紧张包括:
[*]公有,使用关键字 public。
[*]受掩护,使用关键字 protected.
[*]私有,使用关键字 private。
[*]默认,不使用关键字。
4种可见性如图 3-5 所示。
https://img-blog.csdnimg.cn/direct/8dea22a1454f45028920ee04cc0434b1.png
3.类图操作的表示法
类的恣意一个实例对象都可以调用操作,并大概影响该对象行为的实现。类操作记载在类图长方形的第3个(最低的)地区中,它也是可选择的。与属性一样,类的操作以列表格式显示,如3-6 所示。
https://img-blog.csdnimg.cn/direct/c7cbbc7340fa436090ca824dc56dd178.png
操作的命名与属性雷同,第一个单词的首字母小写,后续每一个单词的首字母要大写。操作也拥有不同的可见性,默认的可见性为public的,与属性相似,它也可以设置如下4种可见性:
[*]公有,使用关键字public。
[*]受掩护,使用关键字 protected。
[*]私有,使用关键字 private。
[*]默认,不使用关键字。
4种可见性显示的图标分别为如图3-7所示的 getUsername()、setUsername()、getPassword()和setPassword()前的图标。
https://img-blog.csdnimg.cn/direct/c38d6f6813d140f587432c723e6ad558.png
二、接口的表示法
接口与类相似,它仅仅包罗操作但不包罗属性,且它没有对外界可见的关联。它直接对应于 Java中的一个接口类型。接口可用如图3-8所示的两种图来表示,两条竖线的上方为接口名,下方为接口的操作列表。
https://img-blog.csdnimg.cn/direct/1fdc731008964c4684db784f66457aea.png
以上对应的 Java 类代码如下:
public interface MyInterface {
public void insertUser();
}
接口除了没有属性外,其他的界说都与类相同,这里就不再重复先容。
三、类图之间的 4 种关系
类之间存在4种关系:
[*]泛化关系(Generalization)表示类的继承。
[*]关联关系(Association)表示类的变量,还包括聚合和组合
[*]依赖关系(Dependency)表示局部变量。
[*]实现关系(Realization)–表示接口的实现。
1. 泛化关系(Generalization)–表示类的继承
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。泛化关系是从子类指向父类的,或从实现接口的类指向被实现的接口,与继承的方向相反,如图3-10所示。
https://img-blog.csdnimg.cn/direct/b25453d979304cfc924e571da1b82c5b.png
泛化关系在 Java 语言中可以直接使用关键字 extends 表示,描述类与类、接口与接口之间的泛化。以上的泛化可以表示为如下的代码:
public class ClassA extends ParemtClass {}
public class ClassB extends ParemtClass {}
2.关联关系(Association)-表示类的变量
关联关系是类与类之间的连接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。
[*]双向的关联可以有两个箭头大概没有箭头,通常不鼓励使用双向的关联。
[*]单向的关联有一个箭头,表示关联的方向,单向的关联使用更为普遍。
每一个关联都有一个名字,如图3-11所示。
https://img-blog.csdnimg.cn/direct/bb2e5140003d46e797c2a09a5d4d5264.png
在Java 代码中,关联关系是表示变量的引用。比方上面的例子中,类 User 拥有一个 Book 类型的变量 book,这个变量实现了这两个类之间的关联关系。以上的关联可以用下面的代码表示:
public class User {
...
private Book book;
...
}
在关联的两端可以使用一个数字表明该端可以有几个实例,数字可以有以下4种用法:
[*]0…1–表示零个或一个实例。
[*]0…大概–表示对实例的数目没有限制。
[*]1–表示只有一个实例。
[*]] *_-表示至少有一个实例。
如图 3-12所示,它表示每一个User 实例可以拥有恣意数量的 Book 实例。
https://img-blog.csdnimg.cn/direct/1cca22e58dbe43fc8057db391d76e7ca.png
一个关联关系往往可以进一步确定为聚合关系大概合成关系。
1)聚合关系(Aggregation)
聚合关系表示团体和部分关系的关联,聚合关系描述了“hasa”的关系。聚合暗示着团体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成 Java中的一个实例作用域变量。聚合是一种单向关系,聚合与关联的区别在于聚合的两个类之间的关系在概念层次上不是一个级别的,一样寻常来说聚合中的类关系总是一个类比另一个类要高级一些,而关联基本上是平级的。比方电脑是 CPU、主板、机箱的聚合。
2)组合关系(Compostion)
组合关系是聚合关系中的一种特别情况,是更强形式的聚合,又被称为强聚合。在组合中,成员对象的生命周期取决于聚合的生命周期。组合也是非共享的,所以,固然局部不一定要随团体的销毁而被销毁,但团体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他团体共享。但是,团体可将所有权转交给另一个对象,后者随即将负担生存期职责。比方,人是大脑、四肢、躯干的组合。
3.依赖关系(Dependency)-表示局部变量
依赖关系也是类与类之间的连接,它是单向的关系。依赖关系表示一个类依赖于另一个类。比方 User 必要办理图书证 BookCard,则它就依赖于类 BookCard,其表示关系如图 3-13 所示。
https://img-blog.csdnimg.cn/direct/8c61556d3cbb4097a99ea0285b088748.png
以上的关联可以用下面的代码表示:
public class User {
...
public void handleBookCard(BookCard bookcard) {
...
}
...
}
在 Java 中依赖关系体现为局部变量、方法的参数,以及对静态方法的调用,也就是说,假如类A的某一个局部变量类型是类 B,那么类A就依赖于类 B。假如类A的一个方法包罗有B类型的参数,或A调用了B中的一个静态方法,那么A都应该依赖于B。
假如B出现在A的实例变量中,那么依赖关系就会扩大为关联关系,因此,泛化关系>关联关系>依赖关系。
4.实现关系(Realization)–表示接口的实现
实现关系表示类对接口的实现关系。实现关系是从子类指向接口类的,实现的方向相反,如3-14 所示。
https://img-blog.csdnimg.cn/direct/bb7e4a7f8dc14e229d83905374c5b48a.png
实现关系在 Java 语言中可以直接使用关键字 implements 表示,描述类与接口之间的实现。以上的实现可以表示为如下的代码:
public class ClassC implements Paremtlnterface {}
public class ClassD implements ParemtInterface {}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]