Tải bản đầy đủ (.pdf) (30 trang)

Tài liệu BÀI 6 LẬP TRÌNH TỔNG QUÁT TRONG JAVA pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (679.05 KB, 30 trang )

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


vật
nuôi
cần
quản

như
:
hổ,
khỉ,
mèo,
chó,

tử,
ngựa
v
.
v
.
,
nuôi
tại
đó
.
Các
loài
vật
nuôi
cần
quản


như
:
hổ,
khỉ,
mèo,
chó,

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


p
hát ra tiến
g
kêu meo meo
,
n
gự
alàđ

n
g
v

tcóth

ăncỏ và

ạp
p
g
,
gự
ộ g

phát ra tiếngkêuhíhív.v Cũng không thể quảnlýchitiếtvề từng loài vậtvì
những loài vât này đềucónhững hành động chung là có thểăn, có thể phát âm,
nhưng
ăn



phát
âm

thì
tùy
vào
từng
loài
vật
nhưng
ăn


phát
âm

thì
tùy
vào
từng
loài
vật
.
Vậy
theo
Anh
Chị
để
quản


các
loài
vật
nuôi
ta
nên
xây
dựng
những
đối
tượng

Vậy
theo
Anh
Chị
để
quản

các
loài
vật
nuôi
ta
nên
xây
dựng
những
đối
tượng

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

4
1. TÍNH TRỪU TƯỢNG TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Một đặctả trừutượng cho ta biếtmột đốitượng có thể làm gì mà không bậntâmvào
việcnólàmnhư thế nào?
Sư tử có thể thựchiệntất
cả các chứcnăng như:
Nhìn
ngửi
ăn
săn
mồi
Nhìn
,
ngửi
,
ăn
,
săn
mồi

mà không cầnbiếtnóthực
hiệnnhư thế nào.
v1.0011107228
5
2. LẬP TRÌNH TRỪU TƯỢNG TRONG JAVA
2.1. Lớptrừutượng.
2.2. Interface – Giao diện.
v1.0011107228
6
2.1. LỚP TRỪU TƯỢNG

•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



2.1. LỚP TRỪU TƯỢNG (tiếptheo)

T
uy nhiên, vớimộtsố lớp, có th

không hợp lý khi nghĩđến chuyệntạoth

hiện
củacáclớp đó.


dụ
:
Trong
hệ
thống
quản

loài
vật
nuôi
:
Horse,
Dog,
Cat

các
lớp
đối
tượng

.

dụ
:
Trong
hệ
thống
quản

loài
vật
nuôi
:
Horse,
Dog,
Cat

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

8
2.1. LỚP TRỪU TƯỢNG (tiếp theo)

Lớp
trừu
tượng
(Abstract
Base
Class

ABC)

một
lớp
không
thể
tạo
thể
hiện

Lớp
trừu
tượng
(Abstract
Base
Class
ABC)

một
lớp

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

hể
hiệ


lớ
t
ì
m

đ
ượcm

tt
hể
hiệ
nc

a
lớ
pn
à
ym
àl

i
khô
ng p
hải

t
hể
hiệ
nc

am

t
lớ
pcon

 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

thứctrừutượng:
public abstract class ClassName {
}
<<abstract>>
}
public abstract class ClassName {
<<abstract>>
ClassName
v1.0011107228
9
public abstract <returntype> methodName(<params>);
}
GIẢI QUYẾT BÀI TẬP TÌNH HUỐNG
Giả
sử
lớp
animal

lớp
trừu
<<abstract>>
Giả
sử
lớp
animal

lớp
trừu
tượng, nó có các lợiíchgì?
<<abstract>>

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;

