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

软件工程(4)面向对象方法:面向对象软件工程OOSE与案例实践

OOSE(Object-Oriented Software Engineering,面向对象软件工程)是一种用于开发软件系统的工程方法论,它强调使用面向对象的技术和方法来设计和实现软件。OOSE 方法是由 Ivar Jacobson 提出的,主要包括以下几个关键方面:

1. 用例驱动(Use-Case Driven)

  • 用例(Use Case) 是描述系统如何与外部用户或其他系统交互的一种方式。用例驱动意味着开发过程围绕用例进行,首先识别系统的用例,并基于这些用例设计和实现系统。
  • 用例图(Use Case Diagram) 是用来表示用例和系统参与者之间关系的图示工具。

2. 模型驱动(Model Driven)

  • 在OOSE中,软件开发过程依赖于创建和维护多个模型,这些模型描述系统的不同方面。主要的模型包括用例模型、类模型、顺序模型、状态模型等。
  • 类图(Class Diagram) 显示系统中的类及其关系。
  • 顺序图(Sequence Diagram) 描述对象之间的交互顺序。
  • 状态图(State Diagram) 显示对象的状态变化。

3. 迭代增量(Iterative and Incremental)

  • 开发过程被划分为多个迭代,每个迭代都产出一个可工作的增量。每个增量都是系统的一部分,并且通过反复迭代不断改进和扩展系统。
  • 这种方法允许在开发过程中进行反馈和调整。

4. 面向对象的分析与设计(Object-Oriented Analysis and Design)

  • 面向对象分析(OOA) 是分析阶段,通过识别和定义对象及其关系来理解系统的需求。
  • 面向对象设计(OOD) 是设计阶段,基于分析阶段的成果,设计系统的架构和组件。

OOSE 的实践案例

案例1:图书管理系统
  1. 用例识别

    • 主要用例:借书、还书、添加新书、删除书籍、查询书籍等。
    • 参与者:读者、图书管理员、系统。
  2. 用例图设计

    • 绘制用例图,展示读者和管理员如何与系统交互。
    • 例:读者可以进行“借书”和“还书”操作;管理员可以进行“添加新书”和“删除书籍”操作。
  3. 类模型

    • :书籍(Book)、读者(Reader)、图书管理员(Librarian)、借书记录(BorrowRecord)等。
    • 关系:书籍与借书记录之间存在一对多关系;读者与借书记录之间也存在一对多关系。
  4. 顺序图

    • 设计借书用例的顺序图,展示读者如何请求借书,系统如何处理请求并更新借书记录。
  5. 状态图

    • 设计书籍的状态图,例如:书籍的状态可能包括“在馆”、“已借出”、“维护中”等。
  6. 迭代开发

    • 每个迭代增加一个功能或改进现有功能,如第一个迭代完成基本的借书功能,第二个迭代增加还书功能,第三个迭代改进查询功能等

具体细化实践

图书管理系统案例详细实践

1. 用例识别

目标:确定系统的主要功能和参与者。

参与者

  • 读者:可以借书、还书、查询书籍。
  • 图书管理员:可以添加新书、删除书籍、管理借还记录。
  • 系统:负责处理所有操作和管理数据。

主要用例

  • 借书:读者可以选择书籍并进行借阅。
  • 还书:读者将书籍归还给图书馆。
  • 添加新书:管理员将新书添加到系统中。
  • 删除书籍:管理员删除不再使用的书籍。
  • 查询书籍:读者或管理员查询书籍的可用性及详细信息。
  • 查看借阅记录:管理员查看借阅记录,了解书籍的借出情况。
2. 用例图设计

用例图帮助可视化用例与参与者之间的关系。

  • 借书用例

    • 参与者:读者
    • 用例:借书
    • 描述:读者选择要借的书籍,系统检查书籍是否可借,并记录借阅信息。
  • 添加新书用例

    • 参与者:图书管理员
    • 用例:添加新书
    • 描述:管理员输入书籍的详细信息(如标题、作者、ISBN、类别)并将其添加到系统中。

用例图示例

+-------------------+
|    读者            |
+-------------------+||v
+-------------------+
|    借书用例        |
+-------------------+||v
+-------------------+
|    系统            |
+-------------------+||v
+-------------------+
|    查询书籍        |
+-------------------+

3. 类模型

类模型展示了系统中的主要类及其关系。

主要类

  • Book:书籍

    • 属性:title, author, ISBN, category, status
    • 方法:checkAvailability(), updateStatus()
  • Reader:读者

    • 属性:name, readerID, borrowedBooks
    • 方法:borrowBook(), returnBook()
  • Librarian:图书管理员

    • 属性:name, librarianID
    • 方法:addBook(), removeBook(), manageRecords()
  • BorrowRecord:借阅记录

    • 属性:recordID, book, reader, borrowDate, returnDate
    • 方法:createRecord(), updateRecord()

