BÀI 3
TÍNH BAO GÓI
TÍNH
BAO
GÓI
TRONG L
Ậ
P TR
Ì
NH JAV
A
Ậ
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ản
lý
chuột
máy
tính
Bài
toán
:
Hệ
thống
quản
lý
chuột
máy
tính
Chủ cửa hàng Nam Việt chuyên cung cấpcácloạichuộtmáytínhmuốnxâydựng một
phầnmềm để tiệnchoviệcquảnlý.Quatìmhiểutathấycó2loạichuộtcơ bảnlàchuột
không dây và chuột có dây chúng thuộcloạichuột quang hoặcchuộtlaser.
Mộtyêucầukháclàchủ cửahàngmuốn sau khi xây dựng phầnmềmnàycóthể tái sử
dụng lạimộtsố lớp đốitượng để mình tự viếtmộtsố chương trình khác.
Vậy theo Anh Chị làm thế nào để có thể phân loại để quảnlýđượcthôngtin
ể
ể
về các loạichuột?
V
àlàmsaođ
ể
có th
ể
tái s
ử
dụng lạimộtsố chương trình
đã đượcxâydựng?
v1.0011107228
2
MỤC TIÊU BÀI HỌC
Trình bày về tính bao gói trong lập trình hướng đối tượng.
Mô tả cách tổ chức lớp sử dụng package và cách thức kiểm soát truy xuất
vào các thành phầncủa đốitượng th
ô
ng qua các từ khóa (private public
vào
các
thành
phần
của
đối
tượng
th
ô
ng
qua
các
từ
khóa
(private
,
public
,
protected, default).
Xây dựng chương trình gồmcáclớpvới các thành phầnsử dụng các từ khóa
ấ
đ
ổ
hứ
k
truy xu
ấ
t
đ
ượct
ổ
c
hứ
ctrongpac
k
age.
v1.0011107228
3
NỘI DUNG
1
Giới
thiệu
về
tính
bao
gói
trong
lập
trình
hướng
đối
tượng
.
Giới
thiệu
về
tính
bao
gói
trong
lập
trình
hướng
đối
tượng
.
2
Cách thứctổ chứclớpsử dụng Package.
3
Cách
thức
kiểm
soát
truy
xuất
vào
các
thành
phần
của
đối
tượng
3
Cách
thức
kiểm
soát
truy
xuất
vào
các
thành
phần
của
đối
tượng
.
v1.0011107228
4
3.1. TÍNH BAO GÓI TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Khả năng truy xuất vào các thành phầncủamột đốitượng trong khi vẫn đảmbảocác
thôngtinriêngtư bên trong đốitượng đượcgọilàtínhchegiấu thông tin (hay còn gọi
là
tính
bao
gói)
là
tính
bao
gói)
.
Chương trình quảnlýchuột được
đóng gói trong đĩaCD.
Người
sử
dụng
có
thể
sử
dụng
dữ
Người
sử
dụng
có
thể
sử
dụng
dữ
liệu được đóng gói.
v1.0011107228
5
3.2. TỔ CHỨC LỚP TRONG CÁC PACKAGE
Package và cách thứctổ chứccáclớptrongJava.
1.1
1
Truy
xuất
vào
các
lớp
trong
package
11
2
Truy
xuất
vào
các
lớp
trong
package
.
1
.
1
2
v1.0011107228
6
3.2.1. PACKAGE VÀ CÁCH THỨC TỔ CHỨC LỚP VÀO PACKAGE
•Khisố lượng lớpcótrongmột ứng dụng
tăng lên có thể nảysinhcácvấn đề:
Tìm
kiếm
;
Tìm
kiếm
;
Tên lớpdài;
Vấn
đề
lớp
trùng
tên
;
Vấn
đề
lớp
trùng
tên
;
Chia sẻ,táisử dụng và tích hợp.
•Javachophéptổ chứccáclớpvàocác
package. Package là cơ chế tổ chứclớp
giống như tổ chứccâythư mụctrong
máy
tính
.
máy
tính
.
Với bài tập tình huống có thể tổ
chứcquảnlýloạichuộtnhư trên
chức
quản
lý
loại
chuột
như
trên
v1.0011107228
7
Sử
dụng
từ
khóa
package
ở
dòng
đầu
tiên
của
file
mã
nguồn
java
theo
sau
là
tên
3.2.1. PACKAGE V
À
C
Á
CH TH
Ứ
C T
Ổ
CH
Ứ
C L
Ớ
P V
À
O PACKAGE (tiếp
theo)
Sử
dụng
từ
khóa
package
ở
dòng
đầu
tiên
của
file
mã
nguồn
java
,
theo
sau
là
tên
package.
GeniusMouse.java
package ChuotDay.ChuotLaser;
public class GeniusMouse{}
RazerNageMouse.java
package ChuotDay.ChuotQuang;
public class RazerNageMouse{}
public
class
RazerNageMouse{}
GeniusMouse.java
package ChuotKhongDay ChuotLaser;
package
ChuotKhongDay
.
ChuotLaser;
public class GeniusMouse{}
RazerNagaMouse java
RazerNagaMouse
.
java
package ChuotKhongDay.ChuotQuang;
public class RazerNagaMouse{}
v1.0011107228
8
Tổ chức file trong thư mụcTổ chức lớp trong package
3.2.2. TRUY XUẤT VÀO CÁC LỚP TRONG PACKAGE
•
Sử
dụng
từ
khóa
import
:
•
Sử
dụng
từ
khóa
import
:
package demo;
import ChuotDay.ChuotLaser.GeniusMouse;
public class PackageDemo{
public
class
PackageDemo{
public void runDemo {
G
eniusMouse
s
=new
G
eniusMouse
();
();
ChuotKhongDay.ChuotLaser.GeniusMouse gen
= new ChuotKhongDay.ChuotLaser.GeniusMouse();
}
}
•Sử dụng tên đầy đủ của một lớp khi có sự xung đột về tên lớp.
v1.0011107228
9
3.2.3. CÁC PACKAGE XÂY DỰNG SẴN
•Nềntảng java cung cấpcholậptrìnhviênmộttậpcácJavaAPIcơ bản để lậptrình
ứng dụng.
á
ó
ả
•C
á
cg
ó
icơ b
ả
n:
java: chứacácgóithư việnchuẩncủajava.
j
l
á
lớ
th
iệ
ặ
đị h
đ
it
t
h
tì h
j
j
ava.
l
ang: c
á
c
lớ
p
thư
v
iệ
nm
ặ
c
đị
n
h
đ
ược
i
mpor
t
t
rong c
h
ương
t
r
ì
n
h
j
ava.
java.util: các lớptiệních.Vídụ lớp Scanner giớithiệutrongbài1.
j
hứ
á
ói
thư
iệ
h ẩ
ở
ộ
j
avax: c
hứ
ac
á
cg
ói
thư
v
iệ
nc
h
u
ẩ
nm
ở
r
ộ
ng
•Cácgóinàyđượcnénvàotrongfilejarđặttrongthư mụclibcủaJDK.Khisử dụng
cần
cung
cấp
CLASSPATH
dẫn
tới
cần
cung
cấp
CLASSPATH
dẫn
tới
.
Sử dụng công cụ jar củaJavangườidùngcóthể tự nén các lớptrongchương trình
thành
một
file
jar
duy
nhất
tiện
cho
việc
chia
sẻ
và
cài
đặt
.
thành
một
file
jar
duy
nhất
tiện
cho
việc
chia
sẻ
và
cài
đặt
.
v1.0011107228
10
/
**
3.2.3. CÁC PACKAGE XÂY DỰNG SẴN (tiếptheo)
/
* Write a description of class Client here.
* Client.java
*/
*/
import java.util.Scanner;
import ChuotDay.ChuotLaser.GeniusMouse;
public class Client {
p
ublic void
i
n
p
utMouse()
{
p
p
Scanner scan = new Scanner(System.in);
System.out.println("Name Mouse: ");
String
nameMouse
=
scan
next()
;
String
nameMouse
=
scan
.
next()
;
GeniusMouse gen = new GeniusMouse(nameMouse);
S
ystem.out
.
p
rintln("Name
o
f
g
enius
m
ouse
:
"
+
gen.toString());
}
v1.0011107228
11
}
Đáp án tham khảo
3.3. KIỂM SOÁT TRUY XUẤT
Các t
ừ
khóa truy xuất:
•Sử dụng từ khóa truy xuất private
•
Sử
dụng
từ
khóa
truy
xuất
public
•
Sử
dụng
từ
khóa
truy
xuất
public
•Sử dụng từ khóa truy xuất <default>
•B
ả
n
g
tổ
n
g
k
ết
.
ả g
tổ g
ết
•Cáctừ khóa truy xuất được dùng để điềukhiểncáchthứctruycậpvàocácthành
phầntrongmộtlớp.
•Cáct
ừ
khóa truy xuấtcũng quyết định xem mộtthànhphầncủalớpnàycóđược
truy xuấtbởimột thành phầncủalớpkháchaykhông.
•
Java
cung
cấp
các
mức
truy
xuất
tương
ứng
với
các
từ
khóa
sau
:
•
Java
cung
cấp
các
mức
truy
xuất
tương
ứng
với
các
từ
khóa
sau
:
public
p
rivate
p
<default>: không chỉđịnh từ khóa truy xuất
v1.0011107228
12
3.3.1. SỬ DỤNG TỪ KHÓA PUBLIC
package mouse wiredmouse;
•Từ khóa public tạoramức độ truy xuất
lớnnhất.
package
mouse
.
wiredmouse;
public class GeniusMouse {
p
ublic String name;
•Từ khóa public đượcápdụng cho lớp,
interface, trường, hàm tạovàphương thức.
private String publisher;
String description;
public GeniusMouse() {}
public GeniusMouse(String
name, String publisher, String
description) {
this name name;
Áp dụng cho lớphoặcinterface:Cóthể
truy xuấtvàolớp, interface này từ các
this
.
name
=
name;
this.publisher =
publisher;
this.description =
diti
gói khác.
Áp dụng cho trường, hàm tạovà
ể
d
escr
i
p
ti
on;
}
@
Override
phương thức: Có th
ể
truy xuấtvàocác
thành phầnnàytừ các lớpkhác.
public String toString() {
return "Name: " +
this.name;
}
v1.0011107228
13
}
}
3.3.2. SỬ DỤNG TỪ KHÓA PRIVATE
pac
k
age
m
ouse.
wir
ed
m
ouse;
•
Từ
khóa tạoramức độ truy xuấthẹpnhất.
•Từ khóa private có thể áp dụng cho lớp,
f
ờ
hà
à
h
hứ
pac age ouse. ed ouse;
public class GeniusMouse {
public String name;
i t St i bli h
inter
f
ace, trư
ờ
ng,
hà
mtạov
à
p
h
ương t
hứ
c.
p
r
i
va
t
e
St
r
i
ng pu
bli
s
h
er;
String description;
public GeniusMouse() {}
Áp dụng cho lớpvàinterface:
hô
hể
ấ
à
á
lớ
public GeniusMouse(String
name, String publisher, String
description) {
this.name
=
name;
K
hô
ng t
hể
truy xu
ấ
tv
à
oc
á
c
lớ
p,
interface này từ các gói khác.
Áp
dụng
cho
trường
hàm
tạo
và
this.name
name;
this.publisher =
publisher;
this.description =
description;
Áp
dụng
cho
trường
,
hàm
tạo
và
phương thức: Không thể truy xuất
vào
được
các
thành
phần
này
từ
description;
}
@Override
vào
được
các
thành
phần
này
từ
các lớpkhác.
p
ublic String toString() {
return "Name: " +
this.name;
}
v1.0011107228
14
}
}
3.3.2. SỬ DỤNG CHỈ THỊ TRUY XUẤT MẶC ĐỊNH <DEFAULT>
pac
k
age
m
ouse.
wir
ed
m
ouse;
•Khikhôngchỉđịnh từ khóa truy xuất
thì
java
sẽ
áp
dụng
chỉ
thị
truy
xuất
pac age ouse. ed ouse;
public class GeniusMouse {
public String name;
i t St i bli h
thì
java
sẽ
áp
dụng
chỉ
thị
truy
xuất
mặc định default.
•Chỉ thị truy xuấtmặc định có thể áp
pr
i
va
t
e
St
r
i
ng pu
bli
s
h
er;
String description;
public GeniusMouse() {}
dụng cho lớp, interface, trường, hàm
tạovàphương thức.
Áp
dụng
cho
lớp
interface
:
Chỉ
public GeniusMouse(String
name, String publisher, String
description) {
this.name
=
name;
Áp
dụng
cho
lớp
,
interface
:
Chỉ
truy xuất đượccáclớp, interface
này khi cùng một package.
this.name
name;
this.publisher =
publisher;
this.description =
description;
Áp dụng cho trường, hàm tạo,
phương thức: Chỉ truy xuất được
từ
các
lớp
trong
cùng
một
description;
}
@Override
từ
các
lớp
trong
cùng
một
package.
public String toString() {
return "Name: " +
this.name;
}
v1.0011107228
15
}
}
/
**
VÍ DỤ
/
* Write a description of class Client here.
* Client.java
* @author (your
n
ame)
* @version (a version number or a date)
*/
public class Client {
public static void demoStudent() {
CD
objCD
=
new
CD(
"
MAXELL
"
,
"
DVD
-
R
"
,
10
)
;
CD
objCD
new
CD( MAXELL ,
DVD
R,
10
)
;
System.out.println("speed: " + objCD.speed);
System.out.println(“publisher: " + objCD.publisher);
}
}
}
d
10
spee
d
:
10
Exception in thread "main" java.lang.RuntimeException:
Uncompilable source code - publisher has private access in CD
v1.0011107228
16
at Client.main(Client.java:5)
Java Result: 1
CÂU HỎI THẢO LUẬN
Bổ
từ
bli
à
ttd
ó
ì
khá
h
Bổ
từ
pu
bli
cv
à
pro
t
ec
t
e
d
c
ó
g
ì
khá
cn
h
au.
17
CASE STUDY
Mô phỏng sự hoạt động của đồng hồđiệntử:
Lớpcácđốitượng đồng hồ lấy tên là DigitalClock, vớinhững đặc điểm được
ô
ả
m
ô
t
ả
nh
ư
sau:
•Cókhả năng hiểnthị giờ, phút, giây theo định dạng: hh:mm:ss
•
Có
khả
năng
thay
đổi
trạng
thái
giờ
phút
giấy
sau
mỗi
lần
chạy
•
Có
khả
năng
thay
đổi
trạng
thái
giờ
,
phút
,
giấy
sau
mỗi
lần
chạy
.
•Một đốitượng đầucuốisẽ sử dụng đốitượng đồng hồ và chạytrong
khoảng 1000s.
v1.0011107228
18
BẢNG TÓM TẮT
Elements Visible in
Access
modifier
Elements
Visible
in
Class
Package
Subclass Outside
Class
Package
package
public yes yes yes yes
protected yes yes yes no
private yes no no no
no modifier yes yes no no
v1.0011107228
19
CÂU HỎI THẢO LUẬN
Vì sao cầnsử dụng đến package?
20
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
TÓM LƯỢC CUỐI BÀI
Sau khi học xong bài này chúng ta đã nắm được các kiến thức sau:
•Hiểu được cách tạo gói.
ử ó àá ó ấ ẵ
•S
ử
dụng được g
ó
i đã tạo v
à
c
á
c g
ó
i được cung c
ấ
p s
ẵ
n.
•
Hiểucáchsử dụng các bổ từ truy xuất: private public
•
Hiểu
cách
sử
dụng
các
bổ
từ
truy
xuất:
private
,
public
,
protected, default.
•Xây dựng ứng dụng phân chia trong các gói khác nhau.
v1.0011107228
22
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
PROPERTIES
PROPERTIES
Allow user to leave interaction: Anytime
Show ‘Next Slide’ Button: Don't show
Completion Button Label: Next Slide
PROPERTIES
PROPERTIES
Allow user to leave interaction: Anytime
Show ‘Next Slide’ Button: Don't show
Completion Button Label: Next Slide