VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 从VB程序员到Java程序员
发表评论(0)作者:James W. Cooper, 平台:VB6.0+Win98, 阅读:15910, 日期:2001-07-23
从 VB 程序员到 Java 程序员
James W. Cooper
1997 年 7 月

     
  

下文最初出现在 Pinnacle Publishing注释:s 1996 年 11 月期上。

比较 Java 与 VB
由于对 Java 语言的讨论无处不在,所以您可能问自己:现在是否应该放弃或克制对 VB 的兴趣,将全部或部分精力投入到 Java 中。这个问题的答案就如所有最简单的问题一样,当然是“视情况而定”。在我们深入讨论之前,必须清楚 Java 和 JavaScript 是完全不同的语言,它们的相似之处仅仅是名称中有四个字母相同。Java 是一种面向对象的、编译型开发语言,而 JavaScript 是可以嵌入网页中的一系列解释型源语句,用于对网页上简单的控件进行交互性控制。本文讲述面向对象的 Java 语言。有关 JavaScript 的信息,请参阅边栏。



如果您的主要目的是编写一个在 Windows 95 和 Windows 3.x 下的独立应用程序,则在未来相当长的一段时期内您很可能能够继续这样做。Visual Basic 是一个成熟的平台,它有多种易于使用的开发工具,以及许多厂商提供的众多可用附加控件。但从另一方面来看,如果您认为 Java 只是为了在网页中加入动画效果和简单的功能,则您对它的许多主要优点缺乏了解。

Java 基本上还是一个新兴事物:其工具都是 1.0 版本,甚至更低,而且它的工具以及某些组件的性能都有待完善。当然,还没有太多的第三方控件可用。另一方面,由于 Java 工具由众许多家公司开发,您可能希望他们之间的竞争会在接下来的几个月中使改进的开发周期极快。相反,VB 用户就必须等待一家公司发布新版本的 Visual Basic。
   内容:


比较 Java 与 VB
编写简单的 VB 应用程序
编写简单的 Java Applet
将您的程序联网
不损失线程
Java 的缺点
小结
Java 的更多信息
什么是 JavaScript?  



与 VB 相比,Java 是一种跨平台的语言,它可以完全相同地在 Windows-95、OS/2、大多数流行的 Unix 以及 Macintosh 上运行。随着大型机越来越多地应用于网络文档服务器,我们也可以在这些机器上发现 Java 实现。

在您编写了一个 Java 程序后,它的源代码被编译为二进制表示,称为字节码,而且对于支持的每种平台,都提供了一种字节码解释器,称为 Java 虚拟机 (JVM)。这样,相同的已编译二进制代码几乎可传送到任一台机器上,并且无论使用哪种操作系统或硬件配置,它都可以运行并生成几乎完全相同的结果。

解释字节码这一概念应该不会陌生:它也是 Visual Basic 的工作方式。这样,您就不会对 VB 程序和 Java 程序的图形性能大致相当感到惊讶:它们都有一个薄层解释器,后者直接调用 Windows 平台的GUI 功能。它们都能够出色地完成任务。Java 程序实际上比完成相同功能的 VB 程序需要更短的启动等待时间。


Applet 和应用程序
然而,使用 Java 编程的优势是实实在在而且值得考虑的。在 Java 中,您可以编写两种程序,分别称为 applet 和应用程序。Applet 是设计用来嵌入网页中的程序。它能够与 web 服务器上的文件进行通信,但由于 Java 非常严格的安全模型,它不能访问您的硬盘上的任何文件或您的网络中的任何其他部分。

应用程序是独立的程序,它完全可以自由地访问您的硬盘和网络。它们与您的 Web 浏览器毫不相干,而且它可以编写得如同 VB 程序一样复杂。到目前为止,虽然在 Java 文章、书籍和代码中都将重点放在了 applet 的编写上,但是那些完全可以在不同操作系统和硬件上运行的独立程序也颇具吸引力。

