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

Lập trình hướng đối tượng Java PTIT

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 (1.2 MB, 173 trang )

1










P TRÌNH HNG I TNG

PGS.TS. Trn ình Qu
KS. Nguyn Mnh Hùng











Các khái nim c bn ca Lp trình hng đi tng
Lp trình hng đi tng vi Java
2
GII THIU


Trong nhng nm gn đây, lp trình hng đi tng đã tr nên gn gi nh s ra đi liên tip
ca các ngôn ng lp trình hng đi tng. Sc mnh ca phng pháp lp trình hng đi
tng th hin  ch kh nng mô hình hoá h thng da trên các đi tng thc t, kh nng
đóng gói và bo v an toàn d
liu, kh nng s dng li mã ngun đ tit kim chi phí và tài
nguyên; đc bit là kh nng chia s mã ngun trong cng đng lp trình viên chuyên nghip.
Nhng đim mnh này ha hn s thúc đy phát trin mt môi trng lp trình tiên tin cùng vi
nn công nghip lp ráp phn mm vi các th vin thành phn có sn.
Tài liu này nhm gii thiu cho các sinh viên m
t cái nhìn tng quan v phng pháp lp trình
hng đi tng cùng cung cp nhng kin thc, các k thut c bn cho phát trin các ng dng
ca mình da trên ngôn ng lp trình Java - mt trong nhng ngôn ng lp trình hng đi tng
thông dng nht hin nay.
Ni dung ca tài liu này bao gm hai phn chính:
• Phn th nht trình bày nhng khái nim và các vn đ c bn c
a lp trình hng đi
tng bao gm tng quan v cách tip cn hng đi tng và các khái nim đi tng,
lp, k tha, đóng gói, đa hình…
• Phn th hai trình bày chi tit phng pháp lp trình hng đi tng vi ngôn ng lp
trình Java.
Ni dung ca tài liu bao gm 6 chng:
Chng 1: Tng quan v cách tip cn hng đi tng. Trình bày s ti
n hoá ca cách tip
cn t lp trình truyn thng đn cách tip cn ca lp trình hng đi tng và xu
hng phát trin ca lp trình hng đi tng hin nay.
Chng 2: Nhng khái nim c bn ca lp trình hng đi tng. Trình bày các khái nim
c bn nh: đi tng, lp đi tng vi các thuc tính và phng thc, tính k th
a
và đa hình, tính đóng gói ca lp trình hng đi tng. Chng này cng gii thiu
tng quan mt s ngôn ng lp trình hng đi tng thông dng hin nay.

Chng 3: Ngôn ng Java. Gii thiu nhng khái nim và nhng quy c ban đu ca ngôn ng
lp trình Java: Cu trúc chng trình, cách biên dch, cách đt tên bin, kiu d liu,
các toán t và cu trúc lnh ca ngôn ng Java.
Ch
ng 4: K tha và đa hình trên Java. Trình bày các k thut lp trình hng đi tng da
trên ngôn ng Java: Khai báo lp, các thuc tính và phng thc ca lp; k thut
tha k, các lp tru tng, cài đt np chng và đa hình trên Java.
Chng 5: Biu din và cài đt các cu trúc d liu tru tng trên Java. Trình bày k thut
cài đt và s dng mt s cu trúc d li
u quen thuc trong Java: ngn xp, hàng đi,
danh sách liên kt, cây nh phân và đ th.
Chng 6: Lp trình giao din trên Java. Trình bày các k thut lp trình giao din trên Java:
Lp trình vi các giao din c bn trong th vin AWT, lp trình giao din vi Applet
và HTML, lp trình giao din nâng cao vi th vin SWING.
Tài liu này đc vit nhm phc v môn hc “Lp trình hng đi tng” ging dy tip theo
sau môn hc Ngôn ng
lp trình C++ và nh vy khi hc môn hc này sinh viên s d nm bt
đc nhng đc trng khác bit ca ngôn ng Java so vi C++.
3
Cun sách này còn có kèm theo mt đa CD cha toàn b mã các chng trình cài đt làm ví d
và bài tp trong cun sách.
Mc dù các tác gi đã có nhiu c gng trong quá trình biên son tài liu này, song không th
tránh khi nhng thiu sót. Rt mong nhn đc s đóng góp ý kin ca sinh viên và các bn
đng nghip.
4
















PHN 1

NHNG KHÁI NIM C BN
CA LP TRÌNH HNG I TNG

5
CHNG 1
TNG QUAN V CÁCH TIP CN
HNG I TNG

Ni dung chng này nhm gii thiu mt cách tng quan v cách tip cn hng đi tng. Ni
dung trình bày bao gm:
• Gii thiu v cách tip cn ca lp trình truyn thng.
• Gii thiu cách tip cn ca lp trình hng đi tng.
• So sánh s khác bit gia hai cách tip cn này.
• Xu hng hin nay ca lp trình hng
đi tng
1.1 PHNG PHÁP TIP CN CA LP TRÌNH TRUYN THNG
Lp trình truyn thng đã tri qua hai giai đon:
• Giai đon s khai, khi khái nim lp trình mi ra đi, là lp trình tuyn tính.

• Giai đon tip theo, là lp trình hng cu trúc.
1.1.1 Lp trình tuyn tính
c trng c bn ca lp trình tuyn tính là t duy theo li tun t. Chng trình s đc thc
hin tun t t đu đn cui, lnh này k tip lnh kia cho đn khi kt thúc chng trình.
c trng
Lp trình tuyn tính có hai đc trng:
• n gin: chng trình đc tin hành đn gin theo li tun t, không phc tp.
• n lung: ch có mt lung công vic duy nht, và các công vic đc thc hin tun t
trong lung đó.
Tính cht
• u đim: Do tính đn gin, lp trình tuyn tính có u đim là chng trình đn gin, d
hiu. Lp trình tuyn tính đc ng dng cho các chng trình đn gin.
• Nhc đim: Vi các ng dng phc tp, ngi ta không th dùng lp trình tuyn tính đ
gii quyt.
Ngày nay, lp trình tuyn tính ch tn ti trong phm vi các modul nh nh
t ca các phng pháp
lp trình khác. Ví d trong mt chng trình con ca lp trình cu trúc, các lnh cng đc thc
hin theo tun t t đu đn cui chng trình con.
1.1.2 Lp trình cu trúc
Trong lp trình hng cu trúc, chng trình chính đc chia nh thành các chng trình con và
mi chng trình con thc hin mt công vic xác đnh. Chng trình chính s gi đn chng
trình con theo mt gii thut, hoc mt cu trúc đc xác đnh trong chng trình chính.
6
Các ngôn ng lp trình cu trúc ph bin là Pascal, C và C++. Riêng C++ ngoài vic có đc trng
ca lp trình cu trúc do k tha t C, còn có đc trng ca lp trình hng đi tng. Cho nên
C++ còn đc gi là ngôn ng lp trình na cu trúc, na hng đi tng.
c trng
c trng c bn nht ca lp trình cu trúc th hin  mi quan h:
Chng trình = Cu trúc d liu + Gii thut
Trong đó:

• Cu trúc d liu là cách t chc d liu, cách mô t bài toán di dng ngôn ng lp
trình
• Gii thut là mt quy trình đ thc hin mt công vic xác đnh
Trong chng trình, gii thut có quan h
ph thuc vào cu trúc d liu:
• Mt cu trúc d liu ch phù hp vi mt s hn ch các gii thut.
• Nu thay đi cu trúc d liu thì phi thay đi gii thut cho phù hp.
• Mt gii thut thng phi đi kèm vi mt cu trúc d liu nht đnh.
Tính cht
• Mi chng trình con có th đc gi thc hin nhiu ln trong mt chng trình chính.
• Các chng trình con có th đc gi đn đ thc hin theo mt th t bt kì, tu thuc
vào gii thut trong chng trình chính mà không ph thuc vào th t khai báo ca các
chng trình con.
• Các ngôn ng lp trình cu trúc cung cp mt s cu trúc lnh điu khin ch
ng trình.
u đim
• Chng trình sáng sa, d hiu, d theo dõi.
• T duy gii thut rõ ràng.
Nhc đim
• Lp trình cu trúc không h tr vic s dng li mã ngun: Gii thut luôn ph thuc cht
ch vào cu trúc d liu, do đó, khi thay đi cu trúc d liu, phi thay đi gii thut,
ngha là phi vit li chng trình.
• Không phù hp vi các phn mm ln: t duy cu trúc vi các gii thut ch phù hp vi
các bài toán nh, n
m trong phm vi mt modul ca chng trình. Vi d án phn mm
ln, lp trình cu trúc t ra không hiu qu trong vic gii quyt mi quan h v mô gia
các modul ca phn mm.
Vn đ
Vn đ c bn ca lp trình cu trúc là bng cách nào đ phân chia chng trình chính thành các
chng trình con cho phù hp vi yêu cu, chc nng và mc đích ca mi bài toán.

Thông thng, đ phân rã bài toán trong lp trình cu trúc, ngi ta s dng phng pháp thit k
trên xung (top-down).
7
Phng pháp thit k trên xung (top-down)
Phng pháp thit k top-down tip cn bài toán theo hng t trên xung di, t tng quan đn
chi tit. Theo đó, mt bài toán đc chia thành các bài toán con nh hn. Mi bài toán con li
đc chia nh tip, nu có th, thành các bài toán con nh hn na.
Quá trình này còn đc gi là quá trình làm mn dn. Quá trình làm mn dn s dng li khi các
bài toán con không cn chia nh thêm na. Ngha là khi mi bài toán con đu có th gii quyt
bng mt ch
ng trình con vi mt gii thut đn gin.
Ví d, s dng phng pháp top-down đ gii quyt bài toán là xây mt cn nhà mi. Khi đó, ta
có th phân rã bài toán theo các bc nh sau:
•  mc th nht, chia bài toán xây nhà thành các bài toán nh hn nh: làm móng, đ ct,
đ trn, xây tng, lp mái.
•  mc th hai, phân rã các công vic  mc th nht: vic làm móng nhà có th phân rã
tip thành các công vic: đào móng, gia c
 nn, làm khung st, đ bê tông. Công vic đ
ct đc phn rã thành …
•  mc th ba, phân rã các công vic ca mc th hai: vic đào móng có th phân chia tip
thành các công vic: đo đc, cm mc, chng dây, đào và kim tra móng. Vic gia c nn
đc phân rã thành …
Quá trình phân rã có th dng  mc này, bi vì các công vic con thu đc là: đo đc, cm mc,
chng dây, đào… có th thc hi
n đc ngay, không cn chia nh thêm na.
Lu ý:
• Cùng s dng phng pháp top-down vi cùng mt bài toán, nhng có th cho ra nhiu
kt qu khác nhau. Nguyên nhân là do s khác nhau trong tiêu chí đ phân rã mt bài toán
thành các bài toán con.
Ví d, vn áp dng phng pháp top-down đ gii quyt bài toán xây nhà, nhng nu s dng

mt cách khác đ phân chia bài toán, ta có th thu đc kt qu khác bit so vi phng pháp ban
đu:
•  mc th nht, chia bài toán xây nhà thành các bài toán nh h
n nh: làm phn g, làm
phn st, làm phn bê tông và làm phn gch.
•  mc th hai, phân rã các công vic  mc th nht: vic làm g có th chia thành các
công vic nh: x g, gia công g, to khung, lp vào nhà. Vic làm st có th chia nh
thành…
Rõ ràng, vi cách làm mn th này, ta s thu đc mt kt qu khác hn vi cách thc đã thc
hin  phn trên.
1.2 PHNG PHÁP TIP CN HNG I TNG
1.2.1 Phng pháp lp trình hng đi tng
Xut phát t hai hn ch chính ca phng pháp lp trình cu trúc:
• Không qun lí đc s thay đi d liu khi có nhiu chng trình cùng thay đi mt bin
chung. Vn đ này đc bit nghiêm trng khi các ng dng ngày càng ln, ngi ta không
th kim soát đc s truy nhp đn các bin d liu chung.
8
• Không tit kim đc tài nguyên con ngi: Gii thut gn lin vi cu trúc d liu, nu
thay đi cu trúc d liu, s phi thay đi gii thut, và do đó, phi vit li mã chng
trình t đu.
 khc phc đc hai hn ch này khi gii quyt các bài toán ln, ngi ta xây dng mt
phng pháp tip cn mi, là phng pháp lp trình h
ng đi tng, vi hai mc đích chính:
• óng gói d liu đ hn ch s truy nhp t do vào d liu, không qun lí đc.
• Cho phép s dng li mã ngun, hn ch vic phi vit li mã t đu cho các chng trình.
Vic đóng gói d liu đc thc hin theo phng pháp tru tng hoá đi tng thành lp t
thp lên cao nh
 sau:
• Thu thp các thuc tính ca mi đi tng, gn các thuc tính vào đi tng tng ng.
• Nhóm các đi tng có các thuc tính tng t nhau thành nhóm, loi b bt các thuc

