物件和類的理解

2022-07-01 14:09:12 字數 2423 閱讀 9358

什麼是物件

程式中的物件是對現實物件的抽象。現實中的物件包括可感知的物體以及思維中的概念。例如,天鵝、鬧鐘、飛機等各種物體可以看做乙個個的物件,學校、公司、家庭等概念也可以看做乙個個的物件。現實物件有乙個特點,即它是具有屬性和行為的整體。例如乙個鬧鐘具有當前時間刻度、預定時間等「屬性」,並具有指示時間、響鈴等「行為」;而學校則具有學生、教師等「屬性」,並具有招生、教育等「行為」。在程式中,屬性可以抽象成資料,而行為可以抽象成函式,乙個資料和函式的集合就構成了乙個物件。

提示程式中的物件是乙個整體,其屬性和行為不可分離。要訪問物件的屬性(資料)和行為(函式)只能通過物件進行。例如要檢視鬧鐘的「當前時間」或「預定時間」,只能通過鬧鐘這個物件進行,指示時間和響鈴也只能通過鬧鐘進行。由此帶來的乙個好處是可以對相關的資料和函式按照需要分類管理,從而提高程式**的可讀性,以及軟體的可維護性。

例如,在程式中表示乙個鬧鐘物件,可以先定義乙個表示時間的結構體time(其成員可以是三個整數,分別表示時、分、秒),然後用time的兩個變數分別表示「當前時間」和「預定時間」屬性。對於「指示時間」和「到時響鈴」兩種行為,可以分別用兩個函式表示,如圖12-1所示,左圖是現實中的鬧鐘物件,右圖是程式中的鬧鐘物件。

什麼是類

無論是在現實世界中,還是在程式中,物件都是乙個完整的個體,而這些個體都可以按照某種規則進行分類。例如乙個鬧鐘就屬於鬧鐘類,乙個三角形就屬於三角形類。分類的規則是物件的屬性相同(數量相同,型別也相同),行為也相同。

例如所有鬧鐘都具有形狀、當前時間、預定時間等屬性。這些屬性的個數相同,不同鬧鐘的相同屬性的型別也相同。另外,所有鬧鐘都具有指示當前時間、到時響鈴等行為。因此,所有的鬧鐘都可以歸為鬧鐘類,如圖12-2所示。

說明同一類的不同物件是靠屬性值區別的。例如在圖12.2中,各個鬧鐘的「形狀」屬性互不相同,當前時間和預定時間屬性值也都不盡相同,由此可以區分不同的鬧鐘物件。如果同一類的兩個物件的屬性值完全相同,則兩個物件就是相同(相等)的。

為了在程式中表示乙個物件,應當採用一種特殊的資料結構來整合資料和函式。在c語言中結構體雖然可以用來整合資料,但不能用來整合函式。所以c++語言採用了特殊的資料結構類(class)來整合資料和函式,而類的變數就是物件。同結構體一樣,類也是可以自定義的,即開發者可以設定類中包含的資料以及函式。例如,乙個鬧鐘類的定義如下:

class alarmclock

;類與物件的關係就是型別與變數的關係。在程式中要使用乙個物件,就用這個類宣告乙個變數,這個變數就是所需的物件。例如宣告並使用乙個鬧鐘物件:

alarmclock clock;                      // 建立乙個鬧鐘物件

clock.showcurtime();                   // 顯示鬧鐘的當前時間

clock.alarm();                         // 響鈴

提示本節只給出了類的簡單定義,有關類的詳細說明,請參考下一章的內容。

物件的特徵

物件有三個重要的特徵:封裝性、繼承性和多型性。由於程式中的物件是對現實物件的模擬,所以在學習物件的時候,讀者也可以將這兩種物件對比起來理解。

封裝性物件從組成上來講是資料和函式的集合。但是對於物件的使用者而言,並不能訪問這個集合中的所有部分。使用者只能訪問物件暴露出來的、可以被外部使用的部分,這些部分也可以看做物件的介面。而其他未暴露出來的部分則是物件的私有屬性或者私有函式。私有屬性和私有函式是為了實現物件的介面而存在的。

在前面的插圖中,鬧鐘的時間、鬧鈴屬性以及指示時間、到時響鈴行為就是鬧鐘物件的對外介面,即外部使用者能夠訪問到的部分。而為了實現這些屬性和行為,在物件的內部往往還有一些隱藏的部分,比如指標轉動速度、預定響鈴時間等私有屬性,以及驅動指標轉動、計算是否到預定時間等私有函式。

程式中的物件具有封裝性,這一點同現實中的物件是一致的。人們在使用鬧鐘時,根本不需要知道其內部是怎麼實現的,而設計鬧鐘的人也無意向使用者暴露其中的細節。

繼承性繼承是一種邏輯上的層次關係。在人類的思維中,有這樣一種層次性的分類方法,即將一些事物按照一般到特殊的關係,先分成大類,再分成小類,各個小類也可以繼續細分。大類與小類就構成了一種邏輯上的層次關係。大類(高層的類)稱做基類(或者父類),小類(低層的類)稱做派生類(或者子類)。基類與派生類的關係就是繼承關係,派生類繼承自基類。

多型性多型性指的是同一行為在基類和派生類間,以及各個派生類間的表現並不相同。這裡所說的同一行為,指的是在基類裡定義並由各個派生類繼承的函式。由於基類在定義這個函式時考慮的是一般的情況,並沒有針對各種特殊情形,所以派生類往往需要重新定義這個函式。當系統執行時,雖然使用的是同乙個函式名,但具體呼叫的函式卻是被派生類重新定義的版本。由於不同的派生類有不同的定義,從而乙個行為就會表現出不同的形式,也就是多型。

例如對於各種學校類,作為學校的基本功能,定義基類「學校類」時就應當定義招生、教育、考試等各種行為。但對於各種具體的學校類,如小學、中學、大學等,這些行為又是有差別的,必須根據各自的具體情況進行重新定義。當說乙個學校招生時,不同的學校有不同的招生物件、方法等,所以招生這個行為就在不同種類的學校間表現出了多型性

理解類和物件

語法 訪問修飾符 返回值型別 方法名 引數列表 1.訪問修飾符 這裡介紹兩個,public 公有的 private 私有的 2.方法的返回值型別 int整型,float浮點型,double雙精度型,bool布林型,string字串型別等 3.方法名 自定義方法名都要有乙個名稱,方法的名稱應該有明確的...

對類和物件的理解

物件是類的乙個例項,比如人類這個概念是類,具體到某個人就是物件 我知道類在寫程式的時候是class這個程式塊,但不知道程式塊裡面什麼可以被稱為物件,感覺在源 裡,類是乙個具體的概念,因為我知道class宣告的就是乙個類 物件反而成了抽象的了。我的理解 當你說 人類 的時候,它有姓名年齡身高體重等各種...

物件導向的理解 和 類

物件導向的理解 和 類 萬物皆物件 類是抽象 的 比如 人類 看得到摸得到嗎 命名規範 查 類定義 屬性方法 public class person 在同乙個目錄下不用匯入 public test同乙個類宣告的不同物件儲存在不同的儲存空間 同乙個類的不同物件共享累的方法 無參無返回 這些個有參無參什...