zoukankan      html  css  js  c++  java
  • 面向对象乱弹(一)

        
       

         对于面向对象技术而言.对象,继承和封装应该属于最重要的概念.
         下面就谈谈个人对这些概念的理解.
         所谓面向对象自然最重要的就是这个对象的概念. 何谓一个对象?从这个概念的理解程度.就可以很大程度上表现出一个人对面向对象的理解程度.由于这个概念最为关键且最难表达,故留在最后再说
         继承,想必不用我细说,大家都知道它的一个用途就是复用基类的代码.记得刚学面向对象的时候,
    还"听说"过面向对象很重要的特性就是继承,因为它可以复用基类的代码,使得代码的复用率得到提高.呵呵,现在想想如果把这说成是继承的本质那似乎有找骂的嫌疑. 

          给出一个基类,然后建立它的子类.比如定义了一个灯的父类.然后又建立了什么白炽灯,日光灯... 看来继承主要用于相对于抽象对象(灯)建立特殊对象(白炽灯).但是如果将这一过程反过来看,即不是从上往下而是从下往上看,就会显的更加有意义.已知了一些特殊对象然后抽象出更为一般的抽象对象.从这一角度看,则能对我们的建模过程起到更好的作用.甚至从这一角度看,你就能隐约看到接口了比如上面的例子从白炽灯,日光灯你能看到更为抽象的"灯"这个对象,如果再进一步,你就可能就会看到ILightable这个接口其中的函数自然是Light(发亮),当然你可以看到ITurnable接口,其中的函数是开关.那么为什么会看到接口,又为什么会看到不同的接口呢?这里再卖一下关子,留在解释对象这个概念的时候说
         从继承就说了这么多,其实最关键的就是希望你能将继承的过程反过来看,这样对你的建模更加有益,忘了那个复用的功能吧.
         封装,这个概念在我看了<design patterns explained>之前也一直将它认为是对类中私有变量的隐藏.其实对类型的隐藏远远比数据的隐藏来的重要的多. 

    Shape s=new Circle();
    s.Display()

       
        你能从中看到封装的概念吗?
        Shape有很多种,如Circle,Rectangle等等,为了程序能适应变化(添加一个三角),我们需要隐藏它们让它们象私有变量一样不为人所使用.如上代码,我们使用的是shape 的对象而不是Circle的对象哦.看到了吗?这不就是封装的概念吗? 只不过从对数据的隐藏提升到了对类型的隐藏. 不过语法上它并没有强制我们必须这样做.所以我们并没有感觉到它的存在. 如果编译器或者其他(FoxCap?)什么能对下面的代码发现"警告"

    Circle c=new Circle();
    c.Display();


    那也太夸张了吧
        其实还有更复杂的封装,比如在bridge模式和proxy模式,它们不也是一种信息的隐藏吗,不都是不希望别人直接使用原来的信息吗?  
         下面就是对象了.......很难说清楚啊 太晚了下回分解了......

          (btw)本想一口气写完,其实这篇算不上乱弹,乱谈的部分在下面. 一方面累了,二来先看看反应
          免得象某位兄弟被大家指出太多错误,然后自我反省去了 





  • 相关阅读:
    JavaScript大文件上传(切片)
    hdu 4841 圆桌问题(STL vector)
    hdu 5389 Zero Escape(记忆化搜索)
    hdu 1331 Function Run Fun
    hdu 1078 FatMouse and Cheese(记忆化搜索)
    【CQgame】[幸运方块 v1.1.3] [Lucky_Block v1.1.3]
    SAP C4C,CRM和S4HANA的Saved Query使用介绍
    SAP CRM中间件Material Sales Organization和distribution channel的映射逻辑
    SAP CRM 中间件Request download里,遇到/SAPPSPRO/S_MAT_ENHANC_COMM 错误的解决办法
    SAP 数据库表CRMD_ORDERADM_I字段OBJECT_TYPE的计算逻辑
  • 原文地址:https://www.cnblogs.com/idior/p/75772.html
Copyright © 2011-2022 走看看