UML(Unified Modeling Language,统一建模语言)建模是面向对象开发设计方法中的第一步,用UML来表达设计模式不仅方便了开发人员的交流,而且更加清晰、准确。UML定义了5类10种模型图,每种图都有其不同的目的,说明了不同实体集合之间的关系,如下表:


由于在后面设计模式的学习中会大量的用到类图,所以这里只对类图进行简单的介绍

UML类图中的基本元素符号

1. 类

类的UML图有3部分组成。
第一个部分是定义的类名,如果类名是用斜体字形表示,则表示该类是抽象类,否则就是具体的类。

第二部分是属性,第三部分是方法。在属性和方法之前均可附加一个访问权限修饰符。加号(+)代表public;减号(-)代表private;#代表protected;没有任何修饰符表示访问权限是友好的,修饰符为friendly,但是需注意在java中是没有friendly修饰符的。如果属性或方法具有下划线,则表明它是静态的。如果在一个类图中只想显示高层细节,那么下面的两部分信息(属性和方法)不是必要的。

2. 接口

第一部分是接口的名称,必须用斜体字表示,而且顶端要用<<interface>>来修饰;第二部分是常量;第三部分是方法。

3. 注释

类与类之间的关系

在UML类图中,类与类之间有以下几种常见的关系:泛化(Generalization)、实现(Realization)、依赖(Dependency)、关联(Association)和组合(Composition)

1. 泛化(继承)

泛化也就是通常所说的继承关系,也称“is a kind of”关系。泛化是对象间耦合度最大的一种关系,UML表示法如下:

2. 实现

如果一个类B实现一个接口A的功能,那么类B和类A的关系就是实现,UML表示法如下:

3. 依赖

如果B作为参数被A类在某个方法中使用,则A依赖于B,UML表示法如下:


java代码示例为:

public class Car {}public class Person {private String name;public void drive(Car car) {}
}

4. 关联

如果A类中的成员变量是用B类声明的变量,即B类作为A类的一个属性存在,则A关联与B,UML类图如下:

java代码示例为:

public class B {}public class A {private B b;public B getB() {return this.b;}public void setB(B b) {this.b = b;}
}

另外,除了上述的单向关联外,还有双向关联和自关联,UML类图如下:

双向关联:

自关联:

java代码示例为:

public class Mouse {}public class Computer {private Mouse m;public Mouse getM() {return this.m;}public void setM(Mouse m) {this.m = m;}
}

5. 聚合

聚合关系是关联关系的一种(弱关联),与关联不同的是聚合体现的是整体和个体的关系,而关联体现的是两个处在同一层次的类之间的关系。这里的整体和个体是可以分离的,即个体可以独立于整体存在,例如电脑和鼠标,二者是一种“has-a”的关系。UML类图如下:

6. 组合

组合也是关联的一种(强关联),与聚合类似,同样体现的是整体和个体的关系,但这里的整体和个体是不可以分离的,即个体是整体的一部分,例如电脑和CPU。这种关系比聚合更强,是一种“contains-a”的关系,也称强聚合。一旦整体对象不存在,部分对象也不存在;同样部分对象不存在,整体对象也无法正常工作,部分和整体具有相同的生命周期。代码上表现为A类中的成员变量是用B类声明的变量,并且B对象在A对象创建时创建。UML类图如下:


java代码示例为:

public class CPU {}public class Computer {private CPU c;public Computer () {c = new CPU();}
}

实例分析——聊天系统登录模块

基于C/S的聊天系统登录模块功能描述:

用户通过登录页面(LoginForm)输入账号和密码,系统将输入的账号和密码与存储在数据库(User)表中的用户信息进行比较,验证用户输入是否正确,如果输入正确,则进入主界面(MainForm),否则提示“输入错误”。

该系统中类的说明表如下:

类名 说明
LoginForm 登录窗口(边界类)
LoginBO 登录业务逻辑类,封装实现登录功能的业务逻辑(控制类)
UserDao 抽象数据访问类接口,声明对user表的数据操作方法(实体类)
UserDaoImpl 具体数据访问类,实现对user表的数据操作方法(实体类)
MainForm 主窗口(边界类)

各类中的方法说明如下表:

方法名 说明
LoginForm类的LoginForm()方法 LoginForm构造函数,初始化实例成员
LoginForm类的validate()方法 界面类的验证方法,通过调用业务逻辑类LoginBO的validate()方法实现对用户输入信息的验证
LoginBO类的validate()方法 业务逻辑类的验证方法,通过调用数据访问类的findUserByAccAndPwd()方法验证用户输入信息的合法性
LoginBO类的setUserDao()方法 在业务逻辑对象中注入数据访问对象
UserDao接口的findUserByAccAndPwd()方法 业务方法声明
UserDaoImpl接口的findUserByAccAndPwd()方法 业务方法实现,通过用户输入的账号和密码和数据库中的信息进行比对

UML类图设计如下:

java代码粗略实现:

