OOA ,OOD ,OOP三者之间的关系与优缺
一、OOA,OOD,OOP三者是面向对象开发的三个递进阶段,从分析→设计→编码,一脉相承。
1. OOA 面向对象分析
全称:Object-Oriented Analysis
阶段:需求分析阶段(做什么)
核心:
从业务需求里,找出系统里的对象、属性、行为、关系。
识别有哪些实体(比如:学生、老师、课程)
每个实体有什么特征(属性:姓名、学号)
实体能做什么事(行为:选课、上课)
实体之间的关系(关联、依赖、继承)
一句话:搞清楚「要做哪些东西、每个东西是什么、互相有什么关系」,只关注需求和问题域,不考虑代码和实现。
2. OOD 面向对象设计
全称:Object-Oriented Design
阶段:概要 / 详细设计阶段(怎么做)
核心:
基于 OOA 的分析结果,落地为软件架构与类结构。
划分类、抽象父类、设计接口
设计类的成员变量、成员方法
设计模块划分、权限、调用逻辑、程序流程
解决性能、复用、扩展性问题
一句话:把分析好的对象,设计成可编码的类、结构、架构方案,搭好程序骨架。
3. OOP 面向对象编程
全称:Object-Oriented Programming
阶段:代码实现阶段(写代码)
核心:
用编程语言(Java/C++/Python/C# 等),把 OOD 的设计写成实际代码。
落地面向对象三大核心特性:
封装:数据和方法打包在类里,隐藏内部细节
继承:子类复用父类代码,减少重复
多态:同一行为不同实现,灵活扩展
一句话:用类、对象、继承、多态等语法,把设计方案敲成可运行代码。
二、OOA 面向对象分析
✅ 优点
贴合现实世界业务,用人、事物、角色建模,需求更容易理解。
分析结果直观,业务人员、开发、测试容易达成共识。
稳定度高,业务变化时实体对象不易大变,抗需求变更。
天然支持复用、分层,为后续设计和编码打基础。
能清晰梳理实体关系、业务规则,减少后期需求漏洞。
❌ 缺点
入门难度高,需要具备面向对象思维,新手容易分析混乱。
前期投入时间长,小项目会显得繁琐、低效。
过度抽象容易导致分析冗余,增加没必要的实体和关系。
只定义 “做什么”,不考虑技术实现,落地时可能存在技术落差。
三、OOD 面向对象设计
✅ 优点
承接 OOA 分析结果,把业务模型转为软件模型,衔接顺畅。
合理划分类、模块、接口,代码结构清晰、耦合度低。
提前规避架构问题,减少后期编码返工。
支持封装、继承、多态设计,提升系统扩展性、维护性。
标准化设计文档,利于团队协作、迭代开发、后期维护。
❌ 缺点
设计周期长,过度设计会增加项目复杂度和开发成本。
对设计师能力要求极高,设计不合理会引发连锁 bug。
需求频繁变动时,前期设计容易失效,需要反复修改。
小型简单项目中,设计流程冗余,拖慢开发速度。
四、OOP 面向对象编程
✅ 优点
三大特性加持:封装、继承、多态,代码复用性强。
代码模块化、结构化,可读性高,易于维护和迭代。
适合大型、复杂、长期迭代的项目,拓展性极强。
贴近人类思维,复杂业务逻辑拆分更合理。
便于团队分工开发、单元测试、功能扩展。
❌ 缺点
语法、概念复杂(类、对象、继承、接口等),学习成本高。
相比面向过程,代码量更大、运行开销略高。
滥用继承、多层嵌套会造成类爆炸、逻辑臃肿。
小型简单需求(如简单计算器、脚本工具),写 OOP 会杀鸡用牛刀。
设计不好极易出现高耦合、烂架构,后期维护灾难。
浙公网安备 33010602011771号