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

正文內容

第四章面向對象程序設計語言-文庫吧資料

2024-09-09 08:15本頁面
  

【正文】 還提出了許多與面向對象機制有關的新想法和模型 ? 許多新近的腳本語言提供了獨特的面向對象機制:例如 – JavaScript 支持一種基于對象和原型的面向對象模型。 Ruby 是一個純面向對象的腳本語言,其中的一切都是對象,全局環(huán)境看作一個匿名的大對象,全局環(huán)境里的函數看作這個對象的成員函數。 C++ 和 Ada 提供靜態(tài)約束(默認)和動態(tài)約束兩種方式 ? 一些腳本語言也支持面向對象的概念。 動態(tài)約束很重要,但調用時會帶來一些額外的開銷,如果需要調用的方法能夠靜態(tài)確定,采用靜態(tài)約束有速度優(yōu)勢 – Java 等許多語言都需要內置的自動廢料收集系統(tǒng) – 大多數 OO 語言都依賴于自動存儲回收系統(tǒng) – 為在這種環(huán)境下編程,人們開發(fā)了許多利用自動對象的對象管理技術,如句柄對象,對象的 “創(chuàng)建即初始化 ”技術等 ? 是否依賴自動廢料收集( GC)。 Java 只能把 OO 功能應用于用戶定義類型,基本類型采用值模型 面向對象的語言 ? 是否允許靜態(tài)對象或者堆棧對象(自動對象)?多數面向對象語言只支持堆對象(通過動態(tài)存儲分配創(chuàng)建的對象) – 從本質上說,只有采用引用模型才能支持方法的動態(tài)約束,因此大多數面向對象語言采用引用模型 – C++ 設法在支持系統(tǒng)程序設計的過程性語言 C 上 “擴充 ”支持面向對象的機制,是一種多范型語言,支持多種程序設計方式 – Smalltalk 盡可能追求 “面向對象 ”理想,完全是重新設計的新語言 – 它為面向對象的機制提供了模塊機制所不具有的彈性,使新的功能擴充可以比較自然地結合到已有的操作過程里 – 若變量 x 可以引用 B 類的對象,那么它也可以引用 D 類的對象 面向對象的基本概念 ? 繼承有兩方面作用 1. 建立類型之間的層次關系 2. 重用基類的行為(代碼和數據描述) 對于面向對象的行為而言,前一方面的功能更為重要 ? 類中的子程序成員稱為方法,方法需要通過具體的對象調用 ? 在運行中調用方法時,實際調用的方法由作為調用出發(fā)點的那個對象的類型確定的(動態(tài)約束) – 子類可以修改基類已經定義的行為,或者增加所需的新行為 ? 把子類看作是子類型(通常),如果 D 是 B 的子類,那么: – OO 概念與常規(guī)語言的合理集成(在當時),支持數據抽象和面向對象的系統(tǒng)設計和程序設計,支持多泛型程序設計的結合,使與數據抽象和 OO 有關的許多新概念和新技術逐漸被實際軟件工作者接受 ? 隨后是 OO 分析、 OO 設計和基于 OO 的軟件開發(fā)等等 ? 后來的其他成功語言包括 Java,微軟提出 C,等等 ? 出現了一些基于對象的腳本語言,如 Python, Ruby 等 ? 現在,面向對象的開發(fā)已經成為一種主流的軟件開發(fā)技術 面向對象的基本概念 面向對象的基本概念: ? 在面向對象語言里定義數據抽象的基本定義機制是類,在一個類里可以定義數據成員和子程序成員(稱為方法) ? 封裝是數據抽象和模塊化的概念,與面向對象的概念并沒有必然關系,但封裝有助于更好發(fā)揮面向對象機制的作用 ? (實在的)類被看作類型,可以用于生成(定義)實例,稱為對象 ? 已有的類可以作為定義新類的基礎(基類、超類) – 原因: – 各種控制結構也是通過消息概念建立的 ? 條件和邏輯循環(huán)是邏輯對象對特定消息的響應 ? 枚舉循環(huán)是整數對象對特定消息的響應 ? 采用單根的類層次結構,以類 Object 作為所有類的超類 ? 提供了塊( block)的概念,作為控制結構的抽象機制 ? 提出了容器的概念,開發(fā)了一個功能豐富的類庫 ? 與程序開發(fā)環(huán)境的緊密結合,并開發(fā)了 GUI 的基本概念和相關技術 Smalltalk 經過 7 76 發(fā)展到 Smalltalk 80,其概念和結構已臻成熟 OO 發(fā)展史 隨著 Smalltalk 的成功,人們看到了 OO 的潛在威力 ? 許多人開始研究如何把 OO 概念有效集成到常規(guī)語言里,提出了一批已有語言的 OO 擴充和許多新 OO 語言,如 ObjectPascal、 ObjectC 等 ? 其中前期最成功并得到廣泛應用的是 C++。 常規(guī)語言(如 C)引進了指向函數的指針,在實現數據驅動程序設計的過程中起到了重要作用,也成為面向對象語言實現的技術基礎 OO 發(fā)展史 繼承和動態(tài)約束等被 Smalltalk 發(fā)展,形成目前 OO 的基本概念框架 ? 程序里以類的方式定義各種數據抽象 ? 類可以通過繼承的方式擴充新功能,這樣定義的新類(子類,派生類)自動繼承已有類(基類,超類,父類)的功能 ? 對象是類的實例,是程序運行時的基本數據單元 ? 派生類的對象也看作是原有基類的對象,可以當作基類的對象使用(子類就是子類型,Liskov 代換原理, 2020 年圖靈獎) ? 類定義了對象的狀態(tài)成分(數據成員)和一組相關操作(稱為方法) ? 方法調用總是針對某個對象進行的,將方法調用看作是給相應對象送一個消息,對象通過執(zhí)行相應操作的方式對消息做出響應 ? 對一個消息執(zhí)行什么方法,由接收消息的對象的類型確定(根據該對象所屬的類確定,這就是動態(tài)約束) ? 計算,就是一組對象相互通訊的整體效果(對計算的另一種看法) OO 發(fā)展史 Smalltalk 還有一些獨特的東西: ? 變量采用引用模型,變量無類型,可以引用任何對象 ? 語言里的一切都是對象: – 將計算功能(子程序)約束于程序里處理的數據(結構),使我們在程序里可以從數據對象出發(fā)去啟動相應的計算過程 – 界面與實現 – Simula 只提供了基本封裝,并沒有對封裝的保護,也沒有信息隱藏 OO 發(fā)展史 軟件實踐也需要 OO 的思想,并逐漸開發(fā)了 相關的支撐技術,包括: ? 封裝的思想在面向模塊的語言里發(fā)展,提出了許多重要概念和想法,如 – 類的概念源自 Simula,其設計中提出用類定義把一組操作與一組數據包裝起來。 1960 年代在挪威計算中心設計和實現,主持其工作的 OleJohan Dahl 和 Kristen Nygaard 獲得 2020 年圖靈獎 – OO 并不是從模塊化程序設計發(fā)展出來的,它有自己的發(fā)展歷程 – 這方面的基本想法:一組數據與關聯之上相關的操作形成一個對象。 模塊可能是過去的遺產,源代碼已經丟失或部分缺失 模塊和程序組織 ? 常規(guī)的程序單元缺乏彈性,定義好的子程序 /模塊都是固定功能的實體,難以提供 “定制 ”的方式部分地改變功能以滿足實際需要的變化 ? 通過模塊定義的抽象數據類型是相互獨立的,不同模塊之間無任何關系 – 而實際情況中,常常需要定義和使用一些相互有關的類型,可能需要把它們送給同一個函數 /過程去處理,以同樣方式存儲 – 變體和聯合機制就是為了迎合這方面的需要,但它們沒有類型安全性,且未能提供解決類似問題的統(tǒng)一框架,難用于應付更復雜的情況 – 支持相關類型,可能給程序的結構組織帶來新的可能性 ? 如何在抽象數據類型的框架中提供這一類功能,也是需要解決的問題 ? 面向對象的概念在這些方面都能發(fā)揮很大的作用 ? 面向對象( ObjectOriented)的方法和程序技術,為基于模塊(一個類也可以看作一個模塊)的重用問題提供了一條解決途徑。 如果模塊功能的改變只能通過修改源代碼的方式進行,程序員就只能拷貝這個模塊的源代碼,深入研究后再設法修改,以滿足新需求 ? 但問題是有沒有可以使用的源代碼?常常沒有: – 模塊是更合適的重用單元,因為模塊可以包裝任何功能,更靈活 ? ? 重用中有一種常見情況:軟件開發(fā)中遇到的新問題常與解決過的問題(可以重用的庫提供的功能)類似,但又不完全相同 – 最早的重用單元是子程序,如 Fortran 的子程序庫 – 指令部分 ,0return? grow : amount?self erase.size ← size+ amountself show? grow :? 消息模式 方法體 源代碼消息字典4實例對象的存儲 實例對象只存放數據,其存儲格式如下圖 : 分類 loc tilt size scribe 長度 6b1實例變量名Box類類類10045500600 分類 loc tilt size scribe 長度 6 x y 長度 4500200Pointb2類類活動記錄 send 39。self39。 ← 39。+39。 39。push 39。push 39。,0push39。send 壓棧解釋執(zhí)行39。 39。 Smalltalk的對象 、 類 、 方法的實現 類的存儲 8長度所屬分類類名超類名實例變量類方法實例方法實例變量數Boxclass空白隔開的串 串 串 push 中間代碼39。 還有一些對象表示類和方法的結構,以便程序員追蹤系統(tǒng)。. Smalltalk程序設計系統(tǒng) 在 Smalltalk中 , 系統(tǒng)支持程序也是作為類掛在 Object之下 , 包括算術運算 、 數據和控制結構的實現 、 輸入 /出 、 隨機數生成器等 。. HouseholdFinances spend: for: 39。. HouseholdFinances spend: for: 39。. HouseholdFinances receive: from: 39。. HouseholdFinances receive: 820 from: 39。. NouseholdFinances spend: for : 39。 ” expenditures at: reason put: (self totalSpentFor: reason) + amount. cashOnHand← cashOnHand amount. expenditures changed CashOnHand| | “ 回答當前手頭現金 ” ↑ cashOnHand expenditures | | “ 回答支出細目 ” ↑ expenditures ines | | “ 回答收入細目 ” ↑ ines totalReceiveFrom: source | | “ 回答自 source收錢總數 ” (ines includesKey: source) ifTrue: [↑ines at : source] ifFalse: [↑0] totalSpentFor: reason | | “ 回答在 reason項上總支出 ” (expenditures includesKey: reason) ifTrue:[↑expenditures at : reason] ifFalse: [↑0] private SetlnitialBalance: amount| | “ 實例變量初始化 ” cashOnHand←amount. ines←Dictionary new. expenditures←Dictionary new Smalltalk at: HouseholdFinances put: nil. HouseholdFinances←FinancealHistory initialBalance: 1560 HouseholdFinances spend: 700 for: 39。Financial Tools39。caseOnHand ines expenditures39。 f:ARRAY[1..26] OF Integer; f←Array new: 26. BEGIN ―f是 Arrey實例長度 26‖ Writeln(?enter line‘); s←Prompter ReadIn(s);
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1