Skip to main content

抽象データ型 目次 概要 インタフェースと実装の分離 抽象データ構造 具体例 脚注 参考文献 関連項目 案内メニューずっと受けたかったソフトウェア設計の授業Use of the concept of transparency in the design of hierarchically structured systemsInformation Distribution Aspects of Design MethodologyProgramming with Abstract Data TypeProgram Development by Stepwise RefinementProgram Development by Stepwise Refinement and Related Topics代数モデルの基礎 (<特集>ソフトウェア工学の基礎)プログラミング方法論の展望

抽象データ型ソフトウェア工学ソフトウェア設計データ型アルゴリズムデータ構造抽象


英構造化プログラミング制御構造ダイクストラホーアダールSimulaバーバラ・リスコフCLU二分木AVL木赤黒木データ構造計算量有理数












抽象データ型




出典: フリー百科事典『ウィキペディア(Wikipedia)』






ナビゲーションに移動
検索に移動


抽象データ型(ちゅうしょうデータがた、英: abstract data type、ADT)とは、データ構造とそれを直接操作する手続きをまとめてデータ型の定義とすることでデータ抽象[1]を実現する手法またはそのひとまとまりとして定義されたデータ型を言う。通常のデータ型であれば変数宣言で変数に束縛されるものは値であるが、抽象データ型の世界において値に相当するものはデータ構造とその操作[2]のまとまり[3]である。


抽象データ型を用いない場合、データ構造またはデータの操作手続きのアルゴリズムの変更を行うとソースコード中にその変更部分が散在してしまい規模によっては修正困難となるが、データとその操作がひとまとめに記載されることになる抽象データ型においては、型の定義における実装部分を変更するだけで修正が完了する。




目次





  • 1 概要


  • 2 インタフェースと実装の分離


  • 3 抽象データ構造


  • 4 具体例

    • 4.1 抽象データ型としての有理数



  • 5 脚注


  • 6 参考文献


  • 7 関連項目




概要


1960年代の構造化プログラミングの時点で既に、(よく知られている)段階的詳細化といった手法や制御構造の利用の励行などの他、データ構造とコードを連携させ、データ構造の変更を行うと変更部分がソースコード中に散在してしまうというそれ以前のプログラミングにおける問題点への対処にもなる、データ抽象に関する議論は現れている(『構造化プログラミング』(日本版はサイエンス社、1975年)の、全体の約半分はダイクストラによる考察だが、残り約半分はホーアとダール(Simulaの設計者)によるデータ論である)。抽象データ型はデータ抽象の具体的手法として1974年にバーバラ・リスコフの提案した言語CLUにおいて提案された。



インタフェースと実装の分離


プログラムが実装されたとき、抽象データ型は実装を隠蔽するインタフェースを表す。実装は将来において変更されうるので、抽象データ型のユーザーは実装ではなくインタフェースに関心がある。


抽象データ型の強みはユーザーから実装が隠蔽されていることである。インタフェースのみが公開されるのである。このことは、抽象データ型がいろいろな方法で実装されうることを意味するが、インタフェースに忠実な限りユーザープログラムは影響を受けないのである。


例えば、二分探索木抽象データ型はいくつかの方法で実装できる。例えば、二分木、AVL木、赤黒木、配列である。しかし実装に関わらず二分探索木は「挿入」「削除」「検索」といった同じ操作が可能である。



抽象データ構造


抽象データ構造とは、実際のデータ構造による実装に関わらず、操作の集合とその計算量により定義されるデータのための抽象的な領域のことである。


具体的なデータ構造の選択がアルゴリズムの効率的な実装にとって重要である一方、抽象データ構造の選択は効率的なアルゴリズムの設計とその計算量の推定にとって極めて重要である。


この概念はプログラミング言語の理論で用いられる抽象データ型の概念に非常に近い。多くの抽象データ構造や抽象データ型の名前は具体的なデータ構造の名前と一致する。



具体例



抽象データ型としての有理数


有理数は計算機においてはそのまま扱うことはできない。有理数の抽象データ型は以下のように定義できる。


コンストラクタ: 2つの整数 adisplaystyle abdisplaystyle b を用いて有理数の抽象データ型のインスタンスを作成する。ここで adisplaystyle a は分子で bdisplaystyle b は分母である。


関数: 加算,減算,乗算,除算,指数計算,比較,約分,実数への変換


完全な記述にするためには、それぞれの関数はデータに言及して記述されるべきである。例えば、有理数a/bdisplaystyle a/bc/ddisplaystyle c/dを乗算するときには結果はac/bddisplaystyle ac/bdと定義される。通常は入力、出力、実行前条件、実行後条件、抽象データ型に対する仮定も記述される。



脚注



  1. ^ データ抽象(英: data abstraction)とは、データ型の詳細定義とその操作に関する手続きを情報の局所性が高まるようにソースコード中の一カ所にまとめて記述するための記法のことを言う。情報が一カ所に局所的にまとめて記載されているため、非公開(private)部分の変更であればその定義部分の詳細を変更するだけでソースコード全体の修正が完了する。

    データ型の詳細定義とその操作手続きの局所的記述を実現する方法は複数あり、抽象データ型はその一例である。



  2. ^ 言語に応じて名称が異なり、C++であればメンバ関数(member function)、Javaであればメソッド(method)と呼ばれる


  3. ^ データ型の値に相当するこのまとまりのことを抽象データ型の実体(インスタンス , instance)と呼ぶ。


