「printf(“Hello World\n”);」を設計図で考える➁

こちらは前回紹介した、「printf(“Hello World\n”);」を設計図で考える①の続きになります。前回は関数と関数の呼び出し関係を設計図で表現しました。

今回は、関数と並んで重要な変数を設計図で表現します。

 

 

このプログラムをモジュール構造図で表すと次の通りになります。

numと名前が書かれた六角形は、変数を表します。mainからnumへの矢印は変数アクセスを表します。
おおよそ理解できると思うのですが、次の2つの疑問を持った方がいらっしゃるのではないでしょうか。

(1)変数アクセスは変数への書き込み(write)か読み込み(read)か区別できないのか?
(2)なぜ変数iは六角形で表さないのか?

実際にモジュール構造図を紹介するとよく出る質問です。1つずつお答えします。
(1)ですが、残念ながら正規の表記法では区別できません。あくまでも、main関数がnum変数にアクセスしている、としか分かりません。しかし、read/writeは重要な情報ですので、設計図にアレンジをかけて

上図の様に、r/wを添える、色で区別する、などアレンジすることがあります。前記事のカップル同様、あまり設計図に細かな情報を付与すると読みにくくなるため、ケースバイケースで工夫して下さい。

(2)ですが、変数iの定義位置を見て下さい。main関数の中ですね。一方、変数numの定義位置を見て下さい。main関数を含む特定の関数の中ではなく外ですね。そうです。六角形で書く変数は関数の外で定義しているものだけです。そのため、変数iの六角形は無いのです。

モジュール構造図には他にも色んな表記法がありますが、最低限しておいて欲しいものは「関数」「ライブラリ」「カップル」「変数」「関数呼び出し/変数アクセス」です。まずはこの5つを正しく使える様にしましょう。

 

今回は初心者ソースコードをモジュール構造図にしてみました。今後はもう少し複雑なソースコードでモジュール構造図を作るとどうなるか紹介したいと思います。