面 向 对 象 编 程 ( O O P ) 六 大 原 则 面向对象编程(OOP)六大原则 OOP


设计类就是完成属性和方法的设计

属性:类需要封装那些数据

方法:类要实现那些功能(任务)

但是每个人的思考角度不一样,最后设计出来的属性和方法会有差异。

但是最后只要讲得通,合理就行!

就是面向对象编程的原则


1.单一职责原则(对象职责明确原则):SRP,一个对象所要完成的任务应该是明确的。也就是我们不要设计万能类。

不好的做法:设计窗体类或者其他功能类时,一类中有1-2千行代码,没有进行细分。

三层架构中每个类就体现了单一职责。UI类负责展示数据,和获取用户数据。业务类负责对UI类获取的数据进行处理。数据类负责将业务类处理后的数据存入数据库等数据源中。实体类负责封装数据。

影响:思考问题的角度和内容


2.开闭原则:开放扩展,封闭修改。OCP:设计完一个项目后,用户的需求是经常变化的,如果你的项目设计的非常好,当用户需求变化的时候,你的项目代码修改的非常少,甚至没有修改。只有增加的模块或者类(扩展)。

生活实例:USB接口

各种的设计模式,设计方法,都是围绕这个原则展开的。

影响:程序的总体设计,或者某些模块的设计。各种设计模式、方法后的应用。

比如:简答工厂模式

Test myTest = 【简单工厂方法】

这样的话,可以在程序编写阶段不用确定对象,在程序运行阶段进行确定。完成对象的延迟创建。
结果:工厂内部方法如何变化,对我们调用者没有影响。

用户需求的变化被封装到了工厂方法或模块中,这样的话,我们程序本身在需求变化的时候不修改,这种做法就遵循了开放封闭原则


3.里氏替换原则(继承当中使用):LSP,父类出现的地方可以使用子类替换。同时,接口出现的地方,可以用接口实现类进行替换。

多态的基础之一。这个不理解,C#编程等于白学。

A是抽象类,A a = new B()。后面进行赋值的必须是他的子类对象。抽象对象无法进行new本身的对象。

Object o = new Button()。 这样去扩展是不对的。我们在需要考虑扩展的时候,去考虑扩展,而不是为了扩展而扩展。


4.迪米特法则(LoD):最小耦合法则(最小知道原则、最小知识原则),主要完成的是解耦

思考:为什么要解耦?

各类原则之间是相互依赖,相互影响的,这就是为什么难学,难用。

解耦:开闭原则,也是解耦的实现方法。所有的扩展,模式,都在围绕解耦。

影响:给项目分成,分模块,都是在解耦


5.接口隔离原则(接口最小化原则):

A模块和B模块关联的时候,接口非常多,这不符合接口最小化原则

接口是一个广义的概念

方法的参数定义的时候,一般不要超过4-5个,这就符合了接口最小化原则

如果方法参数太多,调用的时候非常麻烦

解决方法:实体类,用对象作为参数。

广义:比如我们封装一个模块的功能,首先设计接口,设计接口的时候,不应设计过多。设计太多,意味着对象很多,方法很多,造成混淆,资源浪费等等。


6.依赖倒置原则(DIP):

下层依赖上层,底层依赖高层,细节依赖抽象


目的:

  1. 扩展的需要

抽象类型1:可以通过抽象类和抽象方法
抽象类型2:通过接口类

  1. 团队的协作需要

架构师和项目负责人,首先搭建项目框架,根据业务编写各种接口,把项目的核心业务都组件完
然后,具体的开发者,可以根据这个框架和接口来完成具体细节的开发。


如果开发中的项目非常大,依赖倒置原则就越发重要,才能体现出项目的水平。


面向对象编程–》面向接口(抽象)编程、面向服务编程、面向切面编程…