tính cá bit, ch gi li các thuc tính chung nht. ây đc gi là quá trình tru tng hoá
đi tng thành lp.
• óng gói d liu ca các đi tng vào lp tng ng. Mi thu
c tính ca đi tng tr
thành mt thuc tính ca lp tng ng.
• Vic truy nhp d liu đc thc hin thông qua các phng thc đc trang b cho lp.
Không đc truy nhp t do trc tip đn d liu.
• Khi có thay đi trong d liu ca đi tng, ta ch cn thay đi các phng thc truy nhp
thuc tính ca lp, mà không c
n phi thay đi mã ngun ca các chng trình s dng
lp tng ng.
Vic cho phép s dng li mã ngun đc thc hin thông qua c ch k tha trong lp trình
hng đi tng. Theo đó:
• Các lp có th đc k tha nhau đ tn dng các thuc tính, các phng thc ca nhau.
• Trong lp dn xut (lp đc k th
a) có th s dng li các phng thc ca lp c s
(lp b lp khác k tha) mà không cn thit phi cài đt li mã ngun.
• Ngay c khi lp dn xut đnh ngha li các phng thc cho mình, lp c s cng không
b nh hng và không phi sa li bt kì mt đon mã ngun nào.
Ngôn ng l
p trình hng đi tng ph bin hin nay là Java và C++. Tuy nhiên, C++ mc dù
cng có nhng đc trng c bn ca lp trình hng đi tng nhng vn không phi là ngôn ng
lp trình thun hng đi tng. Java tht s là mt ngôn ng lp trình thun hng đi tng.
c trng
Lp trình hng đi tng có hai đc trng c bn:
• óng gói d liu: d liu luôn đc t chc thành các thuc tính ca lp đi tng. Vic
truy nhp đn d liu phi thông qua các phng thc ca đi tng lp.
• S dng li mã ngun: vic s dng li mã ngun đc th hin thông qua c ch
 k
tha. C ch này cho phép các lp đi tng có th k tha t các lp đi tng khác. Khi

đó, trong các lp k tha, có th s dng các phng thc (mã ngun) ca các lp b k
tha, mà không cn phi đnh ngha li.
9
u đim
Lp trình hng đi tng có mt s u đim ni bt:
• Không còn nguy c d liu b thay đi t do trong chng trình. Vì d liu đã đc đóng
gói vào các đi tng. Nu mun truy nhp vào d liu phi thông qua các phng thc
cho phép ca đi tng.
• Khi thay đi cu trúc d liu ca mt đi tng, không cn thay đi các
đi mã ngun ca
các đi tng khác, mà ch cn thay đi mt s hàm thành phn ca đi tng b thay đi.
iu này hn ch s nh hng xu ca vic thay đi d liu đn các đi tng khác
trong chng trình.
• Có th s dng li mã ngun, tit kim tài nguyên. Vì nguyên tc k tha cho phép các
lp k tha s d
ng các phng thc đc k tha t lp khác nh nhng phng thc
ca chính nó, mà không cn thit phi đnh ngha li.
• Phù hp vi các d án phn mm ln, phc tp.
1.2.2 Phng pháp phân tích và thit k hng đi tng
Mt vn đ c bn đt ra cho phng pháp hng đi tng là t mt bài toán ban đu, làm sao
đ thu đc mt tp các đi tng, vi các chc nng đc phi hp vi nhau, đáp ng đc yêu
cu ca bài toán đt ra?
Phng pháp phân tích thit k hng đi tng ra đi nhm tr li cho câu hi này. Mc đích là
xây dng mt tp các l
p đi tng tng ng vi mi bài toán, phng pháp này tin hành theo
hai pha chính:
Pha phân tích: Chuyn đi yêu cu bài toán t ngôn ng t nhiên sang ngôn ng mô hình.
Pha thit k: Chuyn đi đc t bài toán di dng ngôn ng mô hình sang mt mô hình c
th có th cài đt đc.
Hai pha phân tích và thit k này bao gm nhiu bc khác nhau:

• Mô t bài toán
• c t yêu cu
• Trích chn đi tng

Mô hình hoá lp đi tng
• Thit k tng quan
• Thit k chi tit.
Bc 1: Mô t bài toán
Bài toán ban đu đc phát biu di dng ngôn ng t nhiên, bao gm:
• Mc đích, chc nng chung
• Các yêu cu v thông tin d liu
• Các yêu cu v chc nng thc hin
10
Bc 2: c t yêu cu
Các yêu cu đc hình thc hoá lên mt mc cao hn bng cách s dng ngôn ng kiu kch bn
(scenario) đ mô t. Trong mt kch bn, mi chc nng, mi hot đng đc mô t bng mt
kch bn, bao gm:
• Các tác nhân tham gia vào kch bn.
• Vai trò ca mi tác nhân trong kch bn.
• Th t các hành đng mà mi tác nhân thc hin: khi nào thc hi
n, tác đng vào tác nhân
nào, thông tin nào đc trao đi.
Quá trình trên đc tin hành vi tt c các chc nng yêu cu ca h thng.
Bc 3: Trích chn đi tng
Bc này s tin hành đ xut các đi tng có th có mt trong h thng:
• Da vào các kch bn đc mô t trong bc hai, chn ra các tác nhân có xut hin đ đ
xut thành các đi tng.
• La chn các đi tng bng cách loi b các tác nhân bên ngoài h thng, các tác nhân
trùng lp.
• Cui cùng, ta thu đc tp các đi tng ca h thng.

Bc 4: Mô hình hoá lp đi tng
Bc này tin hành tru tng hoá đi tng thành các lp:
• Thu thp tt c các thuc tính ca mi đi tng va thu thp đc, da vào yêu cu v
thông tin trong yêu cu h thng (t bc 1).
• Thu thp các hành đng mà mi đi tng cn thc hin, da vào các kch bn mà đi
tng tng ng có tham gia (trong bc 2).
• Nhóm các đi tng t
ng t nhau, hoc có nhiu thuc tính gn ging nhau.
• Loi b mt s thuc tính cá bit, riêng t ca mt s đi tng trong nhóm.
• Mô hình mi nhóm đi tng còn li thành lp: Các thuc tính chung ca các đi tng
thành thuc tính ca lp, các hành đng ca các đi tng thành phng thc ca lp.
Kt qu thu đc mt tp các lp đi tng ban
đu ca h thng.
Bc 5: Thit k tng quát
Bc này s tin hành thit k v mô, ngha là thit k mi quan h gia các lp trong h thng:
• Xác đnh s đ tha k, nu có, gia các lp: Nu hai lp có mt s thuc tính chung, thì
tách các thuc tính chung làm thành mt lp c s, và hai lp ban đu đu dn xut t lp
c s đó. Thông thng, lp các tru tng (chung nh
t) s làm lp c s, lp càng c th,
càng chi tit thì làm lp dn xut (lp con, cháu).
• Xác đnh tng tác, nu có, gia các lp: Da vào các kch bn đc mô t trong bc 2,
hai tác nhân có tng tác vi nhau thì hai lp tng ng  bc này cng có tng tác vi
nhau.
Kt qu thu đc ca bc này là mt s đ quan h bên ngoài gia các lp trong h thng.
11
Bc 6: Thit k chi tit
Bc này s thc hin thit k  mc vi mô, ngha là thit k kin trúc bên trong ca mi lp đi
tng:
• T chc d liu ca lp theo các thuc tính. Qui đnh phm vi truy nhp cho tng thuc
tính.

• Thit k chi tit cách c x ca lp đi tng thông qua các phng thc ca lp: Xác
đnh kiu d liu tr
 v, kiu tham s ca phng thc, mô t thut toán chi tit cho tng