类图示例

+-------------------+
|    读者            |
+-------------------+||v
+-------------------+
|    借书用例        |
+-------------------+||v
+-------------------+
|    系统            |
+-------------------+||v
+-------------------+
|    查询书籍        |
+-------------------+
4. 顺序图

顺序图展示了用例的动态行为,即对象之间的交互顺序。

借书用例顺序图

Reader                System                Book|                       |                    ||-------borrowBook()--->|                    ||                       |---checkAvailability()--->||                       |<--availability status---||<---confirmation-------|                    ||                       |                    |
描述
  1. 读者请求借书。
  2. 系统调用书籍对象的 checkAvailability() 方法,检查书籍是否可借。
  3. 系统根据检查结果返回借书确认信息给读者。
5. 状态图

状态图展示了对象在其生命周期中的状态变化。

书籍状态图

+------------------+
|    Available     |
+------------------+|| borrowv
+------------------+
|    Borrowed      |
+------------------+|| returnv
+------------------+
|    Available     |
+------------------+

描述

  • Available:书籍可借状态。
  • Borrowed:书籍已被借出状态,不能借阅。
  • 状态变更:从“Available”到“Borrowed”是借书操作,从“Borrowed”到“Available”是还书操作。
6. 迭代开发

第一迭代:实现基本的借书和还书功能。

  • 目标:开发借书和还书用例,包括用例图、类图、顺序图和状态图的设计。
  • 实现:提供基础的借书和还书功能,记录借阅信息。

第二迭代:实现书籍管理功能。

  • 目标:开发添加新书和删除书籍功能。
  • 实现:提供管理员界面,用于添加和删除书籍。

第三迭代:实现查询功能和用户界面改进。

  • 目标:添加书籍查询功能和改进用户界面。
  • 实现:实现书籍查询功能,优化用户体验,添加反馈机制。

通过这种详细的分步实施,可以有效地将OOSE方法应用于实际的项目开发中,使得软件系统的设计和实现过程更为清晰和高效。

相关文章:

软件工程(4)面向对象方法:面向对象软件工程OOSE与案例实践

OOSE&#xff08;Object-Oriented Software Engineering&#xff0c;面向对象软件工程&#xff09;是一种用于开发软件系统的工程方法论&#xff0c;它强调使用面向对象的技术和方法来设计和实现软件。OOSE 方法是由 Ivar Jacobson 提出的&#xff0c;主要包括以下几个关键方面…...

【数据结构篇】~链表算法题1(含快慢指针的解析)

前言 关于环形指针与快慢指针是算法题中的常客&#xff0c;如果能掌握将是我们的一大助力&#xff01; 1.快慢指针 1 移除链表元素​ https://leetcode.cn/problems/remove-linked-list-elements/description/ 1&#xff09;思路 这道题可以用一个新链表来保存原链表中不…...

洛谷 P1135 奇怪的电梯

链接直达&#xff1a;P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态 题目来源 洛谷 题目内容 奇怪的电梯 题目背景 感谢 yummy 提供的一些数据。 题目描述 呵呵&#xff0c;有一天我做了一个梦&#xff0c;梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯&…...

vue使用axios请求后端数据

前后端分离项目的基础&#xff1a; 前后端跨域访问 vite.config.js中加入 // 1.为什么要跨域 //因为浏览器的同源策略,不同站点之间访问需要跨域 //实现跨域的方式&#xff1a;server: {proxy: {// 假设要跨域访问的后端 API 地址以 /api 开头/api: { //表示拦截以/api开头的…...

目标检测 | yolov10 原理和介绍

相关系列&#xff1a; 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…...

基于Springboot 和Vue 的高校宿舍管理系统源码

网络上很多宿舍管理系统都不完整&#xff0c;大多数缺少数据库文件&#xff0c;所在使用极其不方便&#xff0c;由于本人程序员&#xff0c;根据代码&#xff0c;自己花时间不全了数据库文件&#xff0c;并且可以完美运行&#xff01;&#xff01;&#xff01;&#xff01;&…...

3:2比例的程序员专业显示器,效率提升显著,摸鱼时间又多了

对于我们程序员来说&#xff0c;显示器的重要性不言而喻&#xff0c;作为我们与代码交流的直接工具&#xff0c;他影响着我们的工作效率、舒适度和整体编程体验。我在家用的是自己笔记本的屏幕&#xff0c;简单写写代码还行&#xff0c;涉及到多任务协同或者大代码量开发就有点…...

vue3 cascader省市区三级联动如何指定字段,如何根据id查到对应的名字

