再学UML-深入浅出UML类图(四)
实例分析1——登录模块
某基于C/S的即时聊天系统登录模块功能描述如下:
用户通过登录界面(LoginForm)输入账号和密码,系统将输入的账号和密码与存储在数据库(User)表中的用户信息进行比较,验证用户输入是否正确,如果输入正确则进入主界面(MainForm),否则提示“输入错误”。
根据以上描述绘制初始类图。
参考解决方案:
参考类图如下:

考虑到系统扩展性,在本实例中引入了抽象数据访问接口IUserDAO,再将具体数据访问对象注入到业务逻辑对象中,可通过配置文件(如XML文件)等方式来实现,将具体的数据访问类类名存储在配置文件中,如果需要更换新的具体数据访问对象,只需修改配置文件即可,原有程序代码无须做任何修改。
类说明:
|
类 名 |
说 明 |
|
LoginForm |
登录窗口,省略界面组件和按钮事件处理方法(边界类) |
|
LoginBO |
登录业务逻辑类,封装实现登录功能的业务逻辑(控制类) |
|
IUserDAO |
抽象数据访问类接口,声明对User表的数据操作方法,省略除查询外的其他方法(实体类) |
|
UserDAO |
具体数据访问类,实现对User表的数据操作方法,省略除查询外的其他方法(实体类) |
|
MainForm |
主窗口(边界类) |
方法说明:
|
方法名 |
说 明 |
|
LoginForm类的LoginForm()方法 |
LoginForm构造函数,初始化实例成员 |
|
LoginForm类的validate()方法 |
界面类的验证方法,通过调用业务逻辑类LoginBO的validate()方法实现对用户输入信息的验证 |
|
LoginBO类的validate()方法 |
业务逻辑类的验证方法,通过调用数据访问类的findUserByAccAndPwd()方法验证用户输入信息的合法性 |
|
LoginBO类的setIUserDAO()方法 |
Setter方法,在业务逻辑对象中注入数据访问对象(注意:此处针对抽象数据访问类编程) |
|
IUserDAO接口的findUserByAccAndPwd()方法 |
业务方法声明,通过用户账号和密码在数据库中查询用户信息,判断该用户身份的合法性 |
|
UserDAO类的findUserByAccAndPwd()方法 |
业务方法实现,实现在IUserDAO接口中声明的数据访问方法 |
-------------------------------------------------------------------------------------------------------
实例分析2——注册模块
某基于Java语言的C/S软件需要提供注册功能,该功能简要描述如下:
用户通过注册界面(RegisterForm)输入个人信息,用户点击“注册”按钮后将输入的信息通过一个封装用户输入数据的对象(UserDTO)传递给操作数据库的数据访问类,为了提高系统的扩展性,针对不同的数据库可能需要提供不同的数据访问类,因此提供了数据访问类接口,如IUserDAO,每一个具体数据访问类都是某一个数据访问类接口的实现类,如OracleUserDAO就是一个专门用于访问Oracle数据库的数据访问类。
根据以上描述绘制类图。为了简化类图,个人信息仅包括账号(userAccount)和密码(userPassword),且界面类无需涉及界面细节元素。
参考解决方案:
在以上功能说明中,可以分析出该系统包括三个类和一个接口,这三个类分别是注册界面类RegisterForm、用户数据传输类UserDTO、Oracle用户数据访问类OracleUserDAO,接口是抽象用户数据访问接口IUserDAO。它们之间的关系如下:
(1) 在RegisterForm中需要使用UserDTO类传输数据且需要使用数据访问类来操作数据库,因此RegisterForm与UserDTO和IUserDAO之间存在关联关系,在RegisterForm中可以直接实例化UserDTO,因此它们之间可以使用组合关联。
(2) 由于数据库类型需要灵活更换,因此在RegisterForm中不能直接实例化IUserDAO的子类,可以针对接口IUserDAO编程,再通过注入的方式传入一个IUserDAO接口的子类对象(在本书后续章节中将学习如何具体实现),因此RegisterForm和IUserDAO之间具有聚合关联关系。
(3) OracleUserDAO是实现了IUserDAO接口的子类,因此它们之间具有类与接口的实现关系。
(4) 在声明IUserDAO接口的增加用户信息方法addUser()时,需要将在界面类中实例化的UserDTO对象作为参数传递进来,然后取出封装在UserDTO对象中的数据插入数据库,因此addUser()方法的函数原型可以定义为:public boolean addUser(UserDTO user),在IUserDAO的方法addUser()中将UserDTO类型的对象作为参数,故IUserDAO与UserDTO存在依赖关系。
通过以上分析,该实例参考类图如图1所示:

