[C/C++]クラスを使う意味

妹「メインからループ文が抜けてすっきりしたねっでも、コード量は増えてるんじゃないの?なんでクラスを使うの?」

兄「クラスを使うと大きなコードになればなるほどコード量が減るし見やすくなるよ。後はスコープの問題で書きやすくなる」

妹「スコープ?」

兄「合計結果がおかしい場合、影響しているのはvecSumだけだからメインを整えた後はそこを集中してチェックできるよ。デバッグがしやすくなるし、複数人でソフトを作成する場合にやりやすくなる」

妹「複数人でって……例えば?」

兄「例えば謎なデータを機械から通信して値がきてるとして、それをコンソールに表示しているプログラムがあったとする」

妹「うん」

兄「それを1時間単位で合計して表示してね、と言われたら。そのデータを機械から通信している所も見る必要が出てくるかもしれないよね」

妹「よくわからない」

兄「実行するとデバイスが見つかりません!と実行エラーになったとする。どうするの?」

妹「デバイス見つからないってエラーが出るんだけどって言うしかないよね」

兄「合計するだけのプログラムなのに、なんでできないの!じゃあ俺が作るからいいよ!と、プログラムが知っている人が奇妙なデバイスに接続して作り始める。そうすると、妹は何も仕事ができず、その人が仕事をする事になって業務のバランスが偏るよね」

妹「大変だねっ」

兄「ところが、妹へ飛んできた指示が、『Addで値を格納してCalcで合計するクラスを作ってね』だったら単体試験までを妹が手早くできるよね。」

妹「変な機械の事を考えなくてよくなったね!」

兄「単体試験も楽だし、その人に作成後のモジュールを渡すと、組み込んでおしまいになる。こういう手分けしたプログラミングの時にはクラスが便利だよ」

妹「でも、それは関数でもいいんじゃないの?」

兄「関数でもいいよ。でもクラス分けする事で作業がやりやすくなる」

妹「ふむ?」

兄「計算する関数は既にある。でも、その関数の引数は謎な構造体で、十個くらい値を入れてセットしたら計算します。こういうのはよくある事なんだけど、クラス化する事でインターフェースを合わせて継承すればすぐにモジュールが作れるよね」

妹「どういう事?」

兄「こういうのがあったとする。これでnazoresultの合計値を返す関数を作成して、と言われる。でも、nazoResultからは何も返ってこない。入力パラメータが違うのかな、と妹は試験段階で困ってしまう事になる」

妹「nazoFunc作った人に、nazoFuncの関数仕様書を貰うか、nazoFuncをデバッグしないとダメだね。インプットがあってるのかどうかも分からないし……」

兄「問い合わせたら、謎な人は機械の入力を担当している人で、機械変更の修正を試験中。現在このモジュールはビルドできないそうだよ」

妹「何それ!謎な人が終わるまで私は確認できないじゃない!」

兄「じゃあ、これならどう?」

兄「妹に与えられた仕事は、nazoクラスのリザルトを足すだけ。確認もnazoClassの合計が確認できればいいから、適当にresultの値を入れて合計できれば単体試験完了になる。ビルドができるのはnazoClassが完成した後だけど、そこは担当じゃないから、nazoImoを渡して担当の仕事が終わりになる。インターフェースとしてnazoClassの単T納車は、resultに値を入れれば計算してくれるんだな、と言うのが解るよね」

妹「これを渡してnazoClassで機械制御の方はお任せできるね!私の仕事合計だけだし!」

兄「うん、妹の計算が高度計算を必要とする計算式だったり妹の結果を使って高度計算が必要になるかもしれない。こうクラス化する事で、『関数エラーでるようになったよ!』『ああ、strInputとresultが変ったからね』みたいなやり取りが減るようになるよ」