オブジェクト指向の場合、隠蔽化され、変更が局所化されるというのがメリットになっています。
でも、このことは、必ずしもすべて、局所的に直せばいいって言うことではないんです。なんで、逆に、局所的に直せない場合に、どのプログラムを直したらいいのか見えにくくなることがあります。
その例として、「倉庫が1個から2個に増えた場合の例」を説明します
(つまり、前のブログで、「引数自体ないしは、引数のデータ構造、さらに入出力テーブルの構造がずれると、思わぬところで、派生効果が現れてしまうのに、メソッドが隠蔽されていて、それに気づかず。。。」と書いた例です)
倉庫が1箇所から2箇所に増えたとします。
そうすると、在庫には、どこの倉庫に何個あるかという、倉庫の情報が必要になります。
さて、オブジェクト指向の場合、在庫というクラスが切ってあれば、ここに倉庫情報(倉庫番号)を追加すればよい。簡単でしょ!
。。。って言うわけないですよね。
たしかに、倉庫情報を追加するだけで、プログラムは動いちゃいます
(だから問題なんですけど)。
でも、倉庫が追加されるということは、入庫のときに、どこの倉庫に入れるか、出庫のときに、どこの倉庫から出すかという入出庫に加え、
2つの倉庫を足したら、受注を受けられるけど、1個の倉庫だけではだめ
というケースをどうするかという問題が起こります。
この場合、
1.一方にある倉庫の在庫を、もう一方の倉庫へ送る(倉庫間移動っていうと思います)
2.送られたほうの倉庫から出庫する
という手法をとると思います。つまり、倉庫間移動というメソッドも作る必要があります。
さてこのとき、DFDが書かれていれば、在庫テーブルというデータストアにアクセスしている「プロセスが」図からわかるので、そのプロセスを担当しているSE,プログラマに確認をとれば、OKです。
さらに、倉庫間移動というメソッドを追加すればOKです。
しかし、オブジェクト指向だと、どのメソッドがどのテーブルのどのデータをアクセスしているのかのドキュメントは、ないことが多いです(JavaDocに、どのテーブルをアクセスしてるよー!まで、書いてないっつーか、JavaDocのコメントの内容説明って、人によってさまざま、つーか、ちゃんと書こう!)
なんで、クラスの担当者に、在庫の修正内容を説明して、理解してもらって、その上で、自分がクラスのどこを直すか、判断してもらわないといけないです。
さらに、「倉庫間移動」っていうのは、どこのクラスに入れるべき?というので、悩んでしまうんです。
なんていうことで、DFDの場合、使っているデータとプロセスが直接結びつくので、影響するプロセスが見えやすいんだけど、オブジェクト指向の場合、本気で隠されちゃうと、関連するクラス程度しかわからず、そのクラス担当者に説明しても、自分が、その変更で、どれだけ影響するか?ということが見えないと、修正漏れになったりします。
さらに、メソッドを追加する場合、どのクラスに入れるべきかというのを、テキトーにやられちゃうと、あとで、困ったりします。
つまり、オブジェクト指向の場合、クラスというものが、ワンクッション入るので、本気で隠されてしまうと、そのクラスのどこまで影響が及ぶのかわかんなかったり、下手にクラスを切られてしまうと、かえって、保守に大変だったり、理解に苦しんだり、話を複雑にしちゃったりすることがあります。
まあ、大きいプログラムでなければ、問題ないんだけどね。