在敏捷开发中,用例图和类图可以迭代地更新和细化,随着需求的变更和系统的发展,不断调整和完

用例图

  1. 参与者
    • 患者:使用APP进行注册、登录、确认处方、取药等操作。
    • 药师:处理处方,配置药品,进行煎制(若有要求)。
    • 快递人员:派送药品,确认药品送达。
  2. 用例
    • 注册:患者扫描二维码,提供病历号获取基本信息完成注册。
    • 登录:已注册患者登录系统,未注册患者被拒。
    • 确认处方:患者登录后,查看医生开具处方,选择抓药药品、数量、煎制要求、取药方式(自行到店或送药上门),系统计算费用,患者支付后处方发送给药师。
    • 处理处方:药师配置药品,按要求煎制(若有),设置处方状态为已完成。自行取药患者取药后确认取药。
    • 药品派送:系统给快递人员发送配送信息,给送药上门患者发送收货验证码。
    • 送药上门:快递人员送药,患者收货出示验证码,快递人员验证确认送达。

类图

  1. 主要类
    • 患者类:属性包括病历号、姓名、联系方式、收货地址等;方法有注册、登录、确认处方等。
    • 药师类:属性可包含药师编号、姓名等;方法有处理处方、配置药品、煎制药品等。
    • 快递人员类:属性有快递员编号、姓名等;方法有派送药品、确认送达等。
    • 处方类:属性有处方编号、药品列表、数量、煎制要求、取药方式、费用等;方法可包括计算费用等。
    • 系统类:负责协调各功能,属性可包含系统配置信息等;方法有验证登录、发送信息(给药师、快递人员、患者)等。

在绘制图形时,用例图中参与者用小人图标表示,用例用椭圆表示,参与者和用例之间用连线表示关联关系。类图中类用矩形表示,分为属性和方法两层(可根据规范细分),类与类之间根据关系(如关联、依赖等)用相应线条连接并标注关系类型。
图中的问题要求使用面向对象分析与设计方法开发一套线上抓药APP系统,并得到用例图和类图。

1. 用例图(图3-1)

用例图展示了系统的主要功能和用户(参与者)之间的交互。根据描述,主要的参与者包括“患者”和“药师”,主要用例包括:

  • 患者

    • 注册
    • 登录
    • 确认处方
    • 选择取药方式(自行取药或送药上门)
    • 支付费用
  • 药师

    • 处理处方
    • 配置药品
    • 标记处方完成

用例图示例:

+------------------+
|      患者        |
+------------------+
       |
       |---------------------+
       |                     |
  注册  |                     | 登录
       |                     |
       |---------------------+
       |
       |---------------------+
       |                     |
确认处方 |                     | 选择取药方式
       |                     |
       |---------------------+
       |
       |---------------------+
       |                     |
   支付费用 |                   |
       |                     |
       +---------------------+
+------------------+
|      药师        |
+------------------+
       |
       |---------------------+
       |                     |
  处理处方  |                   | 配置药品
       |                     |
       |---------------------+
       |
       |---------------------+
       |                     |
   标记处方完成 |               |
       |                     |
       +---------------------+

2. 类图(图3-2)

类图展示了系统中的主要类及其关系。根据描述,主要的类包括:

  • Patient(患者)

    • 属性:姓名、联系方式、地址、病历号
    • 方法:register(), login(), confirmPrescription(), chooseDeliveryMethod(), pay()
  • Pharmacist(药师)

    • 属性:姓名、联系方式
    • 方法:processPrescription(), prepareMedicine(), markPrescriptionCompleted()
  • Prescription(处方)

    • 属性:处方ID、药品列表、数量、费用
    • 方法:getMedicines(), getQuantity(), getCost()
  • Order(订单)

    • 属性:订单ID、患者ID、处方ID、取药方式、状态
    • 方法:createOrder(), updateStatus()

类图示例:

+------------------+
|      Patient     |
+------------------+
| - name           |
| - contactInfo    |
| - address        |
| - medicalRecord  |
+------------------+
| + register()     |
| + login()        |
| + confirmPrescription() |
| + chooseDeliveryMethod() |
| + pay()          |
+------------------+

+------------------+
|     Pharmacist   |
+------------------+
| - name           |
| - contactInfo    |
+------------------+
| + processPrescription() |
| + prepareMedicine()     |
| + markPrescriptionCompleted() |
+------------------+

+------------------+
|    Prescription  |
+------------------+
| - prescriptionID |
| - medicines      |
| - quantities      |
| - cost           |
+------------------+
| + getMedicines()  |
| + getQuantity()   |
| + getCost()       |
+------------------+

