「モジュール強度とモジュール結合度」の図解

情報処理技術者試験では、モジュール強度・モジュール結合度は頻出です。
モジュール強度は強ければ強いほど、モジュール結合度は弱ければ弱いほど、プログラム変更の影響範囲を限定できるため、良い設計と言えます。

しかし、モジュール強度やモジュール結合度は参考書では文章のみで解説されることが多く、なかなかイメージできない方も多いのではないのでしょうか。
そこで、モジュール強度とモジュール結合度について、以下に図示してみました。

小売店のシステムを模した例としています。
また、「モジュール」は「mdr」と表記しています。

この図を見れば、モジュール強度が弱い場合やモジュール結合度が強い場合に、プログラム変更の影響範囲が広がりやすくなってしまうことをイメージしやすくなるのではないでしょうか。

・モジュール強度が弱く、プログラム変更の影響範囲が広がる例
 「売上履歴管理機能」に改修が入り、返品についても管理できるようになった。
 モジュール強度が連絡的強度以下の場合、「売上履歴管理機能」の改修が同一モジュール内の別の機能に影響を及ぼす可能性があり、影響調査や修正の工数が増大する。

・モジュール結合度が強いと困る例
 「売上履歴管理mdr」に改修が入り、「在庫管理mdr」とは終了時の挙動が別々となった。
 モジュール結合度が外部結合以下の場合、モジュールの結合方法を変更せざるを得なくなり、影響調査や修正の工数が増大する。

java:javaからのOSコマンド呼び出しと注意点

javaのプログラムからOSのコマンドを実行したい場合は、Runtimeクラスのexecメソッドで実現できます。
 
しかし、OSのコマンドは別プロセスで立ち上がるので注意が必要です。
ProcessクラスのwaitForメソッドでプロセスの終了を待たないと、処理が前後してしまい意図しない挙動となることがあります。
また、destroyメソッドでプロセスを明確に終了させ、資源を回収することも重要です。
 
以下は、プロセスの終了を待たないと意図しない挙動となることを確認するためのテストコードです。
javaのプログラムでは、OSのコマンドを使用して、3秒のスリープ後に hoge.txt を aフォルダ から bフォルダ へ移動させています。
waitForメソッドを使用しなかった場合、javaのプログラムが終了した時点で hoge.txt の bフォルダ への移動が完了していない(javaのプログラムが立ちあげたプロセスが終了していない)ことを確認できます。
逆に、waitForメソッドを使用した場合は、javaのプログラムが終了した時点で hoge.txt の bフォルダ への移動が完了している(javaのプログラムが立ちあげたプロセスが終了している)ことを確認できます。
 

【テストコード】

・RuntimeTest.java

【実行用バッチ】

・RuntimeTest.bat

【「p.waitFor();」と「p.destroy();」をコメントアウトした場合の実行結果】

【「p.waitFor();」と「p.destroy();」を有効にした場合の実行結果】

java:色々なfor文の書き方

新人にfor文を教えるために書いたコードです。
5通りの書き方をしており、全て同じ挙動を示します。
これらの書き方を使い分けることで、様々なループ条件を記述できます。

【サンプルコード】

【実行結果】

java:thisで指定されたメンバ変数が自クラスにない場合、スーパークラスを参照しにいくことの確認

実務を行う中で気になることがあったので、調査しました。
javaでは「thisで指定されたメンバ変数が自クラスにない場合、スーパークラスを参照しにいく」という挙動になると聞いたので試してみたのですが、確かにそうなりました。
試した結果は以下です。

【テストコード】

・Main.java

・ThisClass.java

・SpecializeClass.java

【実行結果】

Windowsへのopensource COBOL環境の構築手順

COBOLの概論のパワポを発表した後、WindowsでCOBOLの練習を行えるように、開発環境の構築手順を作成しました。
opensource COBOL を使用して環境を構築する手順です。

半日~1日を見た方が良い複雑な手順ですが、メインフレームや有償のパッケージソフトを使用せずともCOBOLを動かせるようになるというメリットがあります。

手順はこちらになります。