关于object pascal的class of class的讨论

I

import

Unregistered / Unconfirmed
GUEST, unregistred user!
hi tiez :
你提到的問題已經是屬於語言和編譯器的程度. 基本上你問的問題就是3nt兄說的template的機制. Object Pascal要不要加入template是一個見仁見智的問題, 這個問題也曾在許多Forum和Borland內部的Forum有過激烈的辯論.
使用template的機制有好處,也有壞處, 我心中有自己的想法, 但是不敢隨便評論, 以免再次掀起大戰. 要把template的機制用得好不簡單, 而且使用template的目的也有很有趣的分別. 我最喜歡舉Microsoft ATL和Borland OWL後期版本來做比較, 一個是為了效率和最小的程式碼大小, 一個是為了良好的架構設計和彈性. Object Pascal如果加入template的機制, 那麼VCL都可以使用Template的觀念來設計, 就像ATL一樣,不過Borland選擇使用Interface的方式.
事實上現在也可以便用Object Pascal來達成你說的範例, 只是需要程式師寫較多的程式碼, 而C++的Template則是由編譯器自動幫你產生了這些程式碼, 這並不困難.
至於寫Delphi和UML的書籍, 則是我沒有想太多的方向, 一是我想一定有人更有經驗, 二是我腦中想完成的書太多, 我如果能夠寫完現在在我腦中的東西, 我就很佩服我自己了, 更何況我腦中不時的有新的想法會出來. 看來我的腦袋還不錯, 真是心有餘而力不足了.
李維
 
 回复人:Phoenix2000(Phoenix2000) (2001-5-24 8:35:00) 得30分
Object Pascal 语言不支持泛型结构(也就是各种模板)。严格说来,泛型结构其实是对宏的高级实现(以语言本身实现),并不是属于面向对象概念范畴。在 Delphi 中,采用 TObject 类实现模板的功能,所有派生子类都从 TObject 派生,并采用单一继承树,不支持操作符重载、没有一般概念上的多重继承。多重继承仅仅用来实现接口(方便 COM/DCOM/CORBA 编程而引入的)。在这一点上,Java 语言和 Delphi/Object Pascal 是一样的。但是近来有消息说 Java 语言正在重新将 C/C++ 的传统泛型结构引入到新版本的 Java 语言中,看来泛型设计有它的优越之处,而 Delphi/Object Pascal 是否支持泛型只有看 Borland 公司是否修改其编译器了。
至于你说的 Delphi/Object Pascal 中的 class of class 这种概念,首先只有在 Delphi 的 Object Pascal 中才有,其他的 Object Pascal (比如苹果公司的 Object Pascal 语言)好像是不支持的。之所以引入 class of class 主要是为了让 Object Pascal 具备完全的运行时类型信息 RTTI 的能力,并且是这种能力提高到成为语言自身的语法要素这个层次。就算没有 class of class 也可以用汇编语言实现,但是这表明了语言的欠缺和不完整。RTTI 对于面向对象的程序设计语言是有着非常重要的意义的。C++ 一开始也不支持 RTTI,到了 1992 年时候才将 RTTI 引入到 ANSI C++ 标准中,因此 C++ 语言中出现了 dynamic_cast 等等新的关键字用来实现 RTTI。好了,似乎说的有电离题了。
 

Similar threads

顶部