オブジェクト指向設計実践ガイド 読書会 第二章のメモ
ギーラボで2週間に一回行っている読書会の第二章のまとめです
本書全体ですが具体例がギアがどうとかタイヤの直径を計算するクラスの実装で話が進むので自転車の仕組みに詳しい人のほうが読みやすいと思います。
自転車乗りでrubyに詳しい人なら一人で読みすすめられるんじゃないでしょうか。
第二章 単一責任のクラスを設計する
コードを書く上で重要なことはTrue
・見通しが良い(Transparent)
・合理的(Reasonable)
・利用性が高い(Usable)
・模範的(Exemplary)
自転車のコグ(cog)をギアの歯数(chainring)で割るとratio(車輪が何回転するか)が求められるので
ギアクラスを作ってcogとchainringを与えるとratioが帰ってくるクラスを作れば良いのですがそこにリムの直径とタイヤの厚みが入ってきて・・という話でどう書くかという話が進みます。
・class gear(歯数, コグ, リム, タイヤ)
def ギア比
return 歯数/コグ
def ギアインチ
return ギア比×(リム+ (タイヤ×2))
単純には引数を4つにすればいいんですけど、それだと従来の歯数とコグからratioを求める処理が落ちてしまう。
クラスが単一責任かどうか見極める
見極め方が乗っていました。今後参考にしてみたいと思います。
>クラスの役目を文章にしてみて、「それと」や「または」が入っていたら複数の責任を負っていることが分かる
クラスを分けるべきかどうか
本書ではクラスを分ける手間とコストによって分けてもわけなくても良いんじゃないか、決断を先延ばしでもいいじゃんという話が続きます。
別のクラスの作成
本書では最終的には他の要件がでてきたため、クラスをわけてwheelクラスを作ることになります。
まとめ
変更可能でメンテナンス性の高いオブジェクト指向ソフトウェアへの道のりは単一責任クラスから始まるということで、一つのクラスは一つの責任になるようにしましょうねということで締められていました。
(でも分けるかどうか悩ましい段階なら決断先送りでもいいよねとも)
感想
rubyの知識がないので有識者の方に随分助けられましたが、その一方でrubyの言語仕様に気になってしまいそちらに話が流れてしまったのでもっとちゃんとオブジェクト指向についてあまり考えられなかったなぁと。
クラスへの引数にクラスを渡すって発想はなかったのでこれは活かしていきたいなと思いました。
第三回の登録はこちらから!