どうもこんにちは。orioです。
引き続き読書会を開催しています。
題材としては「デザインパターンとともに学ぶオブジェクト指向のこころ」です。
事前準備(一応途中参加も受け付けております。外部からの参加も全然OKです)
- appear.inにて参加(参加希望の方はtamao0083@growth-and.comまでご連絡ください)
- 音声通話の準備(マイクとヘッドホンの準備。ヘッドセットがあれば楽です)
- 課題図書の購入 (オブジェクト指向のこころ)
- 範囲の理解
大まかな流れ
- 全員が事前に範囲を読んでおく(この時、わからない点や思ったことをメモっておくと良い)
- 説明役を一人決め、その説明役が当日説明をする
- 次の日時、範囲、説明役(及び説明代理)を決める
- ブログに参加者、範囲、レビュー等の情報を掲載
今回の読書会範囲
- 第4章 標準的なオブジェクト指向による解決策
- 第5章 デザインパターンの紹介
読書会参加者
- 古家(グロースアンドコミュニケーションズ株式会社)
- orio(グロースアンドコミュニケーションズ株式会社)
- 井上(ライジングサン企画株式会社)※グループ会社のエンジニアの方です
今回の感想
今回は私が担当しました。
業務都合で、10分~15分遅れた為、途中までの読み上げは古家さんにやってもらいました。
第4章
本書では、CAD/CAMシステムを題材に形状(Feature)を親クラスとして、派生クラス(SlotFeature、HoleFeature、CutoutFeature、IregularFeature、SpecialFeature)をモデリングし、各フィーチャモデルから派生する既存システム(V1Slot、V1Hole、V1Coutout、V1Iregular、V1Special)と次期システム(V2Slot、V2Hole、V2Coutout、V2Iregular、V2Special)をモデリングしたクラス図がオブジェクト指向の解説の例として掲載されています。
ただし、上記のクラス図の書き方では、様々な問題が見えてくるというのです。
・メソッドの冗長さ (V1システムとやり取りするメソッドには多くの類似点がある(スロットのX座標を取得とホールのx座標を取得する処理はほぼ同じ)
・高い結合度 このフィーチャは、間接的に連携しあっているので、結合度が高くなった設計をしてます。このような場合、以下の事態が発生すると、全てのフィーチャに影響を及ぼすというのです。
ー新たなCAD/CAMシステム(V3)が追加された。
ー既存のCAD/CAMシステム(V1)に変更が生じた。
・低い凝集度 核となる機能を実行メソッドがクラス間に散在することとなる為、凝集度が低くなります。(再利用性が低いとも言えます)
そして、CAD/CAMシステム(V3)が公開された場合、更にクラスの組み合わせ(合計15個のクラス)が増えることになり、非常に保守性の悪いシステムになるというのです。
また、継承への過度な依存は、無駄に感じられる保守費用の高騰を招くことになるというのが筆者の意見です。プログラムを設計するにあたって無暗に継承を使うことなく、保守性を考慮した設計をするべきだと感じました。
実際の現場に入ると、こういった設計がなされているプログラムを見ることが良くあります。
保守性が悪いと、ソースコードを解析するトレーサビリティも下がり、開発コストが莫大になります。なるべくそうならないように、デザインパターンを学び、保守性を考慮した設計を心がけたいですね。
第5章
この章では、デザインパターンとはいったいなんなのかが歴史的な経緯から概要を説明しています。
デザインパターンは建築学と文化人類学から生まれたもので、クリストファー・アレグザンダーという建築家は、建築の美に対する客観的基準が存在する類似点を生み出していきました。
また、文化人類学の分野でもある文化に属するすべての人々の間に共通する美的感覚、すなわち優れたデザインの存在が注目されていったようです。
ソフトウェアの開発者は、1990年代初頭から、アレクサンダーの功績によって、建築界のパターンがソフトウェアの設計にも当てはまるかを検証していきました。
・繰り返し発生するソフトウェアの問題で、同じ方法で解決できるものが存在するかどうか?
・パターンを使ったソフトウェア設計、最初にパターンを見極め、その他でそれらのパターンを組み合わせた特定解に到達できるできるか。
そして、次の作業としてパターンを洗い出し、新しいパターンをカタログ化していく研究の中で、書籍『オブジェクト指向における再利用のためのデザインパターン』において、エーリヒ・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリシディースのGoF (Gang of Four) と呼ばれる4人の共著者は、デザインパターンという用語を初めてソフトウェア開発に導入し、その書籍の中で23種類のパターンをカタログ化していきました。これが、ソフトウェア開発におけるデザインパターンの誕生となります。
また、本章では、デザインパターンを学習する理由について解説しても解説してあります。
デザインパターンを学習する理由
・何度も発生する問題に対して、品質の高い既存の解決策を再利用できるようになる
・チーム内のコミュニケーションを円滑にする共通用語を確率することで業務効率が上がる
・ただ動作するだけの設計ではなく、正しい設計に到達したか判定できる
・コードの修正容易性を高められる(コードの修正量を抑えられる)
・深い継承階層を避けることができる
デザインパターンを学習することで、第4章のモデリングのような深い階層構造を避ける設計ができ、コードの高い品質と保守性を考慮した設計にできるようです。
次回について
今回はデザインパターンの概要までを説明しました。
次回は、6/18(月)開催予定で、6章 Facadeパターン、第7章 Adapterパターンまでの読み上げを古家さんにやってもらう予定です。
実際、どんなパターンがあるか楽しみですねー。