chương 03 lỚp – kiỂu dỮ liỆu trỪu tƯỢng class – abstract data type

81
Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 1/81 Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Upload: ivi

Post on 21-Jan-2016

61 views

Category:

Documents


0 download

DESCRIPTION

Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE. Ôn tập. ADT : Khaí quát hóa một tập đối tượng thành một kiểu dữ liệu. ADT có thể là một cấu trúc hoặc một class. Object = các thuộc tính mô tả (thành phần dữ liệu)+ các hành vi (thành phần hàm) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 1/81

Chương 03LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG

CLASS – ABSTRACT DATA TYPE

Page 2: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 2/81

Ôn tập• ADT : Khaí quát hóa một tập đối tượng thành một kiểu dữ liệu.• ADT có thể là một cấu trúc hoặc một class.• Object = các thuộc tính mô tả (thành phần dữ liệu)+ các hành vi

(thành phần hàm)• class: ADT cho một tập các đối tượng tương tự nhau (cùng data,

cùng functions).• Instance: Một mô tả của đối tượng trong bộ nhớ của chương trình.• Ba khái niệm cơ bản trong OOP: Đóng gói, Thừa kế, đa hình.• Đóng gói (encapsulation) : Gói dữ liệu + hành vi (code), bên ngoài

chỉ có thể truy cập một số thuộc tính hoặc hành vi của đối tượng của một lớp thông qua các công cụ giao tiếp.

• Thừa kế: Một lớp có thể thừa hưởng dữ liệu và hành vi của lớp cha. Một ngôn ngữ OOP có thể hỗ trợ đơn thừa kế hoặc đa thừa kế.

• Đa hình: Khả năng cho phép viết lại code của một hành vi được thừa kế để tạo ra những khác biệt trong ứng xử giữa lớp cha và lớp con cho cùng một hành vi.

• Gửi thông điệp là yêu cầu một đối tượng thực thi một hành vi mà đối tượng này có.

Page 3: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 3/81

Mục tiêu

• Nắm vững cấu trúc của một lớp.

• Nắm vững các chỉ thị truy cập.

• Giải thích được constructor và destructor.

• Giải thích được khái niệm đối tượng hiện hành.

• Truy cập thành phần thừa kế từ lớp cha.

• Hiện thực được lớp bằng Java.

Page 4: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 4/81

Nội dung

3.1- Cấu trúc 1 lớp và access modifiers3.2- Sử dụng một lớp3.3- Chỉ thị this3.4- Overloading một hành vi3.5- Hành vi khởi tạo (constructor)3.6- Chỉ thị super3.7- Hành vi hủy (destructor)3.8- Thành phần static3.9- Chỉ thị final3.10- Phương pháp giải bài toán với Java3.11 – Chạy ứng dụng Java có tham số3.12- Một số lớp cơ bản của Java

Page 5: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 5/81

3.1- Cấu trúc 1 lớp và access modifiers

• Lớp: Hiện thực chung cho một tập các đối tượng có cùng đặc điểm và hành vi.

• Một lớp có thể là lớp con của một lớp đã có.• Hiện thực lớp:

– Khai báo mức cho phép sử dụng.– Khai báo lớp cha– Khai báo các thành phần thuộc tính.– Hiện thực code các hành vi.

• Lớp và mỗi thành phần cần phải chỉ định mức độ cho phép truy cập (tính bảo mật) access modifier

• Mỗi ngôn ngữ OOP quy định cú pháp riêng cho việc hiện thực lớp.

Page 6: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 6/81

Cấu trúc một lớp

Field_1Field_2.......Method_1()Method_2()..........

class BCác giới hạn truy cập1. Cho phép truy cập tự do (public)2. Chỉ cho phép trong cùng một gói

truy cập3. Không cho bên ngoài truy cập

(private).4. Chỉ cho lớp con truy cập

(protected).5. Không cho phép lớp con hiệu

chỉnh (final).

Access Modifiers

class A

là con

Page 7: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 7/81

Cú pháp khai báo class trong Java

[Modifier] class CLASSNAME [extends FATHERCLASSNAME]{ [Modifier] DataType1 Property1 [=Value]; [Modifier] DataType2 Property2 [=Value]; [Modifier] DataType MethodName( DataType Arg,…) { <code> }}

Không có modifier : Mặc định là friendly, cho phép các đối tượng thuộc các class cùng package ( cùng thư mục)truy cập

Page 8: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 8/81

Đặc tính truy xuất

Modifier private friendly protected public

Cùng class YES YES YES YES

Cùng gói, khác class

NO YES YES YES

lớp con trong cùng gói với

lớp cha

NO YES YES YES

Khác gói, khác lớp

NO NO NO YES

Lớp con khác gói với lớp cha

NO NO YES YES

Page 9: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 9/81

3.2- Sử dụng một lớp

• Định nghĩa biến đối tượng.

• Biến đối tượng trong Java là tham khảo (địa chỉ) của vùng nhớ chứa dữ liệu của đối tượng.

obj 1000

data

1000

ClassName obj ; obj= new ClassName();

Page 10: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 10/81

Thí dụ 1

Lớp public thì tên file.java phải trùng với tên lớpVì khi bên ngoài truy cập, nhìn tên file là biết tên lớp

Error

Nếu không là lớp public, tên lớp và tên file có thể khác nhau

Vì lớp này chỉ dùng trong một gói (package)

Page 11: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 11/81

Thí dụ 2

từ khóa this để chỉ thị đối tượng đang thao tác. Nhờ đó phân biệt được tham số x và thành phần x

Page 12: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 12/81

Thí dụ 3

access modifier là private mà trong main vẫn truy cập được vì main nằm trong khai báo lớp

Page 13: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 13/81

Thí dụ 4

Sửa lại lớp VONGTRON:

không có main

Xây dựng lớp SDVT sử dụng lớp VONGTRON để trong cùng thư mục.Biên dịch có lỗi vì trong lớp SDVT không thể truy cập private method

của lớp VONGTRON

Page 14: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 14/81

Thí dụ 5

Lớp SDVT truy cập trực tiếp được thuộc tính x của vong tròn v vì khai báo thuộc tính này là “friendly” – không chỉ định modifier.

Hai file này cùng thư mục nên SDVT truy cập được thuộc tính này.

Page 15: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 15/81

Thí dụ 6

Trong lớp VONGTRON,

x,y,r có thuộc tínhprotected. Nhưng,lớp SDVT cùng thư

mục với lớpVONGTRON nên có

thể truy cập thuộctính này.

Page 16: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 16/81

3.3- Chỉ thị this

• Khi hiện thực hành vi của 1 lớp. Truy xuất một thành phần bằng chính tên của thành phần này hoặc this.tênThànhPhần.

• Khi tham số trùng với tên thuộc tính thì nhờ từ khóa this chúng ta phân biệt rõ thuộc tính với tham số.

• Các môi trường lập trình Java hiện nay hầu hết đều có trợ giúp ngữ cảnh. Do vậy, qua từ khóa this, người lập trình dễ truy cập 1 thành phần của lớp.

Page 17: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 17/81

Thí dụ

Page 18: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 18/81

Thí dụ

Truy cập thành phần qua từ khóa this

Truy cập thành phần không qua từ khóa this

Page 19: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 19/81

3.4- Overloading một hành vi

• Overloading: Kỹ thuật cho phép xây dựng các hành vi trùng tên nhưng khác chữ ký (signature) trong cùng một lớp.

• Chữ ký bao gồm:– Số lượng tham số.– Thứ tự các kiểu của các tham số.

Page 20: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 20/81

Thí dụ

3 hành vi cùng có tên làsetData

Page 21: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 21/81

3.5- Hành vi khởi tạo (constructor)

• Hành vi được thực thi ngay vào lúc khởi tạo đối tượng.

• Một lớp có thể có 0/1/n contructor.

• Cú pháp constructor

[Modifier] ClassName ( Parameters)

{ <code> }

Chú ý:

- Constructor không có kiểu trả trị.

Page 22: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 22/81

constructor....

- Constructor không tham số còn được gọi là constructor chuẩn.

- Ngôn ngữ có sẵn 1 constructor chuẩn làm công việc xóa trống vùng nhớ chứa dữ liệu của đối tượng Trị 0/null.

- Khi một lớp đã có constructor thì constructor mặc định của ngôn ngữ không còn được áp dụng nữa.

- Tập các constructor hình thành các cách định nghĩa đối tượng.

- Định nghĩa một đối tượng không theo một mẫu constructor sẽ gây lỗi.

Page 23: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 23/81

Thí dụ: constructor của ngôn ngữ (gõ 3 phím)

b

xyz

1000

b

000

1000

Nếu là constructor tự tạo thì việckhởi tạo trị ban đầu được ấn địnhbởi code trong constructor.

Page 24: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 24/81

Thí dụ: constructor là mẫu khởi tạo đối tượng

Nếu một lớp có constructor thì constructor mặc định của ngôn ngữ không được sử dụng nữa.

Page 25: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 25/81

Thí dụ: lớp có nhiều constructor

Viết lại default constructor

constructor tự tạo

Copy constructor

Page 26: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 26/81

Thí dụ: gọi hành vi trong constructor

Page 27: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 27/81

Gợi ý khi xây dựng constructor

• Việc thường làm là gán trị cho các thành phần dữ liệu của đối tượng.

• Số constructor có trong một lớp thường là những dạng dữ liệu của đối tượng mà ta muốn có ngay lúc ban đầu.

Page 28: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 28/81

3.6- Chỉ thị super

• Dùng để truy xuất dữ liệu hoặc hành vi kế thừa từ lớp cha.

Gọi constructor của lớp cha

Gọi method thừa kế từ lớp cha

Page 29: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 29/81

super...

Trong Java, nếu dùng super thì super phải là dòng code đầu tiên trong constructor của lớp con

Ý định:Xây dựng hành vi outData trong lớp conbằng cách gọi hành vioutData của lớp charồi xuất cost.

Error

Page 30: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 30/81

super...

Viết lại hành vi outData trong lớp con

Page 31: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 31/81

3.7- Hành vi hủy (destructor)• Đối tượng sống kể từ khi ta khởi tạo đối tượng (bằng toán tử

new) cho đến hết khối chứa nó.• Khi ra khỏi khối chứa đối tượng, ta nói đối tượng đã chết.

{ ..... ....... ClassName obj = new ClassName(); ...... ..... .....}

Góc nhìn thời gian: Thời gian sống của đối tượng

Góc nhìn nội dung văn bản chương trình: Tầm vực (scope) của đối tượng

Một số ngôn ngữ OOP ( C++, C#) cho phép ta viết code sẽ được thực thi vào lúc đối tượng chết nhằm trả tài nguyên đã cấp phát động.Java chỉ dùng cách cấp phát đối tượng động, có trình gom rác riêngvà không hỗ trợ hành vi hủy.

Page 32: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 32/81

3.8- Thành phần static

• Đôi khi ta muốn một dữ liệu, một đoạn code, một hành vi là toàn cục để trongmột lớp Dùng chỉ thị static.

• Dữ liệu static là DỮ LIỆU TOÀN CỤC.• Hành vi static là hành vi toàn cục• Code static là CODE TOÀN CỤC và chỉ thao tác lên

dữ liệu static.Truy xuất dữ liệu và code này thông qua tên lớp hoặc

một đối tượng thuộc lớp có thành phần static.

(1) ClassName.StaticMember (2) ClassName obj= new ClassName(); obj. StaticMember

Page 33: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 33/81

Dữ liệu static- Thí dụ

Truy xuất static data bằng tên lớp

Truy xuất static data bằng tên đối tượng thuộc lớp

Page 34: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 34/81

Hành vi static- Thí dụ

Nhận xétHành vi static được bên ngoài sửdụng mà không cần khai báo biếnđối tượng thuộc lớp. Do vậy, hànhvi static thường có tham số khôngliên quan đến đối tượng thuộc lớp.

Page 35: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 35/81

Code static- Thí dụ

Cú pháp đưa một đoạn code static:static{ <code>}

Code static được thực thi ngay khi lớp có code này được tham khảo tới.

Page 36: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 36/81

Code static- Thí dụ

Code static chỉ tham khảodữ liệu static

Page 37: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 37/81

Code static – thí dụ

Nếu có nhiều đoạn code static, các đoạn code này được thực thi tuần tự

Page 38: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 38/81

Code static với constructor

Constructor chuẩnkhông đụng đến thành phần stattic

Page 39: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 39/81

Code static với constructor

tham khảo khi chưa có đối tượng

tham khảo khi đã có đối tượng

Vì khi có đối tượng, constructorcó code làm thay đổi trị của n

nên kết qủa đã khác đi.

Page 40: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 40/81

3.9- Chỉ thị final

• Làm sao để không cho phép kế thừa từ một lớp ( lớp không con).

• Làm sao không cho phép sửa một dữ liệu ( muốn dữ liệu là hằng).

• Dùng chỉ thị final

Page 41: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 41/81

final Data là hằng cấm sửa

Page 42: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 42/81

final class là lớp không con

Page 43: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 43/81

final method là hành vi không cho phép lớp con viết lại (override)

Page 44: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 44/81

3.10- Phương pháp giải bài toán với Java

Bài toán đơn giản

Bài toán phức tạp

Page 45: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 45/81

3.10.1- Bài toán đơn giản

Mô tảcủa

bài toán

Danh từđơn giản

Động từ

class BaiToan{ public static void main(String args[]) { < biến> <code xử lý> }}

Page 46: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 46/81

Bài toán đơn giản -Thí dụ

• Viết chương trình xuất 100 số Fibonacci đầu tiên. Dãy Fibonacci : 1,1,2,3,5,8,… 2 số đầu là 1, các số sau bằng tổng 2 số trước nó

class BaiToan{ public static void main (String args[]) { int t1=1, t2=1, t3=1; for (int i=1; i<=100; i++) if (i>2) { t3= t1+t2; t1=t2; t2=t3; } System.out.println(t3 + “, ”); }}

Page 47: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 47/81

3.10.2- Bài toán phức tạp

Mô tảcủa

bài toán

Danh từphức tạp(cấu trúc)

Động từ

class BaiToan{

}

tác động

Bài toán không qúa phức tạp // Properties

Kiểu TênField [=TrịKhởiTạo];

// Mỗi động từ là 1 hành viType HànhVi (...){}

public static void main (String args[]) { BaiToan obj= new BaiToan(...); obj.HànhVi_1(); obj.HànhVi_2(); .......}

Thứ tự củacác động từ

Page 48: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 48/81

Thí dụ

Viết chương trìnhin ra

3 nhân viên (tên,lương)

class NhânViên{ String Tên; long Lương; NhânViên( String t, long l) { Tên=t; Lương=l; void Xuất() { System.out.prinln( Tên “, “ + Lương); } public static void main (String args[]) { NhânViên nv1= new NhânViên(“Hoa”, 100); NhânViên nv2= new NhânViên(“Linh”, 120); NhânViên nv3= new NhânViên(“Lan”, 150); nv1.Xuất(); nv2.Xuất(); nv3.Xuất(); }}

Page 49: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 49/81

Bài toán phức tạp

Mô tảcủa

bài toán

cáckhái niệm

(nhóm danh từ mô tả)

Động từ

tác động

Bài toán phức tạp. Xem các thí dụ ở các chương sau class KháiNiệm1

{ <data> <method>}

class BaiToan{ KháiNiệm1 obj1 = new KháiNiệm1(); KháiNiệm2 obj2 = new KháiNiệm2(); <hành vi chung ở mức cả bài toán> public static void main (String args[]) { BaiToan obj= new BaiToan(...); obj.HànhViChung1(); obj.HànhViChung2(); ....... }}

Thứ tự của các động từ mức cả bài toán

class KháiNiệm2 { <data> <method>}

Page 50: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 50/81

Tóm tắt

• class = Members• Member = Datum/method• access modifier: public, private, protected• Không có access modifier được hiểu là

“friendly”• Từ khóa this: Chỉ thị....................................• constructor là ..........................................• super: Từ khóa truy cập lớp cha và nếu có

thì phải xuất hiện ở dòng đầu tiên của constructor trong lớp con.

Page 51: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 51/81

Tóm tắt

• chỉ thị static dùng để chỉ thị .....................

• ...............................................................

• Truy xuất thành phần static của một lớp bằng cách

• (1): ........................................................

• (2):.........................................................

• Ta có thể truy xuất đoạn code static mà không là hành vi của 1 lớp không?

Page 52: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 52/81

Tóm tắt

• Tập các constructor của 1 lớp tạo ra .................................................................

• Java có hỗ trợ destructor?

• Dữ liệu final là ......................................

• Hành vi final là hành vi .............................

• Lớp final là lớp ...................................

Page 53: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 53/81

Bài tập:

• Bài 1:Viết chương trình xuất ra danh sách nhân viên gồm 10 người theo dạng:

Mã Tên Ngày vào làm lương

NV001 Hoa 2004-07-21 10000

..........................................................

(các thông tin về người khác sinh viên tự ấn định)

Dữ liệu của các bài toán được đưa vào bài toán thông qua constructor

Page 54: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 54/81

Bài tập

• Bài tập 2:Tương tự bài 1 nhưng thay vì mô tả lương bằng 1 con số, mô tả lương thông qua hệ số lương nhân với lương cơ bản là một dữ liệu static (xem lại thí dụ).

• Bài tập 3: Viết chương trình xuất ra diện tích, chu vi của 5 vòng tròn với hằng PI=3.141592 được khai báo là hằng với chỉ thị final. Bán kính vòng tròn sinh viên tự ấn định

Page 55: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 55/81

3.11- Chạy ứng dụng với tham số

Chương trình Java có thể đưa vào dữ liệu nhập khi chạy chương trình 1 công cụ nhập dữ liệu.Cú pháp: java File.class arg0 arg1 …

Page 56: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 56/81

Thí dụ:import java.io.*;class InputCommandLine{ public static void main (String args[])

{ for (int i=0;i< args.length; ++i) System.out.print(args[i]+ (i< args.length?",":""));}

}

D:\Su\BaiGiang2004\Java\BtCh3>java InputCommandLine Mat Uot Mi

Mat,Uot,Mi

D:\Su\BaiGiang2004\Java\BtCh3>

Chạy JVM file.class mảng tham số args

Các tham số là các chuỗi ký tự

Page 57: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 57/81

Chạy chương trình có tham số với JCreator

• Trong JCreator, để chạy chương trình có tham số, ta phải tạo Project.

• Project: Dự án, một tập các file của một phần mềm.

Page 58: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 58/81

Tạo Project

hoặc

Page 59: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 59/81

Đặt tên cho project

Page 60: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 60/81

Kết qủa: Project trống (chọn File view)

Page 61: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 61/81

Thêm 1 file

Page 62: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 62/81

Viết chương trình

Page 63: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 63/81

Chỉ định tham số cho chương trình

Page 64: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 64/81

Đặt tham số nhanh:

Page 65: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 65/81

Bài tập

(1) Viết chương trình tính tổng các số từ chuỗi tham số nhập của chương trình.

(2) Viết chương trình xuất các tham số của chương trình theo thứ tự tăng dần.

Page 66: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 66/81

3.12- Một số lớp cơ bản của Java.

• Lớp Object

• Lớp String

• Các lớp gói (wrapper)

• Lớp Math

Page 67: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 67/81

3.12.1- Lớp Object

Là lớp cha của mọi lớp trong java ( trực tiếp/gián tiếp)Được để trong gói java.lang (java.lang.Object)Định nghĩa các trạng thái cơ bản và các phương thức cơ bản của mọi lớp phải có như: So sánh nó với 1 đối tượng khác (equals), chuyển đổi mô tả thành chuỗi (toString), đợi (wait) điều kiện, nhận biết (notify) các đối tượng khác khi biến điều kiện có thay đổi, lấy Class (getClass)

Page 68: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 68/81

Lớp Object (tt)

Page 69: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 69/81

Thí dụ

Student2@18d107fKết qủa của method toString() :

Tên lớp + @ + Địa chỉ hệ 16 của thực thể

Page 70: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 70/81

3.12.2- Lớp String - chuỗi ký tự

• Định nghĩa 1 String:String Str1=“Hello”;

String Str2= new String(“Hi”); • Nối String

String Str3= Str1 + Str2; // Str3=“HelloHi” String Str4 = Str3 + 1; // Str4= “HelloHi1”• String pool ( hồ/ bảng chứa chuỗi)

Khi nhiều biến String cùng mang 1 nội dung, chúng cùng chỉ đến 1 phần tử trong String poolThí dụ:

String Str1 = “Hello”;String Str5= “Hello”;

I love you

Hello

Forget me not

Str1

Str5

Page 71: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 71/81

Lớp String (tt)- Methods

Page 72: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 72/81

Lớp String (tt)- Methods

Page 73: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 73/81

Lớp String (tt)- Methods

Page 74: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 74/81

Thí dụ về lớp String

Các hành vi của lớp String trả về chuỗi kết qủa thì sẽ trả về chuỗi mới còn chuỗi gốc không đổi.Nếu muốn làm thay đổi chuỗi gốc thì dùng lớp StringBuffer cũng thuộc gói java.lang. Các han2h vi cũng tương tự như lớp String.

Page 75: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 75/81

3.12.3-Các lớp gói (wrappers)

• Dữ liệu thuộc kiểu cơ bản như int, long, char,... chỉ là dữ liệu không có hành vi kết hợp.

• Wrapper , trong gói java.lang, là lớp bao lấy các kiểu dữ liệu cơ bản nhằm tạo ra tính OOP cho các kiểu cơ bản.

• Các hành vi của lớp Wrapper đa số là các hành vi static hiện thực các thao tác lên dữ liệu thuộc kiểu tương ứng.

• Biến thuộc lớp Wrapper chứa địa chỉ của dữ liệu.

Integer obj1

int x

1000

5

151000

int x=5;Integer obj1= new Integer(15);Integer obj2= new Integer(“32”);

321100

Integer obj2 1100

Page 76: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 76/81

Wrapper classes

Data type Wrapper class

boolean Boolean

byte Byte

char Character

double Double

float Float

int Integer

long Long

short Short

Đọc Documentation để biết về các hành vi của các wrapper class

Page 77: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 77/81

Wrapper-Thí dụ

Page 78: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 78/81

3.12.4- Lớp Math

• Trong gói java.lang

• Chứa các hàm xử lý toán học.

• Là lớp final.

Page 79: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 79/81

Thí dụ:

Hàm randomtrả trị

[ 0.0, 1.0 [

Page 80: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 80/81

Bài nộp: Nộp vào buổi học kế tiếp

Chọn một trong các bài nộp sau:• Dịch tập tin trợ giúp về một lớp Wrapper

trong Java Documentation.• Dịch tập tin trợ giúp về lớp String trong

Java Documentation.• Dịch tập tin trợ giúp về lớp StringBuffer

trong Java Documentation.• Dịch tập tin trợ giúp về một lớp Math trong

Java Documentation.

Page 81: Chương 03 LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG CLASS – ABSTRACT DATA TYPE

Chương 03- Lớp – Kiểu dữ liệu trừu tượng Slide 81/81

THANK YOU