contents memorandum はてな

目次とメモを置いとく場

『オブジェクト指向でなぜつくるのか[第3版]――知っておきたいOOP、設計、アジャイル開発の基礎知識』(平澤章 日経BP 2021//2004)

著者:平澤 章[ひらさわ・あきら] システム開発。技術書の執筆・翻訳。(株)ウルシステムズ所属。
寄稿:平鍋 健児[ひらなべ・けんじ] システム開発。技術書の翻訳。(株)永和システムマネジメント 代表取締役
寄稿:小森 裕介[こもり・ゆうすけ] システム開発。著書に『なぜ,あなたはJavaオブジェクト指向開発ができないのか』など。
装丁:折原 若緒
イラスト:葉波 高人 (有)桜デザイン工房


オブジェクト指向でなぜつくるのか 第3版 - サポートページ
オブジェクト指向でなぜつくるのか 第3版 | 日経BOOKプラス


【目次】
推薦のことば(平鍋健児) [001-002]
推薦のことば(小森裕介) [003-004]
まえがき(2021年2月 平澤章) [005-006]
本書の構成 [007-009]
キーワード [010-011]
目次 [012-017]
各章の構成 [018]


第1章 オブジェクト指向はソフトウエア開発を楽にする技術 019
  オブジェクト指向はソフトウエア開発の総合技術
  モノ中心にソフトウエアを組み上げる開発手法
  プログラミング言語から総合技術に進化した
  オブジェクト指向が難しい理由
  理由その 1 ――プログラミング言語の仕組みが複雑
  理由その 2 ――比喩を使った説明による混乱
  理由その 3 ――オブジェクト指向というコンセプトが 抽象的
  オブジェクト指向技術のwhatとwhyを説明する
  本書の構成
  [COLUMN]今ドキのOOP:とっつきやすくて、奥の深いPython 032


第2章 オブジェクト指向と現実世界は似て非なるもの 035
  オブジェクト指向を現実世界に対比して説明する
  クラスは種類、インスタンスは具体的なモノ
  ポリモーフィズムはメッセージの送り方を共通にする
  継承は共通点と相違点を体系的に分類して整理する
  比喩を強調した説明は混乱 を招きやすい
  オブジェクト指向と現実世界は似て非なるもの
  プログラミングのための仕組みと割り切って理解する
  そもそもソフトウエアは現実世界をそのまま表現しない
  現実世界と似ていることが可能性を広げた
  [COLUMN]オブジェクトの向こう側:バズワードになったオブジェクト指向 050


第3章 OOPを理解する近道はプログラミング言語の歴史にあり 053
  OOPは必然性を持って登場した
  黎明期には機械語でプログラムを書いていた
  プログラミング言語の最初の一歩はアセンブリ言語
  高級言語の発明でプログラムはより人間に近づいた
  わかりやすさを重視する構造化プログラミング
  サブルーチンの独立性を高めて保守に強くする
  GOTOレスプログラミングを実現する構造化言語
  進化の方向は保守性と再利用性重視に変化した
  残された課題はグローバル変数問題と貧弱な再利用
  [COLUMN]プログラミング昔話:COBOLコンパイラのニワトリとタマゴの話 072


第4章 OOPは無駄を省いて整理整頓するプログラミング技術 075
  OOPが持つ構造化言語にはない3つの仕組み
  OOPの仕組みは言語ごとに微妙に異なる
  三大要素1 ――クラスに備わる3つの仕組み
  クラスの効能 1 ――まとめる
  クラスの効能 2 ――隠す
  クラスの効能 3 ――たくさん作る
  インスタンス変数は「仲間内だけのグローバル変数
  三大要素2 ――呼び出す側を共通化するポリモーフィズム
  三大要素3 ――クラス定義の重複を排除する継承
  三大要素のまとめ
  型にはめられるとプログラマは楽になる
  クラスを型として利用する
  プログラミング言語は「退化」した?
  さらに進化したOOPの仕組み
  進化したOOPの仕組み1 ――パッケージ
  進化したOOPの仕組み2 ――例外
  進化したOOPの仕組み3 ――ガベージコレクション
  [COLUMN]今ドキのOOP:ホームページツールから進化したPHP 120


第5章 メモリの仕組みの理解はプログラマのたしなみ 123
  OOPのプログラムが動く仕組みを理解しておこう
  コンパイラインタプリタの2つの実行方式
  中間コードを解釈して実行する仮想マシン
  CPUは複数のスレッドを掛け持ちで実行する
  静的領域、ヒープ領域、スタック領域で管理
  OOPの特徴はメモリの使い方にあり
  クラス情報はクラスにつき1つだけロードする
  インスタンス生成のたびにヒープ領域が使われる
  変数はインスタンスの「ポインタ」が格納される
  インスタンスを格納する変数のコピーに要注意
  ポリモーフィズムは異なるクラスが同じ顔を見せる
  継承される情報の種類 によってメモリ配置は異なる
  孤立したインスタンスはガベージコレクタが処分する
  [COLUMN]プログラミング昔話:OOPはダンプが見づらい? 160


第6章 OOPがもたらしたソフトウエアとアイデアの再利用 163
  OOPの優れた仕組みにより再利用が進んだ
  クラスライブラリはOOPのソフトウエア部品群
  標準のクラスライブラリは言語仕様の一部
  Objectクラスを頂点とする継承構造
  フレームワークにはさまざまな意味がある
  フレームワークはアプリケーションの半完成品
  世界中で再利用されるソフトウエア部品群
  独立性の高い部品を意味するコンポーネント
  デザインパターンは優れた設計のアイデア
  デザインパターンはクラスライブラリ探検の道しるべ
  設計以外の分野にも広がるアイデアの再利用
  クラスライブラリやパターンで知る再利用の恩恵
  [COLUMN]今ドキのOOPRailsフレームワークでブレークしたRuby 184


第7章 汎用の整理術に化けたオブジェクト指向 187
  ソフトウエアは現実世界をそのまま表現しない
  集合論と役割分担に応用された
  上流工程で「汎用の整理術」に化けた
  2つの意味を持つことが混乱をもたらした
  プログラミング技術と整理術に分けて考える
  なぜ汎用の整理術に化けたのか
  [COLUMN]オブジェクト指向の向こう側:言語が先か、コンセプトが先か 200


第8章 UMLは形のないソフトウエアを見る道具 203
  UMLはソフトウエアの機能や構造を表す図の描き方
  UMLには13種類のダイアグラムがある
  UMLの使い方は大きく3つある
  UMLの使い方 1 ――プログラム構造や動作を表現
  クラス図でOOPのプログラム構造を表現
  シーケンス図とコミュニケーション図で動きを表現
  UMLの使い方 2 ――汎用の整理術の成果物を表現
  集合論で整理した結果をクラス図で表現
  役割分担はシーケンス図とコミュニケーション図
  UMLの使い方 3 ――非オブジェクト指向を表現
  ユースケース図でコンピュータに任せる仕事を表現
  仕事の流れをアクティビティ図で表現
  状態の変化をステートマシン図で表現
  自然言語とコンピュータ用言語の欠点を補う「言語」


第9章 現実世界とソフトウエアのギャップを埋めるモデリング 233
  現実世界とソフトウエアにはギャップがある
  得意技は「決まり切った仕事」と「覚える仕事」
  業務分析、要件定義、設計でギャップを埋める
  モデリングは3ステップを円滑に進めるための技術
  アプリケーションによってモデリングの内容は変わる
  ビジネスアプリケーションは現実の出来事を記録する
  図書館の貸出業務そのものをモデリングする
  図書館業務をユースケース図で表現する
  図書館システムの情報を概念データモデルで表現する
  ビジネスアプリではデータ構造が現実世界を写し取る
  組み込みソフトウエアは現実世界の仕事を置き換える
  組み込みソフトウエアでは装置の研究開発が重要
  全自動で動作する様子をステートマシン図で表現
  組み込みソフトウエアは単調な仕事をひたすら実行
  モデリングにはソフトウエア開発の醍醐味がある


第10章 擬人化して役割分担させるオブジェクト指向設計 261
  設計が対象とする範囲は広く深い
  実行効率よりも保守性や再利用性が重視される時代
  設計の目標 1 ――重複を排除する
  設計の目標 2 ――部品の独立性を高める
  部品の独立性を高めるコツ
  設計の目標 3 ――依存関係を循環させない
  ブジェクト指向設計の感覚は擬人化と役割分担
  役割分担されたソフトウエア が作る奇妙な世界
  [COLUMN]今ドキのOOP:クラスに縛られずに動くJavaScript 278


第11章 オブジェクト指向から生まれたアジャイル開発 281
  技術やノウハウだけでソフトウエア開発は成功しない
  作業手順や成果物を体系的にまとめた開発プロセス
  変更を抑えるウォーターフォール開発プロセス
  ウォーターフォール開発プロセスの限界
  変化に柔軟に対応するための反復型開発プロセス
  多くのタブーを破ったXP
  チームによる仕事の進め方の枠組みを定めたスクラム
  優れたソフトウエアを手早く作るためのアジャイル宣言
  アジャイル開発を支えるプラクティス
  テストコードを先に書いて動かしながら開発するTDD
  [COLUMN]プログラミング昔話:昔は許されなかったXP 304


第12章 オブジェクト指向を使いこなそう 307
  オブジェクト指向を使いこなそう
  オブジェクト指向という強力なコンセプトが原動力
  時代がオブジェクト指向に追いついた
  オブジェクト指向はブームで終わらない
  オブジェクト指向を使いこなそう
  知的なソフトウエア開発を楽しもう


補章 関数型言語でなぜつくるのか 317
  関数型言語でなぜつくるのか
  オブジェクト指向と関数型のハイブリッドが主流の時代
  関数型言語の7つの特徴
  特徴1:関数でプログラムを組み上げる
  特徴2:すべての式が値を返す
  特徴3:関数を値として扱える
  特徴4:関数と引数を柔軟に組み合わせることができる
  特徴5:副作用を起こさない
  特徴6:場合分けと再帰でループ処理を記述する
  特徴7:コンパイラが型を自動的に推測する
  7つの特徴のまとめ
  関数型言語の分類
  関数型言語のメリット
  関数型言語の課題
  関数型言語オブジェクト指向の関係
  関数型プログラミングを身につけよう
  [COLUMN]今ドキのOOP関数型言語の箱庭を用意したJava 360


あとがき [362-363]
索引 [364-369]
著者プロフィール [370]