object pascal是delphi的基石。我们在这里讨论的是核心的问题。虽然量少但质量高。
解决方案 »
- 100分求解!确定webbrowser中网页上某文字处的坐标
- 快捷键的问题
- 用什么控件进行捕捉摄像头中的图片,并压缩成JPG,若用过请问DASPACK如何使用??
- 3个问题请教各位。
- 字符串问题
- 以前我在CSDN看过类似的贴字,现在忘了这样的sql语句怎么写,请知情者赐教!!
- 新年大礼包
- 怎样是限制Edit里面输入的数在某个范围之内??比如0-999
- 在SQL语句中如果让一个日期时间型字段减去一个x分钟?
- 关于MIDAS实现Master/Detail应用有两个难解 的问题请教
- 如何把一个数据库的全部,一部份记录加到另一个相同结构的空数据库中
- 如何使数据库中的数据显示在dbgrid上时变成另外一种形式
WIN32SDK,VC++能够做到,我也能做到
数据结构、数据算法不足以体现Object Pascal的全部。
我建议,楼上的和其他对Object Pascal有深入了解的网友可以出些考题,主要方向是面向对象编程。特别是类、接口方面的。
Object Pascal的好书实在太少了
:《
做了一部分程序后再去看op,这样看得更清楚!!
http://www.sunistudio.com/nicrosoft/article/art5.htm
但是以前好帖子应该很多,我记得有一篇讨论class of class 的帖子非常经典的。
我觉得这是学习object pascal最好的方法了
很不错,中文也有很多我正在看《程序员2002》光盘里面的哪。
2.石油出版社出版的三本一套的Delphi-1中,有一本就叫<Object pascal>,我认为很不错,这是从Borland公司自己出版的书翻译过来的,有权威性.
2. 不能声明Inline函数
3. 不能声明类的静态变量(这点不太要紧,可以用静态函数和全局变量来仿真)
4. 不能隐藏一个祖先隐藏的属性或方法。Object Pascal可以披露祖先类隐藏的方法或属性,但是要隐藏祖先类披露的属性或方法,我还不知道怎样做。把这些属性放到protected section或private section也不能做到。
5. 有限的inherited。有时我想调用祖先类的方法,而不是父类的方法,但是我也不知道怎样做。比如:
TAncestor = class(...)
protected
procedure AProc; virtual;
end; TParent = class(TAncestor)
protected
procedure AProc; override;
end; TChild = class(TParent)
protected
procedure AProc; override;
end;procedure TChild.AProc;
begin
//can not call TAncestor.AProc via the below statement
//inherited TAncestor.AProc; //you can call this only
inherited;
...
end;6. 没有声明裸(naked)函数的能力。
7. 只能产生兼容Intel的目标代码,不能产生基于像Alpha这样的CPU的机器的目标代码
8. 没有类似于C的位字段声明的能力。
9. 从Delphi5开始,产生的目标程序总是依赖于oleaut32.dll,因为System单元需要它。
10. 有缺陷的exception捕捉,有时候捕捉到的Exception的message属性为空。
11. 缺少try except finallay end.结构
12. 缺少多重继承(虽然现在很多设计人员不赞同多重继承,但毕竟这是一种语言和编译器的能力)总之,Delphi的目标是RAD,并不是面面俱到的
1 真叫人痛恨
8 D6似乎有个结构用来进行位运算,我记不清了
11 Borland很顽固,不知道为什么,相信有成千上万的人已经反映了这个问题
12 Borland拒绝加入多重继承,我觉得从能力上来说,既然允许接口的多重继承,那么当然有能力处理类的多重继承
有些问题也许并不象我们想的那样简单,因为我们毕竟不可能向Borland的专家那样精通。
举个例子: Inter的理处理器在底层的存储上采用了字节颠倒的存储方法。这经常给我们编程带来不便。可是你能说他的CPU设计没有摩托罗拉设计的好。有些东西支不支持和这个语言的设计思想是有关系的。现在的Delphi语言我个觉得是非常优美的,并且是足够用的。对于我们来说根本还谈不上精通他。又有几个人敢说精通它呢。只要我们花时间去持续深入的研究就会发现你原先没有发现的功能,包括你前面说的有个问题是提供了支持的,只不过你还不知道而已。当然有些问题我们都希望Borland能改进,可是我理解也许这和他们的底层设计思路可能有冲突。所以对于我来说,就现在的Delphi已经足够我掌握了。没事看看Borland的源代码,真是经典啊。
1、不支持带参数类,这一点让我非常的怀念C++;
2、不支持操作符重载;
3、没有多重继承关于dbExpress谈到的几点,我是这样认为的
1. 宏本来就应该抛弃,C++背上的历史包袱太沉重了
3. 同意。
4. 祖先了和子类不放在一个单元文件private的成员对于子类就是不可见的了
5. 可以通过指针操作办到
11. 完全同意。
望。我也是个Pascal迷,从TP6追随到现在的。不怕大佬们笑话,我对编译器感兴趣,而且有很多
人都和我一样,已经感觉到Borland对她的偏爱已经不及当年了,所以我一直有个自己学着写
的念头(汗!)。当然我还差很远,不过这只是我个人的兴趣罢了。所以,我写了上面的那个
有点扯淡的列表,不过,我很希望有人来告诉我,这个特性已经被遗弃了,这个特性没什么
用。或者告诉我,这个特性你没有说到。这些实在是我业余时间闹着玩的。我希望你能理解我的想法,不要吝惜你的打字时间。在这里,我还要谢谢nichoti对我的提点。修正一下:〉〉1. 没有宏支持 确实没有什么太大的必要
〉〉2. 不能声明Inline函数 确实没有什么太大的必要
3. 不能声明类的静态变量(这点不太要紧,可以用静态函数和全局变量来仿真)
4. 不能隐藏一个祖先隐藏的属性或方法。Object Pascal可以披露祖先类隐藏的方法或属性,但是要隐藏祖先类披露的属性或方法,我还不知道怎样做。把这些属性放到protected section或private section也不能做到。
5. 有限的inherited。有时我想调用祖先类的方法,而不是父类的方法,但是我也不知道怎样做。比如:
TAncestor = class(...)
protected
procedure AProc; virtual;
end; TParent = class(TAncestor)
protected
procedure AProc; override;
end; TChild = class(TParent)
protected
procedure AProc; override;
end;procedure TChild.AProc;
begin
//can not call TAncestor.AProc via the below statement
//inherited TAncestor.AProc; //you can call this only
inherited;
...
end;// 6. 没有声明裸(naked)函数的能力。 可以
7. 只能产生兼容Intel的目标代码,不能产生基于像Alpha这样的CPU的机器的目标代码。不知道在运行在Alpha之上的NT上运行Delphi的目标程序会怎样。没机会试。
8. 没有类似于C的位字段声明的能力。
// 9. 从Delphi5开始,产生的目标程序总是依赖于oleaut32.dll,因为System单元需要它。 不要紧。我只是不喜欢windows的variant操作例程。
10. 有缺陷的exception捕捉,有时候捕捉到的Exception的message属性为空。
11. 缺少try except finallay end.结构
// 12. 缺少多重继承(虽然现在很多设计人员不赞同多重继承,但毕竟这是一种语言和编译器的能力),有Interface就行了13. 请见谅,不应该在这里写这样的帖子。另外开帖吧同志们,为了共产主义的伟大事业,向我开炮!!!
首先要谢谢你对小弟的提点,但是你也应该说说我哪里说错了,还望你再提点清楚,真心的希
望。
==================以下to Ringo:
==================
说实在,我最先用的是C++,大概只用过一年,可以说是不知道C的,所以说了要求Pascal支持宏这种背包袱的要求。你说的参数类是怎么回事?至于,
4.我说的是隐藏祖先披露的方法或属性
5.我知道用RTTI可以做到,但是如果直接inherited TAncestor.AProc,那该多爽。
呵,就是标准模板库的意思了
Delphi中的VCL和Kylix中的CLX等都是Object Pascal的性能加速器。
俺要说的是:Delphi和Kylix都是为Object Pascal服务的(尽管后者不仅仅为OP服务)。准确地说,Borland/Inprise一直在发展Pascal,而在发展中产生了Delphi、Kylix,使得这些开发平台能实现最快的Object Pascal应用开发。
因此,Object Pascal是Delphi的基石,尽管没错,但俺以为把主次弄颠倒了。就象有人说他的爸爸和他长的很象差不多。
俺以为应该说成,Delphi是Object Pascal的加速器,Delphi的精华是Object Pascal。此为拙见,祈为见谅!
无法给你回短消息,不知为什么。
其实在用Delphi的过程中我也遇到过一些问题。比如那个Try的结构问题,说句老实话我也用得很不爽,不过我一开始并不知道还有几个在一起的结构,但看了一点Java之后,确实觉得这种结构是不错的。但是这也是可以解决的。无非是写起起来繁烦一点而已。其实这样的结构就是下面的句子:
try
try except end;
finally end;
是吧,其实Delphi是可以完成这样的功能的,当然写得是要繁一点,这就如我上面所说,各个语言的设计思想的出发点不尽相同,特别是底层的思路可能有很大的区别,这也就是Delphi不支持多重继承等的主要原因。但是就你上面说的那些问题,有些也许可以算是Delphi的优点,有些看上去确实是Delphi的不足。当然称Delphi是不合适的,因当准确的说是Object Pascal。所以说Object Pascal是Delphi的精华。不要称我为大佬,我是不敢当的。我用Delphi也就几年功夫。你确到的大部分问题,也曾经是我经常骂在嘴边的。可是随着我对Delphi的深入,特别是对Delphi中VCL组件的源码的深入解析,原先在我心中的一些问题却已有了新的想法。
举个例子,我想没有人会说Delphi的IDE写的不好吧。在有这么多的不方便之处,为什么他们能写这么好呢。你甚至可以用一个Delphi去调试另一个Delphi。其实无它,因为Borland的人已经熟透了Delphi。我想如果如果我程序遇到了需要上面那些问题解决的时候,我是应当需要考虑一下我的类的设计了。因为我发现,当然需要用到这些特别的功能时,经常都是祖先类没有设计好造成的。VCL的层次结构为什么没有这些问题呢。唉,学无止境啊。
其实对Delphi来说,最重要的不是他的版本,而是Object Pascal编绎器的版本,现在不是支持Linux下的编绎了吗?其实我想它支持Alpha是不难的。关键是一个商业公司为什么要去支持吧。
对不起,我是随便说两句。大家不要介意。更不必挂在心上。我才用了Delphi几年,还差的远呢,还是愿意听取大家的意见。Borland又要推出C#Build了。唉,不知后事如何啊。
http://www.csdn.net/Develop/article/17/17299.shtm
其实很多的书上都谈到了关于D编译器的后台动作问题,但总感觉说的很不过瘾,看来只能靠我们自己在茫茫的资料海洋中一点一点汲取了,没有办法,找不到钥匙啊!呵呵大家有关于Delphi编译器的后台行为方面的知识点和资料连接都提供出来,说不定可以汇集成一本书的内容啊!
>>3. 不能声明类的静态变量(这点不太要紧,可以用静态函数和全局变量来仿真)
------------------------------------
使用属性多好>>4. 不能隐藏一个祖先隐藏的属性或方法。Object Pascal可以披露祖先类隐藏的方法或属性,但是要隐藏祖先类披露的属性或方法,我还不知道怎样做。把这些属性放到protected section或private section也不能做到。
------------------------------------------------
那是因为在同一个单元文件中,所有类可以互相看得见。如果这些类不在同一个单元文件中,就可以隐藏祖先类披露的属性或方法。不信你试试!>>5. 有限的inherited。有时我想调用祖先类的方法,而不是父类的方法,但是我也不知道怎样做。比如:
TAncestor = class(...)
protected
procedure AProc; virtual;
end; TParent = class(TAncestor) protected
procedure AProc; override;
end; TChild = class(TParent)
protected
procedure AProc; override;
end;procedure TChild.AProc;
begin
//can not call TAncestor.AProc via the below statement
//inherited TAncestor.AProc; //you can call this only
inherited;
...
end;
----------------------------------------
你的TAncestor.AProc是虚方法,当然不行。这样试过吗?
TAncestor = class(...)
protected
procedure AProc;
end; TParent = class(TAncestor) protected
procedure AProc;
end; TChild = class(TParent)
protected
procedure AProc;
end;procedure TChild.AProc;
begin
inherited TAncestor.AProc;
end;
>>6. 没有声明裸(naked)函数的能力。
---------------------
可以使用类方法,不需要实例就可以使用类的函数。
>>12. 缺少多重继承(虽然现在很多设计人员不赞同多重继承,但毕竟这是一种语言和编译器的能力),有Interface就行了
--------------------
Delphi是强类型语言,使用类的多重继承后如何转型(转为父类型,还是母类型?),用Interface可以实现多重继承,这是趋势,C#和Java都向他学习。
有限的inherited。有时我想调用祖先类的方法,而不是父类的方法....
...你的方法不行,编译时报错:Undeclared identifier: 'TAncestor'!!
这有个翻译过的OBJECT PASCAL
不管是object pascal,还是java,c++,我都用过,如果不做深入的深入的研究,都一样,但如果深到了一定的层次,还是一样