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

  • 相关阅读:
    dgango
    django
    pymysql 增删改 查 索引
    mysql 单表,多表,符合条件,子查询
    mysql 数据的增删改
    mysql foreignkey
    mysql基础知识之数据类型与约束
    MySol序
    MySql
    Python Selenium 常用方法总结
  • 原文地址:https://www.cnblogs.com/LiyuLi/p/12298209.html
Copyright © 2011-2022 走看看