lmxeq5(
网学)贡献
在.NET 平台下实现跨语言开发
刘 艺
(本文发表在《程序员》杂志 2005 年第 6 期)
日前读到很多软件公司招聘.NET 程序员的广告,要求程序员统一使用某种编程语言进 行开发,觉得十分可笑。既然是在.NET 平台下开发,那么使用 C#、
VB.NET、Delphi.NET、 J#或别的什么语言究竟有会多大的差别?.NET 平台将不同语言的代码统统编译成中间语言 (IL) ,在虚拟机上运行。于是一个程序的好坏已经不是由语言的“高低贵贱”所决定,而 是真正由程序员的水平所决定。因此,
招聘到什么水平的程序员,比招到使用什么语言的程 序员更重要。对于一个熟练的程序员,选择使用什么语言写程序已经完全是个人的偏好,这 种偏好应该在支持跨语言开发的.NET 平台下得到尊重和鼓励,以充分发挥程序员的个性和 创造力。 实现跨语言的开发,对于微软一直是一个梦想。微软早几年推出的 COM 就希望不同语 言能够通过开发 COM 组件来进行实现跨语言的功能调用和代码重用。基于 COM 的跨语言 开发听起来不错,但是具体实现起来却比想象的还要难,让人望而却步! 传说中,远古的人类为了上天堂,召集了千万人马修筑通天塔,工程浩大但进展顺利。 上帝知道了后大为震惊,决定立即中止人类的计划。于是,他制造了很多不同的语言给人类 使用。终于,由于语言不通,人类无法协调工作,建造通天塔的计划不得不半途而废。虽然 上帝为了阻止人们建造通天塔而为人类设置了不同语言的, 造成了交流的障碍, 但这并不妨 碍人们尝试各种方法突破语言障碍的努力。在
计算机语言层出不穷的年代,微软的.NET 平 台为使用不同语言的程序员提供了一个比较好的解决方案。 微软的.NET 是一种
软件框架,可用于构建和运行不同类型的软件。.NET 框架的多语言 功能使开发人员可以使用最适合给定任务或技能级别的编程语言, 并将这些语言合并到一个 应用程序中。 用不同语言编写的组件可以透明地利用每个组件的功能, 而开发人员也无需进 行任何其他的额外
工作, 从而使开发人员将精力都集中到编写核心业务逻辑代码当中。 目前 已有 20 多种商业性和学术性编程语言宣布支持.NET 平台,其中包括 APL、Visual Basic、 C#、C++、COBOL、Eiffel、Forth、Fortran、
Java、J#、Prolog、Pascal、Delphi、Perl、Python 和 RPG。 那么在.
NET 平台下如何实现跨语言的开发呢?下面我就通过具体的开发实例来进行介 绍。 我要演示的跨语言开发实例是一个果园系统。 首先我们来对该系统
进行面向对象的分析 和设计。该果园系统的需求为: 1、 园丁投资并种植各种水果; 2、 收获水果,并计算收益。 该系统的用例图如图 1 所示,为了便于说明
问题,我选用的这个该果园系统例子并不 复杂。
Container
Fruit
plant
Gardener Actor
图 1 果园系统的用例图
进一步分析
系统,我们可以
设计出如图 2 所示的果园系统类图,这里包含了 TGardener TFruit、TBerry、TTropicalFruit、TCitrusFruit 这几个类,其中 TGardender 与 TFruit 是关联关 系,TFruit 和 TBerry、TTropicalFruit、TCitrusFruit 之间是继承关系。
TGardener attributes - fruits: Tfruit[] + name: string operations - plant + Gardener(..) + w ork plant
TFruit attributes # FFruitName: string # FInput: Integer operations + create(..) + gain: Integer + grow + harvest
TBerry operations + gain: Integer
TTropicalFruit operations + gain: Integer
TCitrusFruit operations + gain: Integer
图 2 果园系统的类图
为了
演示跨语言的合作开发,我们的实现
方案可以设计成如图 3 所示的架构。即某个 Delphi 程序员用 Delphi.NET 开发出 Fruit 配件(fruitLib.dll) ,某个 C#程序员用 C#开发出 Gardener 配件(GardenerLib.dll) ,然后作为公共组件供客户程序调用。所谓