
1
Chương
Chương 3: Th
3: Thự
ực hi
c hiệ
ện
n ẩ
ẩn
n
Kh
Khở
ởi t
i tạ
ạo v
o và
àh
hủ
ủy b
y bỏ
ỏ đ
đố
ối tư
i tượ
ợng
ng
Hu
Huỳ
ỳnh Quy
nh Quyế
ết Th
t Thắ
ắng
ng
Cao Tu
Cao Tuấ
ấn D
n Dũ
ũng
ng
B
Bộ
ộmôn CNPM
môn CNPM
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 2
2
Vai trò c
Vai trò củ
ủa th
a thự
ực hi
c hiệ
ện
n ẩ
ẩn
n
Khi viếtchương trình thông thường có hai
trường hợp xảy ra: (1) chúng ta viếtthư viện và
(2) chúng ra sửdụng thư viện
Trong truờng hợp (1): chúng ta không muốn
cho các LTV sửdụng thư việnđược truy
nhập/can thiệp vào các phần lõi củathư viện
Trong trường hợp (2): chúng ta không cần quan
tâm tới phần lõi củathư viện, chúng ta chỉcần
quan tâm giao diện của phầnđược sửdụng
không bịthay đổi
Giải pháp: Các cơ chếthực hiện/khai báo ẩn
(hidden implementation)

2
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 3
3
Đ
Đố
ối tư
i tượ
ợng v
ng và
àgiao ti
giao tiế
ếp v
p vớ
ới th
i thế
ếgi
giớ
ới
i
bên ngo
bên ngoà
ài
i
Bên ngoài
Phần
giao
diện
Phần
Lõi/nhân
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 4
4
T
Từ
ừkh
khó
óa x
a xá
ác đ
c đị
ịnh thu
nh thuộ
ộc t
c tí
ính truy
nh truy
nh
nhậ
ập (access specifier)
p (access specifier)
C++/Java quy định 3 từkhóa xác định tính chất
của các thuộc tính củađốitượng: public,
private, protected
Public: quy định các thuộc tính củađốitượng là
được phép sửdụng/truy nhập từbất kỳai/đối
tượng nào
Private: quy định các thuộc tính củađốitượng
không được phép sửdụng từcác đốitượng bên
ngoài. Đây như là bứctường đối với các LTV
bên ngoài đốitượng

3
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 5
5
T
Từ
ừkh
khó
óa x
a xá
ác đ
c đị
ịnh thu
nh thuộ
ộc t
c tí
ính truy
nh truy
nh
nhậ
ập (access specifier)
p (access specifier)
Protected: từkhóa đặc biệt quy định tính chất
của các đốitượng chỉ được phép truy nhập của
các đốitượng bên ngoài lớpnhưng phải thuộc
vềmột lớp nào đó kếthừa của lớp hiện thời
Khi khai báo lớp 3 từkhóa này có ý nghĩađánh
dấu tính chất của các thuộc tính (hàm thành
phần và dữliệu thành phần) kểtừlúc gặp các
từkhoá tương ứng cho tới khi gặp từkhóa khác
Mặcđịnh: private
Thứtựxuất hiện các từkhóa là tùy ý.
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 6
6
V
Ví
íd
dụ
ụminh h
minh họ
ọa
a
class Square
class Square
{
{
private:
private:
int
int side;
side;
public:
public:
void
void setSide(int
setSide(int
s)
s)
{ side = s; }
{ side = s; }
int
int getSide
getSide()
()
{ return side; }
{ return side; }
};
};
int
int main()
main()
{
{
Square s1;
Square s1;
s1.setSide(10);
s1.setSide(10);
s1.side = 15;
s1.side = 15;
}
}

4
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 7
7
V
Ví
íd
dụ
ụminh h
minh họ
ọa
a
public class Car
{
...
private String model;
public int mileage;
}
...
Car aCar = new Car();
aCar.mileage = 23000; // ok
System.out.println(aCar.mileage); // ok
aCar.model = "VW Beetle"; // error
System.out.println(aCar.model); // error
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 8
8
Java
Java
class Sundae {
class Sundae {
private Sundae() {}
private Sundae() {}
static Sundae makeASundae() {
static Sundae makeASundae() {
return new Sundae();
return new Sundae();
}
}
}
}
public class IceCream {
public class IceCream {
public static void main(String[] args) {
public static void main(String[] args) {
//! Sundae x = new Sundae();
//! Sundae x = new Sundae();
Sundae x = Sundae.makeASundae();
Sundae x = Sundae.makeASundae();
}
}
}
}
Contructor là phương thức
private
Không dùng được toán tử
new. Việc tạo ra một đối
tượng phải được thông
qua phương thức:
makeASundae()
makeASundae()
Các phương thức mà kết
quảcủa nó chỉ đểphục vụ
cho các phương thức cùng
lớp (helper method) thì
nên để chế độprivate

5
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 9
9
C
Cấ
ấu tr
u trú
úc l
c lớ
ớp thư
p thườ
ờng d
ng dù
ùng
ng
class X {
class X {
void private_function();
void private_function();
int internal_representation;
int internal_representation;
public:
public:
void interface_function();
void interface_function();
};
};
Các phương thức mà kết
quảcủa nó chỉ đểphục vụ
cho các phương thức cùng
lớp (helper method) thì
nên để chế độprivate
TS H.Q. Th
TS H.Q. Thắ
ắng
ng -
-TS C.T. D
TS C.T. Dũ
ũng B
ng Bộ
ộmôn
môn
CNPM
CNPM 10
10
Java: Truy nh
Java: Truy nhậ
ập l
p lớ
ớp, package
p, package
Quy đ
Quy đị
ịnh quy
nh quyề
ền truy nh
n truy nhậ
ập đ
p đế
ến m
n mộ
ột l
t lớ
ớp c
p củ
ủa m
a mộ
ột
t
thư vi
thư việ
ện
n
T
Từ
ừkh
khó
óa public class X: l
a public class X: lớ
ớp X đư
p X đượ
ợc nh
c nhì
ìn th
n thấ
ấy t
y từ
ừ
m
mọ
ọi nơi bên ngo
i nơi bên ngoà
ài
i
public class Widget {
public class Widget { …
…
import mylib.Widget;
import mylib.Widget;
ho
hoặ
ặc
c
import mylib.*;
import mylib.*;
Ngư
Ngượ
ợc l
c lạ
ại, l
i, lớ
ớp X ch
p X chỉ
ỉ đư
đượ
ợc nh
c nhì
ìn th
n thấ
ấy b
y bở
ởi c
i cá
ác l
c lớ
ớp
p
trong c
trong cù
ùng package v
ng package vớ
ới n
i nó
ó.
.