Mục đích & yêu cầu<br />
<br />
Chương 5:<br />
<br />
Giới thiệu một thành phần cơ bản: Đối tượng<br />
<br />
LỚP TRỪU TƯỢNG<br />
<br />
Object, Lớp trừu tượng, gói, giao diện.<br />
Giải thích được lớp trừu tượng là gì, Gói, giao<br />
diện là gì?<br />
Sử dụng các thành phần này, viết một chương<br />
trình đơn giản.<br />
2<br />
<br />
1<br />
<br />
Nội dung chính<br />
1.<br />
<br />
Đối tượng Object<br />
<br />
2.<br />
<br />
1. Đối tượng Object<br />
<br />
Lớp trừu tượng<br />
<br />
Đây là đối tượng cấp cao nhất của mọi lớp trong<br />
Java. Mọi lớp trong Java đều kế thừa từ lớp này.<br />
Đối tượng Object có một số phương thức:<br />
• public boolean equals(Object)<br />
• public String toString()<br />
<br />
Ta có thể dùng tham chiếu của lớp Object để tham<br />
chiếu đến một đối tượng thuộc lớp bất kỳ.<br />
• Ví dụ: Object o = new SinhVien(…);<br />
3<br />
<br />
4<br />
<br />
1<br />
<br />
2- Lớp trừu tượng<br />
<br />
2 - Lớp trừu tượng<br />
<br />
Lớp trừu tượng là gì?<br />
<br />
Là kết qủa của việc khái quát hóa cao đến nỗi<br />
<br />
• Xem kết qủa của việc khái quát hóa sau:<br />
Bạn có hình<br />
dung nổi một<br />
ANIMAL di<br />
chuyển như thế<br />
nào không?<br />
<br />
không biết viết code thế nào.<br />
Là lớp có những hành vi chỉ khai báo mà không<br />
<br />
class ANIMAL<br />
<br />
Không<br />
Trừu tượng<br />
<br />
void Travel();<br />
<br />
viết code. Để dành code cụ thể sẽ được hiện thực<br />
ở các lớp dẫn xuất ( lớp cụ thể hơn).<br />
Tư duy tự nhiên:<br />
<br />
class Bird<br />
Bạn có hình dung nổi<br />
một đối tượng thuộc<br />
các lớp này di chuyển<br />
như thế nào không?<br />
<br />
class Fish<br />
<br />
class Snake<br />
<br />
void Travel()<br />
<br />
void Travel()<br />
<br />
void Travel()<br />
<br />
Có<br />
<br />
• Từ các đối tượng cụ thể<br />
<br />
Lớp cụ thể.<br />
<br />
• Từ các lớp cụ thể có cùng tính chất<br />
<br />
lớp trừu tượng.<br />
<br />
cụ thể<br />
5<br />
<br />
6<br />
<br />
2 - Lớp trừu tượng<br />
<br />
2 - Lớp trừu tượng<br />
<br />
Phương thức trừu tượng là phương thức<br />
không cài đặ chi tiết.<br />
khô<br />
ài đặt hi tiết.<br />
iế<br />
Khai báo PTTT:<br />
<br />
Lớp trừu tượng là lớp chứa ít nhất một PTTT.<br />
Lớp trừu tượng dù<br />
ớ<br />
ừ<br />
dùng để là cơ sở đ h nghĩa<br />
làm<br />
ở định<br />
hĩ<br />
các lớp khác.<br />
Khai báo lớp trừu tượng:<br />
<br />
abstract ;<br />
<br />
Ví dụ: khai báo phương thức duocTN()<br />
của lớp SV.<br />
abstract boolean duocTN();<br />
<br />
abstract class <br />
{<br />
khai báo các thành phần của lớp<br />
}<br />
<br />
7<br />
<br />
8<br />
<br />
2<br />
<br />
2 - Lớp trừu tượng<br />
<br />
2 - Lớp trừu tượng<br />
<br />
Ví dụ: khai báo lớp trừu tượng SV<br />
<br />
Lớp kế thừa từ lờp trừu tượng phải khai<br />
<br />
abstract class SV<br />
{<br />
<br />
báo tường minh các PTTT nếu không cũng<br />
là lớp trừu tượng.<br />
<br />
…<br />
abstract public boolean duocTN();<br />
<br />
Ví dụ: khai báo lớp SVSP kế thừa từ lớp<br />
<br />
}<br />
<br />
SV<br />
<br />
Lưu ý không thể tạo đối tượng từ lớp trừu<br />
ý:<br />
g<br />
ạ<br />
ợ g<br />
p<br />
tượng.<br />
Ví dụ: không thể tạo đối tượng từ lớp SV<br />
SV s = new SV(…);<br />
<br />
class SVSP extends SV{<br />
…<br />
public boolean duocTN(){…}<br />
<br />
sai<br />
9<br />
<br />
}<br />
<br />
2 - Lớp trừu tượng<br />
<br />
10<br />
<br />
2 - Lớp trừu tượng<br />
<br />
Ví dụ: lớp sinh viên tại chức (SVTC) kế<br />
thừa<br />
thừ từ lớp SV, là lớp trừu tượng.<br />
lớ SV<br />
lớ t ừ tượ<br />
abstract class SVTC extends SV<br />
{<br />
Protected String noiCT;<br />
…<br />
//abstract public boolean duocTN();<br />
<br />
Hành vi không có<br />
chỉ thị abstract<br />
thì phải có code<br />
<br />
Có hành vi<br />
abstract mà<br />
lớp không<br />
có chỉ thị<br />
abstract<br />
<br />
}<br />
11<br />
<br />
12<br />
<br />
3<br />
<br />
5.35.3- Đặc điểm của lớp trừu tượng.<br />
<br />
2 - Lớp trừu tượng<br />
<br />
Không thể<br />
khởi tạo<br />
một đối<br />
tượng thuộc<br />
lớp trừu<br />
tượng<br />
(abstract)<br />
mà chỉ khởi<br />
tạo đối<br />
tượng thuộc<br />
lớp cụ thể<br />
(concrete).<br />
<br />
Chưa thể viết code vì lương 1 người =<br />
Ch<br />
hể iế<br />
d ìl<br />
ời<br />
lương cơ bản * hệ số<br />
<br />
13<br />
<br />
2 - Lớp trừu tượng<br />
<br />
14<br />
<br />
2 - Lớp trừu tượng<br />
• Lớp con cũng là lớp trừu tượng<br />
<br />
Vì biến đối tượng là tham<br />
khảo chỉ đến đối tượng<br />
nên một biến thuộc lớp<br />
cha nhưng lại chỉ đến<br />
một lớp con là lớp trừ tượng<br />
hoặc là lớp cụ thề.<br />
ĐÂY LÀ CÁCH DÙNG TÍNH<br />
ĐA HÌNH TRONG OOP<br />
<br />
15<br />
<br />
Biến lớp ông chỉ đến<br />
đối tượng lớp cháu<br />
<br />
16<br />
<br />
4<br />
<br />
2 - Lớp trừu tượng<br />
<br />
2.2 Ví dụ<br />
Ví dụ: xây dựng các lớp tính diện tích<br />
các hình: tròn, tam giác, chữ nhật.<br />
chữ<br />
Chương trình minh họa gồm một mảng<br />
các đối tượng và tính tổng diện tích của<br />
các hình trong mảng.<br />
g<br />
g<br />
<br />
Chú ý về kết hợp<br />
abstract với các<br />
chỉ thị khác<br />
<br />
17<br />
<br />
18<br />
<br />
Lớp HINH<br />
<br />
Lớp HinhTron<br />
class HinhTron extends HINH<br />
{<br />
<br />
abstract class HINH<br />
{<br />
abstract double dienTich();<br />
}<br />
<br />
double bk;<br />
public HinhTron(double b){ bk = b;}<br />
public double dienTich()<br />
{<br />
return bk*bk*Math.PI;<br />
<br />
}<br />
<br />
}<br />
19<br />
<br />
20<br />
<br />
5<br />
<br />