当前位置: 首页 > article >正文

面向对象分析与设计Python版 面向对象分析方法

文章目录

    • 前言
    • 一、名词法
    • 二、名词法-案例
    • 三、CRC卡片法
    • 四、分析模型法(了解)


前言

面向对象分析的目标:发现对象、定义对象之间的关系和属性。常用的面向对象分析方法有三种:

  • 名词法
  • CRC卡片法
  • 分析模型法

一、名词法

大型复杂系统如何分析?一般先采用面向功能分析方法,把系统分成模块。然后采用面向对象分析方法,实现模块的功能

  • 面向功能分析方法:专注于将复杂函数分解为简单函数。

在这里插入图片描述

  • 面向对象分析方法:识别对象和对象之间的关系

面向对象分析主要步骤

  • 识别对象
  • 组织对象:对识别的对象进行分类,以便以后可以在同一类中定义相似的对象
  • 定义对象之间的关系:有助于确定对象的输入和输出
  • 定义对象属性:对象中保存的信息
  • 定义对象操作:对象中处理数据的方法,也被称为“责任分配”。这一步,主要在设计阶段完成

面向对象分析-名词法步骤

  • 重用或修改现有模型概念类

  • 借助行业、主题的概念类列表

  • 在需求描述或用例描述中识别名词(短语),并将它们视为候选概念类。

    • 辨析候选概念类,定义核心概念类

    • 定义核心概念类之间的关系和多重性

    • 定义核心概念类的属性

二、名词法-案例

废品回收机需求描述:

  • 该系统控制一台回收机器,用于回收瓶子、罐头和板条箱。这台机器可以被多个客户同时使用,每个客户可以在同一场合返回所有三种类型的项目。系统必须检查每个条目返回的类型。
  • 系统将记录每个客户退回的物品数量,当客户要求收据时,系统将打印退回物品的价格、数量以及将支付给客户的退回总金额。

使用名词法进行分析

名词/名词短语分析抽象后概念类
回收机器是指“整体系统”deposit receiver
瓶子、罐头和板条箱可以概括为“物品”,继承关系item
项目、条目与“物品”重复删除
系统与“整体系统”重复删除
客户这是用例的参与者,在系统之外,系统应提供交互界面用户界面 (UI)
收据记录接收的各项物品的数量明细receipt basis
总金额总金额由各物品的单价*数量汇总计算而来,不需要保存此冗余信息删除
打印机该名词从概念类列表中补充而来receipt printer

建立领域模型

  • 定义概念类之间的关系,以及多重性

  • 定义概念类的属性

捕获
1..*
1
创建和通知
发起操作
分类
打印
Item
number
value
Can
weight
size
Bottle
weight
size
Crate
weight
size
ReceiptBasis
DepositReceiver
UI
ReceiptPrinter

三、CRC卡片法

CRC卡片法( Classes Responsibilities Collaborations )

  • 类(Class):代表一系列对象的集合,这些对象是对系统设计的抽象建模。例如,在一个学校管理系统中,学生、教师、课程等都可以是类。类名通常写在卡片的最上方。
  • 职责(Responsibility):指这个类所知道的信息或能执行的操作。例如,一个学生类可能有获取姓名、地址、电话号码等信息的职责,以及参加课程、提交作业等行为。
  • 协作(Collaborator):指与这个类交互的其他类。这些协作类帮助实现该类的职责。在CRC卡片中,协作类通常列在卡片的最右侧。

CRC卡片法特点

  • 采用小组“头脑风暴”的形式提出概念
    • 小组组成:一个或两个用户领域专家,一个或两个系统分析师,一个面向对象软件设计师,一位引导者,客户代表
    • 讨论建议:不要责备任何人的想法,所有的想法都是平等的;快节奏的讨论,鼓励个人创新;让每个人都充分参与;幽默可以建立一个有凝聚力和有效的团队所需要的信任。
    • 收集各种各样的想法,比较这些想法并进行合成。将讨论结果分为三类:一致同意的、一致反对的、需要进一步讨论的
  • CRC的目标不是提供完整的设计
  • CRC产生的结果需要进一步细化

CRC卡片格式

在这里插入图片描述

面向对象分析-CRC卡片法步骤

  • 通过头脑风暴,收集概念类。
  • 从收集的结果中,识别出核心概念类。即把收集的结果分为三类:核心的、可选的和不需要的。
  • 明确系统的范围,去掉不必要的核心概念类。例如删除与系统相关,但在系统外部的类;删除系统需要有接口与它们通信,但不需要在系统内部的类;删除重复表示相同含义的类。
  • 识别一个概念是属性还是类。当它不做具体的事情,且不能改变状态,那应该将它归为属性。
  • 为核心概念类分配职责。分配时避免大多数职责都归属于少数几个类;避免类的功能退化为“记录信息”(只知道知己的信息)。
  • 为核心概念类分配协作。标识类之间的关系,使用“基于场景”的角色扮演,发现/测试协作。

CRC卡片法示例

在这里插入图片描述

在这里插入图片描述

四、分析模型法(了解)

分析模型法 Analysis model with stereotypes

  • 关注系统的信息、行为和表示(输入/出)
  • 一个健壮、稳定的模型,必须与实现环境(编程语言)无关。
  • 实现环境的任何变化,不会影响到系统的逻辑结构.
  • 分析模型法的表示符号如下:
    • 边界/接口(Boundary / Interface):属于表示层(输入/出)
    • 实体(Entity):属于信息层
    • 控制(Control):属于行为层

在这里插入图片描述

面向对象分析-分析模型法步骤

  • 识别边界/接口对象:与参与者直接相关的功能
  • 识别实体对象:用例中使用的信息和处理信息的功能
  • 识别控制对象:连接接口对象和实体对象的功能

示例:用分析模型法表示废品回收机

在这里插入图片描述


您正在阅读的是《面向对象分析与设计Python版》专栏!关注不迷路~


http://www.kler.cn/a/488469.html

相关文章:

  • 使用 Maxwell 计算母线的电动势
  • [ LeetCode 75 ] 283 移动零(JavaScript)
  • 计算机网络之---无线网络的传输介质
  • WEB攻防-通用漏洞_文件上传_黑白盒审计流程
  • 深入讲解 Docker 及实践
  • 统计模型的Flops和Params
  • 机器学习:一元线性回归
  • Python基于jieba和wordcloud绘制词云图
  • gateway在eureka注册报java.lang.IndexOutOfBoundsException
  • Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求
  • 基于Spring Boot的宠物健康顾问系统的设计与实现(LW+源码+讲解)
  • 国产编辑器EverEdit - 扩展脚本:关闭所有未修改文档
  • Docker Desktop的使用方法
  • 什么是Transformer模型中的KV缓存:上下文新增那之前计算的KV还可用,在原有基础上对新增的进行计算就行
  • opencv 学习(3)
  • js代理模式
  • 用c实现C++类(八股)
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/09】小测-【第9章 VRRP原理及基本配置考试】理论和实操
  • UniAPP和Vue3生命周期hook
  • 【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
  • mysql和redis的最大连接数
  • Linux之线程池与单例模式
  • GPT-1模型详解及代码复现
  • 利用Python爬虫获取义乌购店铺所有商品列表:技术探索与实践
  • 开启Excel导航仪,跨表跳转不迷路-Excel易用宝
  • IntelliJ IDEA中Maven项目的配置、创建与导入全攻略