system: [SYSTEM]

user: 2. 面向对象分析与设计 统一建模语言(Unified Modeling Language， UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言，是面向对象的建模工具，独立于任何程序设计语言。UML是在不同角度描述一个系统的功能和特征，也适用于描述软件各个开发阶段中的不同状态。通过建立需求模型、逻辑模型、设计模型和实现模型等，反应事物的实体、性质、关系、结构、状态和动态变化过程。 UML在开发系统时常用到三种主要的模型：功能模型、对象模型和动态模型。其中，功能模型是从用户的角度展示该系统的主要功能，例如用例图；对象模型是采用对象、属性、操作等概念展示系统的结构，例如类图；动态模型展示的是系统运行时的动态行为，包括时序图、活动图和协作图等。 (一) 建立需求模型——用例图 1. 确定系统边界和对象 系统边界指的是一个系统所包含的所有系统成分跟系统之外的各种事物的分界线。对象是指现实生活中客观存在的事物，在面向对象分析中，是系统用来描述客观事物的封装体，是数据和动作的一个封装。对象不仅能够进行操作，并且能及时记录下操作的结果。选择对象的标准是首先保证这个对象能够参与程序的运行，其次保证这个对象有对象的基本特征，也就是能够进行封装，最后要保证对象必须是强相关的对象。 2. 绘制用例图 用例图包括参与者、用例以及用例与参与者之间的关系。这些关系包括参与者与用例之间的关联关系、参与者间的继承关系和用例之间的包含、继承和扩展关系。参与者通常分为三类：用户、设备或者外部系统。 3. 用例之间的关系 用例之间的关系包括包含关系、扩展关系和继承关系。 (二) 以医院病房系统为案例进行用例图分析 1. 医院病房监护系统的系统要求为： 1) 将病症监视器安装在每个病房，使病人的病症信号能够实时传送到中央控制系统进行分析和处理； 2) 在中心值班室内，值班护士使用中央监控系统对病人的情况进行监控，根据医生的要求进行打印病情报告、更新病历等操作； 3) 当病症出现异常时，系统会自动报警，并实时打印病人的病情报告，同时更新病历。 2. 分析系统的参与者 通过题目要求可以分析出主要参与者： 病人：提供病症信号； 值班护士：监视病情、查看病情报告、打印病情报告； 医生：查看病情报告、打印病情报告、查看病历、打印病历。 3. 分析系统的详细功能 病症监护：将病人反馈的病症信号格式化后实时传送的中央监护； 中央监护：对比信号，将收到的信号与标准病症信号进行对比；报警，若通过对比发现信号异常则自动报警；更新病历，若发现信号异常则自动更新病历；打印报告，若发现信号异常则自动打印病情报告； 病情报告管理：医生和护士均可以查看、打印病情报告； 病历管理：更新病历，信号异常时对病历进行自动更新、定期对病历进行更新；查看病历，医生可以查看病历；打印病历，医生可以打印病历； 自动更新病历。 根据以上分析，绘制出的用例图如图1所示。 图1. 病房监护系统用例图 (三) 建立基本模型——类图 1. 发现对象，定义他们的类 类是现实世界中实体的形式化描述，实体的数据和操作封装起来，多个对象实体抽象成一个类。类实际上是一种数据类型，具有属性和方法，属性由数据结构进行描述、方法用操作名和实现该操作的方法进行描述。类图描述的是系统的静态模型类型，有助于在正式编写代码进行开发之前，对系统整体有一个全面的认识。类图表示类、接口和他们之间的协作关系。 2. 类与类之间的结构关系 结构是指所要研究的问题域的复杂度和连接关系，也就是类和对象之间的关系。类和对象之间的关系主要有四种：关联关系、依赖关系、泛化关系和实现关系。其中，关联关系还分为双向关联、单向关联、自关联、多重关联、聚合关系和组合关系。 泛化关系也称继承关系，指的是一个子类或者子接口继承另外的一个父类或者父接口的功能。如果继承的父类是抽象类，并且有抽象方法，那么抽象方法必须在子类中实现。实现关系指的是一个类实现一个或多个接口的功能，是类与接口之间最常见的关系。在UML图中通常用一个带空心三角箭头的虚线，从类指向实现的接口。依赖关系指的是两个相对独立的对象，一个对象负责构造了另一个对象的实例或者依赖另一个对象的服务时，二者表现出依赖关系，也就是一个类使用了另一个类的方法参数，二者就是依赖关系。关联关系是一种比依赖关系更强并且是存在长期性的一种关系，当一个类的实例使用了另一个类的实例时，二者形成关联关系。聚合关系是关联关系的一种，其耦合度更强，体现的是整体与部分的关系，是一种“整体–个体”之间的相互关系，在UML中通常使用空心菱形实线箭头表示。组合关系是关联关系的一种特殊形式，也成为强聚合关系，同样体现了整体与部分之间的关系，但区别在于，组合关系中整体与部分是不可分割的，也就是加入整体的生命周期结束，意味着部分的生命周期也结束，在UML中通常使用实心菱形和实线箭头表示。 (四) 分析建模在线商城的类图 以在线商城为研究对象，得出该系统的用户主要包括顾客和管理员两类，顾客分为普通用户和注册成会员的用户。普通用户可以进行商品查询、浏览商品详情等基本浏览网页操作，会员用户可以在登录后进行添加购物车、移除购物车内商品、下订单以及付款等操作。网站管理员负责系统后台的维护，包括管理会员信息、管理商品信息、管理订单、订单维护、订单执行发货等操作。 通过以上分析，可以总结出的类有：用户类、管理员类、顾客类、订单类、商品信息维护类。在线商城的类图如图2所示。 图2. 在线商城系统类图 (五) 确定动态模型——时序图 1. 组成元素 一个完整的时序图需要包含七种元素：Actor (角色)、Object (对象)、Life Line (生命线)、Activation (动作)、Message (消息)、自关联消息以及组合片段。其中角色主要指的是系统角色，可以是人或者系统的抽象表示。对象位于时序图顶部，用矩形表示，通常对象的命名方式可以同时显示对象名和类名，也可以只显示其中一个。生命线是时序图中每个对象下面一条垂直的虚线，代表着对象的时间线。动作表示时序图中对象在某段时间内进行的操作。 2. 信息 消息指的是对象在进行操作的同时所传递的信息，这种信息分为同步、异步和返回信息。同步信息用实线和实心箭头表示，代表消息随着操作同时传送给信息的接收者并且等待信息返回，所谓同步指的是操作和等待信息的同步。异步信息相对于同步信息，指的是消息传送给信息的接收者后继续进行自己的活动，不再等待返回消息，消息的发送者和接收者是同时并发工作的，异步信息用一条实线和大于号表示。而返回信息表示的是从过程调用返回信息，用虚线和小于号表示。 自关联消息指的是方法的自身调用或者一个对象内的方法调用另一方法，在UML中用使用半闭合的矩形和实心箭头表示。 3. 结构 时序图通常描述的是对象之间的交互情况，也就是描述在一个完整的操作中，信息在对象之间的传递情况。时序图有两个坐标轴，横坐标显示对象，用矩形表示，矩形框中写有对象名或者类名；纵坐标表示时间，每一个对象下面的纵向虚线用来表示对象的执行情况，这条虚线称作生命线。当对象接收到消息时，该对象相对应的操作就会被调用，这一过程称作激活。 4. 创建步骤 时序图的创建大概分为六个步骤： 1) 确定交互过程的上下文； 2) 识别参与活动的交互对象； 3) 为参与活动的对象设置生命线； 4) 按照实际活动顺序，依次从初始消息画到最后； 5) 标记消息发生的时间点； 6) 说明时间约束的地点。 (六) 基于在线商城案例分析时序图 通过用例图和类图的分析，我们可以确定了参与者和基本的活动，在静态建模的基础上，UML建模的下一步就是根据分析出系统的基本活动绘制出时序图，从动态建模角度将进一步分析系统的功能实现和结构。在线商城的案例中，我们可以通过分析顾客购买商品的行为，画出相应的时序图，见图3。 图3. 顾客商品预览时序图 分析可知，该行为的参与者是顾客，要想做出完整的购买商品的行为，需要进行登陆系统、浏览商品、将商品加入购物车。 (七) 静态结构和动态行为的组合——协作图 协作图又称通信图，表示不同事物之间相互协作完成一个复杂的功能，是面向对象动态建模的另一种图。与时序图不同，协作图展示的是对象之间的关系，有利于分析出所有对象之间的相互影响关系，通常适用于过程设计，适合用来描述少量对象之间的简单交互。 协作图通常由三种元素组成：对象、连接和消息。对象由矩形框表示，代表协作图中用来进行交互的角色，与时序图中对象的概念相近。连接表示对象之间相互通信的路径，用一条连接两个角色的实线表示。消息代表协作图中对象之间通过连接所传递的信息，连接的实线上方标有消息的序列号和对象之间发送的消息，其中，一条消息就会触发接收对象中的一项操作。 协作图中的消息类型基本与时序图相同，只不过需要为消息添加顺序号以说明交互过程中的时间顺序。在UML中，时序图可以与协作图进行相互转换。