Java 的优势
Java 具有几个非常值得考虑的优势。简而言之,包括:

Java 是面向对象的。 用 Java 编写程序要求您编写 100% 的面向对象的代码。正如我们即将看到的那样,一旦我们花费几分钟了解了面向对象的编程方法,就会发现这些程序要比 VB 导致的无头绪代码更易于编写,也更易于维护。
Java 允许您派生您自己的控件。通过从现有的控件或者基本的 Canvas 类派生控件,您可以构建带有自己喜欢的特性的可视化控件。
Java 可在大多数平台上运行 。VB 是一种专用于 Windows 的产品,而 Java 的二进制代码完全可以在大多数 Unix 机、 Macintosh 和安装 Windows 95、Windows NT、OS/2 和 Linux 的个人计算机上运行。
Java 支持网络。用 Java 编写在网络上运行的程序非常简单。对 URL、TCP 套接字和远程类的使用已从根本上内建于语言中。
Java 是一种多线程语言。您可以编写多个代码段同时在不同执行线程中运行的程序。
Java 可使您为网页添加较多的功能。如果您有兴趣在网页中加入计算、收集或显示数据的交互式功能,Java 正是您要选择的语言。在网页中添加交互式控件没有其他更好的方法。
要使用 Java,我必须学习哪些知识?
您需要学习 Java 的语法(同C、C++和Visual Basic 相比,Java语法与C和C++更相似)。而后,必须深入理解面向对象编程的概念。虽然这两个条件听起来让人感到恐惧,但实际上您会发现几分钟后您就可以编写 Java 程序。

在编程中使用对象比您早期使用的方法更加自然,因为我们无时无刻都倾向于按照对象的思维方式去思考周围的事物:向客户发送报价单,从厂商获得价格,从服务器上获得文档,给孩子发送信件,等等。这些活动中的每个人都需要在逻辑实体(客户、厂商、服务器、孩子等)间获取或发送信息。

面向对象的编程方法正是以更接近地模拟真实世界的这些情况来构建程序,其中对象就像 VB 的记录或类型,它包含数据和一系列对数据进行操作的子程序和函数,称为方法。



--------------------------------------------------------------------------------

编写简单的 VB 应用程序
假设我们想编写一个简单的 VB 程序来进行码和米之间的转换。我们可以通过构建一个简单的用户界面来实现,这个用户界面包括一个输入域、一个输出域、两个选项按钮和一个计算按钮。

图 1 — 一个简单的 Visual Basic 应用程序

Option Explicit
注释:--
Private Sub Form_Load()
result.Caption = ""   注释:初始化控件
entryvalue.Text = ""
Meters.Value = True           注释:缺省值为米
Compute.Default = True        注释:设置缺省按钮
End Sub
注释:--
Private Sub Compute_Click()
注释:计算到米或码的转换
Dim dist As Single, newdist As Single
dist = Val(entryvalue.Text)
If Meters.Value Then
  newdist = dist * 36 / 39.37    注释:转换为米
Else
  newdist = dist * 39.37 / 36    注释:转换为码
End If
result.Caption = Str$(newdist) 注释:显示结果
End Sub
注释:--
Private Sub Quit_Click()
  End                           注释:如果单击“quit”,则程序退出
End Sub








程序的显示如上图 1。在文本框中输入一个值,然后选择“To Meters”或“To Yards”,然后单击“Compute”。整个程序的逻辑实际上位于上面的 Compute_click 子程序中,程序在这个子程序中决定用哪个因子乘以长度。




--------------------------------------------------------------------------------

编写简单的 Java Applet
我们同样可以轻松地用 Java 编写相同的程序。程序的关键部分与 Visual Basic 几乎相同:

