面向对象分析与设计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版》专栏!关注不迷路~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951842.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础和redis

1. Map函数 2. filter函数 numbers generate_numbers() filtered_numbers filter(lambda x: x % 2 0, numbers) for _ in range(5):print(next(filtered_numbers)) # 输出: 0 2 4 6 83. filter map 和 reduce 4. picking and unpicking 5. python 没有函数的重载&#xff0…

Vue2:el-table中的文字根据内容改变颜色

想要实现的效果如图,【级别】和【P】列的颜色根据文字内容变化 1、正常创建表格 <template><el-table:data="tableData"style="width: 100%"><el-table-column prop="id" label="ID"/> <el-table-column …

git提交

基本流程&#xff1a;新建分支 → 分支上开发(写代码) → 提交 → 合并到主分支 拉取最新代码因为当前在 master 分支下&#xff0c;你必须拉取最新代码&#xff0c;保证当前代码与线上同步&#xff08;最新&#xff09;&#xff0c;执行以下命令&#xff1a;bashgit pull orig…

Airflow:TimeSensor感知时间条件

在数据管道工作流中&#xff0c;任务可能需要在特定的时间执行&#xff0c;或者在继续之前等待一定的时间。为了满足这些需求&#xff0c;Apache Airflow提供了TimeSensor&#xff0c;这是一种内置Sensor&#xff0c;可以监控当前时间&#xff0c;并在达到指定时间时触发后续任…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

Center Loss 和 ArcFace Loss 笔记

一、Center Loss 1. 定义 Center Loss 旨在最小化类内特征的离散程度&#xff0c;通过约束样本特征与其类别中心之间的距离&#xff0c;提高类内特征的聚合性。 2. 公式 对于样本 xi​ 和其类别yi​&#xff0c;Center Loss 的公式为&#xff1a; xi​: 当前样本的特征向量&…

【Maui】动态菜单实现(绑定数据视图)

前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&#xff0c;可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款开放源代码应用&#xff0c;是 X…

【json】

JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…

51单片机——中断(重点)

学习51单片机的重点及难点主要有中断、定时器、串口等内容&#xff0c;这部分内容一定要认真掌握&#xff0c;这部分没有学好就不能说学会了51单片机 1、中断系统 1.1 概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#…

易支付二次元网站源码及部署教程

易支付二次元网站源码及部署教程 引言 在当今数字化时代&#xff0c;二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求&#xff0c;搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程&#xf…

开源生成式物理引擎Genesis,可模拟世界万物

这是生成大模型时代 —— 它们能生成文本、图像、音频、视频、3D 对象…… 而如果将所有这些组合到一起&#xff0c;我们可能会得到一个世界&#xff01; 现在&#xff0c;不管是 LeCun 正在探索的世界模型&#xff0c;还是李飞飞想要攻克的空间智能&#xff0c;又或是其他研究…

【fly-iot飞凡物联】(19):开源飞凡物联项目重启,使用go重写后端代码,感兴趣的小伙伴可以一起参加,使用apache协议开源,招募感兴趣的小伙伴!!

目录 前言fly-iot飞凡物联&#xff0c;感兴趣的小伙伴可以一起参加&#xff0c;使用apache协议开源使用go重写后端代码 前言 fly-iot飞凡物联专栏&#xff1a; https://blog.csdn.net/freewebsys/category_12219758.html fly-iot飞凡物联&#xff0c;感兴趣的小伙伴可以一起参…

用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(3) —— 基于 LangChain 框架的文档检索与问答功能以及RAG Tool的使用

介绍基于 LangChain 框架的文档检索与问答功能&#xff0c;目标是通过查询存储的向量数据库&#xff08;VectorDB&#xff09;&#xff0c;为用户的问题检索相关内容&#xff0c;并生成自然语言的答案。以下是代码逻辑的详细解析&#xff1a; 代码结构与功能 初始化环境与加载…

消息中间件类型介绍

消息中间件是一种在分布式系统中用于实现消息传递的软件架构模式。它能够在不同的系统或应用之间异步地传输数据&#xff0c;实现系统的解耦、提高系统的可扩展性和可靠性。以下是几种常见的消息中间件类型及其介绍&#xff1a; 1.RabbitMQ 特点&#xff1a; • 基于AMQP&#…

uniapp使用scss mixin抽离css常用的公共样式

1、编写通用scss样式文件 // 通用 Flex Mixin mixin flex($direction: row, $justify: flex-start, $align: stretch, $wrap: nowrap) {display: flex;flex-direction: $direction;justify-content: $justify;align-items: $align;flex-wrap: $wrap; }// 水平居中 mixin flex-…

Matlab Steger算法提取条纹中心线(亚像素位置)

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 Steger 算法是一种常用的图像边缘检测算法,可以用于提取图像中的中心线或边缘信息。它的理论假设是:条纹的亮度是按照高斯分布呈现的,即中心亮两侧渐暗。 其计算过程如下所述: 1、首先,我们需要计算每个点Hess…

PySide6 Qt for Python Qt Quick参考网址

Qt QML BOOK&#xff1a; 《Qt for Python》 -Building an Application https://www.qt.io/product/qt6/qml-book/ch19-python-build-app#signals-and-slots Qt for Python&#xff1a;与C版本的差异即BUG处理&#xff08;常见的DLL文件确实的问题等&#xff09; Qt for Pyt…

【大数据】Apache Superset:可视化开源架构

Apache Superset是什么 Apache Superset 是一个开源的现代化数据可视化和数据探索平台&#xff0c;主要用于帮助用户以交互式的方式分析和展示数据。有不少丰富的可视化组件&#xff0c;可以将数据从多种数据源&#xff08;如 SQL 数据库、数据仓库、NoSQL 数据库等&#xff0…

ELK实战(最详细)

一、什么是ELK ELK是三个产品的简称&#xff1a;ElasticSearch(简称ES) 、Logstash 、Kibana 。其中&#xff1a; ElasticSearch&#xff1a;是一个开源分布式搜索引擎Logstash &#xff1a;是一个数据收集引擎&#xff0c;支持日志搜集、分析、过滤&#xff0c;支持大量数据…

汽车物资拍卖系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…