//Constructor for objects of class Animal
p
ublic Animal
(){
}
p
(){
}
public Animal(String _name){ this.name = _name; }
//Abstract methods
protected abstract String pronunciation();
protected
abstract
String
action()
;
v1.0011107228
10
protected
abstract
String
action()
;
protected abstract void eat();
protected String getName() {return this.name;}
}
/**
* Cat.java
/**
* Dog

.
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

m
eo"
;
}
p
u
bli
c
D
og
(){
}
public Dog(String _name){ super(_name); }
//overriden methods
public
String
pronunciation()
{
return
"gau
gau
"
;
}
p
g
p
public String action() { return "bat chuot"; }
public void eat() { System.out.println("An chuot");}
}

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(

_
name)
;
}
//overriden methods
public String pronunciation() { return "hi hi"; }
public String action() { return "chay dua"; }
i
i
i
v1.0011107228
11
publ
i
cvo
i
d eat()
{
S
ystem
.
o
ut
.
p
r
i
ntln("An
c
o")

;
}
}
/**
* 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

= new
C
a
t()
;
Animal horse = new Horse();
System.out.println("Dog pronunciation: " + dog.pronunciation());
System.out.println("Dog eat:"); dog.eat();
St
t
itl("Ct
iti
"
t
iti ())
S
ys
t
em
.
ou
t
.pr
i
n
tl
n
("C
a
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.

•Lớptrừutượng có thể chứacácthuộctínhvàphương thứcnhư các lớp
thông thường.

Một
lớp
phải
được
khai
báo

lớp
trừu
tượng
nếu
chứa
các
phương
thức
trừu

Một
lớp
phải
được
khai
báo

lớp
trừu
tượ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

tả
trừu
tượng
về


chưa

cài
đặt
chi
tiết

tả
trừu
tượng
về



chưa

cài
đặt
chi
tiết
.
v1.0011107228
13
CÂU HỎI TƯƠNG TÁC
Hãy
nêu
sự
khác
nhau
giữa
phương
thức
trừu
tượng

phương
thức
Hãy
nêu
sự
khác
nhau
giữa
phương

thức
trừu
tượng

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


à

ô


à

(Do v

yl

pn
à
ys

kh
ô
ng ph

il
à
l

p abstract);
public final class ClassN{}

Khi
sử
dụng
cho
khai
báo
hằng
số
:


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

ụ g
p g
p g
g

overriden (ghi đè) lạitronglớpkế thừa.
final void eat(){}
v1.0011107228
16
PROPERTIES
On passing
'
Finish
'
button:
Goes to Next Slide
On

passing
,
Finish

button:
Goes

to

Next

Slide

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

(),
g
ụ g


y
không thể.
•Ngônngữ Java đưaramộtgiảiphápchovấn đề này đólàkháiniệmvề Interface.
Interface
giúp
cho
người
phân
tích
thiết
kế

thể
phân
loại
một
nhóm
các
đối
tượng
Interface
giúp
cho
người
phân
tích
thiết
kế

thể

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

khả
năng
bật
à
tắt
(S itchable)
do

tong
thiết
kế
ta

thể
tạo
a
tượng
đề

u

khả
năng
bật
v
à
tắt
(S
w
itchable)
,
do
v

y
t
r
ong
thiết
kế
ta

thể
tạo
r
a
mộtInterfacelấy tên là Switchable vớicáctínhnăng đượcmôtả trước(bậtvàtắt).
Khi đó đốitượng SwitchButton chỉ cầnkếtnốitớimộtSwitchablelàcóthểđiều
khiể

đượ
đối
tượ
à
à
d

SithBtt

à
ó
thể
đượ

d
để
v1.0011107228
18
khiể
n
đượ
c
đối
tượ
ng n
à
y, v
à
d
ov


y
S
w
it
c
hB
u
tt
on

cn
à
yc
ó
thể
đượ
cs

d
ụng
để
điềukhiểnrấtnhiềucácloạithiếtbị Switchable khác nhau như ElectricLamp, Radio,
ElectricFan v.v…
2.2. INTERFACE (tiếptheo)
•KháiniệmIntefacegiúptạoracácquytắcbaogồmcácmôtả trừutượng về khả
năng củamột đốitượng để từđólàmcơ sở phân nhóm các lớpkhácnhaudựatrên
khả
năng
của

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

các
thể
hiện
trực
tiếp
.
Interface
không
cho
phép
tạo
ra
các
thể
hiện
trực
tiếp
.
•Intefacecóthểđượckế thừa để tạoramộtinterfacemới.
•Mộtlớp không thể kế thừatừ mộtinterface.


é



ô
ế
à


•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

ế
thừatron
g
Java.

g
•Interfacegiúpmôtả mốiquanhệ “có tính năng” giữacácđốitượng: Ví dụ:Quạt
điện“có khả năng bậttắt”, Radio “có khả năng bậttắt” v.v Khi đócóthể nói quạt
điện

radio

những
đối
tượng
“Có
khả
năng
bật
tắt

điện

radio

những
đối
tượng

khả

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

dh
áh
á
it f
bằ
ng c
á
c
h
s

d
ụng
từ
kh

o
á
i
mp
l
emen
t
s
th
eo sau

d
an
h
s
á
c
h
c
á
c
i
n
t
er
f
ace.
 Mộtlớpkhicàiđặtinterfacesẽ tiến hành cài đặtchitiếtcácphương thức đã
mô tả trong các interface đónếukhôngphảithaythế phương thức không cài





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.

*
*
@author
(your
name)
*
@author
(your
name)
* @version (a version number or a date)
*/
public interface Switchable
{
{
void switchOn();
void switchOff();
}
/**
/**
* Write a description of class SwitchButton here.
* @author (your name)
* @version (a version number or a date)
*/
*/
public class SwitchButton{
private Switchable switchObj;
/**
*
Constructor
for

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();
}
}
/**

* Write a description of class ElectricLamp here.
*
* @author (your name)
* @version (a version number or a date)
*/
p
ublic
c
lass ElectricLam
p
i
m
p
lements
S
witchable
p
p
p
{
/**
* Fields
*/
/
private String status;
/**
* Constructor for objects of class ElectricLamp
*/
*/
public ElectricLamp()

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

(your
name)
@author
(your
name)
* @version (a version number or a date)
*/
public class Radio implements Switchable
{
{
/**
* Fields
*/
private
String
status
;
private
String
status
;
/**
* Constructor for objects of class Radio
*/
public
Radio()
public
Radio()
{
// To do:

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


tượng



Interface?
v1.0011107228
25

×