freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

第四章面向對象程序設計語言-在線瀏覽

2024-11-04 08:15本頁面
  

【正文】 1 5 1 7 4 4 7 3 3 6 3 2 1 a b c d e f g h i k l m n o p r s t u v 例 字頻統(tǒng)計對比程序 Pascal Smalltalk PROGRAM Frequency ―無消息模式方法 , 宜寫算法 ” CONST Size=80; VAR s: string[size]; | s c f k | k,i: Integer; “ 定義了四個臨時變量 ” c:Char。objectd 重設計c 直用di1ci1ai2a i1di2ci3ci2Smalltalk 程序A 派生 a 一個完整的 Smalltalk程序 家庭財務帳目 建立全部流水帳類 , 直接掛在 Object上 class name FinancialHistory superclass Object instance variable names 39。 category 39。 class method initialBalance:amount| | “ 建立流水帳本初始為 amount( 元 ) ” ↑ super new setinitialBalance: amounT new | | “ 建立流水帳本初始為 0( 元 ) ” ↑ super new setinitialBalance:0 instance method receive: amount from: source | | ines at: source put: lself total ReceivedFrom:source)+amount. ―從來源 source接收到的錢數(shù) , 因而手頭現(xiàn)金增加 ” . cashOnHand←cashOnHand + amount. ines changed spend: amount for: reason | | “ 為事由 reason支付的錢數(shù) , 因而手頭現(xiàn)金減少 。rent39。food39。pay39。interest39。utilities39。food39。 有一些類是輔助程序設計過程的,語法分析器、編譯器、解釋器、反編譯器這些對象的方法都有源代碼,目標碼兩種形式。 還有將方法和向其發(fā)消息的對象聯(lián)結起來的對象 .這些對象統(tǒng)稱環(huán)境 (contexts)類似其他語言實現(xiàn)中的堆棧幀和活動記錄。self39。39。erase39。size39。size39。amount39。send 39。,1send 39。,1poppush 39。 39。show 39。環(huán)境部分 發(fā)送者部分 臨時變量中間結果靜態(tài)鏈方法頭指針指令位移動態(tài)鏈參數(shù)非局部發(fā)送者部類類類類類lennamesuperclasslennamesuperclasslenclassvarclassvarinstanvar..活動記錄實例類 超類指向消息發(fā)送者類類類 面向對象的發(fā)展與概念 ? 為什么需要面向對象? ? OO 語言的發(fā)展 ? 面向對象的基本概念 重用的問題 ? 實踐中人們認識到重用已有開發(fā)結果的重要性,提出了軟件重用的概念 – 子程序是純粹的過程抽象,基于子程序的重用有很大局限性 – 已有模塊的功能與需要有差異,無法以其 “ 現(xiàn)有 ” 形式直接使用 – 模塊可能是購入的,提供商不提供源代碼 – OO 發(fā)展史 ? OO 技術和思想中的一個基本方面是數(shù)據和操作的封裝 – 其內部數(shù)據構成對象的狀態(tài),操作確定對象與外界交互的方式 – OO 的思想與模塊化的思想是并行發(fā)展,一直相互影響、相互借鑒 ? Simula 67 是 OO 概念的鼻祖,其設計目標是擴充 Algol 60,以更好地支持計算機在模擬方面的應用。 OO 的三個基本要素:封裝、繼承和動態(tài)方法約束都源于 Simula – Simula 的這些重要想法是模塊概念和 OO 的起源 – 作用域規(guī)則,開的或者閉的作用域 – 透明類型與隱晦類型,訪問控制,等等 ? 數(shù)據驅動的程序設計技術: – 在一些非常規(guī)的語言(如函數(shù)式語言)里,可以通過引用的概念提供函數(shù) /過程與數(shù)據之間的約束 – 類也是對象,通過給類送 new 消息的方式要求創(chuàng)建類的實例 – C++ 在 OO 概念的廣泛接受和應用方面功不可沒(具體理由見后面討論)。 在面向對象和高效程序之間取得較好的平衡 – 可通過繼承方式定義新類(子類,派生類),子類繼承基類的行為 – 若 o 是 D 類型的對象,那么 o 也看作是 B 類型的對象 – 動態(tài)約束是實現(xiàn)面向對象行為的關鍵 – 理解動態(tài)約束是理解面向對象的關鍵,動態(tài)約束的高效實現(xiàn)也是面向對象語言的實現(xiàn)的關鍵 面向對象的語言 雖然基本框架類似,不同面向對象語言之間也存在很大差異: 基本問題:采用什么樣的對象模型 ? 采用單根的類層次結構,還是任意的類層次結構? ? 提供那些繼承方式? – 例如 C++ 里提供了三種繼承方式 ? 允許多重繼承?還是只允許單繼承? ? 是否提供豐富完善的訪問控制機制? ? 采用基于繼承的模型,還是基于指派的模型 ? 基于類的模型,還是基于對象或原型的模型(如 JavaScript) ? 對象本身的獨立性(是否允許不屬于任何一個類的對象) ? 類本身是不是對象? 面向對象的語言 其他情況: ? 是不是追求 “純粹 ”的面向對象語言? – Java 是接近理想的語言,但希望在形式上盡可能靠近常規(guī)語言 – 另外的一些語言(如 Ada)采用可能很不同的方式支持面向對象的程序設計,這里不準備詳細介紹 ? 采用值模型還是引用模型。 C++ 采用值模型,可以創(chuàng)建靜態(tài)對象或棧對象,但只有通過對象引用或指向對象的指針才能實現(xiàn)面向對象的動態(tài)約束行為 – C++ 支持靜態(tài)對象和自動對象,這種設計是希望盡可能借助于作用域規(guī)則來管理對象,避免依賴自動存儲管理系統(tǒng)( GC) – 由于 OO 程序常(顯式或隱式地)創(chuàng)建和丟棄對象,對象之間常存在復雜的相互引用關系,由人來完成對象的管理和回收很困難。 GC 的引入將帶來顯著的性能損失,還會造成程序行為更多的不可預見性( GC 發(fā)生的時刻無法預見,其持續(xù)時間長短也無法預計) – C++ 是例外,其設計目標之一是盡可能避免對自動存儲回收的依賴,以支持系統(tǒng)程序設計,提高效率,減少運行時間上的不確定性 面向對象的語言 ? 是否所有方法都采用動態(tài)約束? – 大部分語言里的所有方法都采用動態(tài)約束 – 例如, – 它還有另外一些獨特性質 – 其中沒有類的概念,只有對象。 基于對象原型(而不是類)的 OO 模型 – 等等 ? 總而言之,雖然今天面向對象的模型和語言已成為主流程序設計方法和主流程序語言,但是這類語言還遠未成熟,還正在發(fā)展和研究中 – 如何提供一集足夠強大,而且又簡潔清晰的機制支持 OO 的概念和程序設計,還是這個領域中需要繼續(xù)研究的問題 – 可能定義繼承關系的性質(如 C++ 里的類繼承有 public、 protected 和 private 三種方式) ? 與對象交互的機制(方法調用,消息傳遞) ? 初始化新對象的機制(最好能自動進行,避免未初始化就使用的錯誤) ? 類類型對象的動態(tài)轉換機制(轉換對一個具體對象的觀點) ? 控制類成員的訪問權限的機制 ? 對象銷毀前的臨終處理機制(最好能自動進行) ? 對象的存儲管理機制 可能還有其他機制: ? 運行中判斷對象的類屬關系的機制、自反等等 面向對象語言的基本特征與實現(xiàn) OO語言的發(fā)展 , 給出以下圖示澄清了概念 : 封裝 → 對象 (數(shù)據和操作 ) 局部性 、 可維護性 抽象 → + 類 概括描述 、 簡單性 繼承 → + 類體系 可重用性 多態(tài) → 重載 、 類屬 可擴充性 動態(tài)束定 → 面向對象 可交互性 基于對象的語言 基于類的語言 面向對象語言 Ada 83, Actor CLU Smalltalk、 Eiffel simula 67 C++, Ada 95, Java OO 程序 ? 先看一點 OO 程序,復習一下基本 OO 程序的特征 ? 這里看一段定義了幾個類的 C++ 代碼 定義 list_node 類,用于實現(xiàn)帶頭結點的雙向循環(huán)鏈接表 每個結點里有一個域指向表頭結點 OO 程序 定義 list_node 類,用于實現(xiàn)帶頭結點的雙向循環(huán)鏈接表 每個結點里有一個域指向表頭結點 OO 程序 定義一個 list類 注意: header 是個 list_node 定義的是有頭結點的循環(huán)鏈表 OO 程序 通過繼承定義 queue 類。 基本容器類沒有具體數(shù)據域,不保存具體類型的元素,只實現(xiàn)容器操作,如:一些基本判斷謂詞,插入刪除等等 – 由于每個方法調用有一個調用對象,因此方法需要一個隱含指針,被調用時指向調用對象,所有對該對象的數(shù)據成員的訪問都通過這個指針和靜態(tài)確定的偏移量進行 ? 許多語言以這一指針作為一個偽變量,稱為 this 或者 self,通過這種指針 ? 訪問調用對象,方式上與通過指針訪問普通結構一樣 ? 實現(xiàn)面向對象語言的關鍵是兩個問題: – 動態(tài)約束的實現(xiàn),能夠從(作為變量的值或者被變量引用的)對象出發(fā),找到這個對象所屬的類里定義的方法 ? 下面討論實現(xiàn)的一些具體問題 封裝 ? 封裝是一種靜態(tài)機制,僅僅在程序加工階段起作用,有關情況與模塊機制類似,在加工后的程序里(可執(zhí)行程序里)完全沒有關于封裝的信息 ? 不同語言里對類的訪問控制可能不同: – 作為 “閉模塊 ”(凡是沒有明確聲明可訪問的都不可訪問) 對基本封裝機制的擴充是引進進一步的控制 ? C++ 引進成員的 public、 protected 和 private 屬性,提供細致的訪問控制 ? C++ 還允許定義派生類的不同繼承方式,控制對基類成員的訪問: – protected 繼承,使基類的 public 成員變成派生類的 protected 成員 – C++/Java 允許類里定義靜態(tài)數(shù)據域 – 類的靜態(tài)數(shù)據域并不出現(xiàn)在實例對象里,它們是類封裝的靜態(tài)數(shù)據成分,提出具有靜態(tài)生存期,在類的作用域里可直接訪問。 類的靜態(tài)數(shù)據成員可以在靜態(tài)區(qū)實現(xiàn),在程序運行之前靜態(tài)分配,在程序的整個執(zhí)行期間保持其存儲 – 可以把靜態(tài)數(shù)據成員看作本類的所有對象共享的信息 – 特點: – 不能引用 this/self,不能引用類定義的普通數(shù)據成員(如 Smalltalk 里不能引用實例變量),只能引用本類的靜態(tài)數(shù)據成員 – 提供模塊的內部狀態(tài),可以通過所提供的方法修改狀態(tài) – 靜態(tài)數(shù)據成員的靜態(tài)方法的封裝,可能定義內部數(shù)據和操作 對象和繼承:數(shù)據布局 繼承關系的數(shù)據部分通過對象的適當存儲布局實現(xiàn) ? 對象的實際表現(xiàn)就是數(shù)據成員的存儲 ? 假定 B 是一個類,有自己的數(shù)據成員 ? D是 B的派生類,增加了
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1