- 1、本文档共65页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
abstract data types(抽象资料型态)
Chapter 3 Data Abstraction: The Walls 3.1 Abstract Data Types (抽象資料型態) 模組化 讓我們可以經由一個大程式的元件間的互動來管理複雜的大程式 可以隔離錯誤 Abstract Data Types 模組化(Continued) 消去重複的程式碼 模組化的程式 易寫 易讀 易改 Abstract Data Types(抽象資料型態) 程序的抽象化 (Procedural Abstraction) 將模組的目的及使用方式與模組的實作分離 模組的規格(specification)應該 詳述此模組的行為表現(由外面觀察到) 指出隱藏在此模組內部的細節 Abstract Data Types 資訊隱藏 (Information hiding) 隱藏部份此模組內部之實做細節 讓這些細節無法由模組外部得知 Abstract Data Types 對資料的慣有標準操作 新增資料至資料集 自資料集移除資料 詢問資料集之資料的相關問題 Abstract Data Types 資料抽象化(Data abstraction) 要求你思考你可以為一個資料集做什麼,先不用考慮如何實做該操作 允許你可以獨立開發各個資料結構,不會被解決方案其他部分綁住 是程序抽象化很自然的擴充 Abstract Data Types (ADT) 抽象資料型態 (ADT) 一個 ADT 包含 一個資料集 一群定義在這個資料集上的操作 一個 ADT 的規格指出 這個 ADT 的操作會做什麼,不是如何實做那些操作 一個 ADT 的實做 包含選擇一個適當的資料結構 範例 如果要設計可以儲存一群員工姓名及薪資的資料結構 const int MAX_NUMBER = 500; string names[MAX_NUMBER]; double salaries[MAX_NUMBER]; 在此第 i 個員工的姓名為 names[i],薪資為 salaries[i],names 及 salaries 這兩個陣列就形成一個資料結構,C++ 並沒有資料型態 (data type) 可以直接表示這樣的資料結構 當程式需要執行一些程式語言並不直接支援的資料相關操作,我們就要先設計一個抽象資料型態 (ADT),定義其相關操作的內容(what),接著才去實做這些相關操作 製冰機 3.2 The ADT List (抽象資料型態:清單) 清單 (List) 包含相同資料型態的多個項目 除了第一及最後這兩個項目, 其他每個項目都有一個唯一的前一項 (predecessor) 及唯一的後一項(successor) 序列頭(Head, 又稱序列最前線) 並沒有前一項 序列尾巴(Tail,又稱序列最後)並沒有後一項 在清單上的項目們, 加上可以針對清單及其項目進行的操作,形成一個 ADT 超市購物清單序列 The ADT List 項目是透過他們在清單的位置被引用(referenced) ADT 操作的規格 定義 ADT list 的合約 不規定清單如何儲存、內部如何實做這些操作 ADT 操作應可以直接讓應用程式呼叫,應用程式不需知道這些操作是如何實做出來的 The ADT List ADT 清單的操作範例 新增一個空白清單 詢問一個清單是否為空白 詢問一個清單裡的項目個數 在清單的某個位置加入一個項目 將清單的某個位置的項目移除 清空整份清單 擷取 (get)清單的某個位置的項目 UML Diagram for ADT List 應用程式 假設有一 aList,以下每一動作執行完後,請問 aList 的內容會變成什麼樣子?? aList.createList( ); aList.insert(1, milk, success); aList.insert(2, eggs, success); aList.insert(3, butter, success); aList.insert(4, apples, success); aList.insert(5, bread, success); aList.insert(6, chicken, success); aList.insert(4, nuts, success); aList.remove(5, success); 應用程式 列印清單上所有項目 displayList(in aList:List) 的程式 for (position = 1 through aList.getlength( ) ) { aList.retrieve(position, dataItem, success) cout dataItem endl; } ADT 操作的牆壁
文档评论(0)