更新時(shí)間:2023年11月23日14時(shí)05分 來(lái)源:傳智教育 瀏覽次數(shù):
抽象數(shù)據(jù)類(lèi)型(Abstract DataType,ADT)是指一個(gè)數(shù)學(xué)模型以及定義在這個(gè)模型上的一組操作。抽象數(shù)據(jù)類(lèi)型的定義僅僅取決于它的一組邏輯特性,而與它在計(jì)算機(jī)中的表示和實(shí)現(xiàn)無(wú)關(guān)。
抽象數(shù)據(jù)類(lèi)型有兩個(gè)重要特征:數(shù)據(jù)抽象和數(shù)據(jù)封裝。
所謂數(shù)據(jù)抽象是指用ADT描述程序處理的實(shí)體時(shí),強(qiáng)調(diào)的是其本質(zhì)的特征,無(wú)論內(nèi)部結(jié)構(gòu)如何變化,只要本質(zhì)特性不變,就不影響其外部使用。例如,在程序設(shè)計(jì)語(yǔ)言中經(jīng)常使用的數(shù)據(jù)類(lèi)型int,它就可以理解為是一個(gè)抽象數(shù)據(jù)類(lèi)型,在不同的計(jì)算機(jī)或操作系統(tǒng)中,它的實(shí)現(xiàn)方式可能會(huì)有所不同,但它本質(zhì)上的數(shù)學(xué)特性是保持不變的。例如,int類(lèi)型的數(shù)據(jù)指的是整數(shù),可以進(jìn)行加減乘除模等一些運(yùn)算,int類(lèi)型數(shù)據(jù)的這些數(shù)學(xué)特性保持不變,那么在編程者來(lái)看,它們都是相同的。因此數(shù)據(jù)抽象的意義在于數(shù)據(jù)類(lèi)型的數(shù)學(xué)抽象特性。
而另一方面,所謂的數(shù)據(jù)封裝是指用戶(hù)在軟件設(shè)計(jì)時(shí)從問(wèn)題的數(shù)學(xué)模型中抽象出來(lái)的邏輯數(shù)據(jù)結(jié)構(gòu)和邏輯數(shù)據(jù)結(jié)構(gòu)上的運(yùn)算,需要通過(guò)固有數(shù)據(jù)類(lèi)型(高級(jí)編程語(yǔ)言中已實(shí)現(xiàn)的數(shù)據(jù)類(lèi)型)來(lái)實(shí)現(xiàn),它在定義時(shí)必須給出名字及其能夠進(jìn)行的運(yùn)算操作。一旦定義了一個(gè)抽象數(shù)據(jù)類(lèi)型,程序設(shè)計(jì)中就可以像使用基本數(shù)據(jù)類(lèi)型那樣來(lái)使明它。例如,在統(tǒng)計(jì)學(xué)生信息時(shí),經(jīng)常會(huì)使用姓名、學(xué)號(hào)、成績(jī)等信息,可以定義一個(gè)抽象數(shù)據(jù)類(lèi)型student,它封裝了姓名、學(xué)號(hào)、成績(jī)3個(gè)不同類(lèi)型的變量,這樣操作student的變量就能很方便地知道這些信息了。C語(yǔ)言中的結(jié)構(gòu)體以及C++語(yǔ)言中的類(lèi)等都是這種形式。
抽象數(shù)據(jù)類(lèi)型在定義時(shí)遵循一定的格式規(guī)范,一般抽象數(shù)據(jù)類(lèi)型的定義格式如下所示:
ADT抽象數(shù)據(jù)類(lèi)型名 { Data: 數(shù)據(jù)元素之間邏輯關(guān)系的定義; Operation: 操作1; 操作2; }
使用它的人可以只關(guān)心它的邏輯特征,不需要了解它的存儲(chǔ)方式。定義它的人同樣不必關(guān)心它如何存儲(chǔ)。
抽象數(shù)據(jù)類(lèi)型的定義由一個(gè)值域(Data)和定義在該值域上的一組操作(Operation)組成,若按其值的不同特性,可將抽象數(shù)據(jù)類(lèi)型細(xì)分為3類(lèi):
(1)原子類(lèi)型。這種類(lèi)型的變量,值是不可分解的。例如int、char等這些數(shù)據(jù)類(lèi)型就無(wú)法再分解,屬于原子類(lèi)型的數(shù)據(jù)類(lèi)型。一般較少定義這種抽象數(shù)據(jù)類(lèi)型,因?yàn)楣逃袛?shù)據(jù)類(lèi)型基本都能滿(mǎn)足程序設(shè)計(jì)。
(2)固定聚合類(lèi)型。這種抽象數(shù)據(jù)類(lèi)型,其值是由確定數(shù)目的成分按一定的結(jié)構(gòu)組成的。例如,以上提到的student抽象數(shù)據(jù)類(lèi)型由姓名、學(xué)號(hào)、成績(jī)3個(gè)成分按照先后順序組成。
(3)可變聚合類(lèi)型。與固定聚合類(lèi)型相比,構(gòu)成可變聚合類(lèi)型值的成分的數(shù)目不確定。例如,定義一個(gè)“字符序列”,其中序列長(zhǎng)度是可變的,我們并不知道會(huì)有多少個(gè)字符來(lái)組成這個(gè)序列。
抽象數(shù)據(jù)類(lèi)型可以更好地使程序設(shè)計(jì)模塊化,在模塊內(nèi)部給出這些數(shù)據(jù)的表示及其操作的細(xì)節(jié),在模塊外部使用抽象的數(shù)據(jù)和抽象的操作。而且,所定義的數(shù)據(jù)類(lèi)型的抽象層次越高,含有該抽象數(shù)據(jù)類(lèi)型的軟件模塊的復(fù)用程度也就越高。
北京校區(qū)