参考文献


  • 落水 浩一郎 『ソフトウェア工学実践の基礎 -分析・設計・プログラミング』 日科技連出版社、1993年。

  • 飯泉 純子, 大槻 繁 『ずっと受けたかったソフトウェア設計の授業』 翔泳社。


  • D.L.Parnas (1975), Use of the concept of transparency in the design of hierarchically structured systems, http://ivizlab.sfu.ca/arya/Papers/SW/TranspDesignHierSys.pdf 


  • D.L.Parnas (1971), Information Distribution Aspects of Design Methodology, http://cseweb.ucsd.edu/~wgg/CSE218/Parnas-IFIP71-information-distribution.PDF 


  • B.H.Liskov, S.N.Zilles (1974), Programming with Abstract Data Type, http://www.znu.ac.ir/members/afsharchim/lectures/p50-liskov.pdf 


  • Niklaus Wirth (1971), Program Development by Stepwise Refinement, Communications of the ACM, Vol. 14, No. 4, April 1971, pp. 221-227, http://sunnyday.mit.edu/16.355/wirth-refinement.html 


  • N.Gehani (1980), Program Development by Stepwise Refinement and Related Topics, http://www3.alcatel-lucent.com/bstj/vol60-1981/articles/bstj60-3-347.pdf 


  • 二木 厚吉 (1996), 代数モデルの基礎 (<特集>ソフトウェア工学の基礎), http://ci.nii.ac.jp/naid/110003743901 


  • 鳥居 宏次 , 二木 厚吉 , 真野 芳久 (1984), プログラミング方法論の展望, http://ci.nii.ac.jp/naid/110002720633 


  • 二木 厚吉、中川 中、「第4章:抽象データ型とOBJ2」、井田 哲雄、田中 二郎編 『続 新しいプログラミング・パラダイム』、1990年。 


関連項目


  • OBJ

  • ジョセフ・ゴーグエン




「https://ja.wikipedia.org/w/index.php?title=抽象データ型&oldid=67401684」から取得










案内メニュー



























(window.RLQ=window.RLQ||[]).push(function()mw.config.set("wgPageParseReport":"limitreport":"cputime":"0.200","walltime":"0.253","ppvisitednodes":"value":7410,"limit":1000000,"ppgeneratednodes":"value":0,"limit":1500000,"postexpandincludesize":"value":44010,"limit":2097152,"templateargumentsize":"value":11499,"limit":2097152,"expansiondepth":"value":22,"limit":40,"expensivefunctioncount":"value":0,"limit":500,"unstrip-depth":"value":0,"limit":20,"unstrip-size":"value":1813,"limit":5000000,"entityaccesscount":"value":0,"limit":400,"timingprofile":["100.00% 201.651 1 -total"," 50.98% 102.794 8 Template:Citation"," 32.30% 65.139 7 Template:Citation/core"," 29.25% 58.976 2 Template:Cite_book"," 22.98% 46.343 2 Template:Cite_book/和書"," 12.57% 25.349 1 Template:Citation/core-ja-jp"," 11.07% 22.324 2 Template:ISO639言語名"," 7.84% 15.812 2 Template:Citation/showdate"," 5.43% 10.954 8 Template:Citation/showdateEN"," 5.32% 10.722 2 Template:Lang-en-short"],"scribunto":"limitreport-timeusage":"value":"0.004","limit":"10.000","limitreport-memusage":"value":766093,"limit":52428800,"cachereport":"origin":"mw1334","timestamp":"20190309190222","ttl":2592000,"transientcontent":false);mw.config.set("wgBackendResponseTime":135,"wgHostname":"mw1331"););

Popular posts from this blog

Reverse int within the 32-bit signed integer range: [−2^31, 2^31 − 1]Combining two 32-bit integers into one 64-bit integerDetermine if an int is within rangeLossy packing 32 bit integer to 16 bitComputing the square root of a 64-bit integerKeeping integer addition within boundsSafe multiplication of two 64-bit signed integersLeetcode 10: Regular Expression MatchingSigned integer-to-ascii x86_64 assembler macroReverse the digits of an Integer“Add two numbers given in reverse order from a linked list”

Category:Fedor von Bock Media in category "Fedor von Bock"Navigation menuUpload mediaISNI: 0000 0000 5511 3417VIAF ID: 24712551GND ID: 119294796Library of Congress authority ID: n96068363BnF ID: 12534305fSUDOC authorities ID: 034604189Open Library ID: OL338253ANKCR AUT ID: jn19990000869National Library of Israel ID: 000514068National Thesaurus for Author Names ID: 341574317ReasonatorScholiaStatistics

Kiel Indholdsfortegnelse Historie | Transport og færgeforbindelser | Sejlsport og anden sport | Kultur | Kendte personer fra Kiel | Noter | Litteratur | Eksterne henvisninger | Navigationsmenuwww.kiel.de54°19′31″N 10°8′26″Ø / 54.32528°N 10.14056°Ø / 54.32528; 10.14056Oberbürgermeister Dr. Ulf Kämpferwww.statistik-nord.deDen danske Stats StatistikKiels hjemmesiderrrWorldCat312794080n790547494030481-4