面向对象
三种编程风格:面向对象、面向过程、函数式编程
四大特性:封装、抽象、继承、多态。
1.封装--信息隐藏或者数据访问保护---访问权限控制语法
类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。
2.继承---代码复用
3.多态---可拓展性和复用性
4.接口与抽象类的区别
python既不支持抽象类,也不支持接口。
C++支持抽象类,但不支持接口。
抽象类不允许被实例化(new),只能被继承,侧重于代码复用。(is-a)
接口不能包含属性(成员变量);接口只能声明方法,不能包含代码实现;类实现接口时必须实现接口声明的其他方法。(接口相当于一种协议,实现这个接口,就意味着他必须有这个功能),接口是对行为的一种抽象,接口更侧重于解耦。(has-a)
5.组合优于继承
6.泛化
public class A {
}
public class B extends A{
}
7.实现(接口)
接口是一种协议或者约定(规范),接口里面可以放公共静态常量。
public interface A {
}
public class B implements A{
}
8.聚合
一种包含关系
public class A {
private B b;
public A(B b){
this.b=b;
}
}
9.组合
关联关系包括聚合和组合关系。
public class A {
private B b;
public A(){
this.b=new B();
}
}
10.依赖
public class A {
public void func(B b){
}
}
11.单一职责原则(SRP)
什么时候不满足单一职责原则?
类中的代码行数(200)、函数或属性过多(10),会影响代码的可读性和可维护性;
私有方法过多。
类依赖的其他类过多,或者依赖其它类过多。
比较难给类起一个合适的名字。
类中大量的方法都是集中操作类中的某几个属性。
12.开闭原则(OCP)
对扩展开放,对修改关闭。
13.里氏替换原则(LSP)
按照协议进行设计。
1.子类违背父类声明要实现的功能。
2.子类违背父类对输入、输出、异常的约定。
3.子类违背父类注释中所罗列的任何特殊说明。