- PR -

COBOLとJAVAの決定的違いについて

投稿者投稿内容
かけだし
会議室デビュー日: 2002/02/14
投稿数: 4
投稿日時: 2002-02-14 12:12
初歩的な質問で恐縮ですが・・、行き詰まっていることがありご教授いただきたく存じます。
 私の会社はCOBOLを中心とした汎用機プログラム製造に関わってきたのですが、時流にのりJAVA設計者を増やそうと務めています。
 よく『JAVAは再利用性が高いオブジェクト指向言語だ』と定義されますが、COBOLでもサブルーチン化をしてある種の再利用,生産性向上に努めてきたつもりです。
JAVAの初歩的な研修を受けても、今ひとつその決定的な違い・メリットを見出せず苦慮しています。「親しみ深いCOBOLのほうが良い」と後ろ向き?な意見が社内をしめつつあります。
■COBOLだとここに限界があり、JAVAだとこのように解決できる!■
といった事が明示的に証明することは可能でしょうか?もし、ご助言または、書籍やサイト等をご案内いただけると大変助かります。
いろんなサイトを探してみたつもりですが活路を見出せていません・・。ぜひご教授ください。
よろしくお願いします。
hatena
会議室デビュー日: 2002/02/14
投稿数: 14
投稿日時: 2002-02-14 13:18
引用:

 『JAVAは再利用性が高いオブジェクト指向言語だ』


これは、宣伝文句です。
正確には、

  • JAVAはオブジェクト指向でプログラミングする事ができる。
  • オブジェクト指向は、再利用性を高くすることができる。

でも、否定してるわけではありません。
オブジェクト指向を意識して、再利用(フレームワーク,コンポーネント)を考慮する必要があります。

まず、オブジェクト指向の学習を進めます。
参考書籍
Booch法:オブジェクト指向分析と設計

参考URL
http://www.sra.co.jp/people/aoki/IntroductionToOOAOOD/index.htm

書籍は、amazonで検索すれば、いいと思う。
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-02-14 14:01
>明示的に証明することは可能でしょうか?

対象となるプログラムを限定すればある程度可能でしょう。
携帯電話にCOBOLプログラムは入らないでしょうから。

