任何人都可以帮助在技术差异以及架构设计风格方面比较和对比 Java 和 cobol
6 回答
相似之处
Cobol 和 Java 将改变世界并解决编程问题。
两者都没有辜负最初的炒作。
现在有非常大、臃肿的 Cobol 和 Java 程序被银行使用并且是“遗留的”......太大而关键,无法重写或丢弃。
Cobol 引入了在其代码中使用长而易读的名称的想法。Java 建议使用长且易读的名称。
差异
Cobol 是由美国人 Grace Murray Hopper 发明的,他获得了国防部颁发的最高奖项——国防杰出服务奖章。
Java 是由加拿大人 James Gosling 发明的,他获得了加拿大最高的平民荣誉,加拿大勋章。
3 COBOL 约定使用“-”来分隔名称中的单词,Java 约定使用大/小 CamelCase。
COBOL 之所以流行,原因很简单,就是开发业务应用程序。
由于语法是如此清晰和人性化,以程序化风格编写,因此,它使适应业务环境的变化变得更加容易,例如,将 pi 的值分配给变量,然后从中减去零 - 显示实际 COBOL 语句/句子的简单示例(距离我上次在 Cobol 中编程已经有好几年了)
将 3.14 移动到 VARPI。 从 VARPI 中减去零得到 VARPIRESULT。 如果 VARPIRESULT 和零等于 VARPI,则显示“Ok”。
如果我记得的话,COBOL 语句必须在第 30 列...
就是这样,因此更容易排除故障,因为任何潜在的业务逻辑错误都可以很容易地被精确定位。不仅如此,由于 COBOL 在大型机系统上运行,这是有原因的,从文件传输的数据以比其他系统(如 PC)领先数光年的速度转移,这也是在 COBOL 中进行数据处理的另一个原因快得令人眼花缭乱。
我曾在大型机 (IBM MVS/360) 上研究过千年虫问题,在 21 世纪初,这真是令人难以置信,我祈祷我所做的修复不会让业务应用程序崩溃……那是炒作,除此之外……直到今天,由于数据在大型机内的严重传输速度和易于维护性,它仍在使用。
我知道,对于初学者来说,Java 不仅能够做到这一点,Java 是否为这些大型机(IBM MVS/360、390、AS400)提供了可用的端口?
现在,企业不能放弃 COBOL,因为他们实际上是在“自杀”,因为这是他们的业务应用程序所在的地方,这就是升级、迁移、移植到不同语言的成本太高并且会导致严重后果的原因。在当今的商业世界中令人头疼...
不仅如此,想象必须重写遗留代码并且可能包含重要业务逻辑的过程代码,以利用 Java 的 OOP 风格,最终结果将“迷失在翻译中”,需要很大的耐心、压力和压力。
想象一下,一个医疗保健系统(我曾为一个医疗保健系统工作过,它运行在我上面提到的系统上),将把他们所有的索赔处理、计费等(用 COBOL 编写)放弃到 Java 中,以及可能出现的故障,更不用说, 投入大量资金,这将使医疗保健公司本身付出更多代价,最终结果将是混乱和金钱损失,客户(提供员工福利的公司)最终会为了更好的公司而抛弃公司.
所以为了回答你的问题,我希望我已经说明了这些差异 - 总结一下:
COBOL 是:
- 程序语言
- 简单的类似人类的语法
- 在大型机系统上非常快
- 由于语法,易于维护代码
相比之下,
爪哇是:
- 面向对象
- 语法可能会变得复杂
- 需要 Java 虚拟机来运行和执行编译后的字节码。
希望这可以帮助,
更容易指出它们的共同点,而不是列出它们的不同之处。
所以这里是列表:
- 你可以使用两者来让计算机做事
- 它们都被编译成另一种语言(机器码、字节码)
- 这就对了!
相似之处:
- 两者都非常冗长,并且考虑到了尖头发的老板,而不是程序员。
- 两者都主要用于无聊的商业软件。
- 两者都有巨大的遗产,并将持续一段时间。
Cobol 是一种纯过程语言,甚至没有其中的函数(我在 90 年代使用了 cobol,所以它可能已经改变了)。
Java 是面向对象的(虽然我听说 Cobol 也有面向对象的版本),哦……而且语法不同。
优秀的相同点和不同点列表:http: //www.jsrsys.com/jsrsys/s8383sra.htm
这就是我们所做的!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 背景中,我喜欢通过向 SYSOUT 显示重要数据来调试我的代码数据集。有一个 Java 方法,System.out.prinln(...)。这个方法的问题是你想要的数据只是滚动出 Java 控制台,相当于 SYSOUT 或者可能 DISPLAY UPON CONSOLE 如果你有自己的独立机器。我需要一种方法来轻松进行显示,当屏幕满屏时会停止显示。由于只有一个 Java 控制台,屏幕的行数显然需要是一个类变量,因此所有实例(这里记录的每个程序/类都有自己的 JsrSysout 实例)都停在屏幕底部。
同一类的多个实例:一个(调用程序)类可以创建同一类的多个实例。你为什么想做这个?一个很好的 COBOL 示例是 I/O 例程。在 COBOL 中,您需要为要访问的每个文件编写一个 I/O 例程。如果您想在一个运行时环境中打开一个特定文件两次,您将需要一个具有不同名称的不同 I/O 例程,即使逻辑相同。
使用 Java,您可以只为特定的逻辑文件类型编写一个类。然后,对于您希望读取(或写入)的每个文件,您只需使用 new 运算符创建该类的另一个实例。以下是 IbfExtract 程序中的一些代码片段,它们正是这样做的。这个程序利用了这样一个事实,即我为 Line Input 编写了一个类,为 Line Output 编写了另一个类。这些称为 JsrLineIn 和 JsrLineOut。
这说明了 Java 的另一个动态特性。首次创建输出时,它是一个空指针数组,占用的空间很小。只有当一个新对象被创建,并且指向它的指针隐式地放入数组时,才会分配对象的存储空间。该对象可以是任何东西,从字符串到非常复杂的类。
COBOL:图片 Java:没有真正的等价物。因此,我发明了一种方法来模拟 ZZZ、ZZZ、... 整数输入的掩码。我通常在 JsrUtil 中对我的实用程序函数进行分组。这些方法实际上与任何类型的对象都不相关。这是实现此逻辑的 padLeft 示例。padLeft 也是多态性的一个很好的例子。在 COBOL 中,如果您有不同的参数列表,则需要不同的入口点。在 Java 中,参数的类型是定义的一部分。例如:
COBOL:十进制算术 Java:不是在本机 Java 中,但 IBM 已经实现了一些 BigDecimal 类。我认为这是 Java 对于会计类型应用程序的主要弱点。我希望将压缩十进制数据类型视为本机 JVM 字节体系结构的一部分。我猜它不存在,因为它不在 C 或 C++ 中。我只读过 BigDecimal 类,所以我不能真正评论它们的有效性。
COBOL:复制或包含 Java:继承 ++:更强大!在 COBOL 中,如果更改 COPY 或 INCLUDE 成员,则必须重新编译所有使用它的程序。在 Java 中,如果程序 B 继承自程序 A,则程序 A 中的更改会自动由程序 B 继承,而无需重新编译!是的,这确实有效,并且为 Java 应用程序提供了强大的功能。我将它用于我的读取/排序/报告系统。IbfReport 类包含报表程序通用的所有基本逻辑。它的所有方法都有适当的默认值。IbfRP#### 类扩展了 IbfReport,并且仅包含特定报告特有的方法。如果在 IbfReport 中进行了更改,它会在下次运行时反映在 IbfRP#### 程序(类)中。
COBOL:例外 Java:try/throw/catch ++:可以限制错误检测的范围(见下文)
COBOL: OPEN Java: Input Streams ++: 自动错误检测,既是福也是祸。
COBOL:写 Java:写(是的,真的)。
COBOL:关闭 Java:关闭方法
COBOL:阅读 Java:阅读...
两种语言都以“一次编写,随处运行”的理念为目标。如果避免使用特定于供应商的扩展,Cobol 是非常可移植的。
Cobol 在很大程度上是一种过程语言,而 Java 在很大程度上是一种面向对象的语言。也就是说,几十年来,Cobol 一直存在供应商特定的 OO 扩展,并且新规范包含正式规范。也可以用 Java 编写程序代码,您可以轻松地用单个 main() 方法制作程序。
两者都因其相对易用性而广泛用于企业计算。与 C 和 C++ 等其他常用语言相比,这两种语言都有些难以自拔。
最显着的区别是 Cobol 支持原生定点算法。这在处理财务时非常重要。大多数语言(包括 Java)仅通过添加库来支持这一点,因此在处理定点数据时它们的速度要慢许多数量级,并且在该库代码中容易出现(可能非常昂贵)错误。