public class LoginForm {private LoginBO login;public LoginForm() {login = new LoginBO;}public boolean validate(String account, String password) {return login.validate(account, password);}
}public class LoginBo {@Autowireprivate UserDao userDao;public boolean validate(String account, String password) { if (userDao.findUserByAccAndPwd(account, password)) {return true;}return false;}
}public interface UserDao {boolean findUserByAccAndPwd(String account, String password);
}public class UserDaoImpl implements UserDao {public boolean findUserByAccAndPwd(String account, String password) {// select * from user where account=#{account} and password=#{password}}
}@Test
public void TestLogin {// 接收用户输入的account和passwordString account;String password;LoginForm loginForm = new LoginForm();if (loginForm.validate(account, password)) {// 进入主界面MainForm} else {// 提示登录失败}}

UML类图简介及类与类之间的关系相关推荐

  1. startuml java 类图_【StarUML】类图

    类图是可视化地表现类的属性和方法,以及类与类之间的关系. 1.类 a.类 普通实体类,它有对应的属性和方法: 双击类名,会弹出一些控制按钮: 右边区域,各个图标的含义依次是: 增加类的属性.增加类的操 ...

  2. 学校(School)主要有3大角色:学校(School),讲师(Teacher),学员(Student)。请用Python语言简要实现这些类及及其属性,以及它们之间的关系。

    学校(School)主要有3大角色:学校(School),讲师(Teacher),学员(Student). 学校可以注册学员,统计有多少学员 讲师负责讲课 学生听课,提问,学习,交学费 Teacher ...

  3. UML类图(上):类、继承和实现

    面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...

  4. uml的图与代码的转换——类图

    Uml是我们经常使用的统一建模语言或称标准建模语言.它的图是如何和代码对应的呢?下面我们就来就这个问题讨论一下: 首先是类:uml中的类图是这样的 在这个图中,我们可以看出,这个类图总共分了三行,第一 ...

  5. UML类图(Class Diagram)中类与类之间的关系及表示方式

    类之间大体分为5种关系: 1,依赖关系(Dependency) 单向,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类,是一种"use a"关系 如果A依赖于B,则 ...

  6. 聊天系统服务器端类图怎么画,聊天系统服务器端类图

    聊天系统服务器端类图 内容精选 换一换 使用Mac版Microsoft Remote Desktop工具,远程连接Windows云服务器.由于Mac系统的特殊性,在使用Mac系统远程登录Windows ...

  7. 软件方法(下)第8章分析之分析类图—知识篇Part09-审查类和属性1

    可到此处下载<软件方法>(下)目前公开的最新pdf版本: http://www.umlchina.com/book/softmeth2.pdf 8.2.5 审查类和属性 8.2.5.1 属 ...

  8. 一张图说明 函数, 实例(对象), 原型之间的关系

    前言 很多初学者都对函数,实例(对象), 原型之间的关系理不清楚. 网上五花八门的文章很多,要么不知所云,要么是晦涩难懂. 本文意在用最简洁的语言跟示例让初学者理清楚这三者之间的关系,无需理会其内部原 ...

  9. EA绘制类图时,怎样将类由ICON形式(圆形)转为Label形式(方形)

    前言 这学期新开了UML课,教材使用的是<UML面向对象分析.建模与设计(第2版)>(微课视频版),在用EA学习类图绘制时,遇到这个小问题(微课视频中老师忽略了这个小问题,但是绘制出来的图 ...

最新文章

  1. linux 命令02
  2. 第六章 图 学习小结
  3. vtk 转换视角_vtk使用基础[1]
  4. SQL Server 数据文件的页面分部情况
  5. sublime text增加插入当前时间快捷键
  6. PS使用:windows解决Adobe Photoshop 2020(PS2020)闪退
  7. SSM框架整合总结—案例
  8. 命名实体识别主要方法
  9. 2018个人年度工作总结与2019工作计划(互联网)
  10. 【技术美术图形部分】2.2 模型与材质基础
  11. 俩人同样写代码,我拿七千他咋五万八...
  12. C++ Primer Plus 第六版第二章编程练习答案
  13. idea debug教程启用Debug模式可以分析定位异常发生的位置
  14. moss修改ad密码
  15. 3.会计等式与复式记账
  16. 2022还在为怎样去提升自己Android技术而发愁吗?享学课堂是个不错的选择
  17. VB编程:掷骰子游戏-55
  18. 24.大数据---Hive的连接三种连接方式
  19. SEOer必学的技能:好的软文首先就是做好标题党!
  20. 计算机主板设计与应用说明,详细说明计算机主板各部分的功能(附图)

热门文章

  1. NYOJ-弟弟的作业
  2. 想给用户天涯若比邻的体验?业务全球化面临的三重挑战
  3. python3图片进行base64编码与解码
  4. SAP所有模块用户出口(User Exits) 二
  5. 用于半导体的RCA清洁技术
  6. XILINX FPGA和CPLD引脚约束步骤
  7. Cracked VMware Workstation 7.0
  8. 杨老师课堂之网页制作HTML的学习入门-含有案例
  9. flinksql实时读取kafka写入mysql
  10. rk3399 simple-card alsa架构分析