phng thc, nu cn.
Kt qu thu đc ca bc này là mt tp các lp vi thit k chi tit kin trúc bên trong.
Sau các bc phân tích thit k hng đi tng t mt yêu cu ca bài toán ban đu, ta thu đc
mt mô hình h thng hng đi tng chi tit:
• Có cái nhìn t
ng quan, v mô v h thng bng mô hình thit k tng quan, ch rõ s lng
các lp đi tng, mi quan h k tha và quan h tng tác gia các lp đi tng trong
h thng.
• Có cái nhìn chi tit, vi mô v h thng bng mô hình thit k chi tit. Mô hình này ch rõ
bên trong mi lp đi tng: các thuc tính, các phng thc vi kiu tr v và ki
u tham
s, thut toán chi tit cho mi phng thc.
Sau pha phân tích và thit k hng đi tng, ta thu đc đc t h thng di dng mô hình các
lp: quan h gia các lp và kin trúc bên trong ca mi lp. ây s là đu vào cho pha tip theo,
pha lp trình hng đi tng, nh chúng ta đã bit.
1.3 SO SÁNH HAI CÁCH TIP CN
Phng pháp tip cn hng đi tng có bn cht hoàn toàn khác vi phng pháp tip cn
truyn thng (phng pháp tip cn hng cu trúc) trên nhiu mt:
• Phng pháp mô hình bài toán khác nhau.
• c trng khác nhau v đóng gói
• u / nhc đim khác nhau.
• Lnh vc ng dng khác nhau.
Khác nhau v phng pháp mô hình
Hai phng pháp này khác nhau hoàn toàn  cách tip cn và mô hình bài toán, phng pháp
hng đi tng tin hành theo phng pháp t di lên trên, t thp lên cao, t c th đn tru
tng. Trong khi đó, phng pháp cu trúc tip cn theo phng pháp t trên xung di, t tng
quan đn chi tit:

• Phng pháp hng đi tng bt đu bng nhng đi tng c th, tp hp các thu
c
tính ca tng đi tng. Sau đó, nhóm các đi tng tng t nhau thành nhóm, loi b
các thuc tính quá cá bit, ch gi li các thuc tính chung nht, nhóm thành lp. Cho nên,
quá trình hình thành lp là quá trình đi t thp lên cao, t c th  mc thp đn tru
tng hoá  mc cao.
12
• Trong khi đó, phng pháp hng cu trúc li đi theo chiu ngc li. Phng pháp này
bt đu t mt bài toán tng quan,  mc khái quát cao, chia nh dn và làm mn dn cho
đn khi thu đc mt tp các bài toán con, nh hn, c th hn, chi tit hn.
Khác nhau v đc trng đóng gói
Hai phng pháp tip cn này cng có nhng đc trng hoàn toàn khác nhau:
• Phng pháp hng đi tng có đc trng là d liu đc đóng gói đ hn ch truy nhp
t do trc tip vào d liu. Th hai là cho phép s dng li mã ngun đ tit kim tài
nguyên và công sc lp trình.
• Trong khi đó, đc trng ca phng pháp cu trúc là cu trúc d liu và gii thu
t và mi
quan h ph thuc cht nh ca gii thut vào cu trc d liu.
Khác nhau v u nhc đim
Hai phng pháp này cng có nhng u nhc đim trái ngc nhau:
• Phng pháp hng đi tng có u đim là bo v đc d liu tránh b truy nhp trc
tip t do t bên ngoài, tit kim đc tài nguyên và công sc lp trình do có th dùng li
mã ngun. Tuy nhiên, phng pháp này li khá phc tp, khó theo dõi đc lung d liu
và hn na, gii thut không phi là v
n đ trng tâm ca phng pháp này.
• Trái li, phng pháp hng cu trúc li có u đim là t duy gii thut rõ ràng, d theo
dõi lung d liu, chng trình đn gin và d hiu. Tuy nhiên, không bo v đc an
toàn d liu trong chng trình. Hn na, hn ch ln nht là s ph thuc cht ch ca
gii thut vào cu trúc d li
u, khin cho khi thay đi cu trúc d liu, thng phi thay

đi gii thut, và do đó, phi vit li mã cho chng trình.
Khác nhau v lnh vc áp dng
Do s khác nhau v các đc trng và s khác nhau v u nhc đim, cho nên hai phng pháp
này cng có s khác nhau đáng k trong lnh vc áp dng:
• Phng pháp hng đi tng thng đc áp dng cho các bài toán ln, phc tp, có
nhiu lung d liu khác nhau, không th qun lí đc bng phng pháp cu trúc. Khi
đó, ngi ta dùng phng pháp hng đi tng đ tn dng kh
nng bo v d liu
tránh b truy nhp t do. Hn na, tn dng kh nng dùng li mã ngun ca phng pháp
này đ tit kim tài nguyên và công sc.
• Trong khi đó, phng pháp cu trúc thng phù hp vi các bài toán nh, có lung d liu
rõ ràng, cn phi t duy gii thut rõ ràng và ngi lp trình vn có kh nng t qun lí
đc mi truy nhp
đn các d liu ca chng trình.
1.4 XU HNG PHÁT TRIN CA LP TRÌNH HNG I TNG
Lp trình hng thành phn
Xut phát t lp trình hng đi tng, t duy lp trình hng thành phn (component-oriented
programming) theo ý tng:
• Gii quyt bài toán bng cách xây dng mt tp các thành phn (component) có tính đc
lp tng đi vi nhau. Mi thành phn đm nhim mt phn công vic nht đnh.
13
• Sau đó, ngi ta ghép các thành phn vi nhau đ thu đc mt phn mm tho mãn mt
tp các yêu cu xác đnh.
Vi lp trình hng thành phn, ngi ta có th tin hành lp trình theo phng pháp sau:
• Xây dng mt th vin các thành phn, mi thành phn thc hin mt công vic xác đnh.
• Khi cn phát trin mt phn mm c th, ngi ta ch c
n chn nhng thành phn có sn
trong th vin đ ghép li vi nhau. Ngi lp trình ch phi phát trin thêm các thành
phn mình cn mà cha có trong th vin.
Phng pháp này có nhng u đim rt ln:

