Skip to the content.

面向对象编程(OOP,Object Oriented Programming)

是一种编程范式或编程风格。以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性作为代码设计和实现的基石。

封装

编程语言通过语法机制来控制访问权限来隐藏信息、保护数据,java通过public等四种来控制。即使private也可用反射访问,意义不在于绝对安全,而是易用性。

抽象(有时不被看作面向对象编程特性)

隐藏方法的实现,让使用者只需专注功能,不需了解细节。java中使用接口或抽象类来实现抽象特性

继承

表示is-a,分单继承和多继承,是编程语言提供的语法机制,如:java中extends

多态

表示has-a或者behaive like关系,指相同消息根据不同对象引发不同行为(消息发送为函数调用)。

大部分实现多态的技术:动态绑定,执行期间判断所引用的实际类型,根据实际类型调用。

实现多态的两种形式:重载、覆盖。

重载:仅因功能类型,函数名一样,参数个数不一样,增加可读性,仅此而已。

覆盖(重写):参数、返回不能修改,异常减少或无,访问权限更广。

设计原则

类亦可指模块,但模块可是多个类、函数、功能模块等

SOLID

单一职责注重职责,接口隔离注重对接口的依赖;单一职责是约束类,主要针对实现和细节,接口隔离约束接口,主要针对抽象和程序整体框架的构建。两个都是为了提高类的内聚性、降低类之间耦合,体现了封装的思想。

KISS原则与YAGNI原则

KISS原则讲的是“如何做的问题”(尽量保持简单),而YAGNI原则说的是“要不要做”的问题(当前不需要就不要做)。

KISS原则

Keep It Simple and Stupid.

Keep It Short and Simple.

Keep It Simple and Straightforward.

YAGNI原则

You Ain’t Gonna Need It

不要过度设计

DRY原则

Don’t Repeat Yourself

Rule of Three原则

三种重复

实现逻辑重复、功能语义重复、代码执行重复;

三种重复,有时重复不违反DRY,有时不重复却违反DRY,需具体分析。

LOD法则设计模式(Law of Demeter——迪米特法则)

The Least Knowledge Principle。最小知识原则

不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口(也就是定义中的“有限知识”)。

高内聚、松耦合

非常重要的设计思想,能够有效的提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。

控制反转、依赖反转、依赖注入

IOC(Inversion Of Control,非spring ioc)

控制指对程序执行流程的控制,而反转指的是没有使用框架之前,程序员自己控制整个流程;在使用框架后整个程序的执行流程通过框架控制。流程的控制权从程序员反转到框架;

是一个比较笼统的设计思想,一般用来指导框架层面的设计。

DI(Dependency Injection——依赖注入)

一种具体的编码技巧。

不通过new()的方式在类内部创建依赖对象,而是将依赖对象在外部创建好,通过构造函数、函数参数等方式传递(或注入)给类使用。

依赖注入框架(DI Framework)

控制反转容器是一种非常宽泛的描述,DI 依赖注入框架的表述更具体、更有针对性。实现控制反转的方式有很多,除了依赖注入,还有模板模式等,而 Spring 框架的控制反转主要是通过依赖注入来实现的。不过这点区分并不是很明显。

依赖反转原则(DIP——Dependency Inversion Principle,亦称依赖倒置原则)

High-level modules shouldn’t depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn’t depend on details. Details depend on abstractions.