ハルの読書と勉強録

読書の記録や勉強の覚書です。

【読書録】Head First オブジェクト指向分析設計/Brett McLaughlin,Gary Pollice,David West

HeadFirst オブジェクト指向分析設計の書籍を読了しました。

非理系・未経験からIT業界に転職した私にとっては非常に学びの多い書籍でした。

書籍の紹介

JavaC#を知っている読者を対象に、オブジェクト指向の基礎と応用を解説した書籍です。顧客の要望を要件に落とし、設計・コーディング・テスト・保守(仕様変更や機能追加)までの一連の考え方を学ぶことができます。また、UMLの使い方と関連についても解説されています。分厚い書籍ですが、学習の継続や定着についても研究されており、内容や展開に様々な工夫が凝らされています。私自身は非常に読みやすい書籍と感じました。

読む前後の私

読む前

  • クラスや継承等の書き方やできることはわかり、処理は理解できるが、使い方がはっきりとわからない。
  • 要望をどのように要件定義し、設計・実装するのかがしっくりこない。
  • UMLの知識はあるが、使い方がわからない。
  • 良い設計や実装の具体的なイメージがない。

読んだ後

  • 顧客の要望を要件にまとめ、顧客とイメージを共有するための具体的な方法を知ることができた。
  • UMLユースケースの具体的な使い方と、それらの使い分けの理解ができた。
  • 設計の基本原則を知れた。それにより、クラス設計や継承の使いどころが以前よりも明確になった。
  • 変更に強い(変更することが容易な)ソフトウェアを作るための考え方を知ることができた。
  • 顧客の要望をシステム化し、保守するための一連の流れと具体的な手法・考えを知ることができた。
  • アルゴリズムとデータ構造や、デザインパターンテスト駆動開発を学びたくなった。

この書籍で学べたことの一部

良いソフトウェアとはなにか

顧客と開発者の両方が満足できるものとして以下のように述べられています。

これにはとても納得しました。

顧客が満足するもの

ソフトウェアは顧客が望む処理を実行する必要があるのです。

Brett McLaughlin,Gary Pollice,David West, Head First オブジェクト指向分析設計

プログラマーが満足するもの

設計やコードが適切で、保守、再利用、拡張が容易です。

Brett McLaughlin,Gary Pollice,David West, Head First オブジェクト指向分析設計

要件定義から実装、機能追加や変更の一つの流れと、各フェーズ毎の具体的な考え方

各フェーズを具体的な事例を用いて、 少しづつ積み上げる形で解説してくれています。

コードの改善点を著者たちと一緒に考えるように、コードレビューされるような感じで進んでいくため、非常に楽しく学習することができました。

その時は最善と考えられたコードが、変化に対応しながら、徐々に洗練されていく過程はとても気持ちの良いものがありました。

最後に学んだ内容を一つなぎにして、要件定義からソフトウェア完成までを進める章があり、機能追加や改善の課題もあります。

1.顧客が必要とする処理を、ソフトウェアが実行できるようにする。

(1)フィーチャ一覧の作成

 アプリケーションに必要とされる事柄の概要を把握する。

(2)ユースケース図の作成

 実行する大きなプロセスと関連のある外部の力を明確化する。不要な詳細に立ち入らずにソフトウェアの使用方法を考える。

(3)問題分割

 機能のモジュールへの分割と、着手する順番を決める。ユースケースを作成する。

(4)問題把握

 ユースケース作成に行き詰まった場合に必要となる。解こうとしている問題の詳細を把握する。

(5)要件

 モジュールごとに要件を整理し、全体像が合致することを確認する。

(6)ドメイン分析

 ユースケースとアプリケーション内のオブジェクトを対応させる(クラス図の作成)。顧客と同じ考えであることを確認する(顧客が理解できる言葉でシステムを表現する)。

2.オブジェクト指向の基本原則を適応し、柔軟性を高める。

(1)初期設計

 原則とパターンを適応し、オブジェクトの詳細化とオブジェクト間の関係を定義する。ここでの設計判断が実装に大きな影響を与える。

(2)実装

 コード作成とテストを実施する。振る舞い、フィーチャ、ユースケース、問題毎に完成するまで繰り返す。

3.保守と再利用が可能な設計を追求する。

※「実装」のフェーズに含まれる。 

最後に

曖昧だった設計過程や実装の用語や概念の理解が深まりました。

各フェーズで何に重きを置き、どのように考えるか、どのようなツール(考え方や示し方)を使用できるのかがわかりました。

この書籍のお陰で、ソフトウェアを創り上げるための一つの土台が作れたように思います。

タイミング的に実務で書籍の内容を使用する機会にも恵まれ、書籍で学んだことの実用性や重要性を非常に実感しています。

読む前の私では路頭に迷うような結果になっていたでしょう。

読む前の私と同じような悩みを抱えてる方には、是非お勧めしたい一冊です。