图 2 — Java 长度转换程序  
private void clickedCompute()
{
Ruler ruler = new Ruler();     //创建 ruler 对象
String dist, newdist;

dist = Entryval.getText();     //获取输入值

if (Meters.getState())         //如果选定 "to Meters"
   {
   ruler.setYards(dist);   //设置到 ruler 对象中
   newdist = ruler.getMeters(); //转换为米
   }
else                           //否则
   {
     ruler.setMeters(dist);  //设置到 ruler 对象中
     newdist = ruler.getYards(); //转换为码
   }
Results.setText(newdist);       //显示结果
}








从此处可以看到,Java 与 Visual Basic 的主要区别在于子程序和子程序中的块都是用大括弧分隔,而不是使用 Sub 和 End Sub 或者 If 和 EndIf,而且注释是以双斜杠开头,而不是以撇号开头。

现在,我们来思考一下什么是对象。与 VB 很相似,文本输入域是一个对象,这包含两个方法:getText() 和 setText()。选项按钮 Meters 有一个方法 getState(),就像 VB 的选项按钮具有属性 value 一样。

另外,我们定义了一个 Ruler 对象,其方法有 setYards()、 setMeters()、 getYards() 和 getMeters()。Java 的好处是我们无须了解对象的工作机理,或者它在内部表示数据的方法。我们不必知道它是以米、码还是浪为单位记忆值。显然,它必须将字符串转换为浮点数,然后再转换回来,但是我们不必知道这是如何以及在何处完成的。这就是面向对象编程的巨大优势所在:每个对象都知道如何处理它的数据。


派生新类
现在,假定我们需要将长度单位转换为浪。我们可以重写 Ruler 类,让它具有一个 getFurlongs 方法,但是我们可能不想或不能更改原来的类。我们可能只有二进制代码,所以不能对源程序进行更改。但是,Java 允许我们派生新类,它自动具有它所继承的基类的所有方法,而且具有我们需要的任何新方法。我们需要两个新方法:setFurlongs 和 getFurlongs。其他方法无须我们干预即可获得。当然我们需要知道在米和浪之间的转换因子(我已查到)。

从 ruler 派生出来的完整的类为:


class fRuler extends Ruler
{
final double meters_per_furlong = .00497;
//--
public void setFurlongs(String input)
{
//将字符串转换为数字
double dist = new Double(input).doubleValue();
//转换数字
dist = dist * meters_per_furlong;
//存储为一个字符串
setMeters(new Double(dist).toString());
}
//--
public String getFurlongs()
{
double dist = new Double(getMeters()).doubleValue();
dist = dist / meters_per_furlong;
return new Double(dist).toString();
}
}


   


这个新类的关键部分是它继承了 Ruler。然后,它将自动包含 Ruler 类中的所有方法以及我们添加的新方法。如果希望添加更多的功能而不必更改 Ruler 类的代码,那么也可以使用新方法来覆盖 Ruler 中的某些方法。


设计 Java 用户界面
Java 的设计使您可以编写直接的 Java 代码来为您的程序生成图形用户界面。您既可以自己直接编写代码,也可以使用越来越多的 GUI 编制程序为您生成代码。这些编制程序有 Symantec Café、Roguewave JFactory、Sun 的 Java Workshop 以及 Microsoft 的 J++。每个程序使用的方法稍有不同,但是都使用了类似 VB 的图形设计程序,在页面中加入控件,生成排列这些控件的代码,并接收它们的“Click”事件。在本文结尾对这些内容作了总结。

这正是 Java 最需要改进的领域:所提供控件的数量极为有限,但是第三方正在开始弥补这一不足。另外,极有可能需要编写您自己的控件,如图像按钮或树状列表。

由于 Java 从现有类派生新类的能力,您可以更改 Java 控件的行为,这比更改 VB 控件的行为要容易得多。例如,如果您希望在用户用鼠标右键单击按钮时采取特殊的操作,就可以派生自己的 rButton 类,它具有这种附加的行为,但仍具有普通按钮的所有属性。


--------------------------------------------------------------------------------