图1 注册功能参考类图
注意:在绘制类图或其他UML图形时,可以通过注释(Comment)来对图中的符号或元素进行一些附加说明,如果需要详细说明类图中的某一方法的功能或者实现过程,可以使用如图2所示表示方式:

图2 类图注释实例
文章出处:http://blog.csdn.net/lovelion/article/details/7843391
再学UML-深入浅出UML类图(四)的更多相关文章
- UML简单介绍—类图详解
类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...
- 3.UML中的类图及类图之间的关系
统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...
- GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系
统一建模语言UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际 ...
- UML中的类图及类图之间的关系
统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...
- UML精粹3 - 类图,序列图,CRC
类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...
- 软件工程 #02# Entity Relationship Diagram VS. 用 UML 中的类图表示 E-R 图
不同的老师叫我们画 E-R 图居然是不一样的,于是我仔细研究了一番.. 通常所说的 E-R 图(外文全称 Entity Relationship Diagram,简称 ERD)长这个样子: 而有时候它 ...
- UML静态视图——类图、对象图、包图
绘画类的最重要的图是抽象类.让我们回顾一下类的基本内容. 一.分类 1.类的概念: 面向对象编程的类是一个基本概念.类是具有相同特性的.办法.集合语义和一组对象的关系. 2.类分类: 实体类:保存要放 ...
- UML简单介绍—类图这么看就懂了
如何看懂类图 1.类图简介 描述类的内部结构和类与类之间的关系,是一种静态结构图. 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关 ...
- 【UML 建模】类图介绍
1.类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 2.类的关系有泛化(Generalization). ...
- 使用UML工具分析类图与类的关系-bouml(java和C++)
在分析类之间的关系时可以借助工具来实现. bouml是一个UML分析工具,最新的版本是收费的,但是之前的版本是免费的. 这里使用的是4.23版. Bouml安装: 安装软件就按照流程走就行了.但是第一 ...
随机推荐
- 下载 生成 requirements
生成你项目的所有 组件,模块 pip3 freeze > requirements.txt 下载requirements.txt 里的所有 模块 pip3 install -r requirem ...
- LightOJ - 1245 根号n暴力
打表或者画个图可以看出i>根号n时每个i的贡献值相差很小,可以利用公式优化(函数C) 但是注意不能一整段使用公式,否则复杂度还是会劣化到O(n)(显然对gongxian只能逐步递减) 网上看了不 ...
- 通过CMD命令设置网络参数
在微软的Windows系统中,一般情况下都是在可视化界面中设置IP地址和DNS的,进入“本地连接”->“属性”->“TCP/IP协议”,设置IP和DNS.但有些情况是没有这个权限的,比如在 ...
- spark java wordCount实例
1. 算子 package com.test; import java.util.Arrays; import java.util.List; import org.apache.spark.Spar ...
- maria(mysql)的主从复制
一.mariadb的基本操作 1.远程连接 mysql -uroot -p -h 127.0.0.1 mysql -uroot -p -h 192.168.226.128 2.赋予远程连接的权限 gr ...
- Java8如何用
2014年发布的Java8,现在应该是业界使用最普遍的Java版本,可很多Java开发人员并没有充分发挥这4年前发布的版本的优点, 本文就是带着“学以致用”的目的去了解Java8,挖掘编码中可提高效率 ...
- PIXI AnimatedSprite 及打字爆炸动画(5)
效果 : 消除字母 当前位置出现爆炸效果 这里使用到了AnimatedSprite 动画 Members An AnimatedSprite is a simple way to display a ...
- zookeeper在windows下的伪集群模式
参考:zookeeper在windows下的伪集群模式 踩到的坑: 注意windows下路径需要使用\ dataDir=D:\Program Files\Java\zookeeper-3.4.10-c ...
- 05-ognl基本语法
1 基本取值 @Test //1基础语法演示-基本取值 //取出root中的属性值 public void fun2() throws Exception{ //1 准备OGNLcontext Ogn ...
- java多线程之join方法使用
看这篇博客:http://www.cnblogs.com/skywang12345/p/3479275.html