今回はオブジェクト指向が【安全で迷わないプログラムがかける】に繋がるという事を記載します。
まず安全で迷わないプログラムとはどのようなものでしょうか?
それは以下のようなプログラムではないかなと思っています。
- 使い方が分からないクラスがない。
- 不具合を埋め込みにくい。
このブログでは使い方が分からないクラスがないことが実装者にどのようなメリットがあるか記載します。
まず、なぜ使い方が分からないクラスがなくなるのかを説明します。それはクラスごとの責務を明確になることが大きな要因です。
【図:オブジェクト指向で実行】を使用して説明します。
【図:オブジェクト指向で実行】
【図:オブジェクト指向で実行】を見るとクリーニングを行うICleaningCompanyインターフェースを実装したCleaningCompanyA、B、Cというクラスと、 そのクラスのインスタンス生成を行うCleaningCompanyFactoryクラスが存在します。 それぞれのクラスはクラス毎に1つの責務しか持っていないので、使い方に困るケースは減ると思います。責務毎にクラスを分割したらそれでOKかといわれるとまだ不十分です。
クラスのインターフェースになっているメソッドの引数をできるだけ分かりやすくしてあげてください。CleaningCompanyFactoryクラスのCreateメソッドを例にすると、 Createメソッドの引数をint型にすると何を設定するか迷う人が出てくるのではないでしょうか?
Enumにすると、設定できる値の選択肢が限られるため迷いが晴れてくるのでないでしょうか?
CleaningCompanyFactoryクラスを使用するクラスに同じ型のメンバー変数がいればそれを使うことになると思います。 CleaningCompanyFactoryクラスのCreateメソッドが正しく使えたら後は返却されたインスタンスが公開しているCleaningメソッドを呼べばクリーニングは完了です。
クラスの責務が明確になっていれば、クラスの使い方に迷う事がなくなるのが分かると思います。
そのためのテクニックをもう一つ紹介します。それはクラス名やメソッド名を分かり易くする事です。分かりやすい名前とは以下のような事を言います。
- 何をするクラス、メソッドなのか名前から読み取れる。
「そんなの当然じゃない?」という方いると思いますが、これめっちゃ大事です。
なぜならクラス名が分かりやすければ、そのクラスの責務は明確になります。
ぜひ試してください!
クラスの責務とクラスのインターフェースが明確になれば、実装者は自分勝手なコードを書けなくなり、迷わなくなります。(できることが限られてくるから) プログラミングという作業においては、ある程度ルールで縛ってあげる方が実装者にとっては優しいように思います。 今回はこの辺りで終わります。
少し文字が多くなってしまいましたが、言いたかったことは以下の通りです。
- オブジェクト指向をしっかり意識することがクラスの責務、インターフェースが明確になる。
- クラスの責務・インターフェースが明確になれば、実装者は迷わない。
次回は【安全で迷わないプログラム(後編)】です。
それではまた。