ただ、言語仕様だけを取り上げて「できる」「できない」というのは不毛のような気がします。
コンピュータ言語なら、拡張ライブラリを使えば大抵のことはできるからです。
(本物のプログラマはFortranしか使わない、という話をご存知ですか?
http://www.genpaku.org/realprogrammerj.html)

言語の特性による再利用性というのを強調したい気持ちはわかりますが、現実に再利用できるのは個々の案件のコンピュータプログラムの結果よりも、会社に蓄積できる設計技術やノウハウだと思います。その点を考えると、オブジェクト指向設計から実装に至るところが、同じオブジェクトという考えで一貫しているのいうのはJavaのポイントだと思います。でも、これでは説得力はないですね。

思い付いたままでJavaの優位点をあげてみます。
・統合開発環境が充実している
・Webサーバベースのシステムを作るのに向いている
・安いPCから高機能ワークステーションまで同じコードが動作する
・若い人材の多くは学校でCOBOLよりJavaを学習している
・Javaの仕事が右肩上がりで増えつつある(ホント?)


サイト・書籍については、ちょっと探してみたら次のようなものがありました。

COBOLコンソーシアム(http://www.cobol.gr.jp/):
そこの記事に「COBOLの普及と他の言語との比較」というのがありました。

Java for Cobol Programmers:
http://www.amazon.co.jp/exec/obidos/ASIN/1886801843/249-7912710-8114724
かけだし
会議室デビュー日: 2002/02/14
投稿数: 4
投稿日時: 2002-02-14 14:38
hatenaさん、mikiさん

早速のアドバイス、有難うございます。※一部ご発言を引用させてください。

>まず、オブジェクト指向の学習を進めます。
ご助言の通りです・・・。一応、「オブジェクト指向入門」系の書籍は数冊読んだのですが、頭が固くなっているせいか、本質を理解できていないのが現状だと思います。もう少し頑張ります。

>>明示的に証明することは可能でしょうか?
>対象となるプログラムを限定すればある程度可能でしょう。

扱っている業務(プログラム)はいわゆる「顧客管理」「申込受付」「料金計算」「請求書作成」のような基幹系業務です。これまではホストで動作させていいたようなものです。
・・・が、この分野もJAVAがずいぶん導入されているようですね。

>本物のプログラマはFortranしか使わない、という話をご存知ですか?
恐縮です。知りませんでした・・・。

>現実に再利用できるのは個々の案件のコンピュータプログラムの結果よりも、会社に蓄積できる設計技術やノウハウだと思います。
そうですよね。一足飛びに再利用で生産性が上がる、っていうのはちょっと短絡的でした。

>Java for Cobol Programmers
有難うございます。早速購入し拝見しています。



miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-02-14 16:38
引用:

かけだしさんの書き込み (2002-02-14 14:38) より:

>>明示的に証明することは可能でしょうか?
>対象となるプログラムを限定すればある程度可能でしょう。

扱っている業務(プログラム)はいわゆる「顧客管理」「申込受付」「料金計算」「請求書作成」のような基幹系業務です。これまではホストで動作させていいたようなものです。
・・・が、この分野もJAVAがずいぶん導入されているようですね。



それならば、Java言語とCOBOL言語を比較するのではなくて、J2EE(Java2 Enterprise Edition)というフレームワークを検討されるとよいと思います。裸のJava言語には高度なトランザクション操作などの基幹系のAPIはついていませんので、追加のライブラリが必要になります。そのような基幹系を対象としたJavaの体系がJ2EEです。

J2EEの一部として、EJB(Enterprise JavaBeans)というコンポーネントがあって、特定のアプリケーションサーバに依存しない形で「顧客管理」「申込受付」「料金計算」「請求書作成」というような単位のEJBを作ることが可能です。Javaの移植性の高さやオブジェクト指向言語としての素性の良さは、サーバサイドで花開いています。

御参考まで。

<JDBCはJ2SEに含まれているので文面を一部修正しました。>

[ メッセージ編集済み 編集者: miki 編集日時 2002-02-14 16:49 ]
じん君
会議室デビュー日: 2001/12/25
投稿数: 9
投稿日時: 2002-02-14 23:46
私もホスト系からオープン系に移り、同じような疑問をもちました。おそらくオブジェクト指向を理解できずにJavaを使用してもプロセス思考的な設計になり、単にJavaを使用しただけになると思います。Javaはオブジェクト指向で開発する道具であり、問題はそれを有効に使いこなせるかどうかです。

> よく『JAVAは再利用性が高いオブジェクト指向言語だ』と定義されますが、COBOL>でもサブルーチン化をしてある種の再利用,生産性向上に努めてきたつもりです。
プロセス思考は「動詞的」、オブジェクト指向は「名詞的」といわれますが、サブルーチンはまさしく「〜する」ですね。また、オブジェクト指向でいう再利用は継承ができることだと思われますが、適切に説明できないのですいません。

でも、あせらずに前向きに接していればなんとなくわかってくると思います。私はそうでした。ちなみにJavaベースではありませんが、DDJ誌で連載されていたものをハード本にした「オブジェクト指向開発講座」かな?という書籍を私は読んでなんとなく理解しました。絶版かもしれませんが・・・。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-02-15 09:26
個人的な、実質を伴っているかどうかわからない意見ですが。

COBOL でも、長年の知識の蓄積と、その再利用の手順が確立され、車輪の再発明がないように管理がゆきとどいているならば、特に Java にしないとだめということもないと思います。

「オブジェクト指向」というのは、「そういう蓄積されたノウハウがなくても、自然に再利用するという方向に向く考え方」だと思っています。

「COBOLとかさー、FORTRANとかさー、Cとかってさー、どうも流用しにくいよねー」という一般的な感想から、「じゃぁ流用しやすい言語枠組を…」というソリューションなので、「いーや、COBOLでもちゃんと再利用できる方法をうちはもってますからだいじょうぶ」といえるのならばそれもアリじゃないでしょうか。

VBがそうであったように、素人でも扱いやすい枠組があれば、使える人が増える→人件費安くなるじゃん、という話でもあるのではないんでしょうかねぇ。実際、Java の素人さんでも1カ月あれば簡単な Web アプリはつくれるようになりますから。

まぁ、御社で行なわれている「再利用性の向上」が、OO 的思考を採り入れることで改良されるかもしれませんよ?

# COBOL でだって OOP って…う〜ん、ちょっとネイティブにはむずかしいかな…。
# とはいえ、C で OOP は十分可能ですし…(面倒だけど)
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2002-02-15 09:51
OOであることのメリットは置いておくことにして、Javaであることの有利な点をあげます。

1.分散環境が作りやすい
2.開発環境を選ばない

1.は最近流行っているJ2EEなどがいい例だろうと思います。

システムを考えたときにフロントエンドとバックエンドの処理を分ける必要がある、
さらにバックエンドはレガシーシステムをそのまま使いたい、
また、フロントの処理量はとてつもなく多い、
というような案件ですとか、そもそもWebベースのシステムを作りたいといった場合、
フロントにはJSP/Servletを採用し、
フロントとレガシーはMQ(メッセージキューイング)でつなぎ、
処理量によってはフロントは二重化三重化する、という方針をたてられます。

ここで、Javaを利用することを考えれば、
フロントの実装も、ミドルのMQも、ほとんどJavaで完結しますし、
すでにできたサードパーティ製のものがものがそのまま使えます。
また、フロントの二重化なども現行のサーブレットコンテナはたいていサポートしていますので、
開発者のレベルで開発する手間はありません。

もしも、バックエンドもスクラッチから作るとなればEJBなどで
そちらも分散環境は作れるでしょう。

私はCOBOLを知らないのですが、COBOLやCやVBで上のような案件をこなすとなると、
ネックになるポイントがいくつも出てきて、工数が膨大になるのではないかと
思います。

2.はWrite Once, Run Anywhereですね。

Winodws95/98/NTのJDKで開発し、コンパイルしたClassを
WindowsNTでサーブレットから呼び出し、最終的にはメインフレームで稼動、
ということを経験しました。
どんなものでも必ず動くということはないでしょうけれど、
COBOLやCのように、最終的には本番環境とまったく同じ構成のマシンで
コンパイル・リンクを行わなければいけない、という制約はなくなっています。

また、当然のようにサーバのプラットフォームが変わるときにもポーティングしやすい
わけです。


どなたも指摘されているように、Javaだからできることできないこと、というのは
基本的にはないように思います。業務系のシステムならなおさらそうです。
ただし、工数は大きく変動するでしょう。
特に、マルチスレッドサーバやクラスタリング環境ですと、
誰が書いても注意点は同じものをあちこちで開発する手間がなくなる分、
Javaは有利だと思います。

スキルアップ/キャリアアップ(JOB@IT)