• Lp trình viên có th chia s vi nhau nhng thành phn mình đã xây dng cho nhiu
ngi khác dùng chung.
• Khi cn, lp trình viên có th lp ghép các thành phn có sn khác nhau đ to thành các
ch
ng trình có chc nng khác nhau. Tt c ch cn da trên công ngh lp ghép thành
phn, tit kim đc rt nhiu công sc lp trình.
Trong xu hng lp trình hng thành phn, mt s phng pháp lp trình khác đã ny sinh và
đang phát trin mnh m:
• Lp trình hng agent (agent-oriented programming)
• Lp trình hng aspect (aspect-oriented programming)
Lp trình hng agent
Lp trình hng agent có th xem là mt mc tru tng cao hn ca lp trình hng thành phn.
Trong đó, các agent là các thành phn có kh nng hot đng đc lp, t ch đ hoàn thành công
vic ca mình. Hn na, các agent có kh nng ch đng liên lc vi các agent khác đ có th
phi hp, cng tác hay cnh tranh nhau đ hoàn thành nhim v.
Lp trình hng agent có hai đc trng c bn:
• Th nht là kh nng t ch ca mi agent đ hoàn thành nhim v riêng ca nó.
• Th hai là tính t chc xã hi gia các agent, cho phép các agent phi hp, cng tác, cnh
tranh nhau đ hoàn thành nhim v chung ca toàn h thng.
Lp trình hng aspect
Lp trình hng aspect cng là mt xu hng ca lp trình hng thành phn. Theo đó, mi thành
phn có nhim v hoàn thành theo mt lung công vic hoc mt khía cnh ca vn đ. Sau đó,
tng hp các thành phn ca các lung khác nhau, ta thu đc gii pháp cho bài toán ca mình.
Lp trình hng aspect có đc trng c bn:
• Tính đóng gói theo lung công vic, hoc đóng gói theo khía cnh ca vn đ.
• Tính đn điu theo lung, trong mt lung công vic, các nhim v đc thc hin liên
tip nhau, tun t nh trong lp trình tuyn tính.
TNG KT CHNG 1
Ni dung chng 1 đã trình bày các vn đ tng quan liên quan đn phng pháp tip cn hng
đi tng trong lp trình:

• Các phng pháp tip cn truyn thng: lp trình tuyn tính và lp trình cu trúc.
14
• Phng pháp tip cn hng đi tng vi hai đc trng c bn: óng gói d liu và s
dng li mã ngun.
• Lp trình hng đi tng, phng pháp phân tích và thit k h thng hng đi tng.
• So sánh s khác bit ca phng pháp hng đi tng vi các phng pháp truyn thng
trên các khía cnh: Cách tip cn bài toán, đc trng, u nhc đim và lnh vc áp dng
ca mi phng pháp.
• Hin nay, lp trình hng thành phn, lp trình hng agent và lp trình hng aspect tin
hoá t lp trình hng đi tng đang là xu hng phát trin mnh m.

15
CHNG 2
NHNG KHÁI NIM C BN CA
LP TRÌNH HNG I TNG

Ni dung chng này tp trung trình bày các khái nim c bn ca lp trình hng đi tng:
• i tng
• Lp đi tng
• Vic tru tng hoá đi tng theo chc nng
• Tru tng hoá đi tng theo d liu
• K tha
• óng gói
• a hình
• Phng pháp cài đt lp đi tng

Gii thiu mt s ngôn ng lp trình hng đi tng thông dng hin nay.
2.1 CÁC KHÁI NIM C BN
2.1.1 i tng
Trong lp trình hng đi tng, tt c các thc th trong h thng đu đc coi là các đi tng

c th. i tng là mt thc th hot đng khi chng trình đang chy.
Ví d:
1. Trong bài toán qun lí buôn bán xe hi ca mt ca hàng kinh doanh, mi chic xe đang
có mt trong ca hàng đc coi là mt đi tng. Chng hn, mt chic xe nhãn hiu
“Ford”, màu tr
ng, giá 5000$ là mt đi tng.
2. Trong bài toán qun lí nhân viên ca mt vn phòng, mi nhân viên trong vn phòng đc
coi là mt đi tng. Chng hn, nhân viên tên là “Vinh”, 25 tui làm  phòng hành chính
là mt đi tng.
Mt đi tng là mt thc th đang tn ti trong h thng và đc xác đnh bng ba yu t:
• nh danh đi tng: xác đnh duy nht cho mi đi tng trong h thng, nh
m phân bit
các đi tng vi nhau.
• Trng thái ca đi tng: là s t hp ca các giá tr ca các thuc tính mà đi tng đang
có.
• Hot đng ca đi tng: là các hành đng mà đi tng có kh nng thc hin đc.
Trng thái hin ti ca đi tng qui đnh tính cht đc trng ca đi tng. Ví d, nhân viên
trong ví d trên có trng thái là:
• Tên là Vinh
• Tui là 25
• V trí làm vic là phòng hành chính.
16
Trong khi đó, trng thái ca chic xe trong ca hàng là:
• Nhãn hiu xe là Ford
• Màu sn xe là trng
• Giá bán xe là 5000$
Mi đi tng s thc hin mt s hành đng. Ví d, đi tng xe hi có kh nng thc hin
nhng hành đng sau:
• Khi đng.
• Dng li.

• Chy.
 biu din đi tng trong lp trình hng đ
i tng, ngi ta tru tng hoá đi tng đ to
nên khái nim lp đi tng.
2.1.2 Lp đi tng
Trong lp trình hng đi tng, đi tng là mt thc th c th, tn ti trong h thng. Trong
khi đó, lp là mt khái nim tru tng, dùng đ ch mt tp hp các đi tng có mt trong h
thng.
Ví d:
1. Trong bài toán qun lí buôn bán xe hi ca mt ca hàng kinh doanh, mi chic xe đang
có mt trong ca hàng đc coi là mt đi tng. Nh
ng khái nim “Xe hi” là mt lp
đi tng dùng đ ch tt c các loi xe hi ca ca hàng.
2. Trong bài toán qun lí nhân viên ca mt vn phòng, mi nhân viên trong vn phòng đc
coi là mt đi tng. Nhng khái nim “Nhân viên” là mt lp đi tng dùng đ ch
chung chung các nhân viên ca vn phòng.
Lu ý:
• Lp là mt khái nim, mang tính tru tng, dùng đ biu din mt tp các
đi tng.
• i tng là mt th hin c th ca lp, là mt thc th tn ti trong h thng.
Lp đc dùng đ biu din đi tng, cho nên lp cng có thuc tính và phng thc:
• Thuc tính ca lp tng ng vi thuc tính ca các đi tng.
• Phng thc ca lp tng ng v
i các hành đng ca đi tng.
Ví d, lp xe ô tô đc mô t bng các thuc tính và phng thc:

Lp Xe ô tô
Thuc tính:
Nhãn hiu xe
Màu xe

Giá xe
Công sut xe (mã lc)
Phng thc:
Khi đng xe
Chy xe
17
Dng xe
Tt máy


Lu ý:
Mt lp có th có mt trong các kh nng sau:
• Hoc ch có thuc tính, không có phng thc.
• Hoc ch có phng thc, không có thuc tính.
• Hoc có c thuc tính và phng thc, trng hp này là ph bin nht.
• c bit, lp không có thuc tính và phng thc nào là các lp tru tng. Các lp này
không có đi tng tng ng.
Lp và i tng
Lp và đi tng, mc dù có mi liên h tng ng ln nhau, nhng bn cht li khác nhau:
• Lp là s tru tng hoá ca các đi tng. Trong khi đó, đi tng là mt th hin ca
lp.
• i tng là mt thc th c th, có thc, tn ti trong h thng. Trong khi đó, lp là mt
khái nim tru tng, ch
tn ti  dng khái nim đ mô t các đc tính chung ca mt s
đi tng.
• Tt c các đi tng thuc v cùng mt lp có cùng các thuc tính và các phng thc.
• Mt lp là mt nguyên mu ca mt đi tng. Nó xác đnh các hành đng kh thi và các
thuc tính cn thit cho mt nhóm các đi tng c th.
Nói chung, lp là khái nim tn t
i khi phát trin h thng, mang tính khái nim, tru tng.

Trong khi đó, đi tng là mt thc th c th tn ti khi h thng đang hot đng.
2.1.3 Tru tng hoá đi tng theo chc nng
Tru tng hoá đi tng theo chc nng chính là quá trình mô hình hoá phng thc ca lp
da trên các hành đng ca các đi tng. Quá trình này đc tin hành nh sau:
• Tp hp tt c các hành đng có th có ca các đi tng.
• Nhóm các đi tng có các hot đng tng t nhau, loi b bt các hot đng cá bit, to
thành mt nhóm chung.
• Mi nhóm đi tng đ
xut mt lp tng ng.
• Các hành đng chung ca nhóm đi tng s cu thành các phng thc ca lp tng
ng.
Ví d, trong bài toán qun lí ca hàng bán ô tô. Mi ô tô có mt trong ca hàng là mt đi tng.
Mc dù mi chic xe có mt s đc đim khác nhau v nhãn hiu, giá xe, màu sc… nhng có
chung các hành đng ca mt chic xe ô tô là:
• Có th khi đng máy.

Có th chy.
• Có th dng li.
• Có th tt máy.
18
Ngoài ra, mt s ít xe có th thc hin mt s hành đng cá bit nh:
• Có th giu đèn pha
• Có th t bt đèn pha
• Có th t đng phát tín hiu báo đng.
Tuy nhiên, không phi xe nào cng thc hin đc các hành đng này. Cho nên ta loi b các
hành đng cá bit ca mt s xe, ch gi li các hành đng chung nht, đ mô hình thành các
phng thc c
a đi tng xe ô tô tng ng vi các hành đng chung nht ca các xe ô tô.

Lp Xe ô tô

Phng thc:
Khi đng xe
Chy xe
Dng xe
Tt máy


2.1.4 Tru tng hoá đi tng theo d liu
Tru tng hoá đi tng theo d liu chính là quá trình mô hình hoá các thuc tính ca lp da
trên các thuc tính ca các đi tng tng ng. Quá trình này đc tin hành nh sau:
• Tp hp tt c các thuc tính có th có ca các đi tng.
• Nhóm các đi tng có các thuc tính tng t nhau, loi b bt các thuc tính cá bit, to
thành mt nhóm chung.
• Mi nhóm đi tng đ xu
t mt lp tng ng.
• Các thuc tính chung ca nhóm đi tng s cu thành các thuc tính tng ng ca lp
đc đ xut.
Ví d, trong bài toán qun lí ca hàng bán ô tô. Mi ô tô có mt trong ca hàng là mt đi tng.
Mc dù mi chic xe có mt s đc đim khác nhau v nhãn hiu, giá xe, màu sc… nhng có
chung các thuc tính ca mt chic xe ô tô là:
• Các xe đu có nhãn hiu.

Các xe đu có màu sc
• Các xe đu có giá bán
• Các xe đu có công sut đng c
Ngoài ra, mt s ít xe có th có thêm các thuc tính:
• Có xe có th có dàn nghe nhc
• Có xe có th có màn hình xem ti vi
• Có xe có lp kính chng nng, chng đn…
Tuy nhiên, đây là các thuc tính cá bit ca mt s đi tng xe, nên không đc đ xut thành

thuc tính ca lp ô tô. Do đó, ta mô hình lp ô tô vi các thuc tính chung nht ca các ô tô.


19
Lp Xe ô tô
Thuc tính:
Nhãn hiu xe
Màu xe
Giá xe
Công sut xe (mã lc)


u đim ca vic tru tng hóa
Nhng u đim ca vic tru tng hóa là:
• Tp trung vào vn đ cn quan tâm
• Xác đnh nhng đc tính thit yu và nhng hành đng cn thit
• Gim thiu nhng chi tit không cn thit
Vic tru tng hóa d liu là cn thit, bi vì không th mô t tt c các hành đng và các thuc
tính ca mt thc th
. Vn đ mu cht là tp trung đn nhng hành vi ct yu và áp dng chúng
trong ng dng.
2.1.5 Khái nim k tha
Xét trng hp bài toán qun lí nhân s và sinh viên ca mt trng đi hc. Khi đó, ta có hai lp
đi tng chính là lp Nhân viên và lp Sinh viên:

Lp Nhân viên
Thuc tính:
Tên
Ngày sinh
Gii tính

Lng
Phng thc:
Nhp/xem tên
Nhp/xem ngày sinh
Nhp/xem gii tính
Nhp/xem lng
Lp Sinh viên
Thuc tính:
Tên
Ngày sinh
Gii tính
Lp
Phng thc:
Nhp/xem tên
Nhp/xem ngày sinh
Nhp/xem gii tính
Nhp/xem lp

Ta nhn thy rng hai lp này có mt s thuc tính và phng thc chung: tên, ngày sinh, gii
tính. Tuy nhiên, không th loi b các thuc tính cá bit đ gp chúng thành mt lp duy nht, vì
các thuc tính lng nhân viên và lp ca sinh viên là cn thit cho vic qun lí. Vn đ ny sinh
nh sau:
• Ta phi vit mã trùng nhau đn hai ln cho các phng thc: nhp/xem tên, nhp/xem
ngày sinh, nhp/xem gii tính. Rõ rang điu này rt tn công s
c.
• Nu khi có s thay đi v kiu d liu, chng hn kiu ngày sinh đc qun lí trong h
thng, ta phi sa li chng trình hai ln.
20
 tránh rc ri do các vn đ ny sinh nh vy, lp trình hng đi tng s dng k thut k
tha nhm nhóm các phn ging nhau ca các lp thành mt lp mi, sau đó cho các lp ban đu

k tha li lp đc to ra. Nh vy, mi lp tha k (lp dn xut, lp con) đu có các thuc tính
và phng th
c ca lp b tha k (lp c s, lp cha).
Quay li vi bài toán qun lí trng đi hc, các thuc tính và phng thc chung gia lp Nhân
viên và lp Sinh viên là:
• Tên,
• Ngày sinh,
• Gii tính,
• Nhp/xem tên,
• Nhp/xem ngày sinh
• Nhp/xem gii tính.
Ta tách phn chung này thành mt lp  mc tru tng cao hn, lp Ngi. Lp Ngi s làm
l
p cha ca lp Nhân viên và lp Sinh viên. Khi đó, các lp tr thành:

Lp Ngi
Thuc tính:
Tên
Ngày sinh
Gii tính
Phng thc:
Nhp/xem tên
Nhp/xem ngày sinh
Nhp/xem gii tính

Lp Nhân viên k tha t lp Ngi
Thuc tính:
Lng
Phng thc:
Nhp/xem lng

Lp Sinh viên k tha t lp Ngi
Thuc tính:
Lp
Phng thc:
Nhp/xem lp

Nh vy, s k tha trong lp trình hng đi tng:
• Cho phép lp dn xut có th s dng các thuc tính và phng thc ca lp c s tng
t nh s dng các thuc tính và phng thc ca mình.
• Cho phép vic ch cn cài đt phng thc  mt lp c s, mà có th s dng đc  tt
c các lp dn xut.
• Cho phép tránh s cài đt trùng l
p mã ngun ca chng trình.
• Cho phép ch phi thay đi mt ln khi cn phi thay đi d liu ca các lp.
2.1.6 Khái nim đóng gói
Xét ví d bài toán qun lí nhân viên vn phòng vi lp Nhân viên nh sau:

21
Lp Nhân viên
Thuc tính:
Tên
Ngày sinh
Gii tính
Phòng ban
H s lng
Phng thc:
Tính lng nhân viên


Khi đó, cách tính lng cho nhân viên là khác nhau đi vi mi ngi:

<Tin lng> = <H s lng> * <Lng c bn> * <T l phn trm>
Trong đó, t l phn trm là khác nhau cho mi phòng ban, ví d:
• Phòng k hoch là 105%
• Phòng hành chính là 100%
• Phòng nhân s là 110%
Khi đó, tu vào thuc tính phòng ban khác nhau mà ta phi dùng công thc t l khác nhau đ tính
lng cho mi nhân viên.
Tuy nhiên, cách tính c th này là công vic bên trong ca phng thc tính tin lng ca lp
Nhân viên. Vi mi ng dng, khi to mt đi tng c th ca lp nhân viên, ta ch c
n truyn
các tham s thuc tính cho đi tng, sau đó gi phng thc tính tin lng cho đi tng nhân
viên đó, ta s bit đc tin lng ca nhân viên. Cách gi phng thc tính tin lng là hoàn
toàn ging nhau cho tt c các đi tng nhân viên ca vn phòng.
S ging nhau v cách s dng phng thc cho các đi tng ca cùng mt lp, mc dù bên
trong phng thc có các cách tính toán khác nhau v
i các đi tng khác nhau, đc gi là tính
đóng gói d liu ca lp trình hng đi tng. Nh vy, tính đóng gói d liu ca lp trình
hng đi tng:
• Cho phép che du s cài đt chi tit bên trong ca phng thc. Khi s dng ch cn gi
các phng thc theo mt cách thng nht, mc dù các phng thc có th đc cài đt
khác nhau cho các trng hp khác nhau.
• Cho phép che du d liu bên trong ca đi tng. Khi s dng, ta không bit đc thc
s bên trong đi tng có nhng gì, ta ch thy đc nhng gì đi tng cho phép truy
nhp vào.
• Cho phép hn ch ti đa vic sa li mã chng trình. Khi phi thay đi công thc tính
toán ca mt phng thc, ta ch cn thay đi mã bên trong ca phng thc, mà không
phi thay đi các ch
ng trình gi đn phng thc b thay đi.
2.1.7 Khái nim đa hình
Tr li vi ví d v qun lí trng đi hc, vi hai lp Nhân viên và lp Sinh viên, đu k tha t

lp Ngi. Khi đó, ta thêm vào mi lp mt phng thc show():
• Phng thc show ca lp Ngi s gii thiu tên và tui ca ngi đó.
22
• Phng thc show ca lp Nhân viên s gii thiu nhân viên đó có tin lng là bao nhiêu
• Phng thc show ca lp Sinh viên s gii thiu là sinh viên đó đang hc  lp nào.

Lp Ngi
Thuc tính:
Tên
Ngày sinh
Gii tính
Phng thc:
Nhp/xem tên
Nhp/xem ngày sinh
Nhp/xem gii tính
show
Lp Nhân viên k tha t lp Ngi
Thuc tính:
Lng
Phng thc:
Nhp/xem lng
show
Lp Sinh viên k tha t lp Ngi
Thuc tính:
Lp
Phng thc:
Nhp/xem lp
show

Khi đó, nu trong h thng có các đi tng c th tng ng vi ba lp, thì:

• Khi ta gi hàm show t đi tng ca lp Ngi, s nhn đc tên và tui ca ngi đó.
• Khi ta gi phng thc show t đi tng ca lp Nhân viên, s nhn đc s tin lng
ca nhân viên đó.
• Khi ta gi phng th
c show t đi tng ca lp Sinh viên, ta s bit đc lp hc ca
sinh viên đó.
Vic ch cn gi cùng mt phng thc, nhng t các đi tng khác nhau, s cho k qu khác
nhau đc gi là tính đa hình trong lp trình hng đi tng. Nh vy, tính đa hình trong lp
trình hng đi tng:
• Cho phép các lp đc đnh ngha các phng thc trùng nhau: cùng tên, cùng s
lng
và kiu tham s, cùng kiu tr v. Vic đnh ngha phng thc trùng nhau ca các lp k
tha nhau còn đc gi là s np chng phng thc.
• Khi gi các phng thc trùng tên, da vào đi tng đang gi mà chng trình s thc
hin phng thc ca lp tng ng, và do đó, s cho các kt qu khác nhau.
2.2 SO SÁNH LP VÀ CU TRÚC
Trong phn này, chúng ta s tin hành so sánh Class (Lp) và Structure (Cu trúc) trên nhiu khía
cnh khác nhau:
• Mc khái nim
• Mc đích và chc nng
• V u và nhc đim
23
So sánh  mc khái nim
 mc khái nim, Lp và cu trúc hoàn toàn khác nhau:
• Lp là khái nim ch có trong lp trình hng đi tng; nó đc dùng đ biu din mt
tp các đi tng tng t nhau.
• Trong khi đó, Cu trúc là khái nim ch tn ti trong lp trình cu trúc, không phi là mt
khái nim ca lp trình hng đi tng. Vì trong lp trình hng đi tng, tt c các
thc th
đu đc coi là mt đi tng, ngha là nó phi là mt th hin c th ca mt lp

nào đó. Do đó, trong lp trình hng đi tng, không có khái nim Cu trúc.
So sánh v mc đích và chc nng
V mc đích, Lp và Cu trúc đu có chung mt mc đích ban đu, đó là nhóm mt tp hp các
d liu li vi nhau đ x lí đng b và thng nht: Cu trúc nhóm các d liu hay phi đi kèm
vi nhau li thành mt nhóm cho d x lí. Tng t, Lp là tp hp mt s thuc tính chung ca
đi tng đ x lí.
Tuy nhiên, Lp và C
u trúc cng có mt s khác bit trên khía cnh này:
• Lp ngoài mc đích nhóm các thuc tính d liu ca đi tng, còn nhóm các hot đng
ca đi tng thành các phng thc ca Lp.
• Trong khi đó, mc dù cng có th cung cp các hàm trong Cu trúc, nhng mc đích chính
ca Cu trúc ch là nhóm d liu thành cu trúc cho d x lí.
So sánh v u nhc đim
Vì có cùng mc đích là nhóm các d liu li vi nhau đ x lí, cho nên Lp cà Cu trúc có cùng
u đim là làm chng trình gn gàng, x lí đng b và thng nht.
Tuy nhiên, Lp còn có mt s u đim mà Cu trúc không có:
• Lp có kh nng bo v d liu tránh b truy nhp t do t bên ngoài. Các chng trình
bên ngoài ch có th truy nhp vào d liu ca đi tng thông qua các phng thc do
Lp cung cp, không th t do truy nhp. Trong khi đó, Cu trúc mc du đã nhóm d liu
vi nhau nhng không có kh nng bo v d liu: Các chng trình bên ngoài vn có th
truy nhp t do vào các thành phn ca Cu trúc.
• Lp có kh nng đóng gói đ hn ch ti đa thay đi khi phi sa li mã chng trình. Khi
có s thay đi, ch c
n thay đi mã ca mt phng thc, các chng trình bên ngoài s
dng phng thc đó đu không phi thay đi. Trong khi đó, nu thay đi mt thành phn
ca Cu trúc, ta phi thay đi mã ca tt c các chng trình s dng thành phn đó ca
Cu trúc.
• Lp có th đc k tha bi mt Lp khác, điu này làm tng kh nng s d
ng li mã
ngun ca chng trình. Trong khi đó, Cu trúc hoàn toàn không có c ch k tha, cho

nên nhiu khi phi vit li nhng đon mã ging nhau nhiu ln. iu này va tn công
sc, va không an toàn khi có s thay đi mt trong nhng đon mã ging nhau đó.



24
2.3 THÀNH PHN PRIVATE VÀ PUBLIC CA LP
 bo v d liu tránh b truy nhp t do t bên ngoài, lp trình hng đi tng s dng các t
khoá quy đnh phm vi truy nhp các thuc tính và phng thc ca lp. Mt cách tng quát, lp
trình hng đi tng chia ra hai mc truy nhp các thành phn lp:
• Private: Truy nhp trong ni b lp.
• Protected: Thành phn đc bo v, đc hn ch truy nhp nh
thành phn private (s
đc trình bày sau).
• Public: Truy nhp t do t bên ngoài.
Thành phn private
Thành phn private là khu vc dành riêng cho lp, không chia s vi bt kì lp khác t bên ngoài.
Thành phn private ch cho phép truy nhp trong phm vi ni b lp: T phng thc vào các
thuc tính hoc gia các phng thc ca lp vi nhau. Các thành phn private không th truy
nhp t bên ngoài lp, cng nh t đi tng khác.
Trong mt lp, thông thng các thành phn sau s đc đt vào khu vc private ca lp:
• T
t c các thuc tính d liu ca lp. Các thuc tính d liu ca lp đc đt vào vùng
private nhm bo v chúng, tránh s truy nhp t do t bên ngoài.
• Các phng thc trung gian, đc s dng nh các bc tính toán đm cho các phng
thc khác. Các phng thc trung gian đc đt vào vùng private đ thc hin vic đóng
gói trong lp trình hng đi tng: Các đi tng, chng trình bên ngoài không cn, và
không th bit cách tính toán c th bên trong ca lp.
Thành phn public
Thành phn public là khu vc mà Lp có th chia s vi tt c các chng trình và đi tng bên

ngoài. Thành phn public có th đc truy nhp t bên trong ln bên ngoài lp:
• Bên trong lp: t phng thc lp vào các thuc tính d liu ca lp, hoc gia các
phng thc ca lp vi nhau.
• Bên ngoài lp: T chng trình bên ngoài hoc các đi tng khác vào các phng thc
ca lp.
Trong m
t lp, thông thng các thành phn sau s đc đt vào vùng chia s public ca lp:
• Các phng thc đ nhp/xem (set/get) các thuc tính d liu ca lp. Các phng thc
này s cho phép các đi tng bên ngoài truy nhp vào các thuc tính d liu ca lp mt
cách gián tip.
• Các phng thc cung cp chc nng hot đng, cách c x ca đi tng đi vi môi
tr
ng bên ngoài. Các phng thc này th hin chc nng ca các đi tng lp.
2.4 MT S NGÔN NG LP TRÌNH HNG I TNG
Ni dung phn này s trình bày mt s ngôn ng lp trình hng đi tng thông dng hin nay:
• Ngôn ng lp trình C++
• Ngôn ng lp trình ASP.NET và C#.NET
25
• Ngôn ng lp trình Java
2.4.1 C++
C++, ra đi vào gia nhng nm 1980, là mt ngôn ng lp trình hng đi tng đc m rng
t ngôn ng lp trình cu trúc C. Cho nên, C++ là ngôn ng lp trình na hng đi tng, na
hng cu trúc.
Nhng đc trng hng đi tng ca C++
• Cho phép đnh ngha lp đi tng.
• Cho phép đóng gói d liu vào các lp đi tng. Cho phép đnh ngha phm vi truy nhp
d liu ca lp bng các t khoá phm vi.
• Cho phép k tha lp vi các kiu k tha khác nhau tu vào t khoá dn xut.
• Cho phép lp k tha s dng các phng thc ca lp b k th
a (trong phm vi quy

đnh).
• Cho phép đnh ngha chng phng thc trong lp k tha.
Nhng vi phm hng đi tng ca C++
Nhng vi phm này là do kt qu k tha t ngôn ng C, mt ngôn ng lp trình thun cu trúc.
• Cho phép đnh ngha và s dng các bin d liu t do.
• Cho phép đnh ngha và s dng các hàm t do.
• Ngay c khi d liu đc đóng gói vào lp, d liu vn có th truy nhp trc tip nh d
liu t do bi các hàm bn, l
p bn (friend) trong C++.
2.4.2 ASP.NET và C#.NET
Các ngôn ng lp trình .NET (còn đc gi là .NET Frameworks) ca MicroSoft ra đi vào cui
nhng nm 1990 đ cnh tranh vi ngôn ng lp trình Java. .NET là mt ngôn ng hoàn toàn
hng đi tng, hn na, nó còn cung cp mt giao din lp trình đ ho thân thin và đp mt
vi truyn thng lp trình kéo th ca MicroSoft.
Mt s đc đim ca ngôn ng .NET:
• Là mt ngôn ng hoàn toàn hng đ
i tng: Tt c các thành phn, các thc th trong
chng trình đu đc mô hình di dng mt lp nht đnh. Không có d liu t do và
hàm t do trong chng trình.
• Cung cp giao din lp trình đ ho: lp trình viên ch cn kéo và th các đi tng đ ho
cho ng dng ca mình.
• Cho phép lp trình viên t to ra các th vin UserControl ca mình. ây là mt th vi
n
bao gm các thành phn đc ngi dùng t thit k giao din, vit mã ngun, đóng gói
và có th s dng li trong nhiu ng dng khác nhau, tu theo chc nng ca các thành
phn.

×