オブジェクト指向でなぜつくるのか - 第4章

第4章 OOPは無駄を省いて整理整頓するプログラミング技術 を読んでの所感

 

この章では、OOPのより具体的な仕組みと、構造化プログラミングとの違いを書いています。OOPの「クラス」「ポリモーフィズム」「継承」の三つをさらにわかりやすく理解しやすいように説明をしています。

OOPへの理解が少ない状態だと、「ポリモーフィズム」も「継承」も「クラス」の仕組みの一部のような感じがしますが、そうではないようです。

 

また、よく説明されるのは「クラス」ではなく「カプセル化」らしく、僕も会社の元先輩からオブジェクト指向の説明を受けた際に、「カプセル化」というキーワードを聞きました。ただ、この本では、「カプセル化」の仕組みを提供する「クラス」の役割はそれだけではないので、今回は「クラス」と説明すると書いてありました。

 

少し脱線しましが、「カプセル化」とは、内部のふるまいを気にせずにメソッド名を書けば処理してくれることという認識だったのですが、少し調べたらフィールドとメソッドが呼び出し側から影響を受けないように保護することらしいです。

ずっとずれた認識でいました。本を読むことで、自分が何となくで認識していた知識がどんどん修正されていくのが良いですね

 

本書の感想に戻ります。

「クラス」には様々な仕組みがあり、端的に言うと「まとめて、隠して、たくさん作る」仕組みと説明しています。

確かに、フィールドとメソッドを一つのクラスに「まとめる」。フィールドとメソッドを外部から「隠す」。(これがカプセル化ですね)クラスからインスタンスを「たくさん作る」と説明できますね。クラスってなかなか説明しにくい概念というか仕組みのような気がするんですけど、こんな風に端的に説明できるのはすごいですね。さらに、少しOOPについて勉強している人はあ~と納得できる説明だと思います。

 

ポリモーフィズムと継承についても一言で説明していますが、割愛します。

 

C#を触っていると特に疑問を持たずに使用する、パッケージや例外処理。あと、メモリ管理を意識しなくてよいガベージコレクション。これらの機能もOOPで構造化プログラミングでの課題を解決するための進化した仕組みということを初めて知りました。

 

OOPを知るだけで、品質や保守性を高めるコードをかければいいのですが、なかなかそうはいきません。実際に今回かかわったプロジェクトからOOPを意識したコーディングを行っているんですが、慣れないうちは全然OOPの仕組みを利用できていなかったと思います。先輩にコードレビューをしてもらい、メソッドをModelに書いてもいいんだ!(今回はASP.net Core MVCを使用)と気づいてから、だいぶOOPぶったコーディングをできているような気がします。ただ、まだポリモーフィズムや例外、クラスの役割の単一化?とかがうまくできていません。早く仕組みを利用できるようになりたいと思っていますが、自分は一回で理解できるタイプではなく、5回10回試してみないと自然と使えるようにならないので、何度も何度もコードを書き直して、クラスの設計を考えて練習しています。