C#面向对象六大原则详解

属性;类需要封装哪些数据!

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

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

考虑到每个人的思维角度不一样,使用的方法有差别,最后设计的属性和方法粤讴差异。只要道理讲得通,

就是合理的。

学习面向对象就是学习一系列的原则,方法,技巧,经验,设计模式等!后面高级的技能点,相对来说容易!

OOP原则:

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

  职责问题:窗体类----获取用户操作行为和数据,展示相关数据。

            数据类----封装了我们需要的相关数据。

            业务类----封装了用户请求的各种行为。

应用:主要影响的是我们思考问题的角度和内容。

2.开闭原则:(开放扩展,封闭修改原则)OCP,就是说我们设计完一个项目后,用户的需求是经常变化的,

  如果你的项目设计的非常好,当用需求变化时,你的项目代码修改的的非常少,甚至没有修改。只有增加   骄傲的模块或者类(扩展)。

  这点在我们开发中处处再用,我们后面学习的各种设计模式,设计方法,很多都是围绕扩展来展开的。

应用:主要影响的是我们程序总体的设计,或者某些模块的设计。说白了就是把各种模式,方法学会后一个运用。

比如会讲到的简单工厂!

Selector mySelector=new Selector();也就是说当我们在new一个对象的时候,这个对象在编程阶段是明确的。什么时候用这种方式呢?如果你要使用的对象是不变的,那么尽快方法使用。

但是,如果我们程序要使用的这个对象,并不是唯一确定的Selector本身可能还有其他对象的选择。这时候,我们就不能直接new。这就要考虑把对象创建过程封装!交给第三者去完成。这个第三者可能是方法,类,或者某些模块,第三方的库等。

Selector mySelector-【工厂方法或模块】这样的话,我在程序编写阶段是不能确当这个对象的,在程序运行阶段是确定的。这也叫对象的延迟创建。

结果:工厂方法内部如何变化,对我们调用者没有影响。

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

3.里氏替换原则(这个就是我们即将讲到的继承中使用的):ISP,这个在我们讲解完继承后,你会明白,也就是说父类出现的地方可以使用子类替换。(这种通用性,可以延续到接口)也就是说,接口出现的地方,可以用接口实现类替换。

例如:Class A{}

      Class B:A{}

      Class C:A{}

[1]如果A是普通类,我们可以A a=new A();

[2]如果A是抽象类,我们就得用A a=new B();也就是说抽象类作为扮靓的类型,后面必须指向的是子类对象。

4.迪米特法则:LoD,最小耦合原则(最小知道原则),主要完成的是解耦。其实我们讲解各种原则是相互依 赖的,相互影响的,这也是为什么OOP难学难用。

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

应用:后面我们给项目分层,风模块,都是在解耦。

5.接口隔离原则(接口最小化原则):A模块和B模块关联的时候,接口非常多,这种做法就不行!

接口是一个广义的概念!接口是一个广义的概念。如果方法参数太多,调用的时候非常麻烦!在方法定义的时候,一般参数不要超过4~5个。

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

广义:比如我们封装一个模块的功能,首先设计接口,设计接口的时候,你也不要设计的过多。接口设计的过多,意味着对象很多,方法很多。

6.依赖倒置原则(DIP):也就是下层以来上层,或者“细节”依赖“抽象”。

  目的:1.可能是扩展的需要。

        2.团队协作的需要。我们的架构师或者项目负责人,首先创建项目框架,根据业务编写各种接口,           吧项目的核心业务组件完成。然后具体的开发者,可以根据这个框架和接口拉完成具体得到的细           节开发。          

posted @ 2020-02-12 14:42  大勇者  阅读(476)  评论(0编辑  收藏  举报