面向对象编程与设计原则
思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题。
面向对象
面向对象编程(Object Oriented Programming,OOP)是一种编程范式或编程风格,它以 类(class) 或 对象(object) 作为组织代码的基本单元,并将 封装、抽象、继承、多态 四个特性作为代码设计和实现的基石。
与面向对象编程经常放到一起的还有另外两个概念,那就是 面向对象分析(Object Oriented Analysis,OOA) 和 面向对象设计(Object Oriented Design,OOD)。面向对象分析就是要搞清楚做什么,面向对象设计就是要搞清楚怎么做,两个阶段最终的产出是类的设计。包括程序被拆解为哪些类,每个类有哪些属性方法、类与类之间如何交互等等。OOA、OOD、OOP 三个连在一起就是 面向对象分析、设计、编程(实现),正好是面向对象软件开发要经历的 三个阶段。
封装(Encapsulation)
封装也叫作 信息隐藏 或 数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方法来访问类内部信息或数据。封装需要编程语言提供权限访问控制语法来支持,例如 Java 中的 private、protected、public 关键字。封装特性存在的意义,一方面是保护数据不被随意修改,提高代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。
抽象(Abstraction)
抽象的作用是 隐藏方法的具体实现。让调用者只需要关心方法提供了哪些功能,而不需要知道这些功能是如何实现的。抽象可以通过接口类或者抽象类来实现,不需要特殊的语法机制来支持。抽象特性存在的意义,一方面是 提高代码的可扩展性、维护性,修改实现不需要改变定义,减少代码的改动范围;另一方面,它也是 处理复杂系统的有效手段,能有效地过滤掉不必要关注的信息。
继承(Inheritance)
继承用于 表示类之间的 is-a 关系,分为两种模式:单 继承和 多 继承。单继承表示一个子类只继承一个父类,多继承表示一个子类可以继承多个父类。为了实现继承这个特性,编程语言需要提供特殊的语法机制来支持。继承主要是用来 解决代码复用的问题。
多态(Polymorphism)
多态是指 为不同数据类型的实体提供统一的接口,可以在运行时根据上下文来改变类的性质和行为。多态这种特性也需要编程语言提供特殊的语法机制来实现,比如继承、接口类、duck-typing。多态可以 提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础。
设计原则
SOLID 原则
- S - 单一职责原则(Single Responsibility Principle,SRP):一个类或者模块只负责完成一个功能;
- O - 开闭原则(Open Closed Principle,OCP):软件实体(模块、类、方法等)应该对扩展开放,对修改关闭;
- L - 里式替换原则(Liskov Substitution Principle,LSP):子类对象能够替换程序中父类对象出现的任何地方,并且保证程序的逻辑不变;
- I - 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该被强迫依赖它不需要的接口;
- D - 依赖反转原则(Dependency Inversion Principle,DIP):(框架设计)高层模块不要依赖低层模块,而应该通过抽象互相依赖。
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.
不要写重复的代码,提高代码复用性。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!