学习Dot NET

导航

代码复用

下面是个人理解,不一定对。
代码复用有两个层面上的:一个是源码级别的,一个是二进制级别的。
对于源码级别的复用其优点是:
客户程序只要引用被复用的文件,就可调用源文件中的公共函数(也可看成类的静态方法)、继承源文件中的类,写一个子类。这样从功能上来说,源码级复用完全能满足复用的要求。
缺点是:
1、客户程序要明确知道被复用的源码,因为要被编译进客户程序,所以要开源。(对于流行开源的今天来说这算不上缺点,但对微软来说可能...)
2、可执行文件较大,要集各种功能于一身(这可能就是Delphi的可执行文件较大的原因,不知理解的对不对?)。

对于二进制级别的复用,就是dll了(当然还有各个厂商自己的二进制格式文件)。
其优点是:
1、不用公开源码,只公开其说明文档就行了。
2、可执行文件规模较小,功能模块可以在多个dll中。
其缺点是:
不能继承,如果不能继承,代码复用就大打折扣了。Com组件放到dll里,因为是二进制的,不能看到其中的类及其方法(当然可以用工具看,同时这一点我可能理解的不对),也就无法继承。

那么有没有一种方法,既能继承,又能使可执行文件较小,且不用公开源码的代码复用方案呢?要能实现继承,客户代码应该能看到各个父类的成员,及方法的执行过程。这样,应该将父类存放于什么格式的文件中就既不是源码,又不是二进制呢?他应该至于源码相关,与机器和操作系统没有关系。这就是要建立一种中间格式的文件。DotNet和java都是这样的。因此源码复用要在增加一种方式:中间代码级别的。

附:java简史(节选自《Java2核心技术》卷1第一章,据说是Sun官方推荐的书)

Java的历史可以回溯到1991年,那时候一个Sun工程师小组,在Patrick Naughton和JamesGosling(非常全面的计算机奇才)的领导下,着手设计一个小的能够用于像有线电视转换盒一类的消费设备的计算机语言。因为这些设备没有很强的处理能力和太多的内存,所以这个语言必须非常小并且能够生成非常紧凑的代码。还有,因为不同厂商可以选择不同的CPU,所以这个语言不能够限定在一个单一的体系结构之下,这是非常重要的。该项目称作“Green”。
代码需要小、紧凑以及与平台无关。该项要求使得开发团队重新搬出了早期PC上尝试过的一些Pascal实现模型。Niklaus Wirth-Pascal的发明者作为先驱者尝试把UCSD Pascal语言设计为一种能够为异构机器生成中间代码的可移植的语言(这常被称作虚拟机,相对应的就是Java虚拟机-JVM)。中间代码可以在任何安装有合适解释器的机器上使用。Green项目的工程师们也通过使用一个虚拟机来解决了他们的主要问题。
Sun的开发人员,都是些有很深的UNIX背景的家伙,所以他们的语言是基于C++而不是Pascal。并且,他们把该语言设计为面向对象的,而不是面向过程的。但是正如Gosling在采访中所说的那样,“毕竟,语言只是工具而非全部”。Gosling决定把这个语言称作“Oak”(起名的原因估计是因为他非常喜欢自己办公室窗外的橡树)。Sun的人员后来发现Oak是已经存在的一门计算机语言的名字,因此他们把名字改成了Java。

posted on 2004-07-20 17:03  学习.NET  阅读(2213)  评论(10编辑  收藏  举报