モジュール化 |
ごく小機能なものから徹底的に関数を作っていきます。たとえ処理が一行しかなくっても関数を作っていきます。後日何らかの理由で追加になるかもしれませんし。 |
関数を呼び出す |
あとは、部品を組み立てるように関数を呼び出していくだけです。 |
関数のサイズ |
人によっては「何行を超えたら関数にする」とかいう考えの方もいらっしゃいますが、私は「一機能一関数」ですね。プログラム行数のことなど考えたことありません。考えなくても「一機能一関数」を徹底していればそんなに「馬鹿でかい関数」になることはないと思います。 |
関数を作らない理由 |
一つの関数が「馬鹿でかくなる」方の話を聞いて見ると、まずは「ポインタが理解できていない」、「モジュール化のメリットが理解できていない」方が多いような気がします。関数間のデーターのやり取りで悩んでしまうんですね。挙句の果てには「グローバル変数」を使って・・・(最悪ですね、グローバル変数は必要最小限にしましょう)。また、後々の追加・修正・変更といった場面で「いかに楽をするか、効率を上げるか」を考えるとやはりモジュール化は必須だと思います。 グローバル変数を多用してモジュール化を行っても意味がありません。できる限り、個々の関数がいつ何時でも独立して動けるようにしておくべきだと思います。 よくある話ですが、そこそこの規模のシステムになったものに後日手を加えようとしたら「怖くて手が出せない」という場面に遭遇します。そういうシステムってたいてい「どうでもいいようなフラグ変数」まで何故かグローバル変数になっているんですね。そのフラグ変数をいじるとどこまで影響が出るのかわからなくなってしまっているのです。だから「怖くて手が出せない」と・・・。 しっかり考えて「独立して動ける関数」を作りましょう。 |
道具 |
プログラム言語というのは物を作る道具にすぎません。道具の使い方がわからないのに、その道具を使って物を作るというのはありえないと思います。逆に使い方がわかってもどういう場面で使えばいいのか、使い道がわからない、という方もいらっしゃいます。机の上だけの勉強でプログラム言語がわかったつもりになっているからそういうことがおきるのだと思います。実践あるのみです。周りを見渡して「腕のいい職人」を見つけて弟子になりましょう。 |
オブジェクト指向 |
私自身は「オブジェクト指向推進派」です。色々と書籍等で説明をしてありますが、要は「通常人間が活動し、考えている状態」がオブジェクト指向のはずです。あたかも、違う世界を勉強するような感覚にとらわれがちですが考えすぎだと思います。「非オブジェクト指向」の方が人間にとっては「難しい考え方」だと思います。その「難しい考え方(非オブジェクト指向)」に慣れてしまっているから「普通の考え方(オブジェクト指向)」を難しく考えてしまうのだと思います。 |
オブジェクト指向言語 |
「C++だから、JAVAを使っているからオブジェクト指向だ」という話を耳にしますが、「自分自身の考え方がオブジェクト指向になっていなければオブジェクト指向ではない」と思います。C++等は「オブジェクト指向で考えたものをより表現しやすくした道具」であり、自身の考えが「オブジェクト指向でない」のであればC++は「ちょっと便利なC言語」でしかないと思います。 逆もしかりで、「オブジェクト指向」で考えているのであればC言語を使っていてもそれ相応に「オブジェクト」が出来上がっていくはずです。 |
オブジェクト指向に慣れるには |
C言語やBASIC言語が使えるのであれば、とりあえず徹底的に関数を作る事と構造体を使う事に注力してみてはいかがでしょうか。そして「構造体の中へ関数を混ぜることができるんだ・・・」って思うようになってくると、後は自然にカプセル化だとか何だとかというオブジェクト指向用語がちらついてくると思います。 |
初めての言語がオブジェクト指向言語の方は |
C言語とかを知らずにいきなりC++等のオブジェクト指向言語とオブジェクト指向を学ばれる方はもしかするととても幸運な方かもしれません。それは非オブジェクト指向に染まっていないからです。多分、すんなりとオブジェクト指向の考え方に入っていけるでしょうし、逆に非オブジェクト指向の考え方を示されると「何でそんなにややこしく考えるの」って感じると思います。 でも、現場は非オブジェクト指向で進んでいく場合もありますので両刀使いにならないとだめかもしれません。私自身も現場で教える立場になったとき「さて、どちらから教えるのがいいのか」悩んでしまいます。 |
実際の現場では・・・ |
「組み込み系の世界」では何故かオブジェクト指向ははやりませんね。「組み込み系」という言葉を聞くと「小規模なもの」というイメージを持たれる方もいらっしゃるでしょうが(確かにそれもあります)オープン系等に勝るとも劣らない規模の物だって存在します。開発期間が短いのでどうしても「過去の遺産」に頼らざるを得ない場面が多々あります。ゼロから作り直しているような時間はないんですね。そうなると昔「非オブジェクト指向」で作っていたものに手を加えるしかなくなってしまう事もオブジェクト指向がはやらない原因の一つかもしれません。 もう一つには「コンパイラが信用できない」というのもあるようです。 |