34
資資資資資資 Java 第 4 第 Java 第第第第ADT 第第第 1

資料結構使用 Java

  • Upload
    giona

  • View
    73

  • Download
    0

Embed Size (px)

DESCRIPTION

資料結構使用 Java. 第 4 章 Java 程式複習、 ADT 與串列. 課程內容. 複習 -Java 程式設計 類別物件 建構元 資料結構 抽象資料型態 ADT 串列 – 陣列的應用實例. 類別與物件. 類別的內容 定義類別 建立新物件 存取物件內容. 資料成員、成員函數與封裝. 「類別」就是把事物的資料與相關功能「 封裝 」( encapsulate )在一起 「 encapsulate 」的原意是「將 ... 裝入膠囊內」 類別可看成是「膠囊」 資料成員 與 成員函數 可看成是被裝入的東西. - PowerPoint PPT Presentation

Citation preview

Page 1: 資料結構使用 Java

資料結構使用 Java第 4 章 Java 程式複習、 ADT 與串列

1

Page 2: 資料結構使用 Java

課程內容•複習 -Java 程式設計

▫類別物件▫建構元

•資料結構▫抽象資料型態 ADT▫串列 – 陣列的應用實例

2

Page 3: 資料結構使用 Java

類別與物件類別的內容定義類別建立新物件存取物件內容

3

Page 4: 資料結構使用 Java

資料成員、成員函數與封裝• 「類別」就是把事物的資料與相關功能「封裝」

( encapsulate )在一起 ▫ 「 encapsulate 」的原意是「將 ... 裝入膠囊內」

• 類別可看成是「膠囊」▫ 資料成員與成員函數可看成是被裝入的東西

4

類別是由「資料成員」與「成員函數」封裝而成

Page 5: 資料結構使用 Java

矩型類別的認識5

矩型類別: 資料成員為 width 與 height

成員函數為 area() 與 perimeter()

Page 6: 資料結構使用 Java

類別的定義6

類別定義的語法如下:

class 類別名稱 { 資料型態 field 名稱 ; ...

傳回值的資料型態 method 名稱 ( 引數 1, 引數 2,...) { 程式敘述 ; return 運算式 ; } ... }

類別的定義格式

宣告 field

method 的本體 (body)

定義 method 的內容

Page 7: 資料結構使用 Java

矩形類別的範例• 以矩形為例,可定義如下的矩形類別:

7

本書大寫 C 為開頭的識別字做為類別的名稱,方便和其它變數做區隔

Page 8: 資料結構使用 Java

8

建立新物件•類別只是一個模版:

▫利用它才能建立屬於該類別的物件( object )

•以矩形類別來說,從定義類別到建立物件,可想像成:▫先打造一個矩形模版 ( 定義類別 )▫再以此模版製造矩形 ( 建立物件 )

•由類別所建立的物件稱為該類別的 instance( 實例 )

Page 9: 資料結構使用 Java

9

矩形類別的物件•下圖是由矩形類別所建立的矩形物件 rect1 :

Page 10: 資料結構使用 Java

10

宣告與建立物件 欲建立某類別的物件,可藉由下面兩個步驟來達成:

(1) 以類別名稱宣告變數 (2) 利用 new 建立新的物件,並指派給先前所建立的變數 例如:

或是縮減成一行:

Page 11: 資料結構使用 Java

存取物件的內容11

存取物件裡的特定資料成員,可透過下面語法來達成:

物件名稱 . 資料成員名稱

存取物件裡特定的資料成員

舉例來說,存取物件 rect1 的寬與高,可用下列方式:

Page 12: 資料結構使用 Java

設定物件的寬與高12

想要將物件寬與高設值,其程式碼的撰寫如下:

Page 13: 資料結構使用 Java

this 的使用• 要強調「物件本身的 field 」時,可在 field 前面加上

this : this. 資料成員名稱

▫ 下面的程式碼片段是冠上 this 的寫法:

13

Page 14: 資料結構使用 Java

建構元的基本認識 • 建構元( constructor )是幫助新建立的物件設定初

值 • 建構元的名稱必須與其所屬之類別的類別名稱相同• 建構元可視為一種特殊的 method ,其語法如下:

14

修飾子 類別名稱 ( 型態 1 引數 1, 型態 2 引數 2,...) { 程式敘述 ; .... }

建構元的定義格式

建構元沒有傳回值

建構元的名稱必須和類別名稱相同可以是 public 或 private

Page 15: 資料結構使用 Java

建構元的呼叫時機 • 一般的 method

▫ 在需要用到時才呼叫• 建構元

▫ 在建立物件時,便會自動呼叫,並執行建構元的內容 ▫ 建構元可對物件的資料成員做初始化的設定▫ 初始化( initialization )就是設定物件的初值