如果我们接口数据字段名不是value和code。要加个props :props"{ value:code,label:regionName}"根据id查name需要一个ref和一个change事件<el-cascader :options"areaData" ref"addressCodeRef" change"handleChange" :props"…...

算法4:前缀和(上)

文章目录 一维前缀和二维前缀和寻找数组的中心下标除自身以外数组的乘积 一维前缀和 二维前缀和 寻找数组的中心下标 class Solution { public:int pivotIndex(vector<int>& nums) {int n nums.size();vector<int> f(n), g(n);f[0] nums[0];g[n - 1] num…...

美国政府紧急应对三星Galaxy手机安全漏洞

一、美国政府紧急通知更新三星Galaxy手机系统 美国政府近日发布紧急通知&#xff0c;要求联邦政府雇员在8月28日前更新三星Galaxy手机系统&#xff0c;否则将面临禁止使用这些设备的后果。这是继7月针对Pixel手机用户的类似要求之后的又一次紧急行动。此次事件的导火索是谷歌发…...

看 逆行人生

电影和我的职业本身有相关性&#xff0c;而且我特别喜欢徐峥执导的电影&#xff0c;这次的题材也算是碰上自己的胃口。 周六&#xff0c;下了大半天的雨&#xff0c;早上驱车到公司加班&#xff0c;下午六点多到时候特别想去看电影&#xff0c;果断再驱车从公司赶回来&#xff…...

0819、0820梳理及一些面试题梳理

一、抓包分析 二、HTTP服务器 三、动态库与静态库 四、一些面试题 指针数组和数组指针的区别&#xff1a;指针数组本质是一个数组&#xff0c;只是数组中存储的是指针变量。数组指针存储的是该数组的起始地址&#xff0c;对该指针来说每偏移一个单位就是偏移了一整个数组的地…...

HttpUtils工具类(一)常见的HttpUtils工具类及如何自定义java的http连接池

目录 一、几种常见的Http调用方式 1. 使用 Apache HttpClient 2. 使用 OKhttpClient 3. 使用第三方库&#xff08;Hutool&#xff09;的http链接池 4. 使用 Spring RestTemplate 5. 使用 Java 原生的HttpURLConnection 二、总结 常用三种HttpUtils对比总结 一、几种常见…...

使用 Lombok 遇到一个问题

起因是换了一个电脑&#xff0c;重新从服务器上拉了一个项目。项目是由maven构建的&#xff0c;在控制台中使用mvn命令编译项目时&#xff0c;没有任何问题&#xff0c;编译成功。如下图&#xff1a; 可是idea里面的源码&#xff0c;却标红了&#xff0c;如下&#xff1a; 错误…...

Linux基础环境开发工具gcc/g++ make/Makefile

1.Linux编译器-gcc/g使用 1. 预处理&#xff08;进行宏替换) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。 选项“-o”是指目标…...

ES 模糊查询 wildcard 的替代方案探索

一、Wildcard 概述 Wildcard 是一种支持通配符的模糊检索方式。在 Elasticsearch 中&#xff0c;它使用星号 * 代表零个或多个字符&#xff0c;问号 ? 代表单个字符。 其使用方式多样&#xff0c;例如可以通过 {"wildcard": {"field_name": "value&…...

Linux安装MQTT 服务器(图文教程)

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;专为低带宽和不稳定的网络环境设计&#xff0c;非常适合物联网&#xff08;IoT&#xff09;应用。 官网地址&#xff1a;https://www.emqx.com/ 一、版本选择 根据自己…...

【TCP】核心机制:延时应答、捎带应答和面向字节流

文章目录 延时应答捎带应答面向字节流粘包问题方案一&#xff1a;指定分隔符方案二&#xff1a;指定数据的长度 TCP 报头首部长度保留&#xff08;6 位&#xff09;选项序号确认序号 延时应答 尽可能降低可靠传输带来的性能影响 提升性能>让滑动窗口变大 如果我们立即返回 …...

题解:AT_abc352_e [ABC352E] Clique Connect

[题目通道]([ABC352E] Clique Connect - 洛谷) 鄙人今日写人生第一篇题解 希望管理大大通过 首先&#xff0c;我们先看题: 它说一共有n个点&#xff0c;m回操作。。。 每次操作 都有 一个Ki 和 Ci Ki代表有Ki个点,Ci代表每条边所赋的边权 一看就知道这是个最小生成树的板子…...

【代码随想录训练营第42期 Day32打卡 - 从零开始动态规划 - LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

目录 一、做题心得 二、动规五步走 三、题目与题解 题目一&#xff1a;509. 斐波那契数 题目链接 题解1&#xff1a;记忆性递归 题解2&#xff1a;动态规划 题目二&#xff1a;70. 爬楼梯 题目链接 题解&#xff1a;动态规划 题目三&#xff1a;746. 使用最小花费爬楼…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...