面向对象
世界观
数据职责(对象的本质特征)与行为职责(拥有数据后体现的行为)绑定
class Person { Date birthday; getAge();}
通过封装暴露接口 只要接口文档 内部实现随便改 达到了模块化与解耦的需求 隔离了变化的范围
三大特性
封装
利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,将需求的变更封装在类里
- 减少耦合
- 有利于维护
- 提供代码复用
- 降低重构风险
继承
继承实现了 IS-A 关系,子类可以继承父类,获得父类的非private属性与方法
继承的表现在于提供一种归一化的视角,就像unix的一切皆文件 通过这种归一化视角来简化代码的使用 降低软件的复杂度
父类引用指向子类对象称为 向上转型
Aniaml dog = new Dog()
组合与继承
在继承中,如果父类是脆弱的,那么父类接口发生一点改变就会影响到子类的行为
使用时,保证使用继承是一种is a的关系,为了解决代码复用性的问题,不仅可以使用继承,也可以使用组合
多态
- 运行时多态:对象引用指向的具体类型到运行期间才确定
- 编译时多态
多态的存在,使得高层次的接口可以抽象低层次的实现,增加了代码的可扩展性与可复用性
类
- 对现实世界进行建模
- 抽象、隐藏细节
协作
- 自底向上职责聚合
- 自顶向下职责拆分
确定类
- 确定名词概念
- 确定所有数据与行为是否为必要
- 有行为有状态 -> 概念类
- 有状态无行为 -> 其他类
- 无状态有行为 -> 划分到概念类
- 无状态无行为 -> 抛弃
类图
泛化关系
继承关系
classDiagram Vihical <|-- Car Vihical <|-- Trunck
实现关系
classDiagram MoveBehavior <|.. Fly MoveBehavior <|.. Run
聚合关系
整体和部分不是强依赖的,整体不存在了部分还是会存在
classDiagram Computer o-- Keyboard Computer o-- Mouse Computer o-- Screen
组合关系
组合中整体和部分是强依赖的,整体不存在了部分也不存在了
classDiagram Company *-- DepartmentA Company *-- DepartmentB
关联关系
这是一种静态关系,与运行过程的状态无关
可以用 1 对 1、多对 1、多对多这种关联关系来表示
classDiagram School "1" -- "n" Student
依赖关系
依赖关系是在运行过程中起作用的
两个类是依赖关系有三种形式:
- 局部变量
- 参数
- 对象消息
classDiagram Vehicle ..|> MoveBehavior Vehicle : move(MoveBehavior) MoveBehavior : MoveBehavior.move()
其他一些原则
- 迪米特法则
又叫作最少知识原则(Least Knowledge Principle,简写 LKP),就是说一个对象应当对其他对象有尽可能少的了解
- 合成复用原则
多使用组合,少使用继承
- 共同闭包原则
一起修改的类,应该组合在一起
- 稳定抽象原则
最稳定的包应该是最抽象的包,不稳定的包应该是具体的包
- 稳定依赖原则
包要依赖的包要比自己更具有稳定性
面向对象分析
OOA
概述
- 基本任务
- 模型
- 过程
识别类
研究用户需求,明确系统责任
研究问题域
确定系统边界
考虑问题域
![批注 2019-07-23 150223](/assets/批注%202019-07-23%20150223.png)
审查筛选
- 舍弃无用对象
- 精简对象
- 与实现条件有关的对象
识别主动对象
对象分类
识别属性和操作
识别对象之间的关系
继承
- 当前领域的分类学知识
- 常识
- 集合关系,特征关系
- 属性与操作的适用范围
- 领域范围内的复用
关联
聚合
依赖
面向对象设计
- 提高软件生产率
- 提高质量
- 加强可维护性
问题域
- 编程语言
- 基础设施
- 复用支持
- 数据管理系统
- 界面支持系统
设计
- 为复用设计与编程的类增加结构
- 增加一般类以建立共同协议
- 按编程语言调整继承和多态
- 提高性能
- 为实现对象永久存储做修改
- 为编程方便添加低层细节
人机交互部分
设计准则
- 使用简便
- 减少人脑记忆负担
- 减少重复输入
- 容错性
- 及时反馈
- 防止灾难性错误
控制驱动部分
数据管理部分
面向对象编程
程序设计范型
- 面向过程程序设计范型
- 模块化程序设计范型
OOP语言
选择
评价标准
- 能否描述类和对象
- 能够实现一般-特殊结构
- 如何实现整体-部分结构
- 如何实现属性和操作
- 如何实现关联和消息通讯
用非OO编程语言实现OOD模型
DCI
强调对象的职责和行为之间的区分
- 数据(Data): 对象的数据或属性,描述了对象的状态。这通常是指对象的成员变量或属性。
- 上下文(Context): 描述了对象如何与其他对象协同合作。上下文是对象在特定场景或特定角色下执行操作的情况描述。
- 交互(Interaction): 对象之间的动态行为,即对象如何在特定上下文中执行操作