「カプセル化」の版間の差分

削除された内容 追加された内容
概要をざっくりと記載した。
m編集の要約なし
7行目:
 
== 概要 ==
[[構造化プログラミング]]を提唱した[[エドガー・ダイクストラ]]は、プログラムの[[段階的詳細化法]]の知見から、プログラムを構成するアルゴリズムとそのアルゴリズムで用いられるデータ構造は密接に関連しており、まずアルゴリズムをある程度詳細化してからでないと多くの場合そのデータ構造は決定できない指摘した<ref name=ex2>[[#構造化プログラミング|構造化プログラミング]] pp.58-65</ref>。アルゴリズムなどの情報から決定可能になるまで未定のデータ構造の存在は変数名で抽象(abstract)しておくという'''データ抽象'''(data abstract)の方法<ref name=ex2 />はこの解決策であり、また、データ抽象を駆使してアルゴリズムとそのデータ構造を洗練化(段階的詳細化)したものは'''真珠'''(pearl)と呼ばれる<ref>[[#構造化プログラミング|構造化プログラミング]] pp.68-69</ref><ref>ダイクストラやヴィルトの普及もあってか、以後「アルゴリズム」と「データ構造」と言う単語の入ったプログラミングに関する書籍が多く出版されることとなった。</ref>。
 
上記のとおりように、ダイクストラの[[構造化プログラミング]]によれば、プログラムの開発においてアルゴリズムとそのデータ構造は一体不可分のごとく密接に関連している。したがって、アルゴリズムを後から変更する場合、一度決定したはずのデータ構造も自動的にその修正を余儀なくされてしまう。しかも、大規模なプログラム開発であれば、その修正箇所は多数の関連ソースコードの各所に散逸してしまうことになる<ref>このような構成からなるプログラムは変更に弱くバグが発生しやすく保守管理も困難となる。</ref>。
 
アルゴリズムの操作とそのアルゴリズムに関連するデータ構造はほとんど一体不可分のものであるので、別々の変数名をもつ異なるものとして扱うよりも一つの変数名からなる一つのまとまりからなるものとして扱う方が管理しやすい。このように、関連するデータとその操作を一つの何かまとまりにまとめることを情報の'''カプセル化'''(encapsulation)と呼ぶ。