系统化掌握Dart编程之面向对象分析

前言

面向对象分析Object-Oriented Analysis, OOA)是将现实世界的问题抽象 为软件系统中对象 的过程,其任务和目的 是通过对问题空间的分析,建立 系统的分析模型

OOA方法将数据功能结合在一起作为一个综合对象 来考虑。OOA技术可将系统的行为信息间的关系表示为迭代构造特征 。换言之,通过迭代 的方式,逐步构建出系统的行为信息之间关系模型 ,使得系统的结构更加清晰易于理解和维护

  • 系统的行为 :指的是系统中各个组件对象 如何交互执行任务响应事件
  • 信息间的关系 :指的是系统中不同数据对象 之间的关联依赖
  • 迭代构造特征 :意味着这些行为信息的关系不是一次性设计完成的,而是通过多次迭代逐步完善和细化的

OOA包含5个活动:认定对象组织对象描述对象间的相互作用确定对象的操作及定义对象的内部信息

为了深入理解 OOA,我们将通过一个具体的例子------图书馆管理系统 ------来详细探讨其五个核心活动,并展示每个阶段的具体步骤成果

一、认定对象

1.1、目标

  • 识别系统中的关键实体概念

1.2、实践

  • 需求文档需求讨论中提取名词
  • 确认这些实体是否对系统的功能至关重要

1.3、案例

在图书馆管理系统中,可能会识别出以下对象

  • Book书籍 ,包括书名作者出版日期 等信息。
  • Member会员 ,包括姓名ID联系方式等信息。
  • Loan借阅记录 ,包括借阅日期归还日期等信息。
  • Librarian管理员 ,负责管理图书会员的操作。
  • Library图书馆本身 ,作为所有资源的容器

1.4、结果

  • 创建了一个初步的对象列表,明确了哪些元素对于解决问题至关重要

二、组织对象

2.1、目标

  • 确定对象之间的关系层次结构

2.2、实践

  • 分析"是一种"Is-a)关系,建立泛化继承关系。
  • 考虑"有一个"Has-a)关系,使用组合聚合来组织对象。

2.3、案例

  • Book 类可以有多个子类如 Textbook, Novel 来表示不同类型的书籍。
  • Library 包含多个 BookMember 实例,形成了一种"有一个"的关系。
  • Loan 对象关联了 MemberBook,体现了它们之间的交互。

2.4、结果

  • 构建了清晰的类图,展示了对象之间的关联层次结构,确保了合理的依赖关系

三、描述对象间的相互作用

3.1、目标

  • 描绘对象之间如何协作完成任务。

3.2、实践

  • 创建用例图 来表示不同角色之间的互动
  • 使用序列图 具体化对象间的消息传递顺序

3.3、案例

Member 请求借阅一本书时,过程如下:

  • MemberrequestLoan(Book book)
  • LibrariancheckAvailability(Book book)
  • BookisAvailable()
  • 如果可用,则 LoancreateRecord(Member member, Book book)
  • 更新 Book 的状态为不可用。

3.4、结果

  • 通过用例图序列图 ,清晰地展示了对象间的交互方式,确保它们能够有效合作

四、确定对象的操作

4.1、目标

  • 细化每个对象的具体操作,包括它们的参数返回值以及必要的内部状态管理

4.2、实践

  • 精确定义每个方法的签名参数类型返回类型)。
  • 决定哪些数据成员应该公开,哪些应该私有

4.3、案例

  • Loan 类的 createRecord(Member member, Book book) 方法需要传入 MemberBook 的引用,并返回一个唯一的借阅 ID
  • Loan 可能维护一些内部状态,如借阅日期预计归还日期,这些信息应该是私有的,仅通过公共方法访问

4.4、结果

  • 确保每个对象有足够的信息方法来正确执行其任务,同时保持良好的封装性

五、定义对象的内部信息

确定对象的操作后,再定义对象的内部信息,内部信息包括其内部数据信息信息存储方法继承关系等。

五、总结

OOA是一个迭代 的过程,随着对领域理解的加深,最初的模型可能会不断调整完善。通过认定对象组织对象描述对象间的相互作用确定对象的操作定义内部信息这五个活动,可以构建出既贴近业务逻辑又具备强大技术支撑软件系统

码字不易,记得 关注 + 点赞 + 收藏 + 评论

相关推荐
用户2018792831672 小时前
通俗易懂的讲解:Android系统启动全流程与Launcher诞生记
android
二流小码农3 小时前
鸿蒙开发:资讯项目实战之项目框架设计
android·ios·harmonyos
hepherd3 小时前
Flutter - 原生交互 - 相机Camera - 曝光,缩放,录制视频
flutter·ios·dart
用户2018792831674 小时前
WMS 的核心成员和窗口添加过程
android
用户2018792831674 小时前
PMS 创建之“软件包管理超级工厂”的建设
android
用户2018792831674 小时前
通俗易懂的讲解:Android APK 解析的故事
android
渣渣_Maxz4 小时前
使用 antlr 打造 Android 动态逻辑判断能力
android·设计模式
Android研究员5 小时前
HarmonyOS实战:List拖拽位置交换的多种实现方式
android·ios·harmonyos
guiyanakaung5 小时前
一篇文章让你学会 Compose Multiplatform 推荐的桌面应用打包工具 Conveyor
android·windows·macos
恋猫de小郭5 小时前
Flutter 应该如何实现 iOS 26 的 Liquid Glass ,它为什么很难?
android·前端·flutter