C++提高学习笔记
C++提高学习笔记
面向对象设计的基本概念
面向对象的分析(OOA):解析出需求,需要做什么
面向对象的设计(OOD):需要设计哪些类,类中有哪些数据成员,哪些成员函数,类与类之间的关系
面向对象的变成(OOP): 将需求与设计转换为代码
UML语言:同一建模语言
类与类之间的关系
🌈 总结:
- 继承是垂直关系,其他四种是水平关系
- 耦合程度:依赖 < 关联 < 聚合 < 组合 < 继承
- 从语义来看,继承is,依赖use,关联、聚合、组合has
- 依赖关系主要在成员函数,其他其中主要是在数据成员的角度
面向对象的设计原则
设计的目标:低耦合、高内聚
耦合:强调的是类与类之间、模块与模块之间的关系。
内聚:强调的是类的内部或者模块内部的关系
单一职责原则
核心思想:一个类最好只做一件事,只有一个引起它变化的原因
开闭原则
核心思想:对抽象编程,而不对具体编程,因为抽象相对稳定
里氏替换原则
核心思想:派生类必须能够替换其基类
- 派生类实现了基类的抽象方法
- 派生类可以增加新的个性/功能
- 派生类不能覆盖其基类中的非虚函数(c++中的隐藏,基类和派生类调用同名的函数,基类和派生类执行的函数不同)(基类与派生类中对于非虚函数而言,不要同名)
接口分离原则
核心思想:使用多个小的专门的接口,而不要使用一个大的总接口
依赖倒置原则
核心思想:依赖于抽象(抽象是稳定的,具体是变化的)
在大多数情况下,开闭原则、里氏代换原则和依赖倒置原则会同时出现,开闭原则是目标,里氏代换原则是基础,依赖倒置原则是手段
最少知道原则
核心思想:减少类与类、模块与模块之间的耦合程度
组合复用原则
核心思想:使用关联、聚合取代继承关系
设计模式
解决特定问题的一系列套路,有一定的普遍性。它是一套被反复使用、多数人知晓的、代码设计经验的总结。它可以提高代码的可重用性、代码的可读性和代码的可靠性以及可扩展性。
简单工厂
- 违反了单一职责原则
- 违反了开放闭合原则
- 违反了依赖倒置原则
工厂模式
会为每个产品创建对应的工厂,工厂的数量会急剧上升
抽象工厂
将生产产品的接口放在工厂的抽象类中,派生类在继承的时候,就会继承其中的接口