質問: new Wood(); //Wood クラスは、Cuttable インタフェースを実装している draw( hanzai ); cut( hanzai ); print( hanzai ); } } ``` 版画を作るという行為をオブジェクトとして捉えているということになると思うのですが、これって「あり」なのでしょうか? 私の感覚としては、Personクラス等の人や機械の版画を作れる存在のクラスがあって、そのクラスのメソッドとしてcreateWoodCutPrintメソッドが定義されるのではないかと考えたのですが、皆様はどう思われますでしょうか? 回答お願いします。
回答: > > 版画を作るという行為をオブジェクトとして捉えている > > これって「あり」なのでしょうか? > > > 「**あり**」です。 > > Personクラス等の人や機械の版画を作れる存在のクラスがあって、 > > そのクラスのメソッドとして > > createWoodCutPrintメソッドが定義されるのではないか > > > 現状の「WoodCutPrint」のクラス名に違和感があるなら、 クラスの名前を「WoodCutPrint**er**」にすればいいだけです。 これで人になりました。でも2字の違いだから、そもそも大差ないです。 (※「print」に印刷物の意味があり、「WoodCutPrint」は「木版画」で名詞なので、 実は行為ではなく物体なのですが、能動的な主体でないことが不満なら、の話です。) でもまあ、ご質問の気持ちはよく分かります。 よくあるオブジェクト指向の説明では、オブジェクトとは 「もの」、「現実にあるもの」と説明されがちですから。 しかし、物体や主体でないとダメ、というルールはありません。 オブジェクトは物理的な物というより、目的の対象となるものです。 設計でよく使われる言葉で言えば、**オブジェクトは責務**です。 でないと、Java(~7)の「Date」クラスなどは意味が分からなくなります。 日付に物理的実体はないですが、目的の達成に必要、つまり責務の対象です。 ソフトを使う人間が納期など、期日の責任を持っているので、 スケジュール管理ソフトも日付が合っている責任を持っています。 この「責任」は、バグや仕様変更など、将来の変化への対応も含みます。 だから、責務なんです。だから、オブジェクトにするんです。 カプセル化して変化に強くする、変更しやすくするんです。 ポリモーフィズムでも複雑なif文を減らす点で同じことです。