類的特徵

一、封裝性
類的封裝性是指把數據和代碼組合在一個結構中。
對類最基本的理解是把數據和代碼組合在同一個結構中,這就是類的封裝特性。將對象的數據域封閉在對象的內部,使得外部程序必需而且只能使用正確的方法才能對要讀寫的數據域進行訪問。封裝性意味着數據和代碼一起出現在同一結構中,如果需要的話,可以在數據周圍砌上“圍牆”,只有用對象類的方法才能在“圍牆”上打開缺口。
注意:
1、保持良好的類的接口(屬性或方法,和interface是兩個概念,以下統稱接口)
假如有一個類,他的一部分接口用來操作堆棧,一部分接口用來從數據庫中提取數據,還有一部分接口用來控制打印走紙,那麼,這個類看上去真的比較亂,因爲用戶不知道你這個類到底是爲什麼編寫的,這樣的類也就不能稱之爲類了。看上去更像是把一堆風馬牛不相及的函數死拉硬拽到一起“湊份子”湊出來的“累”。
一個封裝良好的類,應該有一個一致性的接口,也就是說,類提供給外界使用的所有接口都應該是有關聯的,上面的類其實我們可以寫成三個類比較好:一個類用來操作數據庫、一個類用來操作堆棧、一個類用來控制打印機走紙。
這樣設計的好處是能讓人一看就清楚的知道,你這個類到底是圍繞什麼來工作的,就像我們寫作文也必須有一箇中心思想一樣,如果沒有中心思想,那麼這篇作文也就不叫作文了,而是流水帳了。
在任何時候,都不要有“寫一個萬能類”的想法。
2、注重隱藏信息
在編寫類的時候,我們應該非常清楚的知道,這個類有哪些信息是不需要外界訪問的,就像司機開汽車,司機只需要知道怎麼弄方向盤,怎麼踩離合器,怎麼剎車和提速就可以了。而有關汽車內部發動機的工作原理,司機並不需要知道。
當我們在拿到一個類的CODE的時候,除非你是爲了學習,否則你應該忍住看私有域所有實現代碼的衝動。雖然現在提倡開源,但是我想開源的目的是爲了提高相互交流,而並不是爲了讓你可以把原本私有的、外界無法訪問的接口對外開放。如果你把原先外界無法訪問的域信息全部對外公開了,那麼你這個類存在就無任何意義了。
3、使用屬性在類與類之間傳遞數據
例如:TControl類的Left、Top、Width、Height四個屬性,如果它是以變量的方式來提供給外部直接使用的話,我們設想一下一個這樣的需求:假如我們要改變一下組件寬度,並且改變寬度後要在組件最右邊繪製一張位圖,那麼當外界改變了組件寬度時,由於這個變量是直接供外界讀寫的,它在被寫而發生改變的時候,組件無法得到通知,因此也就無法實現重畫位圖的需求了。
而在屬性定義的時候,你必須指定一個read限定符和一個write限定符(read 或 write 都可選 但你至少必須指定一個限定符),當你爲一個屬性的write限定符指定了一個方法(Delphi中必須是一個過程)時,當你執行如:TControl.Width:= 0;這樣的代碼時,編譯器會自動爲你調用write指定的方法,這樣我們就可以在屬性發生改變的時候讓類去執行一些有關的操作,換言之就是類可以得到屬性值被修改的通知而做出相應的動作。
同樣,當我們需要讓外部訪問類中私有部分的一個變量但不允許改動的時候,我們可以爲類添加一個屬性,並只指定read限定符來指向這個變量,不用write限定符,從而限制爲只讀。
二、繼承性
對象的繼承性是指把一個新的對象定義爲一個對象的的後代。
繼承性的含義直接而且顯然。它是指把一個新的對象定義成爲已存在對象的後代;新對象繼承了舊類的一切東西。在往新對象中添加任何新內容以前,父類的每一個字段和方法都已存在於子類中,父類是創建子類的基石。
三、多態性
對象的多態性是指在對象的體系中把設想和實現分開的手段。
多態性是在對象體系中把設想和實現分開的手段。如果說繼承性是系統的佈局手段,多態性就是其功能實現的方法。多態性意味着某種概括的動作可以由特定的方式來實現,這取決於執行該動作的對象。多態性允許以類似的方式處理類體系中類似的對象。根據特定的任務,一個應用程序被分解成許多對象,多態性把高級設計處理的設想如新對象的創建、對象在屏幕上的重顯、程序運行的其它抽象描述等,留給知道該如何完美的處理它們的對象去實現。

發佈了31 篇原創文章 · 獲贊 29 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章