15

Page 16: 資料結構使用 Java

建構元的使用範例16

Page 17: 資料結構使用 Java

建構元的省略 • 如果省略建構元

▫ Java 會呼叫預設的建構元( default constructor )▫ 預設的建構元是沒有任何引數的建構元,格式如下:

• 如果自行撰寫建構元,無論是否有引數,則 Java 會假設已備妥所有的建構元,不會再提供預設的建構元

17

public CCircle()

{

}

預設建構元的格式

Page 18: 資料結構使用 Java

資料結構抽象資料型態 ADT串列 – 陣列的應用實例

18

Page 19: 資料結構使用 Java

抽象資料型態 - ADT 的涵義•抽象資料型態 (ADT , abstract data types)

在設計上希望做到隱藏內部細節、展現平易外觀的目的,也就是讓使用者能善用資料結構,卻不必了解其內部的運作細節。

•理論上,我們常把 ADT 定義為將資料規格 (specification) 與實作 (implementation) 分開的資料型態。

Page 20: 資料結構使用 Java

ADT 的實例

Page 21: 資料結構使用 Java

陣列的基本操作•陣列的作用是提供循序的空間供我們使用•只需用一個唯一的索引值,便能任意指定要放入

或取出哪一個位置內的資料

•因此陣列的基本操作也就非常簡單,只有『產生』、『寫入』、與『讀取』三個動作。

•有很多實際應用的概念或事物都適合用陣列來表示,最常見的是串列、矩陣 (matrix) 與多項式 (polynomial) 。

Page 22: 資料結構使用 Java

串列的資料結構設計•串列的大小會隨著串列的使用而不斷地改變,但

陣列的大小在宣告以後就固定了。

Page 23: 資料結構使用 Java

串列的操作與處理方法•串列的操作包括 :

▫新增元素到串列尾端 (append)▫讀取元素 (read)▫寫入 (write)▫將元素插入到串列中 (insert)▫刪除元素 (delete)▫傳回串列的元素數目 (listSize)▫以及傳回儲存串列的陣列大小 (arraySize) 。

Page 24: 資料結構使用 Java

串列的程式實作•[ 串列的 ADT] list.java檔案: list.java

1. public interface list {

2. void append(int element);

3. void insert(int position, int element);

4. int delete(int position);

5. int sizeOfList();

6. int read(int position);

7. void write(int position, int value);

8. void printList();

9. }

Page 25: 資料結構使用 Java

串列的程式實作•[ 串列的主程式 ] testList.java

25

Page 26: 資料結構使用 Java

[ 串列的產生 ]

•[ 串列的實作程式 ] myList.java•下面用一維陣列來儲存串列•另外使用一個程式變數 listSize 來記載串列的長度,也就是串列元素的數目。

int myArray[ ];int listSize=0;

•透過建構元進行初始化動作

Page 27: 資料結構使用 Java

[ 新增元素到串列尾端 (append)]

•把元素新增到串列尾端並不影響其他的串列元素•可以用 listSize 來決定新增的元素的位置•完成操作以後 listSize 的值要加上 1 ,因為串列多了一個元素。

myArray[listSize] = element

Page 28: 資料結構使用 Java

[ 插入一個串列元素 (insert)]

•有時候可能需要將新元素插入到串列的特定位置,這時就要有個更複雜的插入動作。

Page 29: 資料結構使用 Java

[ 插入一個串列元素 (insert)]

Page 30: 資料結構使用 Java

[ 刪除一個串列元素 (delete)]

•刪除一個串列元素,後面的串列元素要往前補•以下的例子把 myArray[1] 裡頭儲存的數字從串

列中移除,所以後面的數字必須往前補到空出來的陣列位置上。

Page 31: 資料結構使用 Java

[ 刪除一個串列元素 (delete)]

Page 32: 資料結構使用 Java

[ 讀取 (read)]

•要從串列讀取資料,必須指定元素的位置。

•由於串列元素是按先後順序不間斷地儲存在陣列中,所以串列元素在串列中的次序剛好就是該元素儲存在陣列上對應的索引。

Page 33: 資料結構使用 Java

[ 寫入 (write)]

•提供一個值,並指定接收這個值的串列位置

•寫入同樣可以透過函式的呼叫來執行,或者直接在程式中將一個變數或常數的值直接透過索引存入到串列的正確位置。

Page 34: 資料結構使用 Java

[ 列出所有串列元素 (printList)]

•將串列中的元素一一地列印出來,用來列印出目前串列中的元素。串列元素的數目由 listSize 來決定。

for (int i=0; i<listSize; i++)System.out.print(this.myArray[i]+" ");