×

『オブジェクト指向のこころ ~SOFTWARE PATTERNS SERIES~』 を読んだ

目次 [隠す]

記事画像

概要

本書は、オブジェクト指向パラダイムを有効にするためのデザインパターンの中から、重要度の高いものを厳選し、解説しています。その際、要求における流動的要素や、要求の変化という観点から、さまざまな事例について丁寧な考察を行うことによって、デザインパターンそのものを導き出すというユニークなアプローチを採っています。オブジェクト指向パラダイムのメリットを120% 引き出したいと考えている方に、まず本書をお薦めすることができます。デザインパターンを考察することでこそ、「オブジェクト指向の本当の姿」=「オブジェクト指向のこころ」が理解できるようになるわけです。また、デザインパターンを勉強したことがない方、勉強はしたが日々の仕事に活用できないと悩んでおられる方にもお薦めです。本書で解説されている観点に立つことで、「時間軸を見渡した設計」とも言える考え方を身につけることができ、設計・開発するシステムはひと味もふた味も違ったものとなることでしょう。

感想

概要の解釈

タイトルの「こころ」は、つまり「本質」とか「本来の力」に置き換えるとわかりやすい。
原題は「Design Patterns Explained」(のSecond Edition)なので、主にデザインパターンの説明が大半を占める。
「オブジェクト指向のこころ」と題し、でも原題が「デザインパターンの説明」って結局どういう内容なのか?というとこんな具合だろうか。

  1. システム設計において有効な「デザインパターン」を学ぼう
  2. だが「デザインパターン」を用いるには、「オブジェクト指向」が持つその特徴と概念を理解しておく必要がある
  3. だから「オブジェクト指向」を学ぼう

オブジェクト指向原則

そんなわけで、さっそく第1部・第1章は「オブジェクト指向」についての説明であり、著者は、一般的になされるオブジェクト指向に関する説明を否定気味に訂正し、「オブジェクト指向のこころ」を丁寧に説明してくれる。

著者がオブジェクト指向原則のサマリとして述べている内容は以下の通り。

  • オブジェクトとは、適切な責務を伴うものである。
  • オブジェクトは、自らに対する責務を有している。
  • カプセル化とは、あらゆる種類の隠蔽を意味している。
  • データの隠蔽
  • 実装の隠蔽
  • クラスの隠蔽(抽象やインタフェースの背後への隠蔽)
  • 設計の隠蔽
  • 実体化の隠蔽
  • 振る舞いやデータに存在する流動的要素は、共通性/可変性分析によって抽象化する。
  • インタフェースを用いて設計する。
  • 継承は、既存オブジェクトを特殊化するためのものではなく、流動的要素を概念化するための手段として捉える。
  • クラス中に存在する流動的要素から、異質な流動的要素を切り出す。
  • 結合度を低くするよう努める。
  • 凝集度を高くするよう努める。
  • オブジェクトを使用するコードと、そのオブジェクトを生成するコードを分離する。
  • 「OAOO(一度だけ)」ルールを厳守する。
  • 「意図によるプログラミング」と意図を明確に表すネーミングルールを用いて、コードの可読性向上に努める。
  • コーディングを開始する前に、コードのテスト可能性を考慮する。
本書より引用

本書には、上記各項について詳細に説明がなされている。
実際、これまで学んできた書籍等における説明のされ方とはだいぶ異なる。
つまりよくある説明は、オブジェクト指向の持つ一側面を語っているに過ぎず、その本質ともいえる部分を学ぶには、デザインパターンと照らし合わせていくと、なぜ「オブジェクト指向で作るのか」をより理解しやすいよ、ということか。
そして次章以降、オブジェクト指向の説明を時折はさみながら、デザインパターンについて実例やコード(Java)を交えつつ説明してくれる。

読後感

とてもわかりやすく納得感のある説明が多く、また重要なポイントをしつこいぐらいに繰り返し述べているところが学ぶ側にとってとてもありがたい。
ただ、著者自身の体験を用いて説明を行っていることから、実用部分のみ説明が欲しい人には自分語りの箇所などが余計に感じるかもしれない。

ちなみに本書に掲載されているデザインパターンは、GoFのデザインパターンを網羅しているわけではない。掲載されているパターンは下記の通り。

  • Facade
  • Adapter
  • Strategy
  • Bridge
  • Abstract Factory
  • Decorator
  • Observer
  • Template Method
  • Singleton
  • Double-Checked Locking
  • Object Pool
  • Factory Method

本書をベースにオブジェクト指向とデザインパターンの基本的な部分を学び、GoF本にチャレンジするのが良いのかも。
もっと早くに、いやできれば発売当初の2005年に読んでおきたかった。

ということでGoF本を入手せねば...

サンプルコードについて

本書掲載のコードはJavaで、C++およびC#のサンプルをダウンロードできるとあるが、該当URLはさすがに存在せず(初版2005年)、下記URLからページ下部の、Annotated table of contents and related articles > Second edition よりJavaとC++のコードを参照できる。C#は見つからず...

Design Patterns Explained A New Perspective on Object-Oriented Design (2nd Edition)

「技術書」関連の記事

『Clean Architecture 達人に学ぶソフトウェアの構造と設計』を読んだ | neputa note

ソフトウェア開発から離れて10年以上が経過している。昨年夏ごろからスマホアプリでも開発してみようと一念発起。化石と化した脳みそをアップデートするために読んだ一冊。刺さった箇所などを備忘録としてメ

blog card

「スマホアプリを作ってみた」の記事

アラフォー初心者だけどスマホアプリを開発~リリースまでがんばってみた【Android・Xamarin.Forms】 | neputa note

この度、素人ながらスマホアプリ開発に挑戦してみました。今回の記事では概要と経緯について書き綴ってみたいと思います。実際に行った作業の詳細は、今後それぞれ記事を書き、こちらにリンクを追記します。作っ

blog card

Comments