前言
面向对象方法(OOM)的核心思想是通过引入对象的概念,将现实世界中的事物、事件、规则和概念进行抽象,以一种更接近现实世界的视角建模问题域。而面向对象分析(OOA)是面向对象方法中的第一阶段,这一阶段将决定后续阶段的实现。
一、面向对象分析概述
面向对象分析是将现实世界中的问题抽象为对象的过程。
- 目的:通过对问题的分析建立分析模型,也就是将现实世界中的事物转换为抽象模型。
- 方法:将数据和功能结合为一个对象来考虑,将系统的行为和信息间的关系表示为迭代构造特征。可以理解为其构造过程是迭代进行的,而不是从一而终的。
- 主要活动:认定对象、组织对象、描述对象之间的相互作用、确定对象的操作、定义对象的内部信息。
二、面向对象分析
面向对象分析主要包含以下几个活动。
2.1、认定对象
- 识别出需要建模的对象,也就是现实世界中的实体或概念(如:猫、狗等)
- 一般是从需求文档中提取名词。
- 注意:认定对象是面向对象分析的第一步,其认定结果对后续影响非常大,应当仔细确定这些实体是否有必要建模。
示例:
| 对象 | 动物园系统中的实体或概念 |
|---|---|
| 动物 | 如老虎、狮子、大象、长颈鹿等,它们是动物园的主要展示对象。 |
| 游客 | 来动物园参观的人群,他们与动物进行互动,如观看动物表演、喂食等。 |
| 饲养员 | 负责动物的日常饲养、照顾和清洁工作的人员。 |
| 管理员 | 负责动物园的整体运营和管理,包括动物引进、园区维护、游客安全等。 |
2.2、组织对象
- 确定对象之间的关系和层次结构。
- 常涉及到识别对象的类(或类型),以及它们之间的继承、关联、聚合等关系。
- 如对象之间的关系能够用是一种来描述,则建立泛化或继承关系。
- 如对象之间的关系能够用有一个来描述,则建立组合或聚合来组织对象。
示例:
注:我们这里只举例老虎这个动物。
| 对象/类名称 | 组织关系与说明 |
|---|---|
| 动物类(基类) | 作为所有动物种类的基类,包含共同属性和方法(如体重、年龄、叫声等)。 |
| 老虎类 | 继承自动物基类,包含老虎特有的属性和方法(如条纹、捕猎行为等)。 |
| 游客类 | 包含游客的个体信息(如姓名、年龄等)和游客行为(如购票、参观等)。 |
| 饲养员类 | 包含饲养员的个人信息(如姓名、负责动物种类等)和饲养行为(如喂食、清洁等)。 |
| 管理员类 | 包含管理员的个人信息(如姓名、管理职责等)和管理行为(如动物引进等)。 |
2.3、描述对象之间的相互作用
- 描绘对象之间如何协作完成任务。
- 涉及定义对象之间如何相互通信和协作。
- 通过绘制UML(统一建模语言)中的序列图、协作图或活动图来展示对象间的交互。
示例:
注:我们这里只举例老虎这个动物。
| 相互关系 | 示例 |
|---|---|
| 游客与动物 | 观看、拍照、喂食(允许时)。 |
| 饲养员与动物 | 喂食、清洁笼舍、观察健康状况。 |
| 管理员与饲养员 | 分配任务、检查工作、沟通需求。 |
| 管理员与游客 | 维护秩序、处理投诉、传达信息。 |
| 动物与动物 | 社交互动、竞争关系(如领地争夺)。 |
2.4、确定对象的操作
- 细化每个对象的具体操作。
- 包括它们的参数、返回值以及必要的内部状态管理。
示例:
| 对象/类 | 操作/方法 |
|---|---|
| 动物类 | makeSound():发声 eat():进食 rest():休息 interact():与游客互动 |
| 游客类 | purchaseTicket():购票enter():入园 visit():参观动物 |
| 饲养员类 | feed():喂食动物 clean():清洁笼舍monitorHealth():监控健康 |
| 管理员类 | introduceAnimal():引进动物 maintainPark():维护园区 |
2.5、定义对象内部信息
- 定义对象的内部信息涉及描述对象的内部状态或属性。
- 内部信息包括内部数据信息、信息存储方法、继承关系等。
示例:
| 对象/类 | 内部信息/属性 |
|---|---|
| 动物类 | name:动物名称species:动物种类 age:年龄 healthStatus:健康状况 |
| 游客类 | name:游客姓名ticket:门票信息(类型、购买时间等) |
| 饲养员类 | name:饲养员姓名 assignedAnimals:负责的动物列表 |
| 管理员类 | name:管理员姓名 parkStatus:园区状态(开放、关闭、维护中) |
三、总结
本小节我们从动物园的例子出发,分别介绍了面向对象分析里面的几个重要活动,包括认定对象、组织对象、描述对象之间的相互作用、确定对象的操作、定义对象的内部信息。