delphi没有封装?没有多态吗?
delphi使用的是pascal,按你的说法,pascal支持c/c++,就象中文支持英文,成什么啦?

解决方案 »

  1.   

    老大,Object Pascal 哪一点比C++差????
    学会了再来现!!
      

  2.   

    kao,object pascal 支持完整的封装性、多态性、继承性。也就是说 object pascal是完全支持面向对象的语言。这位老兄的话真是不知所云阿
      

  3.   

    to Nicrosoft(奈软):object pascal是完全支持面向对象的语言,是不是?你到底说谁不知所云?szkingrose?Wescom?我看不懂。为了不让很菜的人迷惑,还麻烦你解释一下什么是面向对象?就是指text1.caption的.吗?Delphi是面向对象语言吗?
    谢谢
      

  4.   

    什么叫“完全”面向对象?这不是一个容易下结论的话题。
    但是object pascal在对面向对象的支持上应该和C++是在同一个层次上的.
      

  5.   

    抱歉,没说清楚,我说szkingrose不知所云。什么是面向对象?面向对象是一种方法论、是一种世界观、是一种思想。他教导你如何看待世界,从什么角度看待需要解决的问题。text1.caption之类的,只是类似vb那样的基于对象的语言,它只是封装性的体现,所以vb只能算基于对象的语言,而不是面向对象的语言。继承允许扩展现有类,是代码重用的一种方法。还有一种就是组合。而多态,我个人认为是面向对象编程技术中最为核心、最为诱人的特性。多态基于继承,但多态的真正意义却在于抽象基类,即接口重用。核心是虚函数表。
      

  6.   

    而多态正是Borland的拿手好戏,Delphi对多态的支持非常完善,而vcl可以说是组件库,也可以说是类库(真正意义上的“类”)!而不是单纯的“控件”
      

  7.   

    又提这种无聊问题,
    for i:=1 to 1000
      真无聊
      

  8.   

    Implements IVBStrangerPrivate Sub IVBStranger_DontKnowVB()
        Dim You As Object
        Set You = CreatObject("IDontThinkVBIsAOOPLanguage")
    End Sub
    我的程序包含VB两种多态性,看出来了吗?
        
      

  9.   

    对VB不是很了解。
    就我所知,C++和Object Pascal支持面向对象的程序设计(OOP),而VB是基于对象的。
    意思就是VB可以继承使用对象,但是不能以完全面向对象的方法定义新类。这些认识都是
    对VB 6及以前的版本,据说VB 7已经完全支持OOP了。再次申明,对VB不是很了解,所以没太看明白Ninputer的代码。同时还想请教一下Ninputer兄,VB中能不能定义一个全新的类?怎样实现它?
      

  10.   

    object pascal 本来就有一套完整的面向对象设计方案,在delphi中这种方式更为完善,它没必要非得去兼并c++的设计理念,就象 AMD 和 Inter 一样,同一档次的CPU在核心架构上各不相同,细分他们各自的市场也有区别。
    永远记住,delphi和VC只是一种工具,而工具只是用来帮我们达成某种目标的,也就是说只要能达到这种目标,无论用什么工具都行,关键是谁更有效!
      

  11.   

    基本同意NicroSoft的观点!"要是delphi某天宣布支持c/c++,也就是C++一样的功能
    也能用C++的什么封装性,多态性的话,
    那么,开发工具市场上会出现什么结果?????
    pascal是可以做成C/C++这种语言开发工具的的,关键是否
    是编译器难做还是别的原因呢????"已经有C++Builder存在了,老兄,认为还有这个可能吗?
    Delphi 和 C++Builder 要合并么?这个观点很可笑!Object Pascal 的优雅,是C++语言不可比的,但是不是说
    Pascal 比 C++ 要好,每种语言都有自己的性格特点,我把
    Object Pascal 比作大家闺秀,C++比作西部牛仔,两者风格不同!
    但是都有其存在的必要,谁也代替不了谁!
      

  12.   

    to Nicrosoft:
      不知道我这样理解对不对:
      无法继承,也就是说不能扩展现有对象的功能,形成新的类。如果这样的话,新的类什么都要做,不是很辛苦?
      

  13.   

    C++的编译速度还没有Pascal快,
    C++能实现的Pascal都能,干吗要Delphi支持C++?????
    为什么不要 C++ 支持 Pascal????
      

  14.   

    to Wescom:你的话应该说没有错吧,不过,我觉得这不是继承的主要“功能”:继承,可以让程序员对事物的抽象更符合客观世界(我们人本身就是继承而来的嘛),派生类可以细化基类。同时,拥有相同基类的不同派生类,可以共享基类的代码,这样,便于程序员维护代码,你不必维护两份相同的代码(很容易出错),而每个派生类的代码都是独特的,这是代码重用的一个优点。还有,多态是建立在继承的基础上的。没有继承,如何实现所谓的“接口重用”?没有继承,虚函数有必要存在吗?
      

  15.   

    >要是delphi某天宣布支持c/c++,也就是C++一样的功能
    >也能用C++的什么封装性,多态性的话,
    >那么,开发工具市场上会出现什么结果?????
    不用那么了,就是C++ Builder,就是现在这样的结果>pascal是可以做成C/C++这种语言开发工具的的,关键是否
    >是编译器难做还是别的原因呢????
    Pascal和C/C++都是编程语言,Delphi是开发工具包。
    这段话的意思我的理解是:
    “男人其实是可以做母亲的,关键是他的母亲生他的时候
    要把他生成女人,但他母亲为什么把他生成男人而不生成
    女人,是有什么困难吗?”
    说实在,我也不知道。
    这位仁兄,看了几页C++的书,知道了几个名词,就来发
    这么大的post,厉害、佩服。
      

  16.   

    to Nicrosoft:
    对于对象层次的建立,总觉得有些困难。
    我觉得在自然界中,存在都是对象的实体或者说是对象层次的最底层,是人们对这些实体进行概括总结,然后才形成了对象,层层向上,最后到根。而程序设计,确实要先设计出基类,然后再继承发展出下一层,这需要很高的总结能力。
      

  17.   

    to Wescom:
    是的,要使用面向对象方法设计出完善的架构,的确需要相当的OO设计、分析经验。
      

  18.   

    to Nicrosoft:
      多谢指点。
      其实留意你已经一段时间了。最初发现你,是你在VB版的关于有人说Windows 90%是用VB写的(大概是这个意思)贴子。看你一个人舌战群VB,挺好玩的。
      CSDN的人气特旺,虽有不少好贴子,可惜都被水给淹了。还有就是一些稀奇古怪的人和些稀奇古怪言论,非常长见识。
      对了,还有就是火气特大,动不动就脸红脖子粗的。
      

  19.   

    唉,那次捅了马蜂窝,嘿嘿,吸取教训,vb fans说不得的火气大?其实不是,只是说话可能特别容易得罪人吧,爱泼泼冷水
      

  20.   

    为什么要说VB不能建立新类呢?那你打开VB,选工程/添加类模块添加的是什么?真正不能生成新类的语言是Visual FoxPro!
    什么不能使用多态性,VB摆在那里的Implements语句是干什么用的?Delphi也有Implements语句,虽然不是一码事,但也和接口有关,而Java的Implements和Vb的一模一样。这说明什么?VB可以实现多重接口。
    关于继承,我不得不说你不能自由使用,但是,如果你仔细观察,VB中有Inherits语句,他在隐藏地使用继承。而且,非得使用继承吗?VB的类生成器可以自动生成重用某个类的委派类(相似于继承类),再结合多重接口,许多继承功能都可以实现。
    以上仅限于VB6,VB7是完整的面向对象编程语言,不用这么麻烦
      

  21.   

    Ninputer(装配脑袋):你的这些话,怎么看怎么像没有功能,却争辩可以怎么怎么的论调。就像“我们这里没有机场供你乘飞机去XX国XX地,但一定要乘飞机吗?你可以翻过XX山到XX地乘长途汽车到XX地,然后游过太平洋,差不多就可以到了”
      

  22.   

    如果你真的对OOP感兴趣,却死抱着VB的话,呵呵,(不说了)
      

  23.   

    嗬嗬,你不用担心,我还有JAVA
    不过,你就是不能相信VB有多态性,那么你看看这段代码吧:
    Public Interface IAnimal
        Sub Eat(Target As Object)
        Sub Move(dX As Single, dY As Single)
    End InterfacePublic Class 食肉动物:Implements IAnimal
        Public Sub Eat(Target As Object) Implements IAnimal.Eat
            '食肉动物吃的特点,略
        End Sub
        
        Public Sub Move(dX As Single, dY As Single) Implements IAnimal.Move
            '使食肉动物跑
        End Sub
       
        Public Overridable Sub Bite(Target As IAnimal)
            '先是咬的代码,然后再吃 
            Me.Eat(Target)
        End Sub
    End ClassPublic NotInheritable Class 老虎:Inherits 食肉动物
        Public Overrides Sub Bite(Target As IAnimal)
            '老虎咬的特点
            'Me.Eat(Target)
        End Sub
    End ClassPublic Class 食草动物:Implements IAnimal
        Public Sub Eat(Target As Object) Implements IAnimal.Eat
            '吃植物
        End Sub
        ....
    End ClassFriend Module MStart
        Public Sub Main()
            Dim tiger As New 老虎
            tiger.Bite(New 食草动物)
        End Sub
    End Module你对这段程序的看法要取决于你对VB多态性的认识了
      

  24.   

    上面是VB7的代码,你肯定没语言,下面是VB6的多态性
    'Class IAnimal
    Public Sub Eat(Target As Object)
    End SubPublic Sub Move(dX As Single, dY As Single)
    End Sub'Class Carnivore
    Implements IAnimalPrivate Sub IAnimal_Eat(Target As Object)
        '食肉动物吃东西
    End SubPrivate Sub IAnimal_Move(dX As Single, dY As Single)
        '食肉动物移动
    End SubFriend Sub Bite(Target As IAnimal)
         '食肉动物咬
         IAnimal_Eat Target
    End Sub'Class Herbivorous
    Implements IAnimal'....实现它'Module MStart
    Public Sub Main()
       Dim tiger As New Carnivore
       Dim cow As New Herbivorous
       Dim ia As IAnimal   Set ia = tiger
       ia.Eat(cow)
      
       Set ia = cow
       tiger.Bite(ia)