+------------------+
|       Order      |
+------------------+
| - orderID        |
| - patientID      |
| - prescriptionID |
| - deliveryMethod |
| - status         |
+------------------+
| + createOrder()  |
| + updateStatus() |
+------------------+

这些图展示了系统的主要功能和类之间的关系,帮助开发人员理解系统的设计和实现。

概念层面

  • 用例图:从用户视角出发,用于描述系统功能,展示系统与外部参与者(如用户、其他系统等)之间的交互。它关注系统能为参与者做什么,强调系统的功能需求 ,是对系统功能的一种宏观抽象表示。
  • 类图:是面向对象设计的核心,描述系统中类的结构,包括类的属性、方法,以及类与类之间的关系(如关联、继承、聚合等) 。它侧重于系统的静态结构,是对系统内部实现结构的建模。

元素及表示方面

  • 用例图
    • 参与者:用小人图形表示,代表与系统交互的外部实体,可以是人、组织或其他系统 。例如在电商系统中,“顾客”“商家”就是参与者。
    • 用例:用椭圆表示,代表系统提供的功能或服务 。比如电商系统中“下单”“支付”就是用例。
    • 关系:包括关联(参与者和用例之间的联系)、扩展(一个用例对另一个用例功能的扩展)、包含(一个用例包含另一个用例的功能)等 ,用带箭头的线段表示。
  • 类图
    • :用矩形表示,一般分为三层,顶层是类名,中间层是属性,底层是方法 。例如“学生”类,可能有“姓名”“学号”等属性,以及“获取成绩”等方法。
    • 关系
      • 关联:表示类与类之间的连接,用实线表示,可带多重性标记(如1对1、1对多等) ,如“教师”类和“学生”类之间存在关联。
      • 继承:用带空心三角箭头的实线表示,子类指向父类 ,如“本科生”类继承“学生”类。
      • 聚合/组合:聚合表示整体与部分的松散关系,用带空心菱形的实线表示;组合表示整体与部分的强关联关系,部分不能脱离整体存在,用实心菱形的实线表示 ,比如“班级”和“学生”可能是聚合关系,“汽车”和“轮胎”可能是组合关系。

用途和应用场景

  • 用例图:在项目需求分析阶段使用,帮助需求分析师和用户沟通,明确系统功能需求,界定系统边界 。例如在开发医院挂号系统时,通过用例图可以清晰展示患者挂号、医生查看预约等功能需求。
  • 类图:主要用于系统设计阶段,帮助软件设计师规划系统的静态结构,为后续的编码实现提供蓝图 。比如在开发一款管理软件时,类图可以指导程序员如何定义类、类的属性和方法以及类之间的交互关系。
  • 用例图和类图是面向对象分析与设计(OOAD)中的两个重要工具,它们在软件开发过程中发挥着关键作用。以下是它们在实际开发中的应用:

用例图的应用

  1. 需求收集与分析

    • 用例图帮助开发团队理解系统的功能需求,通过识别参与者(用户或其他系统)和用例(系统功能),明确系统需要提供哪些功能。
  2. 沟通工具

    • 用例图作为开发团队与客户、利益相关者之间的沟通工具,帮助非技术人员理解系统的主要功能和用户交互。
  3. 系统设计

    • 用例图指导系统设计,帮助确定系统的主要组件和它们之间的关系,为后续的详细设计和实现提供基础。
  4. 测试计划

    • 用例图可以作为测试计划的基础,每个用例都可以转化为测试用例,确保系统功能按预期工作。
  5. 文档化

    • 用例图是系统文档的一部分,记录系统的功能需求和用户交互,为未来的维护和升级提供参考。

类图的应用

  1. 系统架构设计

    • 类图展示了系统的静态结构,包括类、接口、它们的属性和方法,以及类之间的关系(如继承、实现、关联等),帮助设计系统的架构。
  2. 详细设计

    • 类图指导详细设计阶段,开发人员可以根据类图设计数据库模式、编写代码、实现类和接口。
  3. 代码生成

    • 在某些开发环境中,类图可以直接用于生成部分代码,提高开发效率。
  4. 团队协作

    • 类图作为团队协作的工具,帮助团队成员理解系统的内部结构和设计决策,促进团队成员之间的沟通。
  5. 重构和维护

    • 类图在系统重构和维护过程中非常有用,帮助开发人员理解现有系统的结构,识别改进的机会。
  6. 文档化

    • 类图是系统文档的一部分,记录系统的静态结构,为未来的维护和升级提供参考。

结合使用

  • 迭代开发

    • 在敏捷开发中,用例图和类图可以迭代地更新和细化,随着需求的变更和系统的发展,不断调整和完善。
  • 模型驱动开发(MDD)

    • 在模型驱动开发中,用例图和类图是开发过程的核心,通过模型自动生成代码,减少手工编码的工作量,提高开发效率和代码质量。

