以前用Delphi的时候都是把精力扑在控件和业务上面。后来用了Java后,发现OOP的多态比较好用。
请问大伙有没有在Delphi使用多态特性,或者把多态特性组装成控件?另外Delphi中用模式多不多呢?

解决方案 »

  1.   

    难道你在做控件时没有不经意的用到OOP?》
      

  2.   

       delphi 本身就是面向对象的,一个控件列表就是一个类库,你弄出一个控件就是实例化一个对象
     那么一般的面向对象技术,delphi当然都可以用了
      

  3.   

    多态只是oop的一部分,继承和封装也是oop特性,d中多态的实现有虚函数、动态函数和类属,这不是有没有在用,而是必须要用,一般组件的构造器都是虚函数,析构器也是虚函数,能不用么?java没有用过,我觉得多态实现最好的还是c++的stl,现在已经是c++标准了。设计模式是有用的,程序设计本身就是一种模式,但这个概念被炒作了好几年,现在也没什么人提了,那些靠设计模式软件混饭吃的公司基本也都倒闭或被收购了,再说也没什么意思。
      

  4.   

    有人在研究AOP在Delphi 的应用! 日志什么的写起来好麻烦
      

  5.   

    个人觉得,aop其实就是delphi的事件机制。。
      

  6.   

    感谢大家的回复,可能是我当初用得太肤浅了,只停留在控件层面!
    现在回过头来用Delphi,才发现自己有很多不足的地方!
    另外设计模式我觉得有他的可行之处,并不像 bluekitty 兄弟说的那么不中用,呵呵!
    Delphi还能Aop?太牛了,还不知道怎么使用这机制!1:用过Delphi多态的兄弟,你们怎么用的。
    写一个基类,写几个空方法,然后写多个子类,去实现这些空方法?2:另外Object Pascal我也不是很熟,Java有类和接口(解决多重继承),C++只有类(可以多重继承),
    不知道Delphi中有没有Java中的接口概念?
      

  7.   

    Java的接口完全是和Delphi学的.
    Delphi VCL的设计模式用得很多啊.比如工厂模式,观察者模式等.退一万步说你只会拖拉控件,你看看的Form的代码,那个本身就是一个类啊.OOP是不知不觉的就在用啊
      

  8.   


    可能是我没说清楚,在Delphi中继承和封装我知道。我主要不知道怎么用多态。
      

  9.   

    不用OOP,不可成为Delphi高手的,尤其是组件开发!
      

  10.   

    1、基本上差不多,“空方法”即虚(virtual)方法
    2、接口当然有,关键字interface
      

  11.   

    楼主好多delphi功能都没用过。
      

  12.   


    确实,读书的时候学的是 pascal,没有学Object pascal 就直扑Delphi.
    全心全意研究控件,上面后又整天纠结业务,没有花太多时间了解其他。
    后来转Java了,最近比较闲,回过头来琢磨琢磨Delphi。呵呵。
    让大伙见笑了。
      

  13.   

    AOP在DELPHI不好实现,我看过两个实现都是要借助修改内存的。官方一直没给出一个实现出来。
      

  14.   

    有兄弟愿意贴个多态的例子不?简单点的还有2个问题没搞懂。
    1:在Java中只有对象,所以对象可以实现多态
       在C++中多态必须通过 指针 才能完成,一般的对象好像搞不定
       请问 Delphi 的多态是不是一定要指针呢?2: 在Java中abstract的方法子类是必须实现的。和C++纯虚函数一样。
       我在Delphi中些个父类包括以下函数 
       Function init():Boolean;virtual;abstract;
       然后写了个子类,不实现这个方法好像一点问题都没有,编译没报错。。理论上应该有问题啊
      

  15.   

    1delphi直接用对象就可以了。
    2你是不是私有了?
      

  16.   


    1.java也是不完全面向对象,因为它也包含了基本类型
    你说的用对象和用指针来完成多态这些都是语言用法上的区别,底层的机制不都是地址么,delphi也是一样的,delphi也有虚函数和抽象函数的,所以实现方式跟其他语言完全一样3.纯虚函数的概念就是java中的接口。但是java中实现接口也需要完成接口中的方法。应该是语言的处理机制不一样吧。delphi中只有限制在父类中,virtual和dynamic的函数是在父类中必须有实现的,abstract的可以不实现,但是使用时必须和virtual、dynamic一起使用
          function aaa(): Integer; virtual;         // 必须实现
          function bbb(): Integer; dynamic;abstract;
          function ccc(): Integer; dynamic;         // 必须实现
          function ddd(): Integer; virtual;abstract;
      

  17.   

    需要更正一点概念,delphi的语法特性有点不同,abstract只是作为父类不实现的虚方法的声明,没有纯虚的概念,编译不会报错,但是如果子类有没实现的abstract方法,你留意看会有编译提示。
      

  18.   

    不用问那么多,去下载 VCL inside 看3遍。
    多少能使你明白一些什么的。
      

  19.   

    想把程序写活泛一点当然是要的,rtti又有多少人玩过?
      

  20.   

    我不喜欢rtti,一般类似功能都用设计模式搞定。
      

  21.   

    有兄弟愿意贴个多态的例子不?简单点的还有2个问题没搞懂。
    1:在Java中只有对象,所以对象可以实现多态
      在C++中多态必须通过 指针 才能完成,一般的对象好像搞不定
      请问 Delphi 的多态是不是一定要指针呢?
      所谓的多态:
      TBase = class
      pbulic
         procedure Show; virtual;
      end;  TA = class(TBase)
      pbulic
         procedure Show; override;
      end;
      
      TB = class(TBase)
      pbulic
         procedure Show; override;
      end;  procedure TA.Show
      begin
        ShowMessage("This is A")
      end;  procedure TA.Show
      begin
        ShowMessage("This is B")
      end;
      procedure P
      var
        base: TBase;
      begin
        base := TA.Create;
        base.show; //show message: this is a
        base := TB.Create;
        base.show; //show message: this is b
      end

      2: 在Java中abstract的方法子类是必须实现的。和C++纯虚函数一样。
      我在Delphi中些个父类包括以下函数  
      Function init():Boolean;virtual;abstract;
      然后写了个子类,不实现这个方法好像一点问题都没有,编译没报错。。理论上应该有问题啊  子类没有实现抽象方法,编译肯定没有问题,但是不能实例化,如果要实例化必需实现父类的抽象方法。没有实现抽象方法的子类还是一个抽象类。