UML类图实例分析

登录模块

  某基于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接口中声明的数据访问方法

注册模块

  

某基于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存在依赖关系。

通过以上分析,该实例参考类图如图所示:

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

售票机控制程序

  某运输公司决定为新的售票机开发车票销售的控制软件。图I给出了售票机的面板示意图以及相关的控制部件。

  售票机相关部件的作用如下所述:

(1) 目的地键盘用来输入行程目的地的代码(例如,200表示总站)。

(2) 乘客可以通过车票键盘选择车票种类(单程票、多次往返票和座席种类)。

(3) 继续/取消键盘上的取消按钮用于取消购票过程,继续按钮允许乘客连续购买多张票。

(4) 显示屏显示所有的系统输出和用户提示信息。

(5) 插卡口接受MCard(现金卡),硬币口和纸币槽接受现金。

(6) 打印机用于输出车票。

(7) 所有部件均可实现自检并恢复到初始状态。

现采用面向对象方法开发该系统,使用UML进行建模,绘制该系统的初始类图。

参考解决方案:

参考类图如下:

类说明:

类  名 说  明
Component 抽象部件类,所有部件类的父类
Keyboard 抽象键盘类
ActionKeyboard 继续/取消键盘类
TicketKindKeyboard 车票种类键盘类
DestinationKeyboard 目的地键盘类
Screen 显示屏类
CardDriver 卡驱动器类
CashSlot 现金(硬币/纸币)槽类
Printer 打印机类
TicketSoldSystem 售票系统类

方法说明:

方法名 说 明
Component 的init()方法 初始化部件
Component 的doSeltTest()方法 自检
Keyboard的getSelectedKey()方法 获取按键值
ActionKeyboard的getAction()方法 继续/取消键盘事件处理
TicketKindKeyboard的getTicketKind()方法 车票种类键盘事件处理
DestinationKeyboard的getDestinationCode()方法 目的地键盘事件处理
Screen的showText()方法 显示信息
CardDriver的getCredit()方法 获取金额
CardDriver的debitFare()方法 更新卡余额
CardDriver的ejectMCard()方法 退卡
CashSlot的getCredit()方法 获取金额
Printer的printTicket()方法 打印车票
Printer的ejectTicket()方法 出票
TicketSoldSystem的verifyCredit()方法 验证金额
TicketSoldSystem的calculateFare()方法 计算费用

原文地址:https://www.cnblogs.com/duanwandao/p/9837446.html

时间: 2024-10-07 08:40:29

UML类图实例分析的相关文章

UML类图关系(转,添加了实例)

UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) [泛化关系]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为.例如:老虎是动物的一种,即有老虎的特性也有动物的共性. [箭

UML类图及依赖,泛化,关联,聚合,组合,实现

UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务.一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法). 3) 类的属性即类的数据职责,类的操作即类的行为职责 一.依赖关系(Dependence) 依

深入浅出UML类图

在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition>(<UML精粹:标准对象建模语言简明指南(第3版)>)中有这么一段:“If someone were to come up to you in a dark alley and say, 'Psst, wanna

设计模式之序章-UML类图那点事儿

设计模式之序-UML类图那点事儿 序 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书我还隐约记得,叫GoF的,书名是<Design Patterns: Elements of Reusable Object-Oriented Software>,也即<设计模式>,机械出版社的将其翻译为<设计模式-可复用面向对象软件的基础>.至于为什么叫做GoF,那时候

【转】UML类图与类的关系详解

UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类

《Nodejs开发加密货币》之二十六:轻松从Js文件生成UML类图

前言 上一篇<函数式编程入门经典>,罗嗦了很长,很多小伙伴看得云里雾里.这里提供一个实例,让大家切身感受函数式编程的奥妙和趣味.当然,仅仅为了举例而写代码就没有什么意义了,本书提供的例子都是承担了某项任务的具体项目或工具,这个例子自然也不能例外. 本书用到了大量的Uml类图,经常有小伙伴问我用什么工具画的.说实话,前几篇是我个人一点点手工整理的,但后来就感觉在浪费生命,作为程序员,怎么可能容忍这样的事情反复发生.所以,就有了 js2uml(见参考)这个小工具.只不过,当初目的单一,仅仅使用正则

UML类图与类的关系详解--转

http://www.uml.org.cn/oobject/201104212.asp 原文地址 UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition).下面我们结合实例理解这些关系. 基本概念 类图(

UML类图关系大全

UML类图关系大全 1.关联 双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针.对象引用本身就是有向的,更适合表达我们所讨论的那种关系.所以这种关系在设计的时候比较少用到,关联一般都是有向的. 使用ROSE 生成的代码是这样的: class C1 ...{ public:     C2* th

UML类图关系大全【转】

UML类图关系大全 1.关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法.在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针.对象引用本身就是有向的,更适合表达我们所讨论的那种关系.所以这种关系在设计的时候比较少用到,关联一般都是有向的.使用ROSE 生成的代码是这样的: class C1 ...{public:    C2* theC2;};