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 hai
trường hp xy ra: (1) chúng ta viếtthư vin
(2) chúng ra sdng thư vin
Trong trung hp (1): chúng ta không mun
cho các LTV sdng thư vinđược truy
nhp/can thip vào các phn lõi cathư vin
Trong trường hp (2): chúng ta không cn quan
tâm ti phn lõi cathư vin, chúng ta chcn
quan tâm giao din ca phnđược sdng
không bthay đổi
Gii pháp: Các chếthc hin/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
Phn
giao
din
Phn
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 tkhóa xác định tính cht
ca các thuc tính cađốitượng: public,
private, protected
Public: quy định các thuc tính cađốitượng
được phép sdng/truy nhp tbt kai/đối
tượng nào
Private: quy định các thuc tính cađốitượng
không được phép sdng tcác đốitượng bên
ngoài. Đây như bctường đối vi 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: tkhóa đặc bit quy định tính cht
ca các đốitượng ch được phép truy nhp ca
các đốitượng bên ngoài lpnhưng phi thuc
vmt lp nào đó kếtha ca lp hin thi
Khi khai báo lp 3 tkhóa này ý nghĩađánh
du tính cht ca các thuc tính (hàm thành
phn dliu thành phn) ktlúc gp các
tkhoá tương ng cho ti khi gp tkhóa khác
Mcđịnh: private
Thtxut hin các tkhóa 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 thc
private
Không dùng được toán t
new. Vic to ra một đối
tượng phải được thông
qua phương thức:
makeASundae()
makeASundae()
c phương thức mà kết
quca nó ch đphc v
cho các phương thức cùng
lp (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 phương thức mà kết
quca nó ch đphc v
cho các phương thức cùng
lp (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ó
ó.
.