总之,用例图和类图是软件开发过程中不可或缺的工具,它们帮助开发团队理解需求、设计系统、编写代码、测试和维护系统,确保软件开发的质量和效率。
在敏捷开发中,迭代更新是一种常见的做法,它允许团队在开发过程中不断适应变化的需求和反馈。用例图和类图作为重要的设计工具,在敏捷开发中也需要进行相应的迭代更新。以下是具体的步骤和方法:

1. 初始建模

在敏捷开发的初期,团队应该创建一个基本的用例图和类图,以捕捉系统的主要功能和结构。这些图不需要非常详细,但应该足够清晰,以便团队成员理解系统的基本需求和设计。

2. 迭代计划

在每个迭代周期(如两周或一个月)开始时,团队应该根据产品待办事项列表(Product Backlog)选择将在当前迭代中实现的功能。然后,团队应该更新用例图和类图,以反映这些功能。

3. 更新用例图

  • 添加新用例:如果新的功能需求被识别,应该添加新的用例到用例图中。
  • 修改现有用例:如果现有功能需要修改或扩展,应该更新相应的用例。
  • 删除过时用例:如果某些功能不再需要,应该从用例图中删除相应的用例。

4. 更新类图

  • 添加新类:如果新的功能需要新的类来实现,应该在类图中添加这些类。
  • 修改现有类:如果现有类需要修改以支持新功能,应该更新类图。
  • 删除过时类:如果某些类不再需要,应该从类图中删除这些类。
  • 更新类之间的关系:如果类之间的关系发生变化(如新增关联、修改继承关系等),应该更新类图以反映这些变化。

5. 持续沟通和反馈

  • 团队讨论:在更新用例图和类图后,团队应该进行讨论,确保所有成员都理解更新的内容。
  • 客户反馈:在可能的情况下,应该向客户展示更新的用例图和类图,获取他们的反馈,并根据反馈进行调整。

6. 持续集成

  • 代码与模型同步:随着类图的更新,开发人员应该相应地更新代码,确保代码与模型保持一致。
  • 模型驱动开发:在某些情况下,可以使用工具自动从类图生成代码,或者从代码生成类图,以保持模型和代码的同步。

7. 文档化和回顾

  • 文档化:在每个迭代结束时,应该更新文档,记录用例图和类图的当前状态。
  • 回顾:在迭代回顾会议中,团队应该回顾用例图和类图的更新过程,讨论哪些做得好,哪些需要改进。

通过这种方式,用例图和类图可以在敏捷开发中不断迭代更新,以适应不断变化的需求和反馈,同时保持团队对系统设计的理解。
以下是根据用例图识别系统边界的方法:

依据参与者判断

  • 明确外部实体:参与者是处于系统外部,与系统进行交互的人、组织或其他系统。那些在图中以小人或特定图标表示的参与者,其所处位置就在系统边界之外。例如在电商系统用例图中,顾客、商家、物流合作伙伴等参与者,他们与系统交互但不属于系统内部,由此可确定系统边界在他们之外 。
  • 分析交互关系:参与者与用例之间通过关联关系相连,这种关联点就体现了系统与外界的交互接口。系统边界就是围绕这些交互点,将系统内部的用例(功能)与外部参与者分隔开来 。比如在银行储蓄系统中,储户作为参与者与“存款”“取款”等用例交互,这些交互的界限就勾勒出了系统边界。

从用例角度确定

  • 梳理用例范围:用例是系统提供的功能或服务。只关注系统内部所包含的用例,用例所涵盖的功能范畴就是系统内部的功能领域,其外部就是系统边界。例如在图书管理系统中,“图书借阅”“图书归还”“图书信息查询”等用例,这些用例集合的外部边界就是系统边界 。
  • 排除外部功能:如果存在一些功能在图中是由外部参与者自身执行,而不是系统提供的功能(即不属于系统内的用例),那么这些功能区域就在系统边界之外。比如在在线教育系统中,学生自主制定学习计划这一行为,若未作为系统的用例,那就属于系统边界外学生自身的活动 。

综合整体判断

  • 检查遗漏情况:确保用例图中涵盖了系统所有主要功能对应的用例,避免出现因用例缺失而导致系统边界界定不准确的情况。同时,检查参与者与用例的关联是否完整合理,若存在不合理的交互,可能影响系统边界判断 。
  • 结合业务背景:将用例图与实际业务场景相结合,从业务逻辑上判断哪些属于系统内部处理范畴,哪些属于外部范畴。比如在酒店预订系统中,结合酒店运营的业务逻辑,判断诸如客户在线选房(系统功能)与客户线下与酒店协商特殊服务(系统外协商行为)等,从而准确界定系统边界。
  • 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值