我是大三的学生,这学期开了一门课,“面向对象的程序设计”,老师是用C#讲的。期末考核就是让我们每个人用C#做一个小东西交给她。由于我一直不太喜欢C#的语法,尤其是区分大小写,所以没花时间去学。相对来说我的Delphi要好些,所以,我想用Delphi完成这次作业。
于是我去问老师:我:老师,我C#学的不是很好,能不能用其他工具完成这次作业?老师:不行。我:既然这门课叫“面向对象的程序设计”,而不是叫“C#程序设计”,那我为什么不能用另外的“面向对象”的工具实现呢?老师:好,那你用什么实现?我: Delphi !老师:Delphi不行,Delphi不是“面向对象”,最多算是“基于对象”。我:那我除了Delphi、C#还可以用什么实现?老师:JAVA、C++都可以,他们都是面向对象了,Delphi不是我:……
我一直以为Delphi 是 “面向对象” 的,她怎么说不是。我想,那位老师可是一为博士后啊,说话不会没有根据吧,所以没有当场和她辩论。所以我想来CSDN上听听各位的看法,把这个问题搞清楚一下。各位弟兄,能否告诉我“面向对象”和“基于对象”区别在哪里? Delphi 到底是不是 “面向对象”的?

解决方案 »

  1.   

    VB是基于对象的。
    Delphi是面向对象的。
      

  2.   

    误人子弟的老师
    现在的老师都是没料的多!唉Delphi当然是OOP,面向对象的,JAVA,C#,VBNet等都是
    VB才是基于对象的http://lysoft.7u7.net
      

  3.   

    老师说得有道理。Delphi并不是完全面向对象得,所以说他是基于对象得还是正确地。各位不要因为喜欢Delphi,就不去认真分析。其实,我也是最喜欢Delphi,管他是否面向对象。
      

  4.   

    DELPHI是OOP
      多态,继承。
    VB是基于对象的。
      

  5.   

    其实是你的老师不了解Delphi,他不好在你交作业的时候给你提出问题
      

  6.   

    面向和基于对象很好区分,面向对象有明显的特征,多态,继承,重载,这些delphi 都有,所以老师的话太绝对了,这所以不想让你做就是因为她不想自己讲的课白费了,要不然大家不是都可以不甩她上课啦,
      

  7.   

    D当然是面向对象的,所有面向对象的特性,包括封装、继承、多态,都在D中得到很好的支持,包括接口,只是他在支持面向对象的时候同时也支持面向过程,这点和C++一样
      

  8.   

    D是面向对象的,但是很多人用这个的时候并没有发挥delphi的oop特性,而顶多只是当作另外一个vb来用,和基于对象的vb倒是没有多大区别了。你们老师也不能算误人子弟,他没有理由什么都学到,但delphi给很多人的第一印象就是一个vb的翻版。
      

  9.   

    Delphi有多态,继承,重载,应该OOP
      

  10.   

    Delphi是面向对象,基于组件的,什么叫基于对象???????????不懂没关系,误人子弟就不对了,bs这样的老师你用Delphi写一个面向对象的例子不就ok了?
      

  11.   

    叫老师去买本DELPHI的考证教程看看,老外写的,里面有一张是讲DELPHI的OOP编程的.
      

  12.   

    Delphi使用的Object Pascal语言是经典Pascal语言的OOP扩展,你说用Delphi可以不可以?
      

  13.   

    夸张, 你凭什么叫你的老师去学 delphi ?难道 delphi 的 OOP 有 C#, java 純粹吗?
      

  14.   

    我靠不是学不学 最少你要了解Delphi是面向对象的 不要误人子弟 SHIT 国内的教师水平实在令人难以恭维呀
      

  15.   

    突然想起了以前ari的话:你长得丑不是你的错,但是跑出去吓人就不对了 ^O^
      

  16.   

    其实是你老师不懂Delphi,又不想学,害怕你交了后看不懂,没法打分,所以让你用它会的语言,呵呵
    好多老师都是一样,很虚伪,不懂又不想在学生面前丢人,所以就说....
    其实好多学历十分高的老师在具体实现应用上不是很好,他们都是搞“理论的”,哈哈哈哈哈
      

  17.   

    其它什么也别说了,只有Java 是纯粹的面向对象的语言。
      

  18.   

    delphi 是面向对象,但不是纯粹的OOP;至少它还可以用全局变量
      

  19.   

    纯面对对象的语言是JAVA和C#,Delphi当然是OOP,只是个别实现没有采用OOP的思想。
    对应你们老师,我无话说了...
      

  20.   

    拷贝自c++primer"
    抽象数据类型(ADT)的程序设计,现在通常称为基于对象的程序设计,在基于对象的程序设计方法中
    我们通过一组数据抽象来建立问题的模型,这些抽象称为类,与每个类相关的算法成为该类的公有接口
    数据以私有形式被存储在每个对象中,对数据的访问应与一般的程序代码隔离开来面向对象的程序设计方法通过继承机制和动态绑定机制扩展了抽象数据类型,继承机制是对现有实现代码的重用,动态绑定是对现有的公有接口的重用,以前独立的类型现在有了类型/子类型的特定关系"c++是一种支持多种程序设计方法的语言,基于过程,基于对象,面向对象,泛型
    而delphi也是提供了多种程序设计方法,基于过程,基于对象,面向对象所以你的老师说
    delphi最多算是“基于对象”。
    简直很错阿
      

  21.   

    xzgyb的帖子真是经典啊,佩服佩服,受教受教
      

  22.   

    <深入浅出MFC>的作者说DElphi也可以算是面向对象的,你老师不了解,不说明人家的软件不好.
      

  23.   

    proteus(聪聪):
    呵呵,不好意思
    正在看c++primer,所以就从书上敲了一段
      

  24.   

    to  Qzh7523(孤魂) 
    难道java是纯oop????
    纯的oop是smalltalk!!!!不过没有什么价值,适合教研!!!
      

  25.   

    不好意思,是 
    to  Demogodyou(大漠孤雕) !!
    嘿嘿!
      

  26.   

    Delphi不是纯粹的面向对象,C++也不是。
    C#和Java是比较纯粹的面向对象语言,不过Delphi可以做出完全面向对象的设计。
      

  27.   

    Delphi是面向对象的
    它具备面向对象的所有特征: 抽象,封装,多态。
      

  28.   

    类,多态,继承,重载。这是OOP的标准,delphi都具有了,所有说delphi是OOP
      

  29.   

    先问一下你自己:
    1,以前用delphi时是不是当作另外一个vb来用?
    2,oop学得怎么样?
    3,期末考核你能用Delphi做出面向对象的设计,而不是另一个基于对象的“vb”设计?如果(问题2回答:不错,很好) AND (问题3回答:是的) 那
    就对你老师说,你是怕我用delphi做出基于对象的设计,那我如果交给你那种东西,你直接判我这课0分。
    ---------------------------
      

  30.   

    Delphi有多态,继承,重载,应该OOP
    除了泛型,其它都一样,
    与 Java C# 一样单继承
      

  31.   

    惭愧呀,平时拿Delphi和VB一样来用。
    以后要多认真学习,Delphi 面向对象程序设计!
      

  32.   

    博士后 又怎么样,不表示什么都懂,自己要有点判断力,别以为别人说什么就信什么了;你老师是不是认为用delphi去写的话就会写成面向组件的编程模式了?那用c#还不是一样,就是不写类,建个form到里面写事件,她也拿你没办法;我们开发合作的也有个博士,那写的东西真的是..
      

  33.   

    xzgyb(老达摩) 
    拷贝自c++primer"
    抽象数据类型(ADT)的程序设计,现在通常称为基于对象的程序设计,在基于对象的程序设计方法中
    我们通过一组数据抽象来建立问题的模型,这些抽象称为类,与每个类相关的算法成为该类的公有接口
    数据以私有形式被存储在每个对象中,对数据的访问应与一般的程序代码隔离开来面向对象的程序设计方法通过继承机制和动态绑定机制扩展了抽象数据类型,继承机制是对现有实现代码的重用,动态绑定是对现有的公有接口的重用,以前独立的类型现在有了类型/子类型的特定关系"c++是一种支持多种程序设计方法的语言,基于过程,基于对象,面向对象,泛型
    而delphi也是提供了多种程序设计方法,基于过程,基于对象,面向对象所以你的老师说
    delphi最多算是“基于对象”。
    简直很错阿
    ----------------------
    回复:谢谢,从你这里得到了反驳那位老师的有效的理论支持!
    *****************************************
    yeliming(重返光荣) 
    Delphi不是纯粹的面向对象,C++也不是。
    C#和Java是比较纯粹的面向对象语言,不过Delphi可以做出完全面向对象的设计。
    ----------------------
    回复:请问什么叫“纯粹的面向对象”,她和Delphi这种“非纯粹的”区别在哪里?小弟不解。谢谢
    *****************************************
    6rl(海) 
    先问一下你自己:
    1,以前用delphi时是不是当作另外一个vb来用?
    2,oop学得怎么样?
    3,期末考核你能用Delphi做出面向对象的设计,而不是另一个基于对象的“vb”设计?如果(问题2回答:不错,很好) AND (问题3回答:是的) 那
    就对你老师说,你是怕我用delphi做出基于对象的设计,那我如果交给你那种东西,你直接判我这课0分。
    -----------------------
    回复:
    (1)呵呵,惭愧,小弟目前确实是把Delphi当成VB来用的
    (2)现在想接触一下她的OOP特性,借了一本刘艺的书来看,发现看不懂,正回过头去补 Object Pascal
    (3)我们开的这门课虽然叫《面向对象的程序设计》,但是我们的老师却是也是把C#当成VB来讲的,面向对象的多态根本没提到,封装、继承也只在第一堂课的时候第一堂课的时候提了一下,其余的课都是教我们“拖控件”或者自己去机房上机。对于这样的老师我教一个用delphi拖控件的程序已经算是给她面子了。
    不过话说回来,我确实不清楚怎样用Delphi设计程序才是“面向对象的”。而且我请教过一位大我一届的学长,他从高中就开始用Delphi编程,而且有过一些实用的作品。可是他到现在任然是把delphi当成VB用的。那位弟兄能指点一下,到底怎样用Delphi设计程序才是“面向对象的”?小弟先谢过。
    *****************************************
    ZyxIp(绝望中...) 
    如果你们老师是教音乐的,他会说:钢琴,小提琴是音乐,二胡不是音乐.  面象对象更是一种思想,封装,继承,多态是它的总的抽象的表现方式,音乐只需要演奏工具能发声就………
    -----------------------
    回复:呵呵,精彩,搞文学的吧。
    *****************************************
      

  34.   

    怎么设计程序才是面向对象??首先程序并不是说完全用面象对象的方式来实现就是好的程序.封装:应是指一个类只完成它自己应做的工作,可以自成体系,是一个黑盒子.但是如何抽象出一个类,
      这 就要靠程序员的分能力析和对要实现的工作的了解程序了.我们在不了解一个业务的时候总是认
      为某此方式是属于这个类的,表面上看起来也确实如此,但在深入的了解了了业务关系后就觉得其实
      放在这里不合适,应将它分出去.所以并不是程序中全是类就可以了,函数也其实是一种封装,每个函
      数都只应完成一件事情,如果写了一个好几十行的函数就应看看它是不是应分解成几个独立的函数了.继承:封装要求类只完成自己的工作,但肯定很多类都要完成一件共同的事情,如果要将这一部分独立
      成一个类,就会有很多类引用它,这在一定程度上破坏了它的封装性,而且如何修改了这个共同引用的类就会
     引起其它很多类,这时继承的做用就体现出来了.子类可以继承父类的方式和属性,父类的修改不会影响到子类,
      当然一个设计很差的类例处.多态:简单的说就是为了简单,你可以定义一个叫"芝麻开门"的方法,对着家门,冰箱,书,鸡蛋 分别喊一声,它
      们各自都用以自己的方式打开.怎么用DELPHI设计程序才是面象对象,就象在说怎么样二胡拉出来的才是音乐一样.DELPHI中只要会定义对象,定一个子类,实现一个多态的方法,就算你掌握了工具.具体的例子就是你看别人的代码,然后想它为什么这样设计,划分.将自己写过的程序重新设计一次,觉得那些业务应是一个类,业务之间有什么关系.比如一个小的图书管理系统,要实现的功能是:录入书的信息,保存到数据库中.如何实现:是准备立刻在一个窗体上放一个DBGRID,ADOQUERY,放几个BUTTON,在窗体启动时加载数据,在按钮下
    写保存的代码实现;还是先想想程序在实现上应分解成几个类,然后实现每个类,最后在窗体中调用.
    TBookInfo_Rec=Record
      ID:integer;
      Caption:String;
      .....
    end;//读出数据时的回调函数。
    TOnReadBookListEvent =procedure (Const Value:TBookInfo_Rec);//书列表
    TBooKList_Obj=Class
    private
      AOwner:TDBBook_Obj;
      procedure OnReadBookList(Const Value:TBookInfo_Rec);
    public
      constructor Create(ADBBook:TDBBook_Obj); 
      Function Count:integer;
      Function Items[Index:integer]:TBookInfo_Rec Read GetBookInfo Write SetBookInfo;
      Function Del(BookID:Integer):Boolean;
      Procedure Refresh;//调用TDBBook_Obj的ReadBookList读出所有的数据.
    end;
    //将一本书的信息显示到ListView的一行
    procedure BookInfoToListItem(ABookInfo:TBookInfo_Rec;AListItem:TListItem);
    //将列表中的信息显示到ListView中
    procedure BoolListToListView(ABoolList:TBookList;AListView:TListView);//数据库操作
    TDBBook_Obj=Class
    private
      FADOConn:TADOConnectiton;
    public
      constructor Create(AConnStr:String); 
      procedure ReadBookList(AOnReadBookListEvent:TOnReadBookListEvent);
      Function Del(BookID:Integer):Boolean;
      Function Add(Const Value:TBookInfo_Rec):integer;
      Function Edit(ACaption:String...):Boolean;
    end;将上面的两个类实现了.在窗体中放按钮,和ListView来实现,这里窗体类只是管显示,数据操作类只窗操作数据.相当于客户层(窗体),应用层(TBooKList_Obj),数据层(TDBBook_Obj) 这样如果数据库由Access换成SQLSERVER了,只要重新实现TDBBook_Obj就可以了.
    我想这算最简单的面象对象应用吧,只是用了封装的概念.用面象对象编程的思想设计,至于设计的好坏和用什么设计没有绝对关系.个人看法,请大家指正.
      

  35.   

    可能这个老师根本不懂DELPHI,以至于你交的作业根本没法改。说不是,就不是,是也不是!
    说他是,他就是,不是也是!
      

  36.   

    ZyxIp(绝望中...) 说的太好了!
    听了你的话对我的启发太大了,以前我写的程序在按照你的分析后感觉全都是垃圾。我也学过面向对象的思想,但是一到实际编程总是用不上,不知道是不会用还是不敢用。以后写代码要多用面向对象的思想去考虑。
      

  37.   

    看了楼上兄弟的回贴, 也是有点汗啊引用老达摩贴中的一句话: c++是一种支持多种程序设计方法的语言
                                     ^^^^  
    面向对象的程序设计一定要用支持面向对像的开发语言才能作得到嘛? 
      对象的程序设计只是一种设计方法, 让程序员从抽像实体(现实)世界的角度去考虑问题, 这样就可以独立出对像的属性, 行为, 事件, 这点 delphi 作得很好; c++ 没有事件, 当然也可以做得到; 而C# 的开发者跟 Delphi 是同一个大师--Anders, 所以也差不多; java是一种解释语言, 有些术语上有点不同; VB呵, 当然也行. 这些都是支持 class 的语言, 那么C语言行不行? 
    你用 Object-Oriented Programming With ANSI-C 或 Object Oriented Programming in C  去找找, 世界上不至一个程序员想这么干, 因为在不少的环境中是没有支持面你对像语言的.
      

  38.   

    回复:ZyxIp(绝望中...) :谢谢,精彩啊!打了这么多字,辛苦了,我真的感动啊!您让这篇贴子更有技术含量了。您提到  "比如一个小的图书管理系统,要实现的功能是:录入书的信息,保存到数据库中.如何实现:是准备立刻在一个窗体上放一个DBGRID,ADOQUERY,放几个BUTTON,在窗体启动时加载数据,在按钮下写保存的代码实现;还是先想想程序在实现上应分解成几个类,然后实现每个类,最后在窗体中调用."在看您的这段回复之前,假设我要做 "一个小的图书管理系统" 的话,想都不用想,一定会用前者来实现。您的回复让我对"面向对象"有了初步的认识,比我这一个学期在课里学到的还多!方便的话能再给一个反映"继承"和一个反映"多态"的思想的简单例子吗?最好还是承接上面"图书管理系统"的。谢谢。
      

  39.   

    WINDOWS就是一个很好的图书管理系统.比如说现在我们的系统要管理几种不同的类型,文件的OPEN就是一个多态的例子. 所有的文件都有共同的属性:名称,共同的方法OPEN,SAVE.TFileBase_Obj=Class
    priavte
     FName:String;
    public
     Procedure Open;virtual; abstract;
     function Save:Boolean;virtual; abstract;
    end;
     {案卷,自己定义的数据类型}
    TFileDoc_Obj=Class 
    public
     Procedure Open;override;
     function Save:Boolean;override;
    end;
    文档
    TFileBook_Obj=Class 
    public
     Procedure Open;override;
     function Save:Boolean;override;
    end;有两个窗体 TWinFileDoc ,TWinFileBook 在Open方法中用来显示各自己类型的文件.当然在SAVE的时候是调用TDBBook_Obj人的保存方法.在设计中还要考虑各种数据的在内存中的存在方式. 用WINDOWS系统中堆的方式来实现是最好的.
    function HeapAlloc; external kernel32 name 'HeapAlloc';
    function HeapCompact; external kernel32 name 'HeapCompact';
    function HeapCreate; external kernel32 name 'HeapCreate';
    function HeapDestroy; external kernel32 name 'HeapDestroy';
    function HeapFree; external kernel32 name 'HeapFree';
    function HeapLock; external kernel32 name 'HeapLock';
    function HeapReAlloc; external kernel32 name 'HeapReAlloc';
    function HeapSize; external kernel32 name 'HeapSize';
    function HeapUnlock; external kernel32 name 'HeapUnlock';
    function HeapValidate; external kernel32 name 'HeapValidate';
    function HeapWalk; external kernel32 name 'HeapWalk';这些是创建和使用堆时用的API,关于它的使用在<WINDOWS核心编程>一书中讲的很清楚。我原来
    也只是随便的创建对象,不管数据在内存中的布局,如果类的管理能达到内存布局级别,程序结构的
    完整性和易于维护性上将大大提高. 这也是看了书后才明白和体会到的.大家对这些有什么自己的看法请交流一下,这些是自己的体会,不知道真正的编程高手是如何实现系统的.有哪些实用的技巧,虽然现在都说编程不需要技巧,但我想设计上的技巧才是真正的技术.
      

  40.   

    应该是面向对象+面向组件的RAD工具吧
      

  41.   

    万分感谢所有的朋友们,尤其是ZyxIp(绝望中...) 、sniper920(仙林笑笑生) 、sniper920(仙林笑笑生) 等人的提点,让我受益匪浅啊!!!!!!
      

  42.   

    回复:ZyxIp(绝望中...) 
    谢谢,您的回贴我收藏了。
    回复:getit911(Windows转Linux中) :
    同意,现在很多大学老师讲课都很随便,很不负责任。但这不能完全的怪他们自身。首先,学校的导向就很有问题。拿我们学校来说,是只重视科研,不重视教学的。一位老师如果安安心心的教好他的课,一个月的薪水就两千多一点,而他要是在国内的一级刊物上发表一篇论文的话,奖励五万。而且职称的评定、住房的分配等,都是直接或间接与论文数有关,而与学生的就业率和就业层次则完全不挂钩。所以,老师们轻教学也是自然的。当然,高校中也存在淡薄名利的好老师,不过真的太少了。我对大学比较失望。
      

  43.   

    什么垃圾老师啊,连Delphi是不是面向对象都不知道,还说是基于对象,我看他的C#也不得不怎么样了...
      

  44.   

    你的老师是不太懂delphi,这个大家都看出来了,我就不说了客户只关心你写的东西是否能用,是否好用,至于是否是oop设计的没有那么大的关系
    有很多经典的软件是面向过程开发的mis系统可能需要oop的多些,如果是控制系统,开发语言都是汇编、c等,没法用oop,用oop,执行效率也是问题,我们的导弹、火箭上用汇编写的面向过程的东西要比oop的东西多得多