当前位置: 首页 > 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方法应用于实际的项目开发中,使得软件系统的设计和实现过程更为清晰和高效。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 编程艺术的细枝末节:深入探索调用约定
  • 仿twitter社区源码推特PHP源码
  • xss靶场详解
  • Redis的数据结构——Hash表
  • 如何提升 RocketMQ 顺序消费性能?
  • 如何在Linux/Debian/Ubuntu上将WebP图片转换为PNG格式
  • PCIE过渡时间(Transition Time)To P2、From P2、TO/From Non P2三个参数
  • 【pyqt5】QLineEdit中的文本输入限制方式,输入校验规则的应用详解
  • 文心快码 Baidu Comate 前端工程师观点分享:以文心快码 Baidu Comate为例,智能代码助手需要什么(一)
  • 《重生到现代之从零开始的C语言生活》—— 指针3
  • 手机运动信息管理系统
  • Oracle(76)如何收集统计信息?
  • 深度解析Python PyInstaller打包EXE的详细教程
  • C#发送邮件功能实现全面指南?有哪些方法?
  • C语言--01基础数据类型
  • python3.6+scrapy+mysql 爬虫实战
  • [译] 怎样写一个基础的编译器
  • centos安装java运行环境jdk+tomcat
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • k8s如何管理Pod
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Vue全家桶实现一个Web App
  • webgl (原生)基础入门指南【一】
  • 百度地图API标注+时间轴组件
  • 大整数乘法-表格法
  • 分布式任务队列Celery
  • 十年未变!安全,谁之责?(下)
  • 小李飞刀:SQL题目刷起来!
  • 云大使推广中的常见热门问题
  • HanLP分词命名实体提取详解
  • 选择阿里云数据库HBase版十大理由
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #Java第九次作业--输入输出流和文件操作
  • #QT项目实战(天气预报)
  • $.ajax()
  • (03)光刻——半导体电路的绘制
  • (175)FPGA门控时钟技术
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET IoC 容器(三)Autofac
  • .NET8使用VS2022打包Docker镜像
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @JsonFormat与@DateTimeFormat注解的使用
  • @property python知乎_Python3基础之:property
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @Transactional 竟也能解决分布式事务?
  • [ C++ ] template 模板进阶 (特化,分离编译)