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

  • 相关阅读:
    POJ-1189 钉子和小球(动态规划)
    POJ-1191-棋盘分割(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
  • 原文地址:https://www.cnblogs.com/LiyuLi/p/12298209.html
Copyright © 2011-2022 走看看