ネットの海の片隅でスマートフォン用の表示で見るネットの海の片隅で技術ネタの放流、あるいは不法投棄。委譲」オブジェクト指向に関する有名な警句に「継承より委譲」があります。「移譲のほうが良いケースが多いよ」ってことですね。今回は継承の価値を見なおしてみようという話です。次のようなものを作りたいと仮定します。文字列に対して署名を行い、署名された文字列が欲しい。HMAC/SHA256で変換した結果をBase64に変換。引数として「署名対象の文字列」と「署名に使うkey」を渡す。設計1まず、何も考えずに書いてみました。"SignedString"感想:だるい。こんな処理に2行も使わないといけないのかというのが正直な思いでした。*1設計2というわけで、設計を変えてみました。"SignedString"1行でシンプルだし、署名を作っているというのがわかりやすいと思います。継承を使うべきとき/使うべきでないときいわゆる「is-a」関係がキレイに成り立つときは、継承を使っても良いと思います。処理やデータ構造など何かしらの「共通化」のためにはやはり継承を使うべきではないと考えています。今回のケースでは署名された文字列が欲しかったので、継承がキレイに使えたと思っています。返ってくるインスタンスがStringだろうがSignatureだろうが大きな違いはありません。String」だから。いう意味でRubyでは特に理由がない限り、原則としてinstance_of?ではなくis_a?を使うべきです。蛇足Javaとかで使われているextendsというキーワードはわりと「スーパークラスに共通機能を作りこんで、サブクラスで拡張する!」みたいな印象を与えがちな気がするので、isAとかに変えてみると良いかもしれない。*1:署名を行うオブジェクトを引き回す場合はこれで良いと思います。こんなツイートがRTで流れてきた。(3)月別アーカイブはてなブログをはじめよう!s_osaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。