深入浅出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】
转载于:https://blog.51cto.com/asmxpl/1424715
深入浅出UML类图(四)相关推荐
- 深入浅出UML类图(一)
在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard O ...
- 深入浅出UML类图(二)
类与类之间的关系(1) 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式. 1. 关联关系 关联(Association)关系是类与类之间最常用 ...
- 四步轻松实现用Visio画UML类图
原文链接:四步轻松实现用Visio画UML类图 四步轻松实现用Visio画UML类图 本节和大家一起学习一下用Visio画UML类图的方法,主要有四个步骤,这里和大家分享一下,相信通过本节的学习,你对 ...
- idea添加database插件_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理......
优质文章,第一时间送达 上一篇: 下一篇:(已修复) 作者: 菩提树下的杨过 出处: http://yjmyzz.cnblogs.com dea还有很多高大上的功能,易用性几乎能与vs.net媲美,反 ...
- IDEA高级用法:集成JIRA、UML类图插件、SSH、FTP、Database管理...
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:菩提树下的杨过 出处:http://yjmyzz.cnb ...
- UML类图关系大全 and 报表的基本用法
UML类图关系大全 1.关联 双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在 GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描 ...
- 【系统分析与设计】UML类图绘制方法(真の能看懂~!)
文章目录 1 类的基本表示方式 2 类之间关系的表示方式 所有的面向对象(Object Oriented)语言都离不开类的概念,理解了程序中类的设计也就理解了程序的一半.但类的具体描述方式在各个类中都 ...
- idea server日志乱码_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理
作者:菩提树下的杨过 链接:https://www.cnblogs.com/yjmyzz/p/intellji-idea-advanced-usage.html idea 还有很多高大上的功能,反正我 ...
- Java:封装的概念,UML类图,构造方法,this关键字,static关键字,方法重载,包package
oop三大特性:封装,继承,多态 oop一般指面向对象程序设计(一种计算机编程架构) 一.封装的概念: 将东西包在一起,然后以新的完整形式呈现出来 ...
最新文章
- Oracle 基础之数据库管理
- china-pub赠书啦,超值畅销书5本
- iOS开发 - OC - block的详解 - 基础篇
- 【转】pdf 中如何把几页缩小成一页打印
- problem a: 简单的整数排序_python里的排序
- Pandas Series interpolate
- centos6.5和centos7如何搭建php环境(包括php7)
- scala 入门初探
- html游戏音乐,背景音乐的html标签
- 用c语言编写车牌识别系统,这算干货吗?写点车牌识别系统方案
- Linux中编译mdio命令,linux网络设备—mdio总线
- 腾讯云你的凭证不工作
- 立夏游雪上,赏奇花,正当时:天台九遮山
- 编译linux内核报错,/bin/sh: 1: flex: not foundscripts/Makefile.host:9: recipe for target ‘scripts/kconfig/
- 个人简历模板html5
- 金山办公2020笔试
- 国外计算机图书月旦评
- win10下如何使用debug
- TROPOMI(哨兵5P)数据介绍及下载方法
- 贝塞尔曲线移动 应用
热门文章
- mysql分库分区分表怎么做_mysql 分区、分表、分库分表。
- php实例化类的方法,php实例化类的方法是什么
- @select注解模糊查询_mybatis @SelectProvider 注解, 打赌你没有用过
- mysql自动编号_MySQL自动编号与主键
- 【opencv】丁达尔效应
- 微博收藏(机器学习探讨)(二)
- 牛人推荐机器学习网站
- Spring 的IOC容器系列的设计与实现:BeanFactory 和 ApplicationContext
- 微服务架构下分布式事务解决方案 —— 阿里GTS
- 如何管理并设计你的口令