編程思想——面向對象

所有對象——儘管各有特色——都屬於某一系列對象的一部分, 這些對象具有通用的特徵和
行爲
, class 這個關鍵字, 它爲程序引入了一個全新的類型;
強調“類型” 決定了接口,“類” 是那個接口的一
種特殊實現方式。

行出納員:有一系列出納員、 客戶、 帳號以及交易等。
每類成員(元素) 都具有一些通用的特徵: 每個帳號都有一定的餘額; 每名出納都能接收客
戶的存款; 等等。 與此同時, 每個成員都有自己的狀態; 每個帳號都有不同的餘額; 每名出
納都有一個名字。
獨一無二的實體分別表示出納員、 客戶、 帳號
以及交易。 這個實體便是“對象”, 而且每個對象都隸屬一個特定的“類”, 那個類具有自己
的通用特徵與行爲。
建好一個類後, 可根據情況生成許多對象。 隨後, 可將那些對象作爲要解決問題中存在的元
素進行處理。 事實上, 當我們進行面向對象的程序設計時, 面臨的最大一項挑戰性就是: 如
何在“問題空間”(問題實際存在的地方) 的元素與“方案空間”(對實際問題進行建模的地
方, 如計算機) 的元素之間建立理想的“一對一” 對應或映射關係。
向對象發出請求, 令其做一些實際
的事情, 比如完成一次交易、 在屏幕上畫一些東西或者打開一個開關等等。 每個對象僅能接
受特定的請求。 我們向對象發出的請求是通過它的“接口”(Interface) 定義的, 對象的“類
型” 或“類” 則規定了 它的接口形式。“類型” 與“接口” 的等價或對應關係是面向對象程
序設計的基礎。
類創
建者來說, 他們的目標則是從頭構建一個類, 只向客戶程序員開放有必要開放的東西(接口),
其他所有細節都隱藏起來。
接口”(Interface) 規定了可對一個特定的對象發出哪些請求。 然而, 必須在某個地方存在着一些代碼, 以便滿足這些請求。 這些代碼與那些隱藏起來的數據便叫作“隱藏的實現”。
一種類
型含有與每種可能的請求關聯起來的函數。 一旦向對象發出一個特定的請求, 就會調用那個
函數。 我們通常將這個過程總結爲向對象“發送一條消息”(提出一個請求)。 對象的職責就
是決定如何對這條消息作出反應(執行相應的代碼)。
對於任何關係, 重要一點是讓牽連到的所有成員都遵守相同的規則。 創建一個庫時, 相當於
同客戶程序員建立了一種關係。

控制對成員的訪問的原因

1,內部數據類型的設計思想,爲了解決特定的問題, 用戶只需操作接口
2,允許庫設計人員修改內部結構, 我們最開始可能設計了一個形式簡單的類, 以便簡化開發。 以後又決定
進行改寫, 使其更快地運行。 若接口與實現方法早已隔離開, 並分別受到保護, 就可放心做
到這一點, 只要求用戶重新鏈接一下即可。

設置類邊界

public, private,
protected 以及暗示性的 friendly。 若未明確指定其他關鍵字, 則默認爲後者。 這些關鍵字的
使用和含義都是相當直觀的, 它們決定了誰能使用後續的定義內容。“public”(公共) 意味
着後續的定義任何人均可使用。 而在另一方面,“private”(私有) 意味着除您自己、 類型的
創建者以及那個類型的內部函數成員, 其他任何人都不能訪問後續的定義信息。 private 在您
與客戶程序員之間豎起了 一堵牆。 若有人試圖訪問私有成員, 就會得到一個編譯期錯誤。
“friendly”(友好的) 涉及“包裝” 或“封裝”(Package) 的概念——即 Java 用來構建庫的
方法。 若某樣東西是“友好的”, 意味着它只能在這個包裝的範圍內使用(所以這一訪問級
別有時也叫作“包裝訪問”)。“protected”(受保護的) 與“private” 相似, 只是一個繼承的
類可訪問受保護的成員, 但不能訪問私有成員。

代碼或設計方案的重複使用是面向對象的程序設計

“創建一個成員對象”
重複使用一個類, 最簡單的辦法是僅直接使用那個類的對象。 但同時也能將那個類的一個
對象置入一個新類。
** 新類可由任意數量和類型的其他
對象構成。 **
新類達到了設計要求即可。 這個概念叫作“組織” ——在現有類
的基礎上組織一個新類。 有時, 我們也將組織稱作“包含” 關係。

對象的組織具有極大的靈活性

新類的“成員對象” 通常設爲“私有”(Private), 使用這個
類的客戶程序員不能訪問它們。 這樣一來, 我們可在不干擾客戶代碼的前提下, 從容地修改
那些成員。 也可以在“運行期” 更改成員, 這進一步增大了靈活性。 後面要講到的“繼承”
並不具備這種靈活性, 因爲編譯器必須對通過繼承創建的類加以限制。
“繼承應當隨處可見”。 沿這種思路產生的設計將是
非常笨拙的, 會大大增加程序的複雜程度。 相反, 新建類的時候, 首先應考慮“組織” 對象;
這樣做顯得更加簡單和靈活。 利用對象的組織, 我們的設計可保持清爽。 一旦需要用到繼承,
就會明顯意識到這一點。

繼承: 重新使用接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章