日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言 如何创建adt_编程那些事儿:面向对象编程基石之数据抽象(ADT)

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 如何创建adt_编程那些事儿:面向对象编程基石之数据抽象(ADT) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據抽象

本文接上一篇《編程那些事兒:為什么說抽象是面向對象編程的根基【1】?》,

在了解了面向對象編程抽象的過程抽象后,下面我們繼續聊一下數據抽象

數據抽象可以說面向對象編程最重要的基石。而數據抽象的結果就是數據類型(或簡單的類型),它一般由以下三個部分定義:

  • 一組值(或數據對象)。
  • 一組操作,可應用于該集合中的所有值。
  • 一種數據表示,它決定如何存儲值。

通常編程語言會提供一些預定義的數據類型,稱為內置數據類型

他們也允許程序開發人員定義自己的數據類型,這被稱為用戶定義的數據類型

由原子值和不可分割值組成的數據類型稱為原始數據類型,它的定義不需要任何其他數據類型的幫助。例如,Java具有內置的基元數據類型,比如int, float, boolean, char等。

按照數據抽象的組成結構,Java中定義int基元數據類型的三個組成部分如下:

  • 值:int數據類型由-2147483648和2147483647之間的所有整數組成。
  • 操作:為int數據類型定義了加法、減法、乘法、除法、比較等操作。
  • 數據表示:int數據類型的值以2的補碼形式在32位內存中表示。

int數據類型的所有三個組件都是由Java語言預定義的。開發人員不能擴展或重新定義int數據類型的定義。

我們具體拿int 類型看一下它的抽象內容,比如:

int i;

該語句說 i 是一個名稱(技術上稱為標識符),可以與定義int數據類型值的一組值中的一個值關聯。

例如,可以使用下面的賦值語句將整數100與名稱i關聯:

i = 100;

在此階段,您可能會問,“與i關聯的值100存儲在內存中何處?” 根據int數據類型的定義,i將占用32位內存。

但是,您不知道,不能知道,也不需要知道在內存中為i分配32位空間的位置,這樣做也是一種抽象。在像Java這種高級語言中,像這樣的抽象的例子比比皆是。

面向對象編程語言

在本例中,關于int數據類型的數據值的數據表示內存形式對數據類型的用戶(程序員)來說是隱藏的。

換句話說,程序員會忽略i的內存位置,而專注于它的值和可以在其上執行的操作。

程序員并不關心i的內存是分配在寄存器、RAM還是硬盤中。

面向對象的編程語言(如Java)允許我們使用抽象機制創建新的數據類型稱為數據抽象。

以此創建的新的數據類型被稱為抽象數據類型(ADT)

ADT的數據對象可能包括原始數據類型和其他ADT的組合,ADT定義了一組可以應用于其所有數據對象的操作,但其數據表示卻總是隱藏在ADT中。

對于ADT的用戶來說,他們只知道如何操作該數據,只能使用這些操作來處理它的數據元素。

使用數據抽象的好處是,它的數據表示可以在不影響使用ADT的任何代碼的情況下進行更改。

總結一下,數據抽象允許程序員創建一個稱為抽象數據類型的新數據類型,其中數據對象的存儲表示形式對數據類型的用戶是隱藏的。

換句話說,ADT僅僅是根據可以應用于其類型的數據對象的操作來定義的,而不需要知道數據的內部表示形式。

這種數據類型之所以稱為抽象,是因為ADT的用戶從來沒有看到過數據值的表示。

用戶以抽象的方式查看ADT的數據對象,方法是在不了解數據對象表示細節的情況下對它們應用操作。

當然,ADT并不意味著數據類型構成中沒有數據表示。數據表示在ADT中是肯定存在的,只是對用戶隱藏了數據表示而已。

Java有一些數據結構構造,比如類、接口、注釋和枚舉,這些構造都允許我們用它來定義新的ADT。

注意在我們使用一個類來定義一個新的ADT時,需要小心地隱藏數據表示,這樣我們的新數據類型就真的是抽象的了。

如果我們Java類中的沒有隱藏數據表示,該類將創建一個新的數據類型,而不再是ADT。

Java中的類提供了一些特性,我們可以使用這些特性公開或隱藏數據表示。

數據抽象編碼

在Java語言中,我們拿類Class這個抽象數據類型來看它的三個組成部分:

其中數據類型是Object,其操作方法是methods,數據類型的表示就是我們的定義的私有字段。

我們可以通過Class中定義的方法來實現對字段(數據表示)的操作。

在Java語言中,有一個純種的ADT,那就是接口(interface),它只提供了數據的操作部分,而沒有具體的實現。

而它的數據值部分和數據表示部分都是實現它的具體類提供的。

public class Person{private String name;private String gender;public Person(String name, String gender){this.name = name;this.gender = gender;}public String getName(){return name;}public void setName(String name){this.name = name;}public String getGender(){return gender;}}

比如:使用Java語言語法定義Person類。通過定義一個名為Person的類,我們就創建了一個新的ADT。

我們定義內部屬性name和gender就是其內部數據表示,它們使用String數據類型(String是Java類庫提供的內置ADT)。

我們可以注意到,Person類的定義在name和gender聲明中使用private關鍵字來隱藏它。所以Person類的用戶不能訪問name和gender數據元素。

它提供了四個操作:一個構造函數和三個方法(getName、setName和getGender)。

構造函數操作用于初始化新構造的Person類型的數據對象。getName和setName操作分別用于訪問和修改name數據元素。

getGender操作用于訪問性別數據元素的值。

Person類的用戶只能使用這四個操作來處理Person類型的數據對象。

Person類型的用戶不知道用于存儲name和gender數據元素的數據存儲類型。

我上面使用了三個詞,“數據類型”、“類”和“接口”,其實在某種意義上說,它們可以互換使用,因為它們在數據類型上下文中的意思是相同的。

它讓Person類型的開發人員可以自由地更改name和gender數據元素的數據表示形式,而不會影響任何Person類型的用戶。

假設其中一個Person類型的用戶有以下代碼片段:

Person john = new Person("Si Li

總結

以上是生活随笔為你收集整理的c语言 如何创建adt_编程那些事儿:面向对象编程基石之数据抽象(ADT)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。