Delphi的困惑(1分)

5

5415

Unregistered / Unconfirmed
GUEST, unregistred user!

在做HIS(Hospital information system)的时候,由于开发一些控件以及处理一些BUG
看了一看Delphi 的源码,特别是Database部分的,看到了一些十分奇怪的事情。
首先是在我的FieldEditor(一个自适应的字段编辑器)的时候,我的FieldName字段在
Object Inspector中怎么也不能用下拉框选择(如TDBEdit的那样),只能用Edit自己
填,百思不得其解,最后将property的名字改成DataField(如TDBEdit)后就可以选择
了......
然后,在同上一个控件的编写过程中,我发现在某些特定的环境下(当然是Delphi确定
的),一个类可以调用另一个类的私有的变量或是过程,大家不妨看看DB.Pas,其中有
不少精彩的例子......
第三个和Delphi的Bug有关,由于编译器的实现问题,在For语句的To部分写的表达式在
循环开始时计算一次后不再计算,也就是说,在循环过程中终结变量不会在发生变化,
循环次数在循环开始时就已经定好,然而,在源码中发现,在Delphi DB部分的事件处理
过程中,DataSet对于每一个相连的Datalink调用事件处理时用的就是For语句,也就是说,
在DataSet的事件处理过程中,不可以修改与其相连的DataSource或是Field等,不然的话就会产生异常,报告List out of bounds,这个异常在我们的HIS系统中已出现过多次,在修改了源码后才得到解决。
第四个问题更加离谱,在DataSet的实现中,部分过程的实现在源码中是不存在的,然而此源码居然可以编译通过,Inprise的小动作实在是不少的说......
在这次设计中,我对Delphi 的印象差了很多,见鬼的VCL的类结构,绝大多数的过程都
不是虚的,为数不多的虚方法都是为了自身的实现,根本不考虑可扩展性,另外还有不计
其数的私有方法,要写个控件不容易呀......各种各样的补丁......极不稳定的BDE.....
上帝保佑Delphi吧,至少它比VB和PowerBuilder要开放一些,但实在是比不上C++,也
许是因为C++是通用语言,而VB/Object Pascal/PowerScript都是专有语言的原因吧.....
 
不过Delphi有Pack再加上去呀
 
<C++是通用语言,而VB/Object Pascal/都是专有语言
What means?
 
应该说是:
Faint!
不知为什么竟然一时无话想说了;(
 
关于一个类可以调用另一个类的私有字段的问题,有一点解释:
只有两个类在同一个.pas文件中,才可以互相调用对方的私有字段
否则不行,这是Borland对Delphi简化类操作的安排,不是BUG。
关于部分过程的实现在源码中是不存在的,然而此源码居然可以编译通过:
用了抽象方法是没有源码的,而必须在继承类中写源码。
关于用Delphi写类复杂:
天!用Delphi写类还算复杂吗?我认为这才是真正的OOP。Delphi所
特有的对象方法指针,让类的扩展性容易到了极至!
说到开放性,我认为正是Delphi这种开放度,才使它有如此严谨的程序风格。
VC++为什么如此“通用”?还不是$M自己的产品?!难怪IE比NetScape通用了!
 
看看MICROSOFT吧,它也许就没有明天了。
 
to 5415:
你在那家公司,开发什么样的HIS?(我在一家医院)
 
第二个问题同JetIdeas,很多Delphi书上有过说明。
第四个问题,也差不多啦,纯虚拟方法没有实现,有点像COM的感觉。
这样的状况不要太多,其实如果实现了反而才是一种束缚。
 
第1个问题是要在下拉列表出现东西给人选,你要自己写 TPropertyEditor,
否则谁知道你要出来什么内容, DataField 是别人已经给你写好了
第2个也没什么问题,c++中是用friend来实现相类似的功能
第3个不是bug,pascal语言就是这样的
第4个问题是代码在目标文件(dcu)是有的,他不在source目录下列出来有它自己目的
 
你是WINNING的?
 
实在使不惯就换一个吧,看把娃给难受的...
 
真的是faint!
正如receyes所述使不好就别使了。
不过再使别的东西时最好认真一点,学精一点,不然也使不好。
 
关于程序BUG
MS比IBM多整整一个数量级。
而INPRISE介于两者之间。
 
//一个类可以调用另一个类的私有的变量或是过程,
一个单元里面就可以
Delphi 的Bug是不少,不过瑕不掩瑜嘛!
 
我看delphi的bug 很少很少!!
pascal 的机制比c++也好,至少我是这个感觉,
我见到指针就烦, 还好delphi 中直观一点。
 
5415 同学的结论不要下得太早了。
不同的类之间可以调用私有的成员,是因为 Delphi 中隐含的友元操作,
同一个单元中的 Class 都是 Friend,而 C++ 需要明确指定 Friend。
源码没有实现是因为 Abstract 的修饰,不妨参考一下 Object Pascal
的文法。该功能相当于 C++ 的虚方法后面加一个 “=0”。
至于循环次数的问题,涉及到编译器的底层工作原理,如循环优化。而且
Pascal 程序设计概念中的基本原则就是:在 For 循环中不能修改循环变量。
由于优化的原因,循环变量的值在循环中是未定的,但读取的时候 Delphi 会
转换成正确的值。
5415 同学不妨多参考一下 Object Pascal 的文法,其实学习语法并不是
什么很原始的工作嘛。多了解一下,可能更有好处。
From: BaKuBaku.
 
我非常信任Delphi本身的质量。
经常出现一些异常错误,大部分是一些控件有问题。
 
5415不要怪cAkk,是我结束你的问题。
时间太久,强制结束。 wjiachun
 
顶部