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