面向对象分析第一步是识别类与对象,对象是具体个体,类是相似对象的共性抽象;通过提取需求中名词找候选类,排除泛化词、合并同义词、拆解复合名词;再通过“有什么”定属性、“能做什么”定方法;区分类与实例,检查依赖关系验证类边界。

识别类与对象是面向对象分析(OOA)的第一步,关键在于从现实问题中提取出“谁”和“什么”,而不是先写代码。核心思路是:**对象是具体的、可感知的个体;类是对一批相似对象共性特征的抽象总结。**
看名词,找候选类
自然语言描述里,绝大多数名词都可能是潜在的类。比如需求描述:“学生选课、教师授课、课程有学分、系统记录成绩”——其中“学生”“教师”“课程”“成绩”“系统”都是名词,优先列为候选类。
- 排除泛泛而谈的词,如“数据”“信息”“管理”,它们不是实体,而是概念或行为结果
- 合并同义词,比如“学员”和“学生”指向同一类事物,只保留一个
- 注意复合名词,“登录日志”“购物车项”这类带修饰的词,往往暗示需要拆解或封装为独立类
问“它有什么?它能做什么?”定属性与方法
对每个候选类,快速自问两个问题:
- 它有哪些固有特征?→ 对应类的属性(字段),例如“学生”有姓名、学号、年级;“课程”有名称、编号、学分
- 它能主动完成哪些事情?→ 对应类的方法(行为),例如“学生”可以选课、查询成绩;“课程”可以计算总学分、列出开课学期
如果某个名词既没有稳定属性,也不能独立完成动作(比如“成功”“失败”“过程”),那它大概率不是类,而是状态、结果或动词的副词修饰。
区分对象与实例:同一个类可以有多个对象
类是模板,对象是用这个模板造出来的东西。比如“学生”是一个类,而“张三(学号2026001)”“李四(学号2026002)”是它的两个具体对象。
- 判断依据:能否被单独标识、是否拥有独立状态。例如“订单”是类,“20260806-001号订单”是对象
- 避免把单个实例误当成类,比如把“旺财”当作类名,正确做法是定义“狗”为类,“旺财”“小白”为对象
- 临时或短暂存在的事物(如“一次支付请求”)也可能是对象,只要它在业务中有明确职责和生命周期
检查依赖关系,验证类边界
类之间不是孤立的。观察它们如何协作,能帮你确认类是否合理、职责是否清晰:
- “学生”需要“课程”才能选课 → 学生类依赖课程类
- “订单”包含多个“订单项”,但订单项不能脱离订单存在 → 这是聚合关系,说明两者应为不同类
- 如果某个“类”总是作为参数传入其他类的方法,却从不自己持有状态或行为,它可能只是数据载体(DTO),而非真正意义上的业务类
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