将您的程序联网
Java 胜过 VB 的另一点是其联网能力。TCP/IP 套接字类和 Web URL 描述符都是内建类。任何 Java 应用程序都可打开两台机器间的套接字连接。当机器中有一台运行 Unix(在其上编写服务器极为重要)时,这一点尤为有利。您可以用 Java 编写在 Unix 机上运行的一个服务器,并编写另一个 Java 应用程序,后者在您的 PC 客户机上与该服务器对话。由于通过套接字读取和写入数据,您甚至可以在这两个程序中使用大多数相同的代码。

Java applet 不能任意打开套接字,但它们可以连接到此 Web 服务器本身的套接字上。因此,极有可能的情况是:一个 Java applet 在某个网页上运行,您将它设计为通过套接字与一个服务器进行通信,而该服务器又连接到一个数据库上。这种跨平台的客户机服务器方法是 Java 的最大优势之一,在 VB 中很难这样轻松地实现。


--------------------------------------------------------------------------------

不损失线程
最后一点,Java 是一种多线程语言。线程是可在一个程序中并发运行的独立并行任务。由于线程内建于语言中,因此,无论何时您有费时的任务,如后台文件处理和通信,您都可自如地编写线程。通过使用线程,可以确保你的程序界面总是处于激活状态。您还可以同时运行多个并行的线程来处理多个并发用户,或者模拟多个进程。



--------------------------------------------------------------------------------

Java 的缺点
Java 是一种功能强大的面向对象的、编译型的、跨平台语言,可以使编写 Windows、Macintoshes 和 Unix 程序的复杂工作变得井然有序。但它仍然是一种新生的语言,在 Windows 95 图形实现中存在几个严重的错误,并有一些明显的遗漏:

可视化设计程序和 GUI 编制程序仍是 1.0 版本,还有多处严重的不足,集成的调试程序刚开始可用于关键的任务。
如果不与具体平台的某些代码链接,还无法从 Java 应用程序中进行打印。对于这一点,VB(尤其是 4.0 版本)更胜一筹。
Java 还缺乏访问 PC 硬件(例如串行端口或 IEEE-488 接口卡)的能力。
尽管可以从 Java 中访问数据库,但这个代码还不成熟,而且到目前为止还几乎没有对 Microsoft 数据库(如 Access 和 FoxPro)的支持。
最后一点,Java 仍是一种解释型语言,其解释器仍有缺点。如果使用错误的文件操作集,会使执行速度变得如同蜗牛爬行,而其它操作集则非常令人满意。
Microsoft 的作用何在?
Microsoft 的 Internet Explorer 支持 Java。它很快还将支持 Microsoft 的 ActiveX 控件,这只是 OLE 控件的另一个名称。Microsoft 已经修改了 Visual C++ 工具,以构建一个集成开发环境(请参阅边栏),使您可以通过一种流畅的风格编写和调试代码。在写本文时,J++ 产品仍无法供普遍使用。

您可以指望 Microsoft 成为这一领域的极积参与者,包括其下一代操作系统版本中的 Java,IBM 已经宣布了 Microsoft 的这一举措。当前,Microsoft 的战略似乎是以 Windows 为中心,而不是以跨平台为中心,但永远不要忽视这个公司:它是一支强大的力量,也是 Sun 战略的主要竞争对手。



--------------------------------------------------------------------------------

小结
Java 是一种功能强大的、新型的面向对象编程工具,它得到了计算机行业多家公司的大力支持。完全有可能用 Java 编写几乎任何种类的程序,而且可以编写具有相当专业水准的用户界面。如果您的工作要求开发跨平台的工具,或者客户机-服务器应用程序,或者智能网页,您应该毫无疑问地考虑使用 Java。如果您的工作是仅针对单用户的 Windows95 应用程序,则 Java 可能不会为您带来太大的优势,这取决于您对网络访问、多线程以及面向对象编程风格的需要。



--------------------------------------------------------------------------------

Java 的更多信息
您可以在 Sun 网站上找到 Sun 公司关于 Java 开发和计划的最新信息。您可以在它们的开发人员专区下载大多数平台的 Java 开发工具版本。

另外,还有许多讨论站点上发布了许多 Java 工具和应用程序。最常见的有:

Gamelan,展示了大量 applet 和工具,
Digital Focus,由 DigitalFocus 维护的一系列问题、答案、工具和服务,另外还有
TechTips, 有关 Java 编程问题的一系列有用问题和答案。
有关各种开发工具的产品信息,请参阅:

Symantec Café
Microsoft J++
Borland JBuilder
Roguewave注释:s Jfactory
Sun注释:s Java Workshop
Penumbra注释: Mojo Visual Java Development Environment


--------------------------------------------------------------------------------

什么是 JavaScript?
JavaScript 是由 Netscape 开发的程序语言,其目的是在 Java 流行之前增强网页的交互性。它最初的名称是 LiveScript,重新命名是为了使它看起来比实际上更接近 Java。JavaScript 是解释型的,而不是编译型的,而且在解释器开始运行之前不检查其代码错误。

JavaScript 的实际目的主要是在网页的表单处理中添加交互性。您可以照常在 HTML 表单中添加域和按钮,但添加了额外的参数,指出单击控件时调用哪些函数。这为您提供了一种方法,可以在将数据发送到真正进行处理的 CGI 服务器之前验证数据。

JavaScript 无法访问网络、您的本地驱动器或 PC 硬件,也无法以 Java 方式创建对象。它确实为您提供了一种方式来创建种类有限的对象,但这些对象无法被扩展或者继承,而且其方法属于外部函数,没有内嵌入对象中。另外,JavaScript 对象没有公用方法和私有数据的概念。

您可以从下面的文章中了解 JavaScript 的详细情况:

Stefan Koch注释:s description


让我们考虑一下如何用 JavaScript 编写长度转换程序。在下面的 HTML 代码中,我们在标题部分编写了一个短的 JavaScript 函数,在码和米之间进行转换。然后,我们将在跟在 s 后面的表单中调用它。
<html>
<head>
<title>JavaScript Demo</title>
<script language="JavaScript">
//当单击“Compute”按钮时调用此函数
//--
function compute(form)
{
//读取输入的值
dist = parseFloat(form.Entryval.value)
if (form.Convert[1].status)    //检查单选按钮
         newdist = dist * 36/39.37
else
         newdist = dist * 39.37/36
form.Results.value = newdist  //显示结果
}
</script>
</head>



网页的主要内容是一个普通的 HTML 表单,它提供一个文本输入域、两个单选按钮、一个结果文本域以及一个“Compute”按钮。但是,请注意“Compute”按钮具有附加属性

        onClick="compute(this.form)"


单击按钮时,这会通知 web 浏览器调用 JavaScript 的函数 compute。您会看到网页脚本的如下结果。

<body>
<FORM>
<hr>
<h4>Convert between yards and meters</h4>
Enter distance below:<br>
<INPUT TYPE="text" SIZE=20 NAME="Entryval"><br>
<INPUT TYPE="radio" NAME="Convert"
        VALUE="Meters" CHECKED>to Meters<br>
<INPUT TYPE="radio" NAME="Convert"
        VALUE="Yards">to Yards<br>
<INPUT TYPE="text" SIZE=20 VALUE="" NAME="Results"><br>
<INPUT TYPE="button" VALUE="Compute"
        onClick="compute(this.form)"><br>
<hr>
</FORM>
</body>
</html>










--------------------------------------------------------------------------------

Convert between yards and meters

Enter distance below:

to Meters
to Yards





--------------------------------------------------------------------------------






--------------------------------------------------------------------------------
作者简介
James W. Cooper 是 IBM 的 Thomas J. Watson 研究中心的研究员,在该领域出版了 10 本著作。他是 Object Oriented Programming in Visual Basic 4.0(由 Pinnacle 出版)一书的作者。他最近的著作是 The Visual Basic Programmer注释:s Guide to Java,由 Amazon books 出版。