《程式設計原本 》一1 3 物件

2021-09-23 09:47:28 字數 1788 閱讀 3222

乙個儲存(memory)就是一集儲存字(word),其中每個字有乙個位址(address)和一項內容(content).位址是一種固定大小的值,這個大小稱為位址長度.而內容是另一固定大小的值,其長度稱為字長.通過裝載(load)操作可以取得乙個位址的內容.通過儲存(store)操作改變乙個位址所關聯的內容.儲存的實例如計算機主存裡的一組位元組,或磁碟驅動器裡的一組區塊.

乙個物件(object)就是乙個具體實體的表示,並且是作為某個儲存裡乙個值.物件有狀態(state),其狀態就是某個值型別的乙個值.物件的狀態可以改變.對於給定的與某個具體實體對應的乙個物件,其狀態對應於該實體的乙個快照.乙個物件擁有一集資源(resource),用於儲存其狀態,如一些儲存字或者檔案裡的一些記錄.

即使某物件的值是乙個連續的0/1序列,儲存這些0/1的資源也可以不是連續的.相應的解釋能給出這個物件的整體.看乙個例子:兩個double 可以解釋為乙個複數,為此並不要求它們緊鄰存放.乙個物件的資源也完全可以位於不同的儲存裡.但是本書只處理位於乙個具有統一位址空間的儲存裡的物件,這裡的每個物件有乙個唯一的起始位址(startingaddress),從它出發可以找到該物件的所有資源.

乙個物件型別(objecttype)是一種在儲存中儲存和修改值的模式.與每個物件型別相對應的有乙個描述該型別物件的狀態的值型別.每個物件屬於某乙個物件型別.作為物件型別的例子,請考慮按32位模二補碼方式,採用小尾格式和4位元組邊界對齊表示的整數.

值和物件扮演著互補的角色.值不會改變,與在計算機裡的特定實現方式

1.3 物件

無關.物件可以改變,具有與具體計算相關的實現方式.在任何乙個時間點,乙個物件的狀態都可以描述為乙個值.原則上說,這個值可以寫在紙上(做出乙個快照)或者序列化(serialize)後通過通訊鏈路傳輸.用值的方式描述物件的狀態,在討論相等性時就可以抽象掉物件的具體實現方式.函式式程式設計處理的是值;而命令式程式設計處理的是物件.

我們用值來表示實體.因為值是不變的,它們可以表示抽象實體.也可以用值的序列來表示某具體實體的一些快照的序列.物件儲存著代表實體的值.由於物件可以變化,因此可以用於表示具體實體,並通過令其不斷取得新值的方式表示該實體的變化.也可用物件表示抽象實體,這時它們將保持不變,或者取相應抽象實體的一些不同近似值.

在計算機裡使用物件,有如下三個原因.

1.物件能模擬可以改變的具體實體,例如工資系統裡的雇員記錄.

2.物件為實現值上的函式提供了強有力的支援,例如寫乙個用迭代演算法實現浮點數平方根的過程.

帶儲存的計算機是目前唯一可用的通用計算裝置.

值型別的某些性質也可用於物件型別.乙個物件是良形式的(well-formed),當且僅當其狀態是良形式的.乙個物件型別是真部分的(properlypartial),當且僅當其值型別是真部分的;否則它就是全的(total).乙個物件型別是唯一表示的(uniquelyrepresented),當且僅當其值型別是唯一表示的.

由於具體實體有標識,表示它們的物件也要有與之對應的概念.乙個識別符號號(identitytoken)是乙個唯一值,它表示相應物件的標識,可以從相應物件的值及其資源的位址計算出來.識別符號號的例子如物件的位址,或者到儲存著該物件的陣列裡的下標,或者人事記錄裡的雇員編號.對識別符號號的相等檢查對應於實體標識的相等檢查.在應用系統執行期間,乙個特定物件有可能在乙個資料結構裡移動,也可能從乙個資料結構移動到另乙個,這種移動有可能改變物件的識別符號號.

同樣型別的兩個物件相等(equality),當且僅當它們的狀態相等.如果兩個物件相等,我們就說其中的乙個是另乙個的拷貝(copy).修改乙個物件並不會對它的任何拷貝產生影響.

本書將使用一種程式語言,在該語言裡不能脫離物件和物件型別去描述值和值型別.由於這種情況,從現在開始,只要提到型別時沒加修飾詞,那麼就是指物件型別.

統一物件訊息程式設計(7) 物件訊息程式設計框架4

模組工廠 tlobjectfactory 負責模組的建立 初始化和儲存。每次程式執行,首先例項化模組工廠,然後由模組工廠啟動主模組。原始碼 public class tlobjectfactory extends tlbasemodule public void destroymodule over...

一 物件模型

在ruby程式中,物件僅僅是其大世界的乙個公民而已,除了物件還有其他語言構件,比如類 class 模組 module 以及例項變數 imstance variable 等,元程式設計操控的就是這些語言構件。所有語言構件存在於其中的系統稱為物件模型,它是ruby的靈魂。1 物件由一組例項變數和乙個類的...

《程式設計原本 》一導讀

本書將演繹方法應用於程式設計,討論程式與保證它們能正確工作的抽象數學理論之間的聯絡.書中把反映這些理論的規程 speci.cation 基於這些理論寫出的演算法,以及描述演算法性質的引理和定理一起呈現給讀者.這些演算法在一種實際程式語言裡的實現是本書的中心.雖然規程主要是供人閱讀,但它們也應該 或者...