Code Complete1人読書会 その6

第6回目。

今回もクラスの話メインです。このあたりはメモりたくなる事がたくさん。

クラスの使用法を理解するためにクラスの実装を調べていることに気付いたら、それはインタフェースに対するプログラミングではない。インタフェースを通じて実装に対するプログラミングをしているのである。
《Code Complete 第2版 上, 2005/03/28, 日経BPソフトプレス, p.172》より

言ってることはよーくわかります。振り返って自分がどうかと言われると、けっこうすぐクラスの実装を調べてしまってる気がする*1。後は単体テストコードを見てみたり*2。ここと直接関係あるわけじゃないんだけど、単体テストコードがきれいに書かれてる場合は大概インタフェースもきれいに出来てるので、やっぱり単体テストコードを早めに書いておいて、インタフェースの使いやすさを実装が完了する前に確かめながら書いてくってのは大事だと思う。
どっかの本に『単体テストは、設計をきれいにするためのツールだ』みたいな事が書いてあったけど、まったくもってその通り。そのあたりを意識しながらやってると、「インタフェースに対するプログラミング」ってのがやりやすくなるんだろうね。



次のとこもなかなかに難しい問題*3

 インターフェイスで公開されているドキュメントだけではクラスの使用法がわからないという場合は、ソースコードを引っ張り出して実装を調べたりしないことが正しい反応である。調べるという姿勢は評価できるが、判断を誤っている。
《Code Complete 第2版 上, 2005/03/28, 日経BPソフトプレス, p.172》より

どっかーん。わからなかったら調べたくなっちゃうのが人情ってもんだと思うんですが、それはダメだとおっしゃるわけですね。じゃーどうすんの?と言うと、こうするらしい。

正しい反応とは、クラスの作者に連絡をとり、「このクラスの使用法がわからない」とはっきり言うことである。
《Code Complete 第2版 上, 2005/03/28, 日経BPソフトプレス, p.172》より

なるほど。調べるよりも聞いたほうが早いじゃろってことね。と思ったアナタ。そういうことではないのです。上記の文は以下のように続いていきます。

そして、そのときのクラスの作者の正しい反応は、あなたの質問に面と向かって答えないことだ。
《Code Complete 第2版 上, 2005/03/28, 日経BPソフトプレス, p.172》より

そう来ましたか。クラスの作者は自分が責められたと思って、へそを曲げるのですか。いじわるするのですね(んなわけない)。クラスの作者はどうすべきかと言うと、

クラスインターフェイスのファイルを調べ、クラスインターフェイスの仕様書を書き直し、新しいファイルをチェックインして、「これでわかるかどうか見てくれないかな」と知らせることである。
《Code Complete 第2版 上, 2005/03/28, 日経BPソフトプレス, p.172》より

ってことのようです。
いやー、おっしゃる通りでございます。。
確かに使用方法がわからないから、作成者に聞いてみることは簡単で手っ取り早いけど、それってあくまでも、質問をした個人にだけ使用方法が伝わるってことだもんね。もし他の担当者が同じようにクラスの使用方法がわからなかった場合、もう一回質問しなきゃいけないんだもんね。そんなことしてるうちにクラスの作成者とやらがプロジェクトを離任して・・みたいな。
そんなことをするんだったら、使用方法がわかるようにきっちりとソースをメンテナンスすべきだもんね。


さて、風呂入るか。

*1:コーディング経験はぶっちゃけ全然ないんだけど、読む機会はそれなりにあるので。

*2:それでもわからなくて、結局実装を見ることが多いですが。。

*3:言ってることを理解するのは簡単だけど、実践するのは難しいという意味で難しいと言ってます。