![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
今までIBMホスト畑で働いていたので、使用できる言語は
COBOLやPL/Iだけでしたが、今後の仕事の展開も考え
Javaを習得したいと思っています。
とりあえずJava言語の入門書を終えたので、
次は、以前新人のCOBOL研修用に作成した仕様書を
Javaで書きかえてみようと思いたったのですが・・・
できませんでした。。。
COBOLは、MAINルーチンをプログラムの主とし
個々の機能(FILEのREAD処理など)をそれぞれの
SUBルーチンで記述するといった構造的な作りになっています。
これをJavaにすると「FileのREAD処理」を1つのクラスとして考え、
「MAINルーチン的」な実行クラスから
「FileのREAD処理」クラスを呼ぶ(継承する)のか?
オブジェクト指向とは、もっと別のことではないか?
といったように、全然ちんぷんかんぷんな状況です。
みなさん、Javaでプログラムを記述するときは
どういったアルゴリズムを考えながら記述しているのでしょうか?
是非ともご教授ください。
また、COBOLには、誰がソースをみてもわかりやすいように
記述するなどの暗黙的な決まり(ネストは3回程度など)があるのですが、
Javaにもあるのでしょうか?
No.3ベストアンサー
- 回答日時:
COBOLの事はよく知らないので、自信なしとします。
「手続き型言語一般」と「オブジェクト指向言語であるJava」の対比と考えて話します。
すでにCOBOLで書いたプログラムをJavaに書き換えるという場合、
「オブジェクト指向」は考える必要がない・考えてしまうとできないと思います。
その場合、クラスはアプリケーション全体でひとつだけにして、
それぞれのサブルーチンをメソッド(staticメソッドで良い)にするといいでしょう。
オブジェクトの観点からは、上記のような書き方は「とんでもない」のですが、
移植の場合仕方ない方法であると思います。
お気付きの通り、「クラス」は「メインルーチン」とか
「READ処理」とかいったものではありません。
データと、それに付随する処理のかたまりです。
「このアプリケーションでは、どんなデータを扱うのか」
をまず考え、それらに対してクラスを設計していきます。
Javaなど、オブジェクト指向言語でプログラムを書くときには、
アルゴリズムのことは、考えません。
「どんなデータがあるか」「それに付随する処理は何か」をまず考えます。
実装段階でやっとアルゴリズムのことを考えます。
「オブジェクト指向」と「手続き型」では、得意とする粒度がちがうのです。
オブジェクト指向は大規模なシステムを組むのに向き、
手続き型は、行う作業そのものを考えます。
「オブジェクト指向」の根底には「擬人化」があると考えるとわかりやすいと思います。
ある処理を、仮に人間の組織が行うとしたら…と考えて、
「この情報はあの部署にある。処理するにはあの部署と
あの部署の強力を得て、
こういう作業をすればいいな…」
のように考えます。そして「部署」を「クラス」に置き換えます。
COBOL用の仕様書はオブジェクト指向プログラムにはならないと思います。
最初の発想が違います。
その際、手続き的な処理をそのままJavaに置き換えるほかありません。
Javaのコード規約としては、
Java2SDKドキュメントから辿れる
「Java プログラミング言語に関するコード規約」
というものがあります。
他にもいくつか、ローカルのコード規約はあります。
参考URL:http://java.sun.com/docs/codeconv/index.html
>その場合、クラスはアプリケーション全体でひとつだけにして、
>それぞれのサブルーチンをメソッド(staticメソッドで良い)にするといいでしょう。
誠にその通りですね。目からうろこ状態です。
ありがとうございます。
一通り入門書を勉強したら、いろいろ機能を使わなきゃ!
といった観念になっていました。
しかし「COBOL用の仕様書」が「オブジェクト指向」の
プログラムにならないのは、いただけないですね。
ホストのOSに「Z/OS」なるものがあります。
これはJAVAの使用が可能だそうです。
となると、今までCOBOLで作成していたプログラムを
JAVAに変えるといった仕事が発生するかもしれません。
IMS/SAILに変わると言われる、
NeFIS(金融統合パッケージ)も出たことだし。。。
No.2
- 回答日時:
何十年も前のCOBOLしか知らないもので、情報技術受験のコボルの本などではあまり変ってないように見うけましたが、ACCEPTとDISPLAYしかなかったCOBOLは今は画面関係はどうなってますか。
ウィンドウズではホンとに多彩なことが出来ます。
私見では、JAVAなどは、GUI(画面関係、コントロールなど。ユーザーのマウスなどの反応で流れる処理が変る)と通信が前面にでて、バッチ処理の影が解説書上では薄い。
いままでバッチ処理を中心にやってきませんでしたか。
このリアルタイム処理的なGUIを処理することを考えると
どうしてもオブジェクト指向的なプログラムのメリットを
利用せざるを得なかったと思います。これが何のことを言っているのか、納得出来れば、JAVAなどの抵抗感が消えるかも知れないと思ってます。
数十のRESERVEDで済んでいたCOBOLと、処理ごとにクラスを調べないといけないJAVAでは、後退した感をもつと思いますが、それだけプログラムを細切れにして使えるように
なっていると思えばよいのかも。
ウィンドウズ時代になって、何しろ処理することが複雑になって、昔では夢のようなこ(一例で色が付くとか絵が動く)とが実現しているのですから。コボル懐かしやを乗りきってください。
No.1
- 回答日時:
オブジェクト指向の設計方法としてはUMLが世界的に広まっています。
また、Javaの場合はクラスの仕組みなどを一定のパターンとしてまとめたデザインパターンというものがあります。
「UML」と「デザインパターン」というキーワードで検索すれば多くの情報が得られると思います。
参考書も沢山出てます。
学習に役立ちそうなサイトです。
http://www.atmarkit.co.jp/fjava/#0
>また、COBOLには、誰がソースをみてもわかりやすいように
>記述するなどの暗黙的な決まり(ネストは3回程度など)があるのですが、
>Javaにもあるのでしょうか?
COBOLにはデフォルトでそのような暗黙的な決まりがあるのですか?
COBOLは未経験なのですが、今までCやJavaを経験しましたが、開発の現場によって
コーディング規約があり、そこでネストの階層などは決められていました。
特に言語ごとでは決められてはいないと思います。
参考URL:http://www.atmarkit.co.jp/fjava/#0
早速のご回答ありがとうございます。
「UML」「デザインパターン」ともに知りませんでした。勉強してみます。
しかし、覚えること勉強することが多いですね。
皆さんがスラスラコーディングしていると考えると驚嘆に値します。
ちなみに、もちろんCOBOLもプロジェクトにより
ネストの数は変わります。(例が悪かったですね。)
Javaにおいて、『こういうコーディングは分かり難いからやめよう!みんなに笑われるよ。』
といった暗黙的な約束事はあるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング FORTRAN、COBOL、C、Java、C++とか誰が作ったのですか?言語習い使いまた出て、キリが 4 2023/05/06 23:11
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- その他(ブラウザ) python から COBOL を呼び出すことは可能でしょうか。 1 2023/04/21 21:03
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
doGetとdoPostの違い
-
Eclipseの終了処理について
-
重たい処理のタイムアウト強制終了
-
WPF C#でF10のイベント取得方法...
-
Javaでのデバッグコード削除
-
javaのプログラムが止まる
-
ローカル変数にアクセスする複...
-
サブルーチンってどういうこと?
-
数値の定数を付ける時
-
複数の条件分岐の仕方
-
Jquery,JSON,Ajax,PHP連携
-
「プログラミング」JAVAの...
-
C#で別スレッドの終了を知りたい
-
データファイルの読み込みについて
-
コンパイラとインタプリタとア...
-
Tomcat高負荷時の設定について
-
無限ループをわざと作って時計...
-
ラジオボタンの選択判定
-
PHPでDB処理中にプログレスバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
doGetとdoPostの違い
-
Javaプログラムからポップアッ...
-
SwingUtilities.invokeLater(ne...
-
Javaでのデバッグコード削除
-
Tomcat高負荷時の設定について
-
JavaScriptからJAVAクラスを呼...
-
データ未入力時のエラー処理が...
-
アコーディオンメニューをアン...
-
ブラウザを閉じた後のサーバ側...
-
[Java] while(true)の意味
-
数値の定数を付ける時
-
Javaアプリケーション実行の返...
-
ラジオボタンの選択判定
-
onBlurとonFocusの処理順序につ...
-
スレッド1とスレッド2を交互に...
-
WPF C#でF10のイベント取得方法...
-
flush()メソッドについて・・・
-
ExcelVBA で文字列の特定の文字...
-
無限ループをわざと作って時計...
おすすめ情報