zoukankan      html  css  js  c++  java
  • 0、面向对象三大机制 封装、继承、多态

    3行李货物再按一1 再按3

    各种面向对象编程语言相互有别,但都能看到他们对面向对象三大机制的支持,即:”封装、继承、多态“

      -封装,隐藏内部实现

      -继承,复用现有代码

      -多态,改写对象行为

      继承是以封装为基础的,多态是以继承为基础的。

      封装,侧重于对象的描述。

      继承和多态,侧重于对象之间关系的描述。

      使用面向对象编程语言(如C#),可以推动程序员以面向对象的思维来思考软件设计结构,从而强化面向对象的编程范式。

      C#是一门支持面向对象编程的优秀语言,包括:各种级别的封装支持;单实现继承与多接口实现;抽象方法与虚方法的重写。

      通过面向对象编程语言(OOPL)认识到面向对象,并不是面向对象的全部,甚至只是浅陋的面向对象。

      OOPL的三大机制“封装、继承、多态”可以表达面向对象的所有概念,但这三大机制本身并没有刻画出面向对象的核心精神。换言之,既可以用这三大机制刻画出“好的面向对象设计“,也可以用这三大机制做出“差的面向对象设计”。不是使用了面向对象的语言(例如C#),就实现了面向对象的设计与开发!因此我们不能依赖编程语言的面向对象机制,来掌握面向对象。

      OOPL没有回答面向对象的根本性问题--我们为什么要使用面向对象?我们应该怎样使用面向对象机制来实现“好的面向对象”?我们应该遵循什么样的面向对象原则?

      任何一个严肃的面向对象程序员(例如C#程序员),都需要系统地去学习面向对象的知识,单纯从语言上获得的面向对象知识,不能够胜任面向对象设计与开发。

    重新认识面向对象——为什么是面向对象?

      隔离变化:从宏观层面上看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。

      各司其职:从微观层面上看,面向对象的方式更能强调各个类的“责任”,新增类型不会影响原来员工类型的实现代码——这更符合真实的世界,也能控制变化所影响的范围。

      耦合关系直接决定着软件面对变化时的行为:

        模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改。

        模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其他模块保持不变。

        紧耦合就是模块之间或者系统之间关系太紧密,存在互相调用;

        松耦合就是模块之间或者系统之间通过数据接口联系。

        大型数据系统要求系统之间松耦合,便于实现功能的任意组合和重用。

    怎样使用三大机制实现"好的面向对象"?

      1、面向接口编程,而不是针对实现编程(方法返回的类型为接口,而不是返回某个具体的类型。)

        客户程序(调用程序的程序,写C#调用.netFramework程序,则所写的代码为客户。还有COM接口编程等)无需知道所使用的对象的特定类型,只要知道对象拥有所期望的接口。

      2、优秀使用对象组合,而不是类继承。

        类继承通常为“白箱复用(子类父类耦合度很高的复用)”,对象组合通常为“黑箱复用(相互包含的关系)”继承在某种程度上破坏了封装性,子类父类耦合度高,而对象组合只要求被组合的对象具有良好定义的接口(满足接口即可),耦合度低。

      3、封装变化    

        设计模式是“封装变化”方法最佳阐释。无论是创建型模式、结构型模式还是行为模式,归根结底都是寻找软件中可能存在的“变化”,然后利用抽象的方式对这些变化进行封装。由于抽象没有具体的体现,就代表了无限的可能性,使得其扩展成为了肯能。所以我们在设计之初,除了要求实现需求所设定的具体用例之外,还需要标定可能或已经存在的“变化”之处。封装变化,最重要的一点是发现变化,或者是寻找变化。

    常用的设计原则包括七个,这些原则并不是孤立存在的,它们相互依赖,相互补充。设计模式是根据这些原则总结出来的。

    • 添加到短语集
       
      • 没有此单词集: -> ...
         
      • 创建新的单词集...
    • 拷贝
    • 添加到短语集
       
      • 没有此单词集: -> ...
         
      • 创建新的单词集...
    • 拷贝
    • 添加到短语集
       
      • 没有此单词集: -> ...
         
      • 创建新的单词集...
    • 拷贝
  • 相关阅读:
    ORACLE设置用户密码不过期
    oracle错误(ORA:12154 ORA:01034 和 ORA:27101 ORA-18008 ORA-01081)
    常用正则表达式整理
    JS中处理单个反斜杠(即转义字符的处理)
    SpringMVC 使用PUT请求遇到的问题小结
    Tomcat7 目录详解
    java对象之----(PO,VO,DAO,BO,POJO)
    Oracle使用触发器和mysql中使用触发器的比较
    Oracle 数据库中对记录进行分页处理
    PHPOffice下PHPWord生成Word2007(docx)使用方法
  • 原文地址:https://www.cnblogs.com/sy-liu/p/13020521.html
Copyright © 2011-2022 走看看