コンピュータプログラミングの概念・技法・モデル

『**コンピュータプログラミングの概念・技法・モデル**』 (コンピュータプログラミングのがいねん・ぎほう・モデル、CTM、CTMCP、) は、一般的なコンピュータプログラミングの概念について説明した教科書であり、ピーター・ヴァン・ロイとセイフ・ハリディにより著された。
日本語訳の訳者は羽永洋である。
この教科書の略称はCTMもしくはCTMCPである。
ガウディ本と呼ばれることもある。
ピーター・ヴァン・ロイはルーヴァン・カトリック大学の教授であり、セイフ・ハリディはスウェーデン王立工科大学の教授である。
この教科書は2004年に MIT Press から出版され、2007年に日本語訳が翔泳社から出版された。

この教科書では、マルチパラダイムプログラミング言語Ozの注意深く選択されたサブセット (Mozartプログラミングシステム) を使い、重要なプログラミングの概念と技法とモデル (プログラミングパラダイム) を説明している。

## 目次

以下にこの教科書の目次を示す。

* はじめに
* プログラム例の実行について
* 第1章 プログラミング概念入門
* 第I部 一般的計算モデル
** 第2章 宣言的計算モデル
*** 2.1 実用的プログラミング言語の定義
*** 2.2 単一代入格納域
*** 2.3 核言語
*** 2.4 核言語の意味
*** 2.5 メモリ管理
*** 2.6 核言語から実用的言語へ
*** 2.7 例外
*** 2.8 進んだ話題
*** 2.9 練習問題
** 第3章 宣言的プログラミング技法
*** 3.1 宣言的とはどういうことか？
*** 3.2 反復計算
*** 3.3 再帰計算
*** 3.4 再帰を用いるプログラミング
*** 3.5 時間効率と空間効率
*** 3.6 高階プログラミング
*** 3.7 抽象データ型
*** 3.8 宣言的でない必要物
*** 3.9 小規模プログラム設計
*** 3.10 練習問題
** 第4章 宣言的並列性
*** 4.1 データ駆動並列モデル
*** 4.2 スレッドプログラミングの基本的技法
*** 4.3 ストリーム
*** 4.4 宣言的並列モデルを直接使うこと
*** 4.5 遅延実行
*** 4.6 甘いリアルタイムプログラミング
*** 4.7 Haskell言語
*** 4.8 宣言的プログラミングの限界と拡張
*** 4.9 進んだ話題
*** 4.10 歴史に関する注記
*** 4.11 練習問題
** 第5章 メッセージ伝達並列性
*** 5.1 メッセージ伝達並列モデル
*** 5.2 ポートオブジェクト
*** 5.3 簡単なメッセージプロトコル
*** 5.4 並列性のためのプログラム設計
*** 5.5 リフト制御システム
*** 5.6 メッセージ伝達モデルを直接使用すること
*** 5.7 Erlang言語
*** 5.8 進んだ話題
*** 5.9 練習問題
** 第6章 明示的状態
*** 6.1 状態とは何か？
*** 6.2 状態とシステム構築
*** 6.3 明示的状態を持つ宣言的モデル
*** 6.4 データ抽象
*** 6.5 状態ありコレクション
*** 6.6 状態に関する推論
*** 6.7 大規模プログラムの設計
*** 6.8 ケーススタディ
*** 6.9 進んだ話題
*** 6.10 練習問題
** 第7章 オブジェクト指向プログラミング
*** 7.1 継承
*** 7.2 完全なデータ抽象としてのクラス
*** 7.3 漸増的データ抽象としてのクラス
*** 7.4 継承を使うプログラミング
*** 7.5 他の計算モデルとの関係
*** 7.6 オブジェクトシステムを実装すること
*** 7.7 Java (直列部分)
*** 7.8 能動的オブジェクト
*** 7.9 練習問題
** 第8章 状態共有並列性
*** 8.1 状態共有並列モデル
*** 8.2 並列性を持つプログラミング
*** 8.3 ロック
*** 8.4 モニタ
*** 8.5 トランザクション
*** 8.6 Java言語 (並列部分)
*** 8.7 練習問題
** 第9章 関係プログラミング
*** 9.1 関係計算モデル
*** 9.2 別の例
*** 9.3 論理型プログラミングとの関係
*** 9.4 自然言語構文解析
*** 9.5 文法インタプリタ
*** 9.6 データベース
*** 9.7 Prolog言語
*** 9.8 練習問題
* 第II部 特殊化された計算モデル
** 第10章 グラフィカルユーザインタフェースプログラミング
*** 10.1 宣言的／手続き的手法
*** 10.2 宣言的／手続き的手法を使うこと
*** 10.3 対話的学習ツール Prototyper
*** 10.4 ケーススタディ
*** 10.5 GUIツールを実装すること
*** 10.6 練習問題
** 第11章 分散プログラミング
*** 11.1 分散システムの分類
*** 11.2 分散モデル
*** 11.3 宣言的データの分散
*** 11.4 状態の分散
*** 11.5 ネットワークアウェアネス
*** 11.6 共通分散プログラミングパターン
*** 11.7 分散プロトコル
*** 11.8 部分的失敗
*** 11.9 セキュリティ
*** 11.10 アプリケーションを構築すること
*** 11.11 練習問題
** 第12章 制約プログラミング
*** 12.1 伝播・探索法
*** 12.2 プログラミング技法
*** 12.3 制約ベース計算モデル
*** 12.4 計算空間を定義し，使うこと
*** 12.5 関係計算モデルを実装すること
*** 12.6 練習問題
* 第III部 意味
** 第13章 言語意味
*** 13.1 一般的計算モデル
*** 13.2 宣言的並列性
*** 13.3 8つの計算モデル
*** 13.4 よくある抽象の意味
*** 13.5 歴史に関する注記
*** 13.6 練習問題
* 第IV部 付録
** 付録A Mozartシステム開発環境
*** A.1 対話的インタフェース
*** A.2 コマンドラインインタフェース
** 付録B 基本データ型
*** B.1 数 (整数，浮動小数点数，文字)
*** B.2 リテラル (アトムと名前)
*** B.3 レコードとタプル
*** B.4 チャンク (制限つきレコード)
*** B.5 リスト
*** B.6 文字列
*** B.7 仮想文字列
** 付録C 言語構文
*** C.1 対話的文
*** C.2 文と式
*** C.3 文と式のための非終端記号
*** C.4 演算子
*** C.5 キーワード
*** C.6 字句構文
** 付録D 一般的計算モデル
*** D.1 創造的拡張原則
*** D.2 核言語
*** D.3 概念
*** D.4 違う形の状態
*** D.5 その他の概念
*** D.6 階層的言語設計
* 参考文献
* 索引

## 関連項目

* 『計算機プログラムの構造と解釈』 (SICP)
* Oz
* Mozartプログラミングシステム

## 書誌情報

* ピーター・ヴァン・ロイ、セイフ・ハリディ、羽永洋(訳) 、『コンピュータプログラミングの概念・技法・モデル』、翔泳社、2007年、ISBN 978-4798113463
* Peter Van-Roy, Seif Haridi, *Concepts, Techniques, and Models of Computer Programming*, Mit Press, 2004, ISBN 978-0262220699

## 外部リンク

* CTMの公式ウェブページ - 多くの補足資料を提供している
* 概要:スライド版（英文）
* 原著 PDF版（アメリカ電力供給協会にて公開） 
* Scott Johnson の書評
* Yves Deville ほかによる書評