面向对象:核心概念与分析设计流程
面向对象(Object-Oriented,OO)是一种以 “对象” 为核心的编程思想,强调通过封装、继承、多态等特性构建灵活、可复用的软件系统。以下从类的分类、多态类型、面向对象分析(OOA)和设计(OOD)四个维度展开详细说明:
类的三种类别:职责划分的核心
在面向对象系统中,类按职责可分为实体类、接口类(边界类)和控制类,三者分工明确,共同支撑系统功能:
1. 实体类(Entity Class)
- 核心特征:映射现实世界中的具体实体,以属性(数据) 为核心,封装实体的静态特征。
- 职责:存储和管理业务数据,不直接处理复杂逻辑。
- 示例:
- “学生” 类(属性:学号、姓名、专业、成绩);
- “商品” 类(属性:ID、名称、价格、库存)。
- 设计原则:属性应完整反映实体的核心特征,避免包含与业务逻辑相关的复杂方法。
2. 接口类(边界类,Boundary Class)
- 核心特征:负责系统与外部环境的交互,以方法(行为) 为核心,定义交互规则。
- 职责:
- 接收外部输入(如用户操作、其他系统的数据);
- 输出系统处理结果(如界面展示、数据反馈)。
- 分类:
- 人机接口:用户直接交互的组件(如登录窗口、按钮、菜单、二维码扫描界面);
- 系统接口:与其他系统通信的组件(如 API 接口、数据库连接模块、第三方服务调用模块)。
- 示例:
- “登录界面” 类(方法:获取用户名、验证输入格式、显示错误提示);
- “支付接口” 类(方法:发送支付请求、接收支付结果、解析回调数据)。
3. 控制类(Control Class)
- 核心特征:协调实体类与接口类,封装业务逻辑和流程控制,是系统的 “大脑”。
- 职责:
- 接收接口类的输入,调用实体类的数据进行处理;
- 维护业务流程的执行顺序(如订单生成→库存扣减→支付验证的串联)。
- 示例:
- “订单处理” 类(方法:创建订单、校验库存、触发支付);
- “用户认证” 类(方法:验证账号密码、生成令牌、记录登录日志)。
三者协作关系
接口类接收外部请求→控制类调用实体类处理数据→控制类将结果通过接口类反馈给外部,形成 “输入 - 处理 - 输出” 的完整闭环。
多态的四种类型:灵活性的核心机制
多态(Polymorphism)是指 “同一操作作用于不同对象产生不同结果” 的特性,是面向对象灵活性的关键。根据实现方式可分为四类:
类型 | 核心逻辑 | 示例 |
---|---|---|
参数多态 | 通过泛型(通用类型)实现,同一方法可操作多种数据类型,编译时确定具体类型。 | Java 中的List<T> (T 可替换为String 、Integer 等,实现通用列表操作)。 |
包含多态 | 基于继承关系,子类对象可替代父类对象,运行时动态绑定方法(动态多态)。 | 父类Animal 的move() 方法,子类Dog 实现为 “跑”,Bird 实现为 “飞”。 |
强制多态 | 编译器自动或手动将对象类型转换,以适配操作要求(类型转换多态)。 | int a = 5 与double b = 3.2 相加时,a 自动转为double (5.0 + 3.2 )。 |
过载多态 | 同一名称的方法 / 操作符因参数不同而表现不同(重载多态)。 | + 可实现整数加法(1+2 )或字符串拼接("a"+"b" );add(int a) 与add(int a, int b) 。 |
多态的价值在于:简化代码调用(无需关注对象具体类型)、提高扩展性(新增子类无需修改现有代码)。
面向对象分析(OOA):理解问题域
OOA 的目标是从需求中抽象出问题域的对象模型,明确 “系统需要做什么”,不涉及具体实现。其核心过程包括:
1. 认定对象(Identify Objects)
- 从需求描述中提取关键实体(如 “在线商城” 中的 “用户”“商品”“订单”)。
- 准则:对象应具有独立的属性和行为,且在系统中承担特定职责。
2. 组织对象(Organize Objects)
- 对对象进行分类,抽象出类(如 “用户” 可分为 “普通用户”“管理员”)。
- 通过继承、关联等关系梳理类的层次(如 “管理员” 继承 “用户”)。
3. 描述对象间的相互作用(Describe Interactions)
- 分析对象间的消息传递(如 “用户” 向 “订单系统” 发送 “创建订单” 消息)。
- 用用例图、顺序图等工具刻画交互流程。
4. 确定对象的操作(Define Operations)
- 为每个对象添加必要的行为(如 “订单” 的 “计算总价”“取消订单” 操作)。
- 操作应与对象的职责一致(实体类侧重数据操作,控制类侧重逻辑处理)。
5. 定义对象的内部信息(Define Internal Information)
- 明确对象的属性(如 “订单” 的 “订单号”“创建时间”“金额”)。
- 确定属性的类型和约束(如 “金额” 为正数,“创建时间” 不可修改)。
输出:问题域的对象模型(类图、用例图、交互图等)。
面向对象设计(OOD):规划解决方案
OOD 基于 OOA 的结果,进一步细化为可实现的设计模型,明确 “系统如何做”。其核心过程包括:
1. 识别对象(Identify Objects)
- 复用 OOA 中认定的对象,补充实现细节(如拆分复杂对象为多个子对象)。
2. 定义属性(Define Attributes)
- 细化属性的具体类型(如 “价格” 定义为
double
类型,精度保留 2 位小数)。 - 添加属性的访问控制(如私有属性
private
,通过公有方法get/set
访问)。
3. 定义服务(Define Services)
- 将 OOA 中的 “操作” 转化为具体方法,明确参数、返回值和实现逻辑(如 “计算总价” 需遍历商品列表求和)。
- 设计方法的可见性(如
public
供外部调用,private
仅内部使用)。
4. 识别关系(Identify Relationships)
- 明确类之间的关联(如 “订单” 与 “商品” 是多对多关系,通过 “订单项” 关联)。
- 定义继承(如 “储蓄卡”“信用卡” 继承 “银行卡”)、聚合(如 “购物车” 包含 “商品”)等关系。
5. 识别包(Identify Packages)
- 将功能相关的类组织为包(如 “用户管理包” 包含 “用户类”“认证类”“权限类”)。
- 包内高内聚(功能相关),包间低耦合(依赖最小化)。
输出:详细的设计模型(细化的类图、部署图、构件图等),直接指导编码实现。
v1.3.10