1. Trang chủ
  2. » Công Nghệ Thông Tin

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

80 1,8K 8

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 0,93 MB

Nội dung

• 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.. • Đóng gói encapsulation

Trang 1

Chương 03

LỚP – KIỂU DỮ LIỆU TRỪU TƯỢNG

CLASS – ABSTRACT DATA TYPE

Trang 2

Ô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ó.

Trang 3

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

Trang 4

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

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

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

Trang 5

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.

Trang 6

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

Field_1 Field_2

Method_1() Method_2()

class B

Các giới hạn truy cập

1 Cho phép truy cập tự do (public)

2 Chỉ cho phép trong cùng một gói

Trang 7

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

Trang 8

Đặc tính truy xuất

Modifier private friendly protected public

Trang 9

ClassName obj ; obj= new ClassName();

Trang 10

Thí dụ 1

Lớp public thì tên file.java phải trùng với tên lớp

Vì khi bên ngoài truy cập, nhìn tên file là biết tên lớp

Trang 11

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

Trang 12

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

Trang 13

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

Trang 14

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.

Trang 15

Thí dụ 6

Trong lớp

VONGTRON, x,y,r có thuộc tính protected Nhưng, lớp SDVT cùng thư mục với lớp VONGTRON nên có thể truy cập thuộc

tính này.

Trang 16

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.

Trang 17

Thí dụ

Trang 18

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

Trang 19

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

– Số lượng tham số.

– Thứ tự các kiểu của các tham số.

Trang 20

Thí dụ

3 hành vi cùng

có tên là setData

Trang 21

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

Trang 22

- 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.

Trang 23

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

b

x y

z

1000

b

0 0

0

1000

Nếu là constructor tự tạo thì việc

khởi tạo trị ban đầu được ấn định

bởi code trong constructor.

Trang 24

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.

Trang 25

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

Viết lại default constructor

constructor tự tạo

Copy constructor

Trang 26

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

Trang 27

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

Trang 29

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 con bằng cách gọi hành vi outData của lớp cha

rồi xuất cost.

 Error

Trang 30

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

Trang 31

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.

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êng

và không hỗ trợ hành vi hủy.

Trang 32

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

Trang 33

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

Trang 34

Hành vi static- Thí dụ

Nhận xét

Hà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ành

vi static thường có tham số không

liên quan đến đối tượng thuộc lớp.

Trang 35

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.

Trang 36

Code static- Thí dụ

Code static chỉ tham khảo

dữ liệu static

Trang 37

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ự

Trang 38

Code static với constructor

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

Trang 39

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, constructor

có code làm thay đổi trị của n

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

Trang 41

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

Trang 42

final class là lớp không con

Trang 43

final method là hành vi không cho phép lớp

con viết lại (override)

Trang 44

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

Trang 45

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ý>

} }

Trang 46

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

for (int i=1; i<=100; i++)

{ if (i>2) { t3= t1+t2;

t1=t2;

t2=t3;

} System.out.println(t3 + “, ”);

}

} }

Trang 47

{ }

public static void main (String args[]) { BaiToan obj= new BaiToan( );

obj.HànhVi_1();

obj.HànhVi_2();

.

} Thứ tự của

các động từ

Trang 48

NhânViên( String t, long l) { Tên=t; Lương=l;}

void Xuất() { System.out.println( Tên + “, “ + Lương);

}

{ 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();

} }

Trang 49

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

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>

}

Trang 50

Tóm tắt

• class = Members

• Member = Datum/method

• access modifier: public, private, protected

• Không có access modifier được hiểu là

Trang 51

• Ta có thể truy xuất đoạn code static mà

không là hành vi của 1 lớp không?

Trang 52

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

Trang 53

(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

Trang 54

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ụ)

Trang 55

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

Trang 56

Tạo Project

hoặc

Trang 57

Đặt tên cho project

Trang 58

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

Trang 59

Thêm 1 file

Trang 60

Viết chương trình

Trang 61

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

Trang 62

Đặt tham số nhanh:

Trang 63

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

Trang 64

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

Trang 65

Đị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)

Hành vi hashCode() cho biết địa chỉ của

dữ liệu của đối tượng.

Trang 66

Lớp Object (tt)

Trang 67

Thí dụ

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

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

(Lưu ý: Địa chỉ của thực thể chứ không

phải là địa chỉ của biến đối tượng )

Trang 68

Nhét obj vào lớp để khi lấy hashcode của lớp bao thì sẽ biết địa chỉ của biến obj này.

Lớp có thành phần là lớp

và địa chỉ biến đối tượng

Trang 69

Giải thích

A a1 String s

4565111 20392474 69609650

11352996 19313225

Trang 70

biến value s2=s1;

100 100

Hello

100 100 Hello

s2=“Hi”;

Hi

Trang 71

• 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 pool

Thí dụ:

String Str1 = “Hello”;

String Str5= “Hello”;

I love you Hello

Forget me not Str1

Str5

Trang 72

Lớp String (tt)- Methods

Trang 73

Lớp String (tt)- Methods

Trang 74

Lớp String (tt)- Methods

Trang 75

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 hành vi cũng tương tự

như lớp String.

Trang 76

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

15 1000

int x=5;

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

32 1100

Integer obj2 1100

Trang 77

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

Trang 78

Wrapper-Thí dụ

Trang 79

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

Trang 80

Thí dụ:

Hàm random

trả trị [ 0.0, 1.0 [

Ngày đăng: 28/07/2014, 07:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w