面向对象思维导图
《面向对象思维导图》
一、核心概念
1.1 对象 (Object)
- 定义: 封装了数据 (属性) 和操作这些数据的代码 (方法) 的实体。
- 组成:
- 属性 (Attributes/Fields): 描述对象特征的数据。例如:颜色、大小、名称。
- 方法 (Methods): 对象可以执行的操作或行为。例如:移动、绘制、计算。
- 特点:
- 唯一性: 每个对象都是独一无二的,即使属性值相同,它们也是不同的对象。
- 状态: 对象的状态由其属性的当前值决定。
- 行为: 对象根据接收到的消息 (方法调用) 做出反应。
- 示例: 一辆汽车 (对象)
- 属性: 颜色 = 红色, 品牌 = 奔驰, 型号 = C200
- 方法: 加速(), 刹车(), 转弯()
1.2 类 (Class)
- 定义: 对象的蓝图或模板,定义了对象所具有的属性和方法。
- 作用: 描述一类对象的共同特征和行为。
- 关系: 对象是类的实例 (instance)。
- 示例:
Car
类定义了所有汽车的通用属性和方法。
- 组成:
- 成员变量 (Member Variables): 类的属性的声明,定义了对象的存储空间。
- 成员方法 (Member Methods): 类的行为的声明,定义了对象能够执行的操作。
- 访问修饰符:
- Public: 所有类均可访问。
- Private: 只有当前类可以访问。
- Protected: 当前类及其子类可以访问。
- (默认/Package-private): 同一个包内的类可以访问。
1.3 封装 (Encapsulation)
- 定义: 将数据 (属性) 和操作数据的代码 (方法) 捆绑在一起,形成一个独立的单元 (对象)。
- 目的:
- 信息隐藏: 隐藏对象的内部实现细节,只暴露必要的接口给外部使用。
- 数据保护: 防止外部直接访问和修改对象的内部数据,从而保证数据的完整性和一致性。
- 实现方式:
- 使用访问修饰符 (public, private, protected) 控制对属性和方法的访问权限。
- 提供 getter 和 setter 方法来间接访问和修改私有属性。
- 优点:
- 提高代码的模块化和可维护性。
- 增强代码的安全性和可靠性。
- 降低代码的耦合度。
1.4 继承 (Inheritance)
- 定义: 允许一个类 (子类/派生类) 继承另一个类 (父类/基类) 的属性和方法。
- 目的:
- 代码重用: 避免重复编写相同的代码。
- 扩展性: 可以在子类中添加新的属性和方法,或者修改父类的方法,从而扩展类的功能。
- 层次结构: 建立类之间的层次关系,更好地组织和管理代码。
- 类型:
- 单继承: 一个类只能继承一个父类。
- 多继承: 一个类可以继承多个父类 (某些语言不支持,例如 Java)。
- 关键字:
extends
(Java), :
(C++)
- 示例:
Car
类继承自 Vehicle
类,拥有 Vehicle
类的通用属性和方法,例如 speed
和 move()
,同时可以添加 Car
类特有的属性和方法,例如 numDoors
和 openSunroof()
。
1.5 多态 (Polymorphism)
- 定义: 允许使用父类类型的引用指向子类类型的对象,并根据对象的实际类型调用相应的方法。
- 目的: 提高代码的灵活性和可扩展性。
- 类型:
- 编译时多态 (静态多态): 在编译时确定要调用的方法,例如方法重载 (Overloading)。
- 运行时多态 (动态多态): 在运行时确定要调用的方法,例如方法重写 (Overriding)。
- 实现方式:
- 方法重载 (Overloading): 在同一个类中,定义多个方法名相同但参数列表不同的方法。
- 方法重写 (Overriding): 在子类中,重新定义从父类继承来的方法,方法名、参数列表和返回值类型必须与父类方法相同。
- 示例:
Animal
类有一个 makeSound()
方法,Dog
类和 Cat
类都继承了 Animal
类,并重写了 makeSound()
方法,分别输出 "Woof!" 和 "Meow!"。当使用 Animal
类型的引用指向 Dog
对象时,调用 makeSound()
方法会输出 "Woof!"。
二、设计原则
2.1 单一职责原则 (SRP)
- 定义: 一个类应该只有一个引起它变化的原因。
- 目的: 提高类的内聚性,降低类的耦合度。
2.2 开闭原则 (OCP)
- 定义: 软件实体 (类、模块、函数等) 应该对扩展开放,对修改关闭。
- 目的: 提高软件的稳定性和可维护性。
2.3 里氏替换原则 (LSP)
- 定义: 子类型必须能够替换掉它们的父类型。
- 目的: 保证继承关系的正确性。
2.4 接口隔离原则 (ISP)
- 定义: 客户端不应该依赖它不需要的接口。
- 目的: 提高接口的灵活性和可维护性。
2.5 依赖倒置原则 (DIP)
- 定义:
- 高层模块不应该依赖低层模块,两者都应该依赖抽象。
- 抽象不应该依赖细节,细节应该依赖抽象。
- 目的: 降低模块之间的耦合度,提高代码的可复用性和可维护性。
三、设计模式
3.1 创建型模式
- 目的: 处理对象的创建机制,使其更灵活、可控。
- 常见模式:
- 单例模式 (Singleton)
- 工厂模式 (Factory)
- 抽象工厂模式 (Abstract Factory)
- 建造者模式 (Builder)
- 原型模式 (Prototype)
3.2 结构型模式
- 目的: 处理类和对象的组合方式,形成更大的结构。
- 常见模式:
- 适配器模式 (Adapter)
- 桥接模式 (Bridge)
- 组合模式 (Composite)
- 装饰器模式 (Decorator)
- 外观模式 (Facade)
- 享元模式 (Flyweight)
- 代理模式 (Proxy)
3.3 行为型模式
- 目的: 处理对象之间的交互和职责分配。
- 常见模式:
- 责任链模式 (Chain of Responsibility)
- 命令模式 (Command)
- 解释器模式 (Interpreter)
- 迭代器模式 (Iterator)
- 中介者模式 (Mediator)
- 备忘录模式 (Memento)
- 观察者模式 (Observer)
- 状态模式 (State)
- 策略模式 (Strategy)
- 模板方法模式 (Template Method)
- 访问者模式 (Visitor)