1. 什么是面向对象
程序里进行了类的封装,所有操作都是通过对象调用其自身的成员函数完成的。
2.面向对象的基础
其实就是三个要素: 类 , 对象 , 继承
3.面向对象的三大特点
封装 、 继承 、 多态 (多态是通过用父类的指针去调用实际的子类对象)。
4.类之间的关系
横向关系: 依赖 、 关联 、 组合 、 聚合
纵向关系: 继承 (泛化)
5.设计原则:(一共有7条)
5.1 单一职责原则(Simple Responsibility Principle,SRP):类的职责要单一,不能将太多的职责放到一个类中。
5.2 开闭原则(Open Close Principle,OCP):软件实体对扩展是开放的,对修改是关闭的,即在不修改软件实体的基础上去对功能进行扩展。
5.3 里氏代换原则(Liskov Substitution Principle,LSP):一个可以接受基类对象的地方必然可以接受继承于该基类的子类。
5.4 依赖倒转原则(Dependency Inversion Principle,DIP):要针对抽象层来编程,不要针对具体的东西进行编程(我们编写的程序需要能够进行多次复用和扩展)。
5.5 接口隔离原则(Interface Segregation Principle,ISP):使用多个专门的接口来取代一个统一的接口。
5.6 合成复用原则(CRP):尽量多地使用组合、聚合、关联等类间关系,而尽可能少地使用继承。
5.7 迪米特法则(Law of Demeter,LoD):一个软件实体对其他实体的引用越少越好。
6.设计模式(一共3种)
6.1 单例
6.2 模版方法
6.3 迭代器模式
7.容器、迭代器、算法之间的关系
一个数组进行遍历需要进行“++”操作,一个链表进行遍历需要进行指向其下一个节点,一个树形结构需要有两个指针分别指向左右节点。那么当我们针对一个问题想用这三种结构进行时需要将算法写三份。为了减少代码量,我们考虑:上述所要达到的目的是相同的,不同的只是其数据类型不同,因此我们可以通过使用迭代器来将上述遍历方法都变为“++”操作。
8.this指针
this指针是用来区分不同对象的,对于静态成员函数,其函数中没有this指针,因此可以直接调用,而不必须先创建对象再进行调用。
9.const成员方法只能使用成员属性,而不能对成员属性进行修改;const对象只能调用const成员属性。
10.static成员函数(即静态成员函数)没有this指针,因此可以直接调用该方法。
11.动态创建对象
在程序运行时,根据不同时刻不同的需求来动态地创建对象。