Mục đích & yêu cầu Mục đích & yêu cầu

Chương 5: Chương 5:

Giới thiệu một thành phần cơ bản: Đối tượng (cid:132)(cid:132) Giới thiệu một thành phần cơ bản: Đối tượng

Object, Lớp trừu tượng, gói, giao diện. Object, Lớp trừu tượng, gói, giao diện.

LỚP TRỪU TƯỢNG LỚP TRỪU TƯỢNG

Giải thích được lớp trừu tượng là gì, Gói, giao (cid:132)(cid:132) Giải thích được lớp trừu tượng là gì, Gói, giao

diện là gì? diện là gì?

Sử dụng các thành phần này, viết một chương (cid:132)(cid:132) Sử dụng các thành phần này, viết một chương

trình đơn giản. trình đơn giản.

11

22

Nội dung chính Nội dung chính

1. Đối tượng Object 1. Đối tượng Object

Đây là đối tượng cấp cao nhất của mọi lớp trong (cid:132)(cid:132) Đây là đối tượng cấp cao nhất của mọi lớp trong

Đối tượng Object 1.1. Đối tượng Object

Java. Mọi lớp trong Java đều kế thừa từ lớp này. Java. Mọi lớp trong Java đều kế thừa từ lớp này.

Lớp trừu tượng 2.2. Lớp trừu tượng

Đối tượng Object có một số phương thức: (cid:132)(cid:132) Đối tượng Object có một số phương thức:

public boolean equals(Object) •• public boolean equals(Object)

Ta có thể dùng tham chiếu của lớp Object để tham (cid:132)(cid:132) Ta có thể dùng tham chiếu của lớp Object để tham

chiếu đến một đối tượng thuộc lớp bất kỳ. chiếu đến một đối tượng thuộc lớp bất kỳ.

public String toString() •• public String toString()

33

44

1

Ví dụ: Object o = new SinhVien(…); •• Ví dụ: Object o = new SinhVien(…);

Lớp trừu tượng 22-- Lớp trừu tượng

Lớp trừu tượng 2 2 -- Lớp trừu tượng

(cid:132)(cid:132) Là kết qủa của việc khái quát hóa

cao đến nỗi Là kết qủa của việc khái quát hóa cao đến nỗi

Lớp trừu tượng là gì? (cid:132)(cid:132) Lớp trừu tượng là gì? Xem kết qủa của việc khái quát hóa sau: •• Xem kết qủa của việc khái quát hóa sau:

không biết viết code thế nào. không biết viết code thế nào.

Là lớp có những hành vi chỉ khai báo mà không (cid:132)(cid:132) Là lớp có những hành vi chỉ khai báo mà không

viết code. Để dành code cụ thể sẽ được hiện thực viết code. Để dành code cụ thể sẽ được hiện thực

class ANIMAL

Không (cid:206) Trừu tượng

( lớp cụ thể hơn). ở các lớp dẫn xuất ( lớp cụ thể hơn). ở các lớp dẫn xuất

void Travel();

Bạn có hình dung nổi một ANIMAL di chuyển như thế nào không?

Tư duy tự nhiên: Tư duy tự nhiên: (cid:132)(cid:132) Tư duy tự nhiên: Tư duy tự nhiên:

class Bird class Fish class Snake •• Từ các đối tượng cụ thể Lớp cụ thể. Từ các đối tượng cụ thể (cid:206)(cid:206) Lớp cụ thể. void Travel() void Travel() void Travel() •• Từ các lớp cụ thể có cùng tính chất lớp trừu tượng. Từ các lớp cụ thể có cùng tính chất (cid:206)(cid:206) lớp trừu tượng.

Có (cid:206) cụ thể

Bạn có hình dung nổi một đối tượng thuộc các lớp này di chuyển như thế nào không?

55

66

Lớp trừu tượng 2 2 -- Lớp trừu tượng

Lớp trừu tượng 2 2 -- Lớp trừu tượng

(cid:132)(cid:132) Lớp trừu tượng

là lớp chứa ít nhất một PTTT. Lớp trừu tượng là lớp chứa ít nhất một PTTT.

ớ ớ

ở đ h ở đ h

dù dù

hĩ hĩ

Phương thức trừu tượng là phương thức (cid:132)(cid:132) Phương thức trừu tượng là phương thức không cài đặt chi tiết. . khô không cài đặt chi tiết iế iế khô

ài đặ hi ài đặ hi

Lớp trừu tượng dùng để làm cơ sở định nghĩa (cid:132)(cid:132) Lớp trừu tượng dùng để làm cơ sở định nghĩa để là để là ừ ừ các lớp khác. các lớp khác.

Khai báo PTTT: (cid:132)(cid:132) Khai báo PTTT:

abstract ; abstract ;

Khai báo lớp trừu tượng: (cid:132)(cid:132) Khai báo lớp trừu tượng: abstract class abstract class

{{ {{

Ví dụ: khai báo phương thức duocTN() (cid:132)(cid:132) Ví dụ: khai báo phương thức duocTN() của lớp SV. của lớp SV.

khai báo các thành phần của lớp khai báo các thành phần của lớp

}}

abstract boolean duocTN(); abstract boolean duocTN();

77

88

2

Lớp trừu tượng 2 2 -- Lớp trừu tượng

Lớp trừu tượng 2 2 -- Lớp trừu tượng

Lớp kế thừa từ lờp trừu tượng phải khai (cid:132)(cid:132) Lớp kế thừa từ lờp trừu tượng phải khai

báo tường minh các PTTT nếu không cũng báo tường minh các PTTT nếu không cũng

Ví dụ: khai báo lớp trừu tượng SV (cid:132)(cid:132) Ví dụ: khai báo lớp trừu tượng SV abstract class SV abstract class SV abstract class SV abstract class SV {{

là lớp trừu tượng. là lớp trừu tượng.

Ví dụ: khai báo lớp SVSP kế thừa từ lớp (cid:132)(cid:132) Ví dụ: khai báo lớp SVSP kế thừa từ lớp

SVSV

g g

ợ g ợ g

p p

ạ ạ

class SVSP extends SV{ class SVSP extends SV{

…… abstract public boolean duocTN(); abstract public boolean duocTN();

}} Lưu ý: không thể tạo đối tượng từ lớp trừu ý ý (cid:132)(cid:132) Lưu ý: không thể tạo đối tượng từ lớp trừu tượng. tượng. Ví dụ: không thể tạo đối tượng từ lớp SV (cid:132)(cid:132) Ví dụ: không thể tạo đối tượng từ lớp SV SV s = new SV(…); (cid:198)(cid:198) saisai SV s = new SV(…);

}}

99

1010

…… public boolean duocTN(){…} public boolean duocTN(){…}

Lớp trừu tượng 2 2 -- Lớp trừu tượng

Lớp trừu tượng 2 2 -- Lớp trừu tượng

Hành vi không có chỉ thị abstract thì phải có code

Ví dụ: lớp sinh viên tại chức (SVTC) kế (cid:132)(cid:132) Ví dụ: lớp sinh viên tại chức (SVTC) kế thừa từ lớp SV, là lớp trừu tượng. thừ từ lớ SV là lớ t ừ tượ thừa từ lớp SV, là lớp trừu tượng. thừ từ lớ SV là lớ t ừ tượ abstract class SVTC extends SV abstract class SVTC extends SV {{

Protected String noiCT; Protected String noiCT; …… //abstract public boolean duocTN(); //abstract public boolean duocTN();

}}

Có hành vi abstract mà lớp không có chỉ thị abstract

1111

1212

3

Đặc điểm của lớp trừu tượng. 5.35.3-- Đặc điểm của lớp trừu tượng.

Lớp trừu tượng 2 2 -- Lớp trừu tượng

hể iế

ời

ì l

d

Chưa thể viết code vì lương 1 người = Ch 1 lương cơ bản * hệ số

(cid:132)(cid:132) Không thể Không thể khởi tạo khởi tạo khởi tạo khởi tạo một đối một đối tượng thuộc tượng thuộc lớp trừu lớp trừu tượng tượng (abstract) (abstract) mà chỉ khởi mà chỉ khởi mà chỉ khởi mà chỉ khởi tạo đối tạo đối tượng thuộc tượng thuộc lớp cụ thể lớp cụ thể (concrete). (concrete).

1313

1414

Lớp trừu tượng 2 2 -- Lớp trừu tượng

Lớp trừu tượng 2 2 -- Lớp trừu tượng

• Lớp con cũng là lớp trừu tượng

Vì biến đối tượng là tham khảo chỉ đến đối tượng nên một biến thuộc lớp nên một biến thuộc lớp cha nhưng lại chỉ đến một lớp con là lớp trừ tượng hoặc là lớp cụ thề.

Biến lớp ông chỉ đến đối tượng lớp cháu

ĐÂY LÀ CÁCH DÙNG TÍNH ĐA HÌNH TRONG OOP

1515

1616

4

Lớp trừu tượng 2 2 -- Lớp trừu tượng

2.2 Ví dụ 2.2 Ví dụ

Ví dụ: xây dựng các lớp tính diện tích (cid:132)(cid:132) Ví dụ: xây dựng các lớp tính diện tích nhật. các hình: tròn, tam giác, chữữ nhật. các hình: tròn, tam giác, ch

g g

(cid:132)(cid:132) Chương trình minh họa gồm một mảng Chương trình minh họa gồm một mảng các đối tượng và tính tổng diện tích của các đối tượng và tính tổng diện tích của g các hình trong mảng. g các hình trong mảng.

Chú ý về kết hợp Chú ý về kết hợp abstract với các abstract với các chỉ thị khác chỉ thị khác

1717

1818

Lớp HINH Lớp HINH

Lớp HinhTron Lớp HinhTron

class HinhTron extends HINH class HinhTron extends HINH {{{{

abstract class HINH abstract class HINH {{

abstract double dienTich(); abstract double dienTich();

}}

double bk; double bk; public HinhTron(double b){ bk = b;} public HinhTron(double b){ bk = b;} public double dienTich() public double dienTich() {{

return bk*bk*Math.PI; return bk*bk*Math.PI; }}

}}

1919

2020

5

Lớp HinhCN Lớp HinhCN

Lớp TamGiac Lớp TamGiac

class TamGiac extends HINH class TamGiac extends HINH {{{{

class HinhCN extends HINH class HinhCN extends HINH {{{{

double c1,c2,c3; double c1,c2,c3; public TamGiac(double a, double b, double c) public TamGiac(double a, double b, double c) { c1 = a; c2 = b; c3 = c;} { c1 = a; c2 = b; c3 = c;} public double dienTich() public double dienTich() {{

double dai,rong; double dai,rong; public HinhCN(double d, double r) public HinhCN(double d, double r) { dai = d; rong = r;} { dai = d; rong = r;} public double dienTich() public double dienTich() {{

double p = (c1+c2+c3)/2 double p = (c1+c2+c3)/2 return Math.sqrt(p*(p--c1)*(p return Math.sqrt(p*(p

c1)*(p--c2)*(p

c3)); c2)*(p--c3));

return dai*rong; return dai*rong;

}}

}}

}}

}}

2121

2222

Lớp DTHINH Lớp DTHINH

Bài tập Bài tập Quản lý tài liệu ở thư viện Quản lý tài liệu ở thư viện

class DTHINH class DTHINH

{{ ị ị , , , , , , ( ( g , g ,

public static void main(String args[]) public static void main(String args[]) {{

Một thư viện gồm các loại tài liệu sau: (cid:132)(cid:132) Một thư viện gồm các loại tài liệu sau: ) •• Sách(Mã sách, Tên Sách, Tác giả, NXB, Năm XB, Vị trí) , ) , Sách(Mã sách, Tên Sách, Tác giả, NXB, Năm XB, Vị trí) Tạp chí (Mã tạp chí, Tên tạp chí, Chuyên ngành, Số, •• Tạp chí (Mã tạp chí, Tên tạp chí, Chuyên ngành, Số, Năm, Vị trí) Năm, Vị trí) •• CD(Mã CD, Tên CD, Số thứ tự, Nội dung, Vị trí) CD(Mã CD, Tên CD, Số thứ tự, Nội dung, Vị trí) Hãy tổ chức các lớp sao cho có thể lập trình để (cid:132)(cid:132) Hãy tổ chức các lớp sao cho có thể lập trình để thực hiện được các chức năng sau: thực hiện được các chức năng sau: •• Lưu danh sách các tài liệu có trong thư viện. Lưu danh sách các tài liệu có trong thư viện. Liệt kê toàn bộ tài liệu có trong thư viện. •• Liệt kê toàn bộ tài liệu có trong thư viện. Liệt kê toàn bộ tài liệu có trong thư viện. Liệt kê toàn bộ tài liệu có trong thư viện. Liệt kê từng loại tài liệu có trong thư viện. •• Liệt kê từng loại tài liệu có trong thư viện. Xem thông tin về tài liệu khi biết mã tài liệu. •• Xem thông tin về tài liệu khi biết mã tài liệu. •• Tìm kiếm một tài liệu theo: Tên và tác giả đối với sách; Tìm kiếm một tài liệu theo: Tên và tác giả đối với sách; Tên tạp chí, Chuyên ngành, số, năm đối với tạp chí, Tên Tên tạp chí, Chuyên ngành, số, năm đối với tạp chí, Tên CD, Số thứ tự và nội dung đối với CD. CD, Số thứ tự và nội dung đối với CD.

2323

2424

6

HINH ds[]=new HINH[5]; HINH ds[]=new HINH[5]; ds[0]=new HinhTron(1.3); ds[0]=new HinhTron(1.3); ds[1]=new TamGiac(3,4,5); ds[1]=new TamGiac(3,4,5); ds[2]=new HinhCN(2,5); ds[2]=new HinhCN(2,5); ds[3]=new HinhTron(3.0); ds[3]=new HinhTron(3.0); ds[4]=new HinhCN(4 3); ds[4]=new HinhCN(4,3); ds[4]=new HinhCN(4,3); ds[4]=new HinhCN(4 3); //Tính tổng diện tích các hình //Tính tổng diện tích các hình double tongDT=0; double tongDT=0; for(int i=0;i<5;i++) tongDT+=ds[i].dienTich(); for(int i=0;i<5;i++) tongDT+=ds[i].dienTich(); System.out.println(“Tong dien tich ”+ tongDT); System.out.println(“Tong dien tich ”+ tongDT); }} }}

Thực hành Thực hành

Thực hành bài quản lý danh sách nhân 1.1. Thực hành bài quản lý danh sách nhân viên bằng 2 cách: viên bằng 2 cách: 2 á h iê bằ 2 á h iê bằ Không dùng lớp trừu tượng. •• Không dùng lớp trừu tượng. •• Dùng lớp trừu tượng. Dùng lớp trừu tượng. Thực hành bài DTHINH cài đặt bằng 2.2. Thực hành bài DTHINH cài đặt bằng giao diện giao diện. giao diện. giao diện Thực hành bài quản lý tài liệu thư 3.3. Thực hành bài quản lý tài liệu thư viện. viện.

2525

7