カプセル化とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > デジタル大辞泉 > カプセル化の意味・解説 

カプセル‐か〔‐クワ〕【カプセル化】

読み方:かぷせるか

encapsulationオブジェクト指向プログラミング言語において、データ対す操作の手続きオブジェクト内に限定し独立性高めること。


カプセル化 [encapsulation]


カプセル化

【英】 Capsulization

クラス外部から、クラス自体クラスインスタンスプロパティメソッド直接呼び出せないようにすること。

クラス外部からは、クラス内部データどのような形で保持されているかわからなくし、勝手に変更できなくさせることができる。ただ、PHP4ではクラスプロパティメソッド直接アクセスするのを禁止することはできない

PHP5では、プロパティメソッド定義時privateprotected宣言をすることで、クラス外から直接プロパティアクセスできないように設定することが可能になった。varによるプロパティ宣言、あるいは何も指定せずにメソッド宣言した場合は、public宣言同じくクラス外からでもアクセスできるようになる

privateprotected違いについてだが、private指定するとそのクラス以外のどこからも直接アクセスすることができなくなるのに対しprotected指定すると、そのクラス内の他に、そのクラス継承したクラス内からも直接アクセスすることが可能になる

関連用語


カプセル化

プログラミングのほかの用語一覧
オブジェクト指向:  Hibernate  ポリモーフィズム  IDL  カプセル化  コンストラクタ  コンポーネント  メソッド

カプセル化

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/05/29 23:39 UTC 版)

カプセル化(カプセルか、: encapsulation)は、コンピュータプログラミングで用いられる概念で互いに関連するデータとロジックなどを1つのモジュールとしてまとめることである[1]。また、より広い意味ではまとめたモジュールの内側の詳細を外側から隠蔽することをも含む[2]。この隠蔽は計算機科学者デビッド・パーナスが提唱した情報隠蔽英語版と同義である。

カプセル化はオブジェクト指向での使用が最も有名であり、そこではフィールドとそれを操作するメソッドをまとめたオブジェクトの内部要素への直接アクセスを制限するためのアクセスコントロールを設けている。内部隠蔽されたフィールドを操作または閲覧するためのメソッドは、ミューテイタ/アクセッサ英語版と呼ばれ、これはセッター/ゲッターの俗称でも知られている。フィールドとメソッドの一体化には、フィールド展開用のメモリ基底アドレスをアドホック多相英語版表現にしたThis参照の機構が用いられている。これらカプセル化のコンセプトの定義と実装の書式は、オブジェクトの設計図に例えられているクラスに投影されている。オブジェクト指向のカプセル化は、特にデータ抽象の側面が強調されている。

なお、カプセル化はオブジェクト指向の専売特許ではなく、抽象データ型プログラムモジュールソフトウェアコンポーネントの実装にも使用されている。

概要

構造化プログラミングを提唱したエドガー・ダイクストラは、プログラムの段階的詳細化法の知見から、プログラムを構成するアルゴリズムとそのアルゴリズムで用いられるデータ構造は密接に関連しており、アルゴリズムをある程度詳細化してからでないと多くの場合そのデータ構造は決定できないことを指摘した[3]

さらに、アルゴリズムに関連するデータ構造を決定するためには、まず必要なデータ構造の存在を変数名で代用、すなわち抽象(abstract)し(これをデータ抽象(data abstract)と呼ぶ)、アルゴリズムの方の詳細化を進めることでそのデータ抽象された変数名が必要とされる情報を徐々に集めてゆき、十分な情報が集まった段階でそのデータ構造を決定させればよいということを示した[注釈 1]。なお、データ抽象を駆使してアルゴリズムとそのデータ構造を洗練化(段階的詳細化)したものは真珠(pearl)[注釈 2]と呼ばれる[4][注釈 3]

このように開発されたプログラムにおいては、アルゴリズムとそのデータ構造は一体不可分のようになるため、プログラムの拡張などにより、アルゴリズムを後から変更する必要が出てくると、必然的に一度決定したはずのデータ構造や関連操作を修正しなくてはならなくなる。しかも、その修正箇所は大規模なプログラム開発であれば多数の関連ソースコードの各所に散在してしまうことになる[注釈 4]

以上のことを踏まえれば、ほとんど一体不可分のものであるアルゴリズムの操作と、そのアルゴリズムに関連するデータ構造に対しては、異なる名前を持つ異なる真珠として扱うよりも一つの変数名からなる一つのモジュール(module)とした方が、仮に後でアルゴリズムの変更を行うにしても変更箇所がそのモジュールの内部に限定されることになるので、保守管理しやすい。このように、関連するデータとその操作を一つの何かまとまりにまとめることを情報のカプセル化(encapsulation)またはモジュール化(modulization)と呼ぶ[注釈 5]

情報隠蔽

デイビッド・パーナスはモジュール間の結合に関する議論を進める上で、プログラムやモジュールに関する設計情報は濫りに公開してはならず、むしろ積極的に隠蔽すべきであるという情報隠蔽(information hiding)の考え方を説いた。つまり、公開すべきものはプログラムやモジュールの仕様であって、その実現手段ではないと主張した[5][注釈 6]

公開すべき仕様上の機能を呼び出す機構はインターフェース(interface)と呼ばれる。インターフェースを経由することでモジュールの機能の情報隠蔽をすることができる。ほかに情報隠蔽を実現する機構としては、モジュールの機構自体に公開/非公開(public/private)の区別を指定する方法が一般的である。

脚注

注釈

  1. ^ 構造化プログラミング pp.58-65 における image型 はデータ抽象の例である。
  2. ^ なお、紛らわしい名称を持つプログラミング言語のPerl開発者であるラリー・ウォールは、構造化プログラミングの真珠(pearl)との関連性を明確には述べていない。本家インタビュー:Perl開発者ラリー・ウォール
  3. ^ ダイクストラやヴィルトの普及もあってか、以後「アルゴリズム」と「データ構造」と言う単語の入ったプログラミングに関する書籍が数多く出版されることとなった。
  4. ^ このような構成からなるプログラムは変更に弱く、バグが発生しやすいため保守管理が困難である。
  5. ^ 用法としてカプセル化という用語は情報隠蔽も含むことが多い。一方、モジュール化という用語はそういったニュアンスは少ない。
  6. ^ ソフトウェア業界においては、理想的には顧客が提示する仕様書に基づいてソフトウェアを開発し、そのソフトウェアが仕様書を満たしていれば顧客に納品することができる。つまり、顧客が提示する仕様書にある機能が実現されており、かつその機能を実行する限りにおいて動作検証されていれば、そもそも顧客が関知する理由の無い実装上必要となる機能の幾つかが不具合を有していても、そのソフトウェアは仕様書を満たしていると主張可能ということである。

出典

  1. ^ 上田勲『プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則』秀和システム、2016年3月29日、84頁。ISBN 978-4-7980-4614-3 
  2. ^ 上田勲『プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則』秀和システム、2016年3月29日、86頁。ISBN 978-4-7980-4614-3 
  3. ^ 構造化プログラミング pp.58-65
  4. ^ 構造化プログラミング pp.68-69
  5. ^ 山崎(1990) p.131

参考文献

  • E.W.ダイクストラ、C.A.R.ホーア、O.-J.ダール 著、野下浩平,川谷慧,武市正人(共訳) 訳『構造化プログラミング』サイエンス社、1975年。 
  • 山崎利治『プログラムの設計』共立出版〈計算機科学/ソフトウェア技術講座〉、1990年。 
  • 落水 浩一郎『ソフトウェア工学実践の基礎』日科技連、1993年。 
  • D.L.Parnas (1971), “Information distribution aspects of design methodology”, Proceedings of IFIP Congress 

関連項目


カプセル化 (encapsulation)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/05/02 14:27 UTC 版)

クラス (コンピュータ)」の記事における「カプセル化 (encapsulation)」の解説

詳細は「カプセル化」を参照 一般にどんなプログラムであれ、プログラム機能提供するためにはデータ保有するだけではなくデータ対す操作ができなければならない。単に複数データをまとめる手段としては、C言語構造体Pascalレコード型といった形で従来の手続きプログラミング言語において提供されている。一方クラスは、データだけでなくそのデータ関連する操作ひとまとめにして管理する枠組み提供するこのように関連する変数操作などをクラス所属物として一つまとめてしまうことを、クラスによる情報のカプセル化(encapsulation)と呼ぶ。適切なカプセル化により、データ構造アルゴリズムなどを変更したとしても、変更箇所はカプセル化されたクラス領域内だけで済み変更箇所クラス外の関連ソースコード全体にまで散乱波及してしまうことを防ぐことができる。 またアクセス修飾子 (access modifier) により、所属に対して公開/非公開情報区別をつけることで、クラス外部からクラスに対して破壊的操作加えることを防いだり、特定の機密データクラス外部から見ることができないようにしたりするなど、外部開放する情報制限をつけることができる。カプセル化した上に公開/非公開情報区別加えることを情報隠蔽information hiding)と呼ぶ。

※この「カプセル化 (encapsulation)」の解説は、「クラス (コンピュータ)」の解説の一部です。
「カプセル化 (encapsulation)」を含む「クラス (コンピュータ)」の記事については、「クラス (コンピュータ)」の概要を参照ください。

ウィキペディア小見出し辞書の「カプセル化」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

「カプセル化」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

','','','','','','','','','','','','','','','','','',''];function getDictCodeItems(a){return dictCodeList[a]};

すべての辞書の索引

「カプセル化」の関連用語











カプセル化のお隣キーワード
検索ランキング
';function getSideRankTable(){return sideRankTable};

   

英語⇒日本語
日本語⇒英語
   



カプセル化のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
アライドテレシス株式会社アライドテレシス株式会社
Copyright(c)2025 Allied Telesis K.K. All Rights Reserved.
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
PHPプロ!PHPプロ!
©COPYRIGHT ASIAL CORPORATION ALL RIGHTS RESERVED.
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【カプセル化】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのカプセル化 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのクラス (コンピュータ) (改訂履歴)、C++ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Text is available under Creative Commons Attribution-ShareAlike (CC-BY-SA) and/or GNU Free Documentation License (GFDL).
Weblioに掲載されている「Wiktionary日本語版(日本語カテゴリ)」の記事は、Wiktionaryのカプセル化 (改訂履歴)の記事を複製、再配布したものにあたり、Creative Commons Attribution-ShareAlike (CC-BY-SA)もしくはGNU Free Documentation Licenseというライセンスの下で提供されています。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS