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

Lập trình hướng đối tượng với java - Chương 3 doc

80 861 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Lập trình hướng đối tượng với java - Chương 3 doc
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Lập trình hướng đối tượng với Java
Thể loại Tài liệu hướng dẫn
Thành phố Hồ Chí Minh
Định dạng
Số trang 80
Dung lượng 0,93 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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 BCá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ínhprotected 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 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

Trang 22

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

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

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);

} public static void main (String args[])

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

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

}

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à

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

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

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.

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 25358555

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: 31/07/2014, 17:20

TỪ KHÓA LIÊN QUAN