我想设计了一个类框架,当我设计得差不多的时候,我应该把一些具有相似功能但接口可能不一样的类放在父类中,还是放在子类中呢?如果我真的想放在父类中,应该如何设计呢?能解决问题,一定给分

解决方案 »

  1.   

    1.使用接口(Interface),接口只有声明,没有实际实现。实现在实现这个接口的类中,这个对处理“相似功能”很有用。
    2.使用类继承。在父类定义过程(一般放在protected区),并实现相同的功能;在子类override这个过程,继承或者完全覆盖。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    例如说,我在父类中有一个abc函数作为接口,在子类中重载,但是子类中还需要向外界提供def函数功能,我应该怎么实现呢?难道我把def函数加到父类中吗?但是父类的其他子类并不需要def功能啊?
      

  3.   

    再在public中定义一个函数就是了。
    Function def:boolean;
      

  4.   

    例如说,我在父类中有一个abc函数作为接口,在子类中重载,但是子类中还需要向外界提供def函数功能,我应该怎么实现呢?难道我把def函数加到父类中吗?但是父类的其他子类并不需要def功能啊?
    1、如果不只一个但不是所有子类使用,可以在父类中虚拟,子类中实现:
    父类
    type
      TForm1 = class(TForm)
      private
        { Private declarations }
      protected
        function abc: Boolean; virtual;//注意这里
      public
        { Public declarations }
      end;
    子类
    type
      TForm2 = class(TForm1)
      private
        { Private declarations }
      protected
        function abc: Boolean; override;//注意这里
      public
        { Public declarations }
      end;
    2、如果只有一个子类使用,直接在子类写好了。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  5.   

    我的类框架里是这样子的。
      Collects = class
      public
         FCollects : array of BASE;
      end;  BASE = class
      public
         procedure ABC; abstract;
      end;  Derived1 = class (BASE)
      private
         procedure DEF;
      public
         procedure ABC;
      end;  Derived2 = class (BASE)
      private
         procedure GHI;
      public
         procedure ABC;
      end;如果说我要在Derived2中添加一个新功能NEWFUN,而且该功能需要暴露于外界成为一个接口,以便在Collections类中调用,那么我应该怎么办?在BASE类中新建一个接口NEWFUN后,再在Derived1中添加一个实现NEWFUN的函数吗?这种方法如果在子类不多的时候还可接受,但是如果子类一但多起来,那如果哪一个子类需要向外界暴露多一个接口,都必须要在所有的同层次的子类中实现对它自己无用的该接口,这样子不是很麻烦?
      

  6.   

    还是得具体问题具体分析了。大的方面么?不就是OOD的那几个教条!
      

  7.   

    在http://www.delphibbs.com/delphibbs/dispq.asp?lid=1408141
    中我找到了一种算是可行的答案了