B
À
I 6
LẬP TRÌNH TỔNG QUÁT TRONG JAVA
GIẢNG VIÊN TRẦNTHỊ VÂN
GIẢNG
VIÊN
:
TRẦN
THỊ
VÂN
v1.0011107228
1
TÌNH HUỐNG DẪN NHẬP
Bài toán: Hệ thống quảnl
ý
các loại
v
ật nuôi tại
v
ườnthúHàNội
•VườnthúHàNộimuốnxâydựng mộthệ thống để quảnlývàgiớithiệucácconvật
nuôi
tại
đó
.
Các
loài
như
:
hổ,
khỉ,
mèo,
chó,
sư
tử,
ngựa
v
.
v
.
,
các hoạt động liên quan đếntừng vật nuôi: ăn, phát âm v.v.
•Nếunhư nhóm tấtcả các loài trên thuộccùngnhómđộng vật (animal) có khả năng
ể
ănvàphátâmthìkhôngth
ể
hiện đượchết các hành động củatừng loài vậtnh
ư
:
chó là động vậtcóthểănthức ăntạpvàphátratiếng kêu gâu gâu, mèo là động
v
ậ
tcóth
ể
ănt
ạp
và
phát
âm
gì
thì
tùy
vào
từng
loài
vật
nhưng
ăn
gì
và
phát
âm
gì
thì
tùy
vào
từng
loài
vật
.
Vậy
theo
Anh
Chị
để
quản
lý
động vậttronghệ thống thế nào?
v1.0011107228
2
MỤC TIÊU
Trình bày về tính trừutượng hóa, tính đahìnhtrongJava.
Xây dựng chương trình đơngiảnsử dụng lớptrừutượng, interface.
Phân tích mộtsố bài toán đơngiảntheohướng đốitượng sử dụng các
tính chấtvề tính kế thừa, trừutượng.
v1.0011107228
3
NỘI DUNG
Giớithiệuvề tính trừutượng trong lậptrìnhhướng đốitượng.
1
Lập
trình
trừu
tượng
trong
Java
2
Lập
trình
trừu
tượng
trong
Java
.
2
v1.0011107228
•Khimớigiớithiệukháiniệm đốitượng, ta nói rằng chúng có thểđượcnhómlại
thành các lớp, trong đómỗilớplàmộttậpcácđốitượng có cùng thuộctínhvà
hành
vi
hành
vi
.
•Tacũng nói theo chiềungượclạirằng ta có thểđịnh nghĩamột đốitượng như
làm
ộ
tth
ể
hi
ệ
ncủam
ộ
tlớ
p
.
ộ
ệ
ộ
p
•Nghĩalà:Lớpcóthể tạo đốitượng.
•Hầuhếtcáclớptađãgặp đềutạo đượcthể hiện. Ta có thể tạothể hiệncủalớp
Student hay Employee.
v1.0011107228
7
ể
ể
.
Ví
dụ
:
Trong
hệ
thống
quản
lý
loài
vật
nuôi
:
Horse,
Dog,
Cat
là
các
lớp
đối
tượng
.
Vậymột đốitượng animal (động vật) chính xác là cái gì? Phương thức
pronunciation() sẽđưaracáigìkhikhôngbiết đó là horse, dog hay cat.
Ta có thể nói rằng một đốitượng chó là mộtthể hiệncủa động vật, nhưng
thực ra không phải, nó là mộtthể hiệncủalớpdẫnxuấtcủa động vật.
<<abstract>>
Animal
Horse Dog Cat
v1.0011107228
không
thể
tạo
thể
hiện
.
•Thựctế,tathường phân nhóm các đốitượng theo kiểunày:
Chó và mèo đềulàđộng vật, nhưng mộtconđộng vậtlàcongì?
Hay bia và rượu đềulàđồ uống, nhưng mộtthứđồuống chính xác là cái gì?
•Cóthể xác định xem mộtlớpcóphảilàlớptrừutượng hay không khi ta không thể
ì
đ
ộ
hể
hiệ
ủ
lớ
à
àl i
khô
hải
là
hể
hiệ
ủ
ộ
lớ
t
ì
m
Có con động vậtnàokhôngthuộcmộtnhómnhỏ hơnkhông?
C
ó
đồ
uống
nào
không
thuộc
một
loại
cụ
thể
hơn
không?
C
ó
đồ
uống
nào
không
thuộc
một
loại
cụ
thể
hơn
không?
•Lớptrừutượng chứacácphương thứctrừutượng. Cách thứcmôtả lớpvàphương
Animal
Mọithuộctínhvàhànhvi
củalớpcơ sở (Animal) có
mặt
trong
mỗi
thể
hiện
của
Horse CatDog
Sơ đồ quan hệ giữa các lớp trong bài tập tình huống
mặt
trong
mỗi
thể
hiện
của
các lớpdẫnxuất(Horse,
Dog, Cat).
/**
* Animal.java
*/
p
ublic abstract
c
lass
A
nimal
{
protected String name;
.
j
ava
*/
public class Cat{
//Constructor for objects of class Cat
public
Cat(){
}
*/
public class Dog {
//Constructor for objects of class Dog
bli
D (){
}
public
Cat(){
}
public Cat(String _name){ super(_name); }
//overriden methods
p
ublic Strin
g
p
ronunciation()
{
r
eturn
"
meo
public
String
pronunciation()
{
return
gau
gau
;
}
public String action() { return "trong nha"; }
public void eat() { System.out.println("Gam xuong");}
}
/**
* Horse.java
*
/
/
public class Horse{
//Constructor for objects of class Horse
public Horse(){ }
public
Horse(String
name){
super( name)
;
}
public
Horse(String
_name){
super(
;
}
}
/**
* Client.java
*/
bli
l
Cli t
pu
bli
c
cl
ass
Cli
en
t
{
public static void main(String[] args) {
Animal dog = new Dog();
Ai l
t
C t()
A
n
i
ma
l
ca
t
p
ronunc
i
a
ti
on:
"
+
c
a
t
.
p
ronunc
i
a
ti
on
())
;
System.out.println("Cat eat:"); cat.eat();
System.out.println("Horse pronunciation:" + horse.pronunciation());
System.out.println("Horse eat:"); horse.eat();
}
}
}
v1.0011107228
12
CÁC ĐẶC ĐIỂM CỦA LỚP TRỪU TƯỢNG
• Không thể tạomột đốitượng trựctiếptừ lớptrừutượng.
nếu
chứa
các
phương
thức
trừu
tượng.
•Lớptrừutượng cần đượckế thừavàcàiđặtchitiếtcácphương thứctrừu
tượng ở các lớpcon.
•Lớptrừutượng tạorakhả năng lậptrìnhvớicácđốitượng khi chỉ biếtcác
mô
tả
trừu
tượng
về
nó
mà
chưa
có
cài
đặt
chi
tiết
mô
tả
trừu
tượng
về
nó
mà
thức
trừu
tượng
và
phương
thức
thông thường?
v1.0011107228
14
BÀI TẬP
Chương trình sử dụng đối tượng đồ họa (graphic) để vẽ các đối tượng hình học cơ bản
(h )
(
s
h
ape
)
v1.0011107228
15
Đáp án tham khảo
2.1. TỪ KHOÁ FINAL
Từ khoá final đượcsử dụng cho lớp và các thành phầncủalớp.
•Khisử dụng cho khai báo lớpthìlớp đósẽ không có khả năng đượckế thừa
ậ
ớ
à
ẽ
ô
ả
•
Khi
sử
dụng
cho
khai
báo
hằng
số
:
public static final double PI=3.1415;
•Khis
ử
d
ụ
n
g
cho khai báo
p
hươn
g
thứcthì
p
hươn
g
thức đósẽ khôn
g
đư
ợ
c
On failing, 'Finish' button: Goes to Next Slide
Allow user to leave quiz: At any time
User may view slides after quiz: At any time
User may attempt quiz: Unlimited times
2.2. INTERFACE
Trong casestudy của Session 02 sự tương tác giữahaiđốitượng: công tắcvàbóngđèn:
•Nhược điểmcủa ứng dụng này là sự liên kếtgiữa SwitchButton và ElectricLamp khá
chặt. Như vậymỗi switchbutton đượctạorachỉ có thểđiềukhiểnbậtvàtắt được
mộtloại đốitượng là ElectricLamp. Tuy nhiên trên thựctế,córấtnhiềuloại đối
tượng cũng có khả năng bậttắt đượcvídụ như quạt điện (ElectricFan), hay đài
(
Radio
),
khi đókhả năn
g
tái s
ử
d
ụ
n
g
của SwitchButton cho các thiếtb
ị
mớinà
y
là
(),
g
ụ g
ị
phân
loại
một
nhóm
các
đối
tượng
thuộccáclớp khác nhau dựa trên các hành vi tương tự nhau.
•Như trong ví dụ trên ta có ElectricLamp, ElectricFan, Radio v.v là các nhóm đối
tượng
đề
có
khả
năng
bật
à
tắt
(S itchable)
do
ậ
tong
thiết
kế
ta
có
thể
tạo
a
tượng
đề
đượ
đối
tượ
à
à
d
ậ
SithBtt
lú
à
ó
thể
đượ
ử
d
để
v1.0011107228
18
khiể
n
đượ
c
đối
tượ
ng n
à
y, v
à
d
ov
chúng
khả
năng
của
chúng
.
•Interfacegầngiống như mộtlớptrừutượng, tuy nhiên nó chỉ chứacácphương thức
trừutượng và các hằng số thuộclớp.
• Cách khai báo:
public interface InterfaceName {
}
public interface InterfaceName {
public <returntype> methodName1(<params>);
public <returntype> methodName2(<params>);
public
<returntype>
methodName2(<params>);
}
v1.0011107228
19
CÁC ĐẶC ĐIỂM CƠ BẢN
•
Interface
không
cho
phép
tạo
ra
•M
ộ
tl
ớ
p đượcph
é
pmangm
ộ
tho
ặ
c nhi
ề
uinterfaceth
ô
ng qua cơ ch
ế
c
à
i đ
ặ
t
interface.
•Khimộtlớpmangmột interface nào thì các đốitượng thuộclớp đó đượccoinhư
là th
ể
hiệncủainterfaceđó.
•Interfacethường đượcnhắc đếnnhư là cách thứcnhằmbùlạihạnchế không hỗ
tr
ợ
đak
năng
bật
tắt
.
•Cáchsử dụng và cài đặtinterface:
Mộtlớpbấtkỳ có thể mang (cài đặt) mộthoặcnhiều interface khác nhau
bằ
áh
ử
d
từ
kh á
il t
th
là
dh
áh
á
it f
bằ
ng c
á
c
h
s
ử
d
ụng
từ
kh
ộ
ứ
ừ
v1.0011107228
20
đặtb
ằ
ng m
ộ
tphương th
ứ
ctr
ừ
utượng.
VÍ DỤ
Cách cài đ
ặ
tvàs
ử
d
ụ
n
g
interface.
ặ
ụ g
v1.0011107228
21
/**
* Write a description of interface Switchable here.
objects
of
class
SwitchButton
Constructor
for
objects
of
class
SwitchButton
*/
public SwitchButton() { }
public void connectTo(Switchable switchObj) {
t
his.switchObj=switchObj
;
}
public void switchOn() {
switchObj.switchOn();
}
v1.0011107228
22
public
v
oid switchOff()
{
switchObj.switchOff();
}
}
/**
{
// To do:
status="Dark!";
}
public void switchOn() {
status="Li
g
ht!"
;
g
System.out.println(status);
}
public void switchOff() {
status=
"
Dark!
"
;
v1.0011107228
23
status= Dark!
;
System.out.println(status);
}
}
/**
* Write a description of class Radio here.
*
*
@author
status=" ";
}
}
public void switchOn() {
status="^&%&^%^$^%@!)(^#!";
System.out.println(status);
}
}
public void switchOff() {
status=" ";
System.out.println(status);
}
v1.0011107228
24
}
}
Đáp án bài tập tham khảo
CÂU HỎI TƯƠNG TÁC
Sự khác biệtgiữalớptrừutượng và Interface?
Sự
khác
biệt
giữa
lớp
trừu