面向过程(POP) 与 面向对象(OOP)

面向对象: Object Oriented Programming
面向过程: Procedure Oriented Programming

二者都是一种思想,面向对象是相对于面向过程而言的。
面向过程, 强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象,将功能封装进对象, 强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

面向对象分析方法分析问题的思路和步骤:
根据问题需要,选择问题所针对的现实世界中的实体。
从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
把抽象的实体用计算机语言进行描述, 形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

面向对象的设计原则

OCP(开闭原则, Open-Closed Principle)

一个软件的实体应当对扩展开放,对修改关闭。
当我们写完的代码,不能因为需求变化就修改。我们可以通过新增代码的方式来解决变化的需求。如果每次需求变动都去修改原有的代码,那原有的代码就存在被修改错误的风险,当然这其中存在有意和无意的修改,都会导致原有正常运行的功能失效的风险,这样很有可能会展开可怕的蝴蝶效应,使维护工作剧增。说到底,开闭原则除了表面上的可扩展性强以外,在企业中更看重的是维护成本 。
所以,开闭原则是设计模式的第一大原则,它的潜台词是: 控制需求变动风险,缩小维护成本。

DIP(依赖倒转原则, Dependence Inversion Principle)

要针对接口编程,不要针对实现编程。
如果 A 中关联 B,那么尽量使得 B 实现某个接口,然后 A 与接口发生关系,不与 B 实现类发生关联关系。
依赖倒置的潜台词是:面向抽象编程,解耦调用和被调用者。

LOD(迪米特法则, Law Of Demeter)

只与你直接的朋友通信,而避免和陌生人通信。
要求尽量的封装,尽量的独立,尽量的使用低级别的访问修饰符。这是封装特性的典型体现。
一个类如果暴露太多私用的方法和字段,会让调用者很茫然。并且会给类造成不必要的判断代码。所以,我们使用尽量低的访问修饰符,让外界不知道我们的内部。这也是面向对象的基本思路。这是迪米特原则的一个特性,无法了解类更多的私有信息。
另外,迪米特原则要求类之间的直接联系尽量的少,两个类的访问,通过第三个中介类来实现。
迪米特原则的潜台词是: 不和陌生人说话,有事去中介。