技術的な違いとアーキテクチャ設計スタイルの観点から、Java と cobol の比較と対比を手伝ってくれる人はいますか
6 に答える
類似点
CobolとJavaは世界を変え、プログラミングの問題を解決しようとしていました。
どちらも最初の誇大宣伝に応えませんでした。
現在、銀行によって使用され、「レガシー」である非常に大規模で肥大化したCobolおよびJavaプログラムがあります...大きすぎて、書き直したり破棄したりするには重要です。
Cobolは、コードに長くて読みやすい名前を含めるというアイデアを紹介しています。Javaは、長くて読みやすい名前を推奨しています。
違い
Cobolは、国防総省のDefense DistinguishedServiceMedalから最高の賞を受賞したアメリカ人のGraceMurrayHopperによって発明されました。
Javaは、カナダの最高の民間人の名誉であるカナダ勲章の役員を受賞したカナダ人のジェームズ・ゴスリングによって発明されました。
3 COBOL規則では、名前の単語を区切るために「-」を使用します。Java規則では、上位/下位のキャメルケースを使用します。
COBOL は、ビジネス アプリケーションを開発するという単純な理由で人気がありました。
構文は非常に明確で人間に似ており、手続き型のスタイルで記述されているため、ビジネス環境の変化への適応がはるかに容易になりました。たとえば、pi の値を変数に代入し、そこからゼロを引く - 実際の COBOL ステートメント/文を示す簡単な例 (最後に COBOL でプログラミングしてから何年も経ちます)
3.14 を VARPI に移動します。 VARPIRESULT を与える VARPI からゼロを減算します。 VARPIRESULT と ZERO が VARPI に等しい場合は、'Ok' を表示します。
覚えていれば、COBOL の文は 30 桁目になければなりません...
その結果、潜在的なビジネス ロジック エラーを簡単に特定できるため、トラブルシューティングが容易になります。それだけでなく、COBOL はメインフレーム システムで実行されたため、ファイルからのデータ転送が PC などの他のシステムよりも何光年も先を行く速度でシフトされ、それが COBOL でのデータ処理のもう 1 つの理由でした。めまぐるしく速かった。
私はメインフレーム (IBM MVS/360) で 2000 年問題に取り組んできましたが、21 世紀の幕開けには信じられないことでした。それはさておき..今日に至るまで、メインフレーム内でのデータ シャッフルの深刻な転送速度と保守の容易さのために、それはまだ使用されています。
まず第一に、Java はそれを実行できるだけでなく、Java にはこれらのメインフレーム (IBM MVS/360、390、AS400) で使用できるポートがありますか?
現在、企業は COBOL をダンプする余裕がありません。なぜなら、ビジネス アプリケーションが常駐する場所であるため、事実上「自殺」しているからです。これが、アップグレード、移行、別の言語への移植に費用がかかりすぎて深刻な問題を引き起こす理由です。今日のビジネス界の頭痛の種...
それだけでなく、Java の OOP スタイルを利用するために、レガシー コードであり、重要なビジネス ロジックを含む可能性のある手続き型コードを書き直さなければならないことを想像してみてください。プレッシャー。
ヘルスケア システム (私は上記のシステムで動作するシステムで働いていました) を想像してみてください。すべての請求処理、請求など (COBOL で記述) を Java に切り替える必要があり、グリッチの可能性は言うまでもありません。 、医療会社自体にはるかに多くの費用がかかる深刻な$$$金額の投資、最終結果は混乱とお金の損失、そして顧客(従業員福利厚生を提供する企業)はより良い会社のために会社を捨てることになります. .
あなたの質問に答えるために、違いを説明したことを願っています-要約すると:
COBOL は次のとおりです。
- 手続き型言語
- シンプルな人間のような構文
- メインフレーム システムで非常に高速
- 構文によりコードの保守が容易
対照的に、
Java は次のとおりです。
- オブジェクト指向
- 構文が複雑になる可能性があります
- コンパイルされたバイトコードを実行および実行するには、Java 仮想マシンが必要です。
お役に立てれば、
違いをリストするよりも、共通点を指摘する方が簡単です。
だからここにリストがあります:
- 両方を使用して、コンピューターに処理を実行させることができます
- どちらもまだ異なる言語(マシンコード、バイトコード)にコンパイルされます
- それだ!
類似点:
- 非常に冗長で、プログラマーではなく、とがった髪のボスを念頭に置いて作成されています。
- どちらも主に退屈なビジネスソフトウェアに使用されます。
- どちらも巨大な遺産を持っており、しばらくの間になるでしょう。
Cobolは純粋な手続き型言語であり、その中で機能することすらありません(私は、90年代にcobolを使用していたので、それ以降変更された可能性があります)。
JavaはOOです(Cobol用のOOバージョンもあると聞きましたが)、ああ...そして構文は異なります。
類似点と相違点の優れたリスト:http ://www.jsrsys.com/jsrsys/s8383sra.htm
それが私たちの仕事です!COBOL:COBOL概念の説明Java:Java / OO同様の概念++:Java / OOが概念に追加するものJavaを始めたとき、私はOO(オブジェクト指向)が優れたプログラミング手法と「同じ」であると考えていました。正式であり、コンパイラーは特定の制限を実施しました。
私はもはやそのようには考えていません。ただし、始めたばかりのときは、特定の「類似した」例が概念を理解するのに役立つと思います。
COBOL:ロードモジュール/プログラムJava:クラス
COBOL:PERFORM Java:メソッド++:FUNCTIONのように、メソッドにパラメーターを渡すことができます。他のプログラム/クラスは、パブリックとして宣言されている場合、異なるクラスのメソッドを呼び出すことができます。public / privateを使用すると、他のクラスがクラス内で表示できる内容を設計者が細かく制御できます。
COBOL:作業用ストレージ、静的にリンクされたサブルーチンJava:インスタンス変数++ :(次を参照)
COBOL:Working Storge、動的にロードされるサブルーチンJava:クラス変数++:Javaは、両方のクラス変数(静的と呼ばれ、COBOLの例の逆)とインスタンス変数(デフォルト)を混在させることができます。クラス変数(静的)はのみ発生しますクラスごとに1回(実際には1つのJVMランタイム環境で)インスタンス変数はクラスの各インスタンスに固有です。これはクラスJsrSysoutの例です。COBOLのバックグラウンドから、重要なデータをSYSOUTに表示してコードをデバッグするのが好きです。データセット。このためのJavaメソッドSystem.out.prinln(...)があります。このメソッドの問題は、必要なデータがJavaコンソールからスクロールアウトすることです。これは、SYSOUTまたはおそらくDISPLAYUPONCONSOLEに相当します。あなたはあなた自身のスタンドアロンマシンを持っていました。私は画面がいっぱいになると停止する表示を簡単に行う方法が必要でした。Javaコンソールは1つしかないため、画面の行数は明らかにクラス変数である必要があります。したがって、すべてのインスタンス(ここにログを記録する各プログラム/クラスには独自のJsrSysoutのインスタンスがあります)は画面の下部で停止します。
同じクラスの複数のインスタンス:1つの(呼び出し側プログラム)クラスは、同じクラスの複数のインスタンスを作成できます。なぜあなたはこれをしたいのですか?COBOLの良い例の1つは、I/Oルーチンです。COBOLでは、アクセスするファイルごとに1つのI/Oルーチンをコーディングする必要があります。1つのランタイム環境で特定のファイルを2回開く場合は、ロジックが同じであっても、異なる名前の異なるI/Oルーチンが必要になります。
Javaを使用すると、特定の論理ファイルタイプに対して1つのクラスだけをコーディングできます。次に、読み取り(または書き込み)するファイルごとに、new演算子を使用してそのクラスの別のインスタンスを作成するだけです。これは、まさにそれを実行するプログラムIbfExtractのコードスニペットです。このプログラムは、私がライン入力用のクラスとライン出力用の別のクラスを作成したという事実を利用しています。これらはJsrLineInおよびJsrLineOutと呼ばれます。
これは、Javaのもう1つの動的機能を示しています。出力が最初に作成されるとき、それはnullポインターの配列であり、ほとんどスペースを取りません。新しいオブジェクトが作成され、そのオブジェクトへのポインタが暗黙的に配列に配置された場合にのみ、オブジェクトのストレージが割り当てられます。そのオブジェクトは、文字列から非常に複雑なクラスまで、何でもかまいません。
COBOL:PICTURE Java:実際に同等のものはありません。したがって、整数入力用のZZZ、ZZZ、...マスクを模倣する方法を発明しました。私は通常、ユーティリティ関数をJsrUtilにグループ化しました。これらは、実際にはどのタイプのオブジェクトにも関連しないメソッドです。これは、このロジックを実装するpadLeftの例です。padLeftもポリモーフィズムの良い例です。COBOLでは、異なるパラメータリストがある場合は、異なるエントリポイントが必要です。Javaでは、パラメータのタイプは定義の一部です。例えば:
COBOL:10進算術Java:ネイティブJavaにはありませんが、IBMはいくつかのBigDecimalクラスを実装しています。これは、アカウンティングタイプのアプリケーションにとってのJavaの主な弱点だと思います。パックされた10進データ型をネイティブ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:入力ストリーム++:祝福と呪いの両方の自動エラー検出。
COBOL:書き込みJava:書き込み(はい、本当に)。
COBOL:CLOSE Java:closeメソッド
COBOL:READ Java:読み取り...
どちらの言語も、「Write Once, Run Anywhere」という考え方をターゲットにしています。ベンダー固有の拡張機能を使用しない場合、Cobol は非常に移植性があります。
Cobol は非常に手続き型言語であり、Java は非常にオブジェクト指向言語です。とは言うものの、Cobol には何十年にもわたってベンダー固有の OO 拡張機能があり、新しい仕様には正式な仕様が含まれています。Java で手続き型のコードを記述することも可能で、単一の main() メソッドから簡単にプログラムを作成できます。
どちらも、比較的使いやすいため、エンタープライズ コンピューティングで広く使用されています。どちらの言語も、C や C++ などの他の一般的な言語と比較して、自分自身を攻撃するのはやや困難です。
最も重要な違いは、Cobol がネイティブの固定小数点演算をサポートしていることです。これは、財務を扱う際に非常に重要です。Java を含むほとんどの言語は、アドオン ライブラリを介してのみこれをサポートします。そのため、固定小数点データを処理するときは何桁も遅くなり、そのライブラリ コードで (潜在的に非常に高価な) エラーが発生しやすくなります。