享受代码,享受人生

SOA is an integration solution. SOA is message oriented first.
The Key character of SOA is loosely coupled. SOA is enriched
by creating composite apps.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

面向对象乱弹(一)

Posted on 2004-12-11 23:24  idior  阅读(4805)  评论(21编辑  收藏  举报

    
   

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

      给出一个基类,然后建立它的子类.比如定义了一个灯的父类.然后又建立了什么白炽灯,日光灯... 看来继承主要用于相对于抽象对象(灯)建立特殊对象(白炽灯).但是如果将这一过程反过来看,即不是从上往下而是从下往上看,就会显的更加有意义.已知了一些特殊对象然后抽象出更为一般的抽象对象.从这一角度看,则能对我们的建模过程起到更好的作用.甚至从这一角度看,你就能隐约看到接口了比如上面的例子从白炽灯,日光灯你能看到更为抽象的"灯"这个对象,如果再进一步,你就可能就会看到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)本想一口气写完,其实这篇算不上乱弹,乱谈的部分在下面. 一方面累了,二来先看看反应
      免得象某位兄弟被大家指出太多错误,然后自我反省去了