Class與Type的區別與聯絡

2021-03-31 08:56:29 字數 1324 閱讀 7705

今天上"軟體方法學", 許滿武老師提問:

" 類與型別有什麼區別? "

眾座的回答皆不能令許老師滿意.

下課後google了一篇文章, 是在某人的blog裡頭的.

文章結尾署名為

徐家福居然是徐先生寫的. 為表敬仰之情, 現抄錄如下

1:型別的概念

概念:型別刻劃了一組值及其上可施行的操作,可理解為值集和操作集構成的二元組。

型別的概念與值的概念相對立,前者是程式中的概念,後者則是程式執行時的概念,兩者通過標識值的語言成分(例如,變數、表示式等)聯絡起來。

比如變數

v說明為具有型別

t,型別

t所刻劃的值集為

,則變數

v執行時能取且只能取某個

vi為值。由此可見,型別規定了具有該型別的變數或表示式的取值範圍。

2:類與型別

a:共性

在物件式語言中,「值」為物件(或物件指引,但本質上仍為物件)。所以,物件式語言中的型別刻劃了一組物件及其上可施行的操作。型別所刻劃的物件稱為型別的例項。類也刻劃了一組物件。

兩者的共性在於二者均刻劃了一組物件及其上的操作(在前面關於類的討論中,並未強調類刻劃物件上的操作這一事實),所以,既可以說物件是型別的例項,也可以說物件是類的例項,型別和類在與物件的關係上是相同的。不過,型別欲刻劃一組物件及其上的操作,必須借助於類,因為類是達到這種目的的唯一設施。由此可見,型別是以類為基礎的,是通過類來定義的,這體現了二者的聯絡。

b:區別

l作用不同

類是程式的構造單位,是描述一組物件及其上操作的唯一語言成分,故其作用主要是具體描述這組物件,提供執行時建立這些物件的「模板」。例如,基於類間的繼承關係的派生類定義設施就反映了類在描述物件方面的作用。

型別則是標誌變數或表示式取值範圍的一種語言成分,其作用主要是對這些變數或表示式執行時的取值進行約束。例如,對賦值語句左部的變數和右部的表示式的型別匹配檢查就反映了型別的約束作用。

l與物件聯絡的緊密程式不同

類描述物件的具體形式和其上可施行的具體操作,且強調所描述的一組物件的共性,因而,與具體物件聯絡較密切,而與物件集的大小則聯絡較少。

型別強調所描述的一組物件的範圍和可施行操作的範圍,與物件集的大小聯絡較密切,而與其中具體物件則聯絡較少。

l並不是所有類都可直接作為型別使用

類是型別的基礎,型別靠類來定義,有些類可直接作為型別來使用,在這種意義下,我們也可稱這些類是型別。

但是,也有一些類不能直接作為型別來使用,這是因為,從型別的約束作用來看,型別強調所刻劃的物件的確定性,即物件範圍的確定性。因此,只有所描述的物件的範圍確定的類才可直接用作型別。

我覺得大家都應該靜下心來,仔細的讀一讀這篇文章。原作:徐家福

C 中struct與class的區別以及聯絡

上一周因為參加乙個比賽,整個都投入進去了,也就荒廢了看書以及部落格,不過不代表沒有遇到新的問題。在比賽中,我用到了結構體struct,在我過去的印象裡,struct代表結構體,主要存放一些資料變數,打包起來,成為乙個整體,不過前段時間在c primer書上類那一章看到,struct與class似乎是...

isinstance 與type 的區別

isinstance 與 type 區別 type 不會認為子類是一種父類型別,不考慮繼承關係。isinstance 會認為子類是一種父類型別,考慮繼承關係。如果要判斷兩個型別是否相同推薦使用 isinstance eg.isinstance isinstance true bool true is...

struct與class的區別

如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class...