深入理解面向对象分析

186 阅读4分钟

屏幕截图 2025-01-21 201900.png

前言

  • 学习之路需深耕细作,切勿轻视任一知识点,因其存在必蕴含深意
  • 面向对象分析(Object-Oriented Analysis, 简称OOA)是一种软件开发方法,它帮助开发者理解和描述现实世界中的问题,以便用计算机程序来解决这些问题。它旨在从用户的需求出发,识别和定义系统中涉及的对象及其关系,将现实世界中的问题抽象出来对其进行分析。
  • 想象一下,你正在做一个关于学校管理的项目,比如一个学生信息管理系统。面向对象分析就像是你把学校里的人和事物(比如学生、老师、课程等)都看作一个个“对象”,然后研究这些对象有哪些特点(属性)和能做什么(方法或行为)。

一、认定对象

目标:首先,我们要确定学生管理系统中有哪些重要的实体或概念。

怎么做:通过阅读需求文档或与学生管理员的交流,我们可以识别出一些关键名词,比如“学生”、“课程”、“成绩”、“教师”和“学校”。然后,我们要判断这些名词是否对学生管理系统的功能至关重要。

例子

  • 学生:有学生ID、姓名、年龄、班级等信息。
  • 课程:有课程ID、课程名、教师等信息。
  • 成绩:记录学生在某门课程中的得分。
  • 教师:有教师ID、姓名、教授的课程等信息。
  • 学校:包含所有学生、教师和课程,是整个系统的管理范围。

结果:我们得到了一个对象列表,明确了哪些元素对学生管理系统至关重要。

二、组织对象

目标:接下来,我们要确定这些对象之间的关系,比如谁是谁的“类型”(在面向对象中称为泛化或继承),谁包含了谁(称为组合或聚合)。

怎么做:我们可以思考,比如“学生”和“教师”都是“人员”的一种类型,那么他们是否可以有一个共同的基类?学校是否包含了多个学生和课程?

例子

  • “人员”类可以作为“学生”和“教师”类的基类。
  • 学校类包含了学生类、课程类和教师类的实例。
  • 成绩类关联了学生类和课程类,表示学生在某门课程中的表现。

结果:我们构建了一个类图,清晰地展示了对象之间的关系和层次结构。

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

目标:现在,我们要描述这些对象是如何协作来完成任务的,比如学生如何选课、如何查看成绩。

怎么做:我们可以使用用例图来表示不同角色(或对象)之间的交互,序列图则用来详细展示对象之间消息传递的顺序。

例子

  • 学生登录系统后,选择一门课程。
  • 系统检查该课程是否还有名额。
  • 如果有名额,系统更新学生的选课记录,并减少该课程的名额。
  • 学生可以查看自己的选课情况和成绩。

结果:通过用例图和序列图,我们可以清楚地看到对象之间的交互方式。

四、确定对象

目标:接下来,我们要为每个对象定义具体的操作,包括它们的参数、返回值以及内部状态管理。

怎么做:我们要为每个对象的方法命名,并确定它们需要什么参数、返回什么值,以及哪些数据成员是公开的,哪些是私有的。

例子

  • 学生类有一个方法叫“selectCourse(Course course)”,它接受一个课程对象作为参数,并不返回任何东西,但会更新学生的选课记录。
  • 成绩类有一个方法叫“getGrade()”,它不接受任何参数,返回学生在该课程中的得分。

结果:每个对象都知道了自己的职责和方法,同时保持了良好的封装性。

五、定义对象的内部信息

最后,我们要定义对象的内部信息,包括它们内部数据信息、数据的存储方式以及与其他对象的关系。

总结

使用面向对象分析可以帮助开发者更好地理解和组织复杂系统,使代码更加模块化、易于维护和扩展。想象一下,如果你要添加一个新功能,比如允许学生在线提交作业,如果你已经用面向对象的方式组织了代码,那么你可能只需要在学生类中添加一个新的方法就可以了,而不需要大改整个系统。