有谁能帮忙比较和对比Java和Cobol在技术差异以及架构设计风格方面的不同之处?
有谁能帮忙比较和对比Java和Cobol在技术差异以及架构设计风格方面的不同之处?
相似之处
Cobol和Java曾试图改变世界并解决编程问题。
但它们都没有达到最初的炒作效果。
现在有很多庞大而笨重的Cobol和Java程序被银行使用,并成为"遗留代码"...太大且关键,无法重写或丢弃。
Cobol引入了在代码中使用长而易读名称的想法。Java推荐使用长而易读的名称。
不同之处
Cobol由美国人Grace Murray Hopper发明,她获得了国防部最高奖项-国防杰出服务奖章。
Java由加拿大人James Gosling发明,他获得了加拿大最高的文职荣誉-加拿大勋章官员。
3 COBOL约定使用“-”来分隔名称中的单词,Java约定使用大小写驼峰命名法。
COBOL是一种流行的编程语言,用于开发商业应用程序。
由于其语法非常清晰且类似于人类语言,采用过程化风格编写,因此更容易适应业务环境的变化。例如,将pi的值分配给一个变量,然后从中减去零 - 这是一个简单的示例,展示了COBOL语句/句子的实际情况(我已经多年没有编写COBOL代码了)。
MOVE 3.14 INTO VARPI. SUBTRACT ZERO FROM VARPI GIVING VARPIRESULT. IF VARPIRESULT AND ZERO EQUALS VARPI THEN DISPLAY 'Ok'.
如果我没记错的话,COBOL语句必须在第30列...
因此,COBOL更容易进行故障排除,因为任何潜在的业务逻辑错误都可以轻松地定位。此外,由于COBOL运行在主机系统上,因此数据传输速度比其他系统(如PC)快得多,这也是COBOL数据处理极快的另一个原因。
我曾在主机(IBM MVS/360)上处理Y2k问题,这在21世纪初是不可思议的,祈祷我所做的修复措施不会使业务应用程序崩溃...除此之外...至今仍在使用,因为数据在主机内部传输速度非常快,而且易于维护。
对于Java来说,它不仅无法做到这一点,而且是否有IBM MVS/360、390、AS400等主机的Java端口可用?
现在,企业不能放弃COBOL,否则他们将有效地“自杀”,因为他们的业务应用程序就在那里。这也是升级、迁移或转换到其他语言过于昂贵并会在今天的商业世界中引起严重头痛的原因...
此外,想象一下必须重写过程化代码(遗留代码),其中可能包含关键业务逻辑,以利用Java的OOP风格,最终结果将是“失去翻译”,需要大量耐心、压力和压力。
想象一下,一个医疗保健系统(我曾为其中一个工作,它运行在我上面提到的系统上),要放弃所有的索赔处理、计费等(以COBOL编写),转而使用Java,还有潜在的故障和不言而喻的巨额投资,这将使医疗保健公司自身付出更多代价,最终结果将是混乱、损失和客户(提供员工福利的公司)会为了更好的公司而放弃该公司。
因此,回答您的问题,我希望我已经说明了差异 - 总结如下:
COBOL是:
相比之下,
Java是:
希望这可以帮到您,
更容易指出它们的共同点,而不是列举它们的不同之处。
因此,这里是列表:
相似之处:
Cobol是一种纯过程式语言,甚至连函数也不支持(我在90年代使用Cobol时,可能已经发生了变化)。 Java是面向对象的(虽然我听说Cobol也有面向对象的版本),哦...而且语法不同。
这就是我们所做的! COBOL:COBOL概念描述 Java:Java/OO类似概念 ++:Java/OO添加到概念中的内容 当我开始学习Java时,我曾经认为OO(面向对象)只是好的编程实践,除了更正式外,编译器还强制执行某些限制。
我不再这样想了。然而,当你刚开始学习时,我认为某些“类似于”示例将帮助你理解这些概念。
COBOL:加载模块/程序 Java:类
COBOL:PERFORM Java:方法 ++:可以向方法传递参数,更像FUNCTION 如果声明为public,则其他程序/类可以调用不同类中的方法。 public/private使设计者可以控制其他类在类内部看到什么。
COBOL:工作存储,静态链接子例程 Java:实例变量 ++:(见下文)
COBOL:工作存储器,动态加载子例程 Java:类变量 ++:Java可以混合使用类变量(称为静态变量,正好与我们COBOL示例相反)和实例变量(默认)。 类变量(静态变量)仅在每个类中出现一次(实际上在一个JVM运行时环境中)。 实例变量对于类的每个实例都是唯一的。 这里有一个来自JsrSysout类的例子。根据我COBOL的背景,我喜欢通过DISPLAY将重要数据输出到SYSOUT数据集来调试我的代码。有一个Java方法可以实现这一点,即System.out.prinln(...)。但是,这种方法的问题在于,你想要的数据会在Java控制台上滚动显示,这相当于SYSOUT或者如果您有自己的独立机器,则相当于DISPLAY UPON CONSOLE。我需要一种方便的方法来停止屏幕已满时的显示。由于只有一个Java控制台,因此屏幕的行数显然需要是一个类变量,因此所有实例(每个记录日志的程序/类都有其自己的JsrSysout实例)都会在屏幕底部停止。COBOL: PICTURE Java: 没有真正的等价物。 因此,我发明了一种方法来模拟整数输入的ZZZ,ZZZ,...掩码。我通常将我的实用程序函数分组在JsrUtil中。这些方法实际上与任何类型的对象都没有关系。以下是实现此逻辑的padLeft的示例。 padLeft也是多态的一个很好的例子。在COBOL中,如果您有不同的参数列表,则需要不同的入口点。在Java中,参数类型是定义的一部分。例如:
COBOL:十进制算术 Java:在本机Java中没有,但IBM已经实现了一些BigDecimal类。 我认为这是Java在会计类型应用程序方面的主要弱点。我希望看到压缩的十进制数据类型作为本机JVM字节架构的一部分。我想这是因为它不在C或C ++中。我只读过BigDecimal类,所以无法真正评论它们的有效性。
COBOL: COPY或INCLUDE
Java: 继承
++:更加强大!
COBOL: ON EXCEPTION Java: try/throw/catch ++:可以限制错误检测的范围(请参见以下内容)
COBOL: OPEN Java: 输入流 ++:自动错误检测,既是福音也是诅咒。
COBOL: WRITE Java: 写入(是的,真的)。
COBOL: CLOSE Java: close方法
COBOL: READ Java: 读取...
两种语言都针对“编写一次,随处运行”的理念。如果避免使用特定于供应商的扩展,Cobol非常可移植。
Cobol非常注重过程式语言,而Java非常注重面向对象的语言。尽管如此,几十年来已经有供应商特定的OO扩展到Cobol,并且新规范包含正式规范。在Java中也可以编写过程式代码,您可以轻松地将一个程序制作成单个main()方法。
两者都广泛用于企业计算,因为它们相对容易使用。与其他常见语言(如C和C ++)相比,这两种语言都不太容易出错。
最显着的区别是Cobol支持本机定点算术。这在处理财务时非常重要。大多数语言,包括Java,在处理定点数据时仅通过附加库进行支持,因此它们在处理定点数据时慢了许多个数量级,并且在该库代码中容易出现(可能非常昂贵的)错误。