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

Tài liệu CoreJava phần 1 ppt

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 (202.09 KB, 24 trang )

Chng 1
LP TRÌNH HNG I TNG



Mc tiêu

Kt thúc chng, hc viên có th:

 nh ngha Lp trình hng i tng (Object-oriented Programming).
 Nhn thc v Tru tng hóa D liu (Data Abstraction).
 nh ngha mt Lp (Class).
 nh ngha mt i tng (Object).
 Nhn thc đc s khác bit gia Lp và i tng.
 Nhn thc đc s cn thit đi vi Thit lp (Construction) và Hy
(Destruction).
 nh ngha tính Bn vng (Persistence).
 Hiu bit v tính Tha k (Inheritance).
 nh ngha tính a hình (Polymorphism).
 Lit kê nhng thun li ca phng pháp hng i tng.

1.1 Gii thiu v Lp trình hng i tng (Object-oriented Programming)

Lp trình hng i tng (OOP) là mt phng pháp thit k và phát trin phn mm.
Nhng ngôn ng OOP không ch bao gm cú pháp và mt trình biên dch (compiler) mà
còn có mt môi trng phát trin toàn din. Môi trng này bao gm mt th vin đc
thit k tt, thun li cho vic s dng các đi tng.

i vi mt ngôn ng lp trình h tr OOP thì vic trin khai k thut lp trình hng
đi tng s d dàng hn. K thut lp trình hng đi tng ci tin vic phát trin các
h thng phn mm. K thut y đ cao nhân t chc nng (fucntionality) và các mi


quan h d liu.

OOP là phng thc t duy mi đ gii quyt vn đ bng máy tính.  đt kt qu, lp
trình viên phi nn vn đ thành mt thc th quen thuc vi máy tính. Cách tip cn
hng đi tng cung cp mt gii pháp toàn vn đ gii quyt vn đ.

Hãy xem xét mt tình hung cn đc trin khai thành mt h thng trên máy vi tính:
vic mua bán xe hi. Vn đ vi tính hóa vic mua bán xe hi bao gm nhng gì?

Nhng yu t rõ ràng nht liên quan đn vic mua bán xe hi là:
1) Các kiu xe hi (model).
2) Nhân viên bán hàng.
3) Khách hàng.


Nhng hot đng liên quan đn vic mua bán:
1) Nhân viên bán hàng đa khách hàng tham quan phòng trng bày.
2) Khách hàng chn la mt xe hi.
3) Khách hàng đt hóa đn.
4) Khách hàng tr tin.
5) Chic xe đc trao cho khách hàng.

Mi vn đ đc chia ra thành nhiu yu t, đc gi là các i tng (Objects) hoc
các Thc th (Entities). Chng hn nh  ví d trên, khách hàng, xe hi và nhân viên bán
hàng là nhng đi tng hoc thc th.

Lp trình viên luôn luôn c gng to ra nhng kch bn (scenarios) tht quen thuc vi
nhng tình hung đi sng thc. Bc th nht trong đng hng này là làm cho máy
tính liên kt vi nhng đi tng th gii thc.


Tuy nhiên, máy tính ch là mt c máy. Nó ch thc hin nhng công vic đc lp trình
mà thôi. Vì th, trách nhim ca lp trình viên là cung cp cho máy tính nhng thông tin
theo cách thc mà nó cng nhn thc đc cùng nhng thc th nh chúng ta nhn thc.

ó chính là lãnh vc ca k thut hng đi tng. Chúng ta s dng k thut hng đi
tng đ ánh x nhng thc th chúng ta gp phi trong đi sng thc thành nhng thc
th tng t trong máy tính.

Phát trin phn mm theo k thut lp trình hng đi tng có kh nng gim thiu s
ln ln thng xy ra gia h thng và lãnh vc ng dng.

Lp trình hng đi tng đ cp đn d liu và th tc x lý d liu theo quan đim là
mt đi tng duy nht. Lp trình hng đi tng xem xét d liu nh là mt thc th
hay là mt đn v đc lp, vi bn cht riêng và nhng đc tính ca thc th y. Bây gi
chúng ta hãy kho sát nhng hn t ‘đi tng’ (object), ‘d liu’ (data) và ‘phng
thc’ (method).

Có nhiu loi đi tng khác nhau. Chúng ta có th xem các b phn khác nhau trong
mt c quan là các đi tng. in hình là mt c quan có nhng b phn liên quan đn
vic qun tr, đn vic kinh doanh, đn vic k toán, đn vic tip th … Mi b phn có
nhân s riêng, các nhân s đc trao cho nhng trách nhim rõ ràng. Mi b phn cng
có nhng d liu riêng chng hn nh thông tin cá nhân, bng kim kê, nhng th thc
kinh doanh, hoc bt k d liu nào liên quan đn chc nng ca b phn đó. Rõ ràng là
mt c quan đc chia thành nhiu b phn thì vic qun tr nhân s và nhng hot đng
doanh nghip d dàng hn. Nhân s ca c quan điu khin và x lý d liu liên quan
đn b phn ca mình.

Chng hn nh b phn k toán chu trách nhim v lng bng đi vi c quan. Nu
mt ngi  đn v tip th cn nhng chi tit liên quan đn lng bng ca đn v mình,
ngi y ch cn liên h vi b phn k toán. Mt ngi có thm quyn trong b phn k

toán s cung cp thông tin cn bit, nu nh thông tin y có th chia s đc. Mt ngi
không có thm quyn t mt b phn khác thì không th truy cp d liu, hoc không th
thay đi làm h hng d liu. Ví d này minh chng các đi tng là hu dng trong
vic phân cp và t chc d liu.

Hình 1.1 Minh ha cu trúc ca mt c quan đin hình.













Khái nim v đi tng có th đc m rng đn hu ht các lãnh vc đi sng, và hn
na, đn th gii lp trình. Bt k ng dng nào đu có th đc đnh ngha theo hn t
thc th hoc đi tng đ to ra tin trình x lý mô phng theo tin trình x lý mà con
ngi ngh ra.

Phng pháp gii quyt ‘top-down’ (t trên xung) cng còn đc gi là ‘lp trình hng
cu trúc’ (structured programming). Nó xác đnh nhng chc nng chính ca mt chng
trình và nhng chc nng này đc phân thành nhng đn v nh hn cho đn mc đ
thp nht. Bng k thut này, các chng trình đc cu trúc theo h thng phân cp các
module. Mi mt module có mt đu vào riêng và mt đu ra riêng. Trong mi module,
s điu khin có chiu hng đi xung theo cu trúc ch không có chiu hng đi lên.


Phng pháp OOP c gng qun lý vic tha k phc tp trong nhng vn đ đi thc.
 làm đc vic này, phng thc OOP che giu mt vài thông tin bên trong các đi
tng. OOP tp trung trc ht trên d liu. Ri gn kt các phng thc thao tác trên d
liu, vic này đc xem nh là phn tha k ca vic đnh ngha d liu. Bng 1.1 minh
ha s khác bit gia hai phng pháp:

Phng pháp Top-Down OOP
Chúng ta s xây dng mt khách sn. Chúng ta s xây dng mt tòa nhà 10 tng
vi nhng dãy phòng trung bình, sang
trng, và mt phòng hp ln.
Chúng ta s thit k các tng lu, các phòng
và phòng hp.
Chúng ta s xây dng mt khách sn vi
nhng thành phn trên.

Bng 1.1 Mt ví d v hai phng pháp gii quyt OOP và Structured


Phòng Nhân s Phòng K toán
Phòng Kinh doanh
Hình 1.1

1.2 Tru tng hóa d liu (Data Abstraction)

Khi mt lp trình viên phi phát trin mt chng trình ng dng thì không có ngha là
ngi y lp tc vit mã cho ng dng y. Trc ht, ngi y phi nghiên cu ng dng
và xác đnh nhng thành phn to nên ng dng. K tip, ngi y phi xác đnh nhng
thông tin cn thit v mi thành phn.


Hãy kho sát chng trình ng dng cho vic mua bán xe hi nói trên. Chng trình phi
xut hóa đn cho nhng xe hi đã bán cho khách hàng.  xut mt hóa đn, chúng ta
cn nhng thông tin chi tit v khách hàng. Vy bc th nht là xác đnh nhng đc tính
ca khách hàng.

Mt vài đc tính gn kt vi khách hàng là:

 Tên.
 a ch.
 Tui.
 Chiu cao.
 Màu tóc.

T danh sách k trên, chúng ta xác đnh nhng đc tính thit yu đi vi ng dng. Bi
vì chúng ta đang đ cp đn nhng khách hàng mua xe, vì th nhng chi tit thit yu là:

 Tên.
 a ch.

Còn nhng chi tit khác (chiu cao, màu tóc …) là không quan trng đi vi ng dng.
Tuy nhiên, nu chúng ta phát trin mt ng dng h tr cho vic điu tra ti phm thì
nhng thông tin chng hn nh màu tóc là thit yu.

Bên cnh nhng chi tit v khách hàng, nhng thông tin sau cng cn thit:

 Kiu xe đc bán.
 Nhân viên nào bán xe.

Bên cnh nhng đc tính ca khách hàng, xe hi và nhân viên bán hàng, chúng ta cng
cn lit kê nhng hành đng đc thc hin.


Công vic xut hóa đn đòi hi nhng hành đng sau:

 Nhp tên ca khách hàng.
 Nhp đa ch ca khách hàng.
 Nhp kiu xe.
 Nhp tên ca nhân viên bán xe.
 Xut hóa đn vi đnh dng đòi hi.

Khung thông tin bên di cho thy nhng thuc tính và nhng hành đng liên quan đn
mt hóa đn:

Các thuc tính
Tên ca khách hàng
a ch ca khách hàng
Kiu xe bán
Nhân viên bán xe

Các hành đng
Nhp tên
Nhp đa ch
Nhp kiu xe
Nhp tên nhân viên bán xe
Xut hóa đn









Tip theo, chúng ta mun ng dng tính toán tin hoa hng cho nhân viên bán hàng.

Nhng thuc tính liên kt vi nhân viên bán hàng có tng quan vi ng dng này là:

 Tên.
 S lng xe bán đc.
 Tin hoa hng.

Nhng hành đng đòi buc đi vi công vic này là:

 Nhp tên nhân viên bán xe.
 Nhp s lng xe bán đc.
 Tính tin hoa hng kim đc.

Nhng thuc tính
Tên
S lng xe bán đc
Tin hoa hng

Nhng hành đng
Nhp tên
Nhp s lng xe bán đc
nh ngha

S tru tng hóa d liu là tin trình xác đnh và nhóm các thuc tính và các hành
đng liên quan đn mt thc th đc thù, xét trong mi tng quan vi ng dng đang
p
hát trin.

Tính tin hoa hng
Nh th, vic tru tng hóa d liu tra đt ra câu hi ‘âu là nhng thuc tính và nhng
hành đng cn thit cho mt vn đ đt ra?’

1.2.1 Nhng thun li ca vic Tru tng hóa

Nhng thun li ca vic Tru tng hóa là:

 Tp trung vào vn đ.
 Xác đnh nhng đc tính thit yu và nhng hành đng đòi hi.
 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ô phng 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.

Chng hn nh khách hàng hoc nhân viên bán hàng cng có th thc hin nhng hành
đng sau:

 Ngi y đi li.
 Ngi y nói chuyn.

Tuy nhiên, nhng hành đng này không liên quan đn ng dng. Vic tru tng hóa d
liu s loi b chúng.

1.3 Lp (Class)

Trong ng dng mua bán xe, chúng ta đã xác đnh các thuc tính và các hành đng cn
có đ xut mt hóa đn cho mt khách hàng.


Các hành đng và các thuc tính này là chung cho mi khách hàng mua xe. Ví th, chúng
có th đc nhóm li trong mt thc th đn nht gi là mt ‘lp’.

Hãy kho sát lp có tên là ‘khách hàng’ di đây. Lp này bao gm mi thuc tính và
hành đng đòi hi đi vi mt khách hàng.

Lp Khách hàng
Tên khách hàng
a ch khách hàng
Kiu xe đc bán
Nhân viên bán xe
Nhp tên
Nhp đa ch
Nhp kiu xe đc bán
Nhp tên nhân viên bán xe
Xut hóa đn












Mt lp là mt mô hình khái nim v mt thc th. Nó mang tính cách tng quát ch
không mang tính cách đc thù.


Khi đnh ngha mt lp, chúng ta mun phát biu rng mt lp s phi có mt tp hp
các thuc tính và các hành đng riêng. Chng hn nh mt đnh ngha lp di đây:

Lp Con ngi
Tên
Chiu cao
Màu tóc
Vit
Nói

Lp này đnh ngha thc th ‘Con ngi’. Mi thc th thuc kiu ‘Con ngi’ s đu có
nhng đc tính và nhng hành đng nh đã đc đnh ngha.

Mt khi mt lp đã đc đnh ngha, chúng ta bit đc nhng thuc tính và nhng hành
đng ca nhng thc th ‘trông ging’ nh lp này. Vì th, t bn cht mt lp là mt
nguyên mu (prototype).

Mt ví d khác v mt lp liên quan đn vic mua bán xe hi nh sau:

Lp Nhân viên bán hàng
Tên
S lng xe bán đc
Tin hoa hng
Nhp tên
Nhp s lng xe bán đc
Tính tin hoa hng

Lp trên đnh ngha các thuc tính và các hành đng đc trng cho mi nhân viên bán xe
hi.



nh ngha

Mt lp đnh ngha mt thc th theo nhng thuc tính và nhng hành đng chung.
Hoc
N
hng thuc tính và nhng hành đng chung ca mt thc th đc nhóm li đ to nên
mt đn v duy nht gi là mt lp.
Hoc
Mt lp là mt s xác đnh cp chng loi ca các thc th ging nhau.
1.4 i tng (Object)

Mt lp là mt nguyên mu phác ha nhng thuc tính và nhng hành đng kh th ca
mt thc th.  có th s dng thc th mà lp đnh ngha, chúng ta phi to mt ‘đi
tng’ t lp đó.

Lp là mt khái nim, còn đi tng là mt mu thc đc đnh ngha bi lp.

Hãy kho sát lp ‘Khách hàng’ đc đnh ngha trên. Lp này đnh ngha mi thuc tính
và hành đng gn lin vi mt khách hàng.

Khi mt ngi mua mt xe hi  mt ca hàng, ca hàng y có mt khách hàng mi.
Vào thi đim y, mt đi tng ging nh lp ‘Khách hàng’ đc to ra. i tng này
s phi có nhng giá tr thc đi vi các thuc tính ‘Tên’, ‘a ch’, ‘Kiu xe’ …

Chng hn nh mt khách hàng có tên là ‘Mark’, sng  ‘London’ đã mua mt xe kiu
‘Honda Civic’ t nhân viên bán hàng tên là ‘Tom’. Nh th, ‘Mark’ là mt đi tng ca
kiu ‘Khách hàng’.







Mt đi tng là mt thc th c th (thông thng bn có th s chm, xem thy và cm
nhn).

K t lúc mt đi tng hin hu, nhng thuc tính ca nó là nhng giá tr xác đnh, và
nhng hành đng đc đnh ngha cho đi tng này đc thc thi.

Trong mi mt đi tng, các khía cnh sau đây đc xác đnh rõ:

 Tình trng (state).
 Thái đ (behavior).
 Chân tính (identity).

nh ngha

Mt đi tng là mt trng hp ca mt lp.
Hình 1.2 trình bày hai đi tng đi thc.

















Mi đi tng có nhng đc tính riêng mô t đi tng y là gì, hoc hành đng ra sao.

Chng hn nh nhng thuc tính ca mt đi tng ‘Con ngi’ s là:

 Tên.
 Tui.
 Trng lng.

Nhng thuc tính ca mt đi tng ‘Xe hi’ s là:

 Màu sc.
 Kiu xe.
 Nm.

Mt đi tng cng thc hin mt s hành đng. Mt xe hi có kh nng thc hin
nhng hành đng sau:

 Khi đng.
 Ngng.
 Chuyn đng.

 chuyn đi gia các đi tng lp trình và các đi tng đi thc, cn phi kt hp
các thuc tính và các hành đng ca mt đi tng.







Con ngi
Tên: Jack
Tui: 28
Trng lng: 65 kgs

Hành đng:
i
N
ói
Suy ngh
Xe hi
Kiu: Ferrari
Màu: 
N
m: 1995

Hành đng:
Khi đng
N
gng
Chuyn đng
Hình 1.2: Mt đi tng Con ngi và mt đi tng Xe hi
1.4.1 Thuc tính


Chúng ta xác đnh các thuc tính và các hành đng đ đnh ngha mt lp.

Mt khi các thuc tính đc gán cho các giá tr, chúng mô t mt đi tng. Hãy kho sát
lp sau:

Các thuc tính ca lp Khách hàng
Tên ca khách hàng
a ch ca khách hàng
Kiu xe đc bán
Nhân viên đã bán xe

Khi thuc tính ‘Tên’ đc gán cho giá tr ‘Mark’ thì nó mô t mt đi tng xác đnh
đc to t lp ‘Khách hàng’.






Nh th, các thuc tính nm gi các giá tr d liu trong mt đi tng, chúng đnh ngha
mt đi tng đc thù.

Bi vì mt lp là mt nguyên mu cho nên các thuc tính trong mt lp không th nm
gi các giá tr. Mt thuc tính có th đc gán mt giá tr ch sau khi mt đi tng da
trên lp y đc to ra.

 có th lu gi nhng chi tit ca mt khách hàng, mt trng hp (đi tng) ca lp
‘Khách hàng’ phi đc to ra. Các thuc tính ca mt đi tng hin hu ch khi đi
tng y đc to ra.


Mi đi tng ca mt lp phi có cùng các thuc tính.

Kho sát ví d sau:











nh ngha

Mt thuc tính là mt đc tính mô t mt đi tng.
Các thuc tính ca lp Con ngi
Tên
Chiu cao
Màu tóc
i tng đc to t lp Con ngi
Mark
6 ft. 1 in.
Blac
k

=
=
=

1.4.2 Hot đng (Operation)

Các hành đng kh thi, nh đc đnh ngha trong mt lp, đc gi là ‘các hot đng’.





Các hot đng xác đnh các hành đng đc đòi hi ca mt đi tng đc to ra t mt
lp. Chng hn nh chúng ta không th đòi hi mt hot đng ‘Mua mt xe hi khác’ ca
mt đi tng đc to ra t lp ‘Khách hàng’.

Mt lp ch là mt nguyên mu. Vì th, trong mt lp mt hot đng ch đc đnh
ngha. Còn vic áp dng hot đng y ch xy ra ni các đi tng riêng r. Chng hn
nh hot đng ‘Nhp Tên’ mà lp “Khách hàng’ đnh ngha có th đc thc hin ni
mt đi tng nào đó.

Tp hp các hot đng đc yêu cu cho tt c các đi tng trong mt lp.

1.4.3 Phng thc (Method)

Các hot đng đnh ngha các hành đng kh thi có th đc yêu cu ca mt đi tng.
Mt phng thc là s thc thi thc t ca mt hot đng.






Các phng thc xác đnh cách thc thao tác trên các d liu ca mt đi tng. Bi vì

phng thc là s thc thi thc t mt hot đng, cho nên nó có th đc áp dng cho
mt đi tng. Mt phng thc là mt thut toán tng bc (step-by-step) xác đnh điu
gì đc thc hin khi hot đng y đc yêu cu.

Hãy kho sát nhng hot đng chung ca mt thc th thuc loi ‘Con ngi’: i, Nói.
Ch khi mt đi tng c th ca loi ‘Con ngi’ đc to ra thì các hành đng ‘i’,
‘Nói’ mi đc thc thi.

1.4.4 Thông đip (Message)

 yêu cu mt hot đng c th nào đó đc thc hin, mt thông đip đc gi ti đi
tng, thông đip này đnh ngha hot đng.




nh ngha

Mt hot đng là mt dch v đc đòi hi ca mt đi tng.
nh ngha

Phng thc là mt s xác đnh v cách thc mt hot đng đc yêu cu đc thc
thi.
nh ngha

Mt thông đip là mt li yêu cu mt hot đng.
Khi mt đi tng nhn đc mt thông đip, nó thc hin mt phng thc tng ng.

Chng hn, mt đi tng đc to t lp ‘Khách hàng’ đ nhp tên ca ngi s dng.
Khi đi tng nhn đc thông đip, nó tìm và thc thi phng thc ‘Nhp tên’.


Trong trng hp mt công ty, mi b phn đc coi là mt đi tng. Nhng thông tin
đc chuyn ti và đc đón nhn t mi b phn (hoc qua thông báo liên b phn,
hoc qua nhng ch th ming) to nên nhng thông đip gia các đi tng. Nhng ch
th này có th đc chuyn dch thành nhng li gi hàm trong mt chng trình.













Trong hình 1.3, ‘Kinh doanh’ và ‘K toán’ là hai b phn khác nhau trong mt công ty.
Hai b phn này đc coi là hai đi tng khác nhau. Thông tin đc truyn đi và đc
đón nhn gia các b phn to nên các thông đip gia các đi tng.

1.4.5 S kin (Event)

Mt s kin là mt s vic xy ra cho mt đi tng ti mt thi đim.  đáp ng li s
kin y, đi tng s thc hin mt hoc nhiu phng thc.

Nói cách khác, mt s kin là mt tác nhân mà đi tng này gây ra cho mt đi tng
khác. Chng hn nh click chut trái trên mt nút.


 hiu rõ hn các s kin, hãy kho sát ví d sau t đi thc:

‘Mt ngi s thét lên khi b thc bng mt vt nhn’.

‘Thc’ là s kin gây ra s phn ng là ‘thét lên’.

Trong máy tính, mt ngi s dng nhn mt nút trên bàn phím là mt s kin chung. S
phn hi đi vi s kin này là vic hin th ký t tng ng trên màn hình.

Phòng
Kinh doanh
Phòng
K toán
Mc ln
g
?
$2000
Hình 1.3 Các đi tng gi thông đip cho nhau
1.5 Lp và i tng

Có mt s khác bit thc s gia mt lp và mt đi tng. Cn nhn thc rõ s khác
bit này.

Mt lp đnh ngha mt thc th, trong khi đó mt đi tng là mt trng hp ca thc
th y.

i tng là mt mô hình thc, trong khi lp là mt mô hình khái nim - đnh ngha tt
c các thuc tính và các phng thc đc đòi hi ca mt đ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ù.

1.6 Thit lp (Construction) và Hy (Destruction)

1.6.1 Thit lp

Mt lp ch cung cp nhng đnh ngha v các thuc tính và các phng thc kh thi.
Các thuc tính và các phng thc có th đc truy cp ch khi mt đi tng da trên
mt lp đc to ra.

Khi mt đi tng mi đc to, các thuc tính ca nó tr nên hin thc và có th đc
gán giá tr. Tng t, các phng thc đc đnh ngha cng đc áp dng.









Mi mt lp có mt hàm thit lp.

Kho sát li trng hp ca hàng bán xe hi. Ngay t lúc đu ch đnh ngha các lp. Cho
đn khi mt khách hàng mua mt xe hi ti ca hàng thì mt đi tng mi ging nh
lp ‘Khách hàng’ mi đc to.

Khi đi tng này đc to, mt s khong trng b nh đc cp phát cho nhng thuc

tính ca nó đ lu tr các giá tr đc gán cho các thuc tính y (‘Tên’, ‘a ch’ …).
Hàm thit lp thc hin vic cp phát này. Vào lúc này, mi thuc tính và phng thc
ca đi tng sn sàng đ s dng.

nh ngha

Thit lp là mt tin trình hin thc hóa mt đi tng.

Hàm thit lp là mt phng thc đc bit phi đc gi trc khi s dng bt k
p
hng thc nào trong mt lp. Hàm Thit lp khi to các thuc tính, và cp phát b
nh trong máy tính khi cn thit.
Tng t nh trng hp mt hc sinh nhp hc ti mt trng hc. Khi mt hc sinh
nhp hc, mt vài hành đng đc thc hin đ nhn hc sinh y vào trng. ó là:

 Xp lp cho hc sinh y.
 Ghi tên hc sinh y vào danh sách.
 Xp ch ngi.

ây là nhng hành đng đng lot đc thc hin ngay lúc bt nhp hc. Chúng tng t
vi nhng hành đng mà hàm thit lp ca mt đi tng thc hin.

1.6.2 Hy

Khi mt đi tng không còn cn thit na thì nó s b hy b.

S lãng phí tài nguyên, chng hn nh b nh, nu nh tip tc đ cho mt đi tng tn
ti mt khi nó không còn cn thit.











Mt khi mt đi tng b hy thì các thuc tính ca nó không th đc truy cp, cng
nh không mt phng thc nào có th đc thc thi.

Chng hn, trong trng hp bán xe hi, mt khi nhân viên bán hàng b ngh, nhng chi
tit ca ngi y không còn liên h. Vì th, đi tng tng ng s b hy. iu này gii
phóng b nh đã cp phát cho nhân viên bán hàng y. Khong trng này gi đây có th
đc tái s dng.

Hãy xem xét ví d v trng hc trên đây. Khi mt hc sinh thôi hc, tên ca hc sinh y
b loi ra khi danh sách, và khong trng đc gii phóng có th đc tái cp phát.

Các hành đng đng lot này tng t vi công vic ca hàm hy đi vi mt đi tng.

1.7 Tính Bn vng (Persistence)

Hãy kho sát trng hp bán xe hi. Nhng chi tit ca khách hàng đc lu tr ngay
khi xe hi đã đc phân phi.Vic duy trì d liu vn cn thit cho đn khi d liu đc
chnh sa hoc hy b chính thc.


nh ngha


Hàm Hy là mt phng thc đc bit đc dùng đ hy b mt đi tng.

Tin trình Hy tiêu hy mt đi tng và gii phóng khong trng b nh mà hàm
thit lp đã cp phát cho nó. Hàm Hy cng trit tiêu kh nng truy cp đn đi tng
y.






Ca hàng bán xe lu tr chi tit khách hàng vào mt file. Nhng chi tit này s tn ti
trong file cho đn khi chúng b hy, hoc bn thân file b hy.

Chúng ta đng chm tính bn vng mi ngày. Hãy xem vic sáng tác mt bài th. Bài th
là d liu tn ti trong tâm trí ca nhà th. Bao lâu nhà th còn tn ti thì by lâu bài th
còn tn ti. Nu bài th mun tn ti ngay c sau khi nhà th qua đi thì nó phi đc
vit ra giy.

Bài th đc vit ra giy to nên s bn vng. Bài th s tn ti bao lâu vn bn y còn
đc duy trì. Bài th y không còn tn ti khi t giy y b xé rách, hoc ch ngha b
xóa đi.

1.8 Tính óng gói d liu

Tin trình tru tng hóa d liu h tr cho vic xác đnh nhng thuc tính và nhng
phng thc thit yu.

Thông thng, các đi tng s dng nhng thuc tính và nhng phng thc không
đc đòi hi bi ngi s dng đi tng.


Chng hn nh trong trng hp lp ‘Khách hàng’. Lp y có mt phng thc xut hóa
đn. Gi s rng khi hóa đn đc xut, mt trong nhng chi tit đc in ra trên hóa đn
là ngày phân phi. Tuy nhiên chúng ta không bit thuc tính nào qua đó chúng ta có th
xác đnh thông tin này.

Ngày phân phi đc phát sinh bên trong đi tng, và đc hin th trên hóa đn. Nh
th ngi s dng không nhn thc v cách thc mà ngày phân phi đc hin th.

Ngày phân phi có th đc x lý theo mt trong nhng cách sau:

 ó là mt giá tr đc tính toán - Chng hn, 15 ngày k t ngày đt hàng.
 ó là mt giá tr c đnh – Xe hi đc phân phi vào ngày mùng 2 mi tháng.

i tng s dng nhng thuc tính và nhng phng thc mang tính ni b. Bi vì
nhng thuc tính và nhng phng thc có th đc che khut khi tm nhìn. Các đi
tng khác và nhng ngi s dng không nhn thc đc các thuc tính và / hoc các
phng thc nh th có tn ti hay không. Tin trình che giu các thuc tính, các phng
thc, hoc các chi tit ca vic thi hành đc gi là ‘đóng gói’ (encapsulation).


nh ngha

Tính Bn vng là kh nng lu tr d liu ca mt đi tng ngay c khi đi tng
y không còn tn ti.







Vic đóng gói phân tách nhng khía cnh có th truy cp t bên ngoài vi nhng khía
cnh ch đc s dng trong ni b ca đi tng.

im thun li ca vic đóng gói là có th to ra bt k thuc tính hay phng thc cn
thit đ đáp ng đòi hi công vic khi xây dng mt lp. Mt khác, ch nhng thuc tính
và / hoc nhng phng thc có th đc truy cp t bên ngoài lp là trông thy.

Mt ví d khác v vic đóng gói là lp ‘Nhân viên bán hàng’ đã đc đnh ngha  trên.
Khi phng thc tính tin hoa hng đc thc thi, ngi s dng không bit chi tit ca
vic tính toán. Tt c nhng gì h bit ch là tng s tin hoa hng mà h phi tr cho
nhân viên bán hàng.

Mt trng hp v đóng gói mà chúng ta gp trong đi sng hng ngày là vic giao dch
kinh doanh  mt ca hàng. Khách hàng yêu cu sn phm X. H đc trao cho sn
phm X, và h phi tr tin cho sn phm y. Sau khi khách hàng yêu cu sn phm,
ngi bán hàng thc hin nhng hành đng sau:

 Kim tra mt hàng trên k hàng.
 Gim s lng mt hàng trong bng kim kê sau khi bán.

Tuy nhiên, khách hàng không đc bit nhng chi tit này.

1.9 Tính tha k

Hãy kho sát các lp sau:

Lp Sinh viên Lp Nhân viên Lp Khách hàng
Tên Tên Tên
a ch a ch a ch

im môn 1 Lng Kiu xe đã bán
im môn 2 Chc v Nhp tên
Nhp tên Nhp tên Nhp đa ch
Nhp đa ch Nhp đa ch Nhp kiu xe
Nhp đim Nhp chc v Xut hóa đn
Tính tng đim Tính lng

Trong tt c ba lp, chúng ta thy có mt vài thuc tính và hot đng chung. Chúng ta
mun nhóm nhng thuc tính và nhng hot đng y li, và đnh ngha chúng trong mt
lp ‘Ngi’.

nh ngha

óng gói là tin trình che giu vic thc thi nhng chi tit ca mt đi tng đi vi
ngi s dng đi tng y.
Lp Ngi
Tên
a ch
Nhp tên
Nhp đa ch

Ba lp ‘Sinh viên’, ‘Nhân viên’ và ‘Khách hàng’ to nên lp ‘Ngi’. Nói cách khác, ba
lp y có tt c các thuc tính và các phng thc ca lp ‘Ngi’, ngoài ra chúng còn
có nhng thuc tính và nhng phng thc riêng.

Chúng ta cn phi đnh ngha lp ‘Ngi’ và s dng nó trong khi đnh ngha các lp
‘Sinh viên’, ‘Nhân viên’ và ‘Khách hàng’.

Chúng ta xây dng mt lp ‘Ngi’ vi nhng thuc tính và nhng hot đng nh đã
trình bày  hình trên. K tip, chúng ta xây dng lp ‘Khách hàng’ bao gm lp ‘Ngi’

cng vi nhng thuc tính và nhng phng thc riêng.

Chúng ta có th đnh ngha các lp ‘Sinh viên’ và ‘Nhân viên’ theo cùng cách thc trên.
Nh th, c ba lp ‘Khách hàng’, ‘Sinh viên’ và ‘Nhân viên’ đu chia s nhng thuc
tính và nhng phng thc mà lp ‘Ngi’ cung cp.

Lp Sinh viên Lp Nhân viên Lp Khách hàng
im môn 1
im môn 2
Nhp đim
tính tng đim
Lng
Chc v
Nhp chc v
Tính lng
Kiu xe bán đc
Nhp kiu xe
Xut hóa đn

Theo ngôn ng hng đi tng, lp ‘Khách hàng’ đc gi là tha k lp ‘Ngi’.







Có hai khái nim quan trng khác liên kt vi tính tha k. Lp ‘Khách hàng’ là lp
‘Ngi’ cng thêm cái khác. Nh th, lp ‘Khách hàng’ có tt c các thuc tính và các
phng thc đc đnh ngha trong lp ‘Ngi’ cng vi các thuc tính và các hot đng

ca riêng nó.

Trong ví d này, lp ‘Khách hàng’ đc gi là ‘lp con’ (subclass).





nh ngha

Tính tha k cho phép mt lp chia s các thuc tính và các phng thc đc đnh
ngha trong mt hoc nhiu lp khác.
nh ngha

Lp tha hng t mt lp khác đc gi là Subclass.
Trong ví d trên, lp ‘Ngi’ đc coi là ‘lp trên’ (superclass).






Hãy xem xét ví d v lp ‘Các đng vt’  hình 1.4. ‘Các đng vt’ là lp trên cùng mà
các lp khác k tha. Chúng ta có mt dãy các lp trung gian – ‘Côn trùng’, ‘Hu nh’,
‘Bò sát’, ‘Lng c’ - mà dãy các lp di k tha.

Các lp ‘Côn trùng’, ‘Hu nh’, ‘Bò sát’, ‘Lng c’ là nhng lp con ca lp trên ‘Các
đng vt’. Nh th, nhng lp này có tt c nhng thuc tính và các hot đng ca lp
‘Các đng vt’, cng thêm nhng thuc tính và nhng phng thc ca riêng chúng.


Lp ‘Hu nh’ là lp mà các lp ‘Con ngi’ và ‘Khác con ngi’ tha k. Nh th, các
lp ‘Con ngi’ và ‘Khác con ngi’ là các lp con ca lp trên ‘Hu nh’.



















1.9.1 Tính a Tha k

Trong tt c các ví d trên, mt lp tha k ch t mt lp. Ngay c trong ví d tha k
v các loi phng tin di chuyn, mi lp con ch có mt lp cha. Trng hp nh th
gi là ‘tha k đn’ (single inheritance).

Trong ‘đa tha k’, mt lp con tha k t hai hay nhiu lp cha.

Hãy kho sát ví d sau:



nh ngha

Mt Superclass là mt lp mà các đc tính ca nó đc mt lp khác tha hng.
Côn trùng
Các đng vt
Hu nh Bò sát Lng c
Con ngi Khác con ngi
Hình 1.4 Tính tha k









Trong hình trên, chúng ta đã xây dng mt lp ‘V mt hình’, lp này tha hng ba lp:
‘ng thng’, ‘ng tròn’, ‘Hình nh’. Nh th lp ‘V mt hình’ kt hp chc nng
ca ba lp trên thêm vào chc nng đc đnh ngha bên trong nó.

Lp ‘V mt hình’ là mt ví d v tính đa tha k.

Có th s dng tính đa tha k đ xây dng mt lp mi, lp này dn xut chc nng ca
nó t mt vài lp khác. Nh th, xét theo góc cnh ca ngi s dng lp mi này, ch
cn mt lp mà cung cp tt c các chc nng. Nh vy, h không cn phi s dng
nhiu đi tng khác nhau.


S thun li quan trng nht ca tính tha k là nó thúc đy vic tái s dng mã chng
trình.

Trong ví d trên, chúng ta có ba lp ‘ng thng’, ‘ng tròn’ và ‘Hình nh’. Gi
thit rng ba ngi khác nhau xây dng ba lp này riêng bit. Bây gi, ngi s dng cn
xây dng mt lp đ v đng thng, v đng tròn cng nh hin th hình nh. Vì th
h tìm kim xem có lp nào đáp ng mt hoc tt c các yêu cu đó. Nu có nhng lp
cung cp chc nng tha yêu cu thì ngi s dng s tha k nhng lp đó đ to mt
lp mi.

Gi đây ngi s dng ch còn phi vit mã chng trình cho nhng đc tính cha có sau
tin trình tha k. Ngi s dng có th s dng chính ba lp trên. Tuy nhiên, s tha k
cung cp mt bó nhng chc nng hn đn trong mt lp.

1.10 Tính a hình

Trong mt chng trình có cu trúc (a structured program), mt phng thc ch ng
dng cho mt đi tng. Chng hn xét toán t ‘Cng’. Toán t này ch tính tng ca hai
s nguyên. Khi truyn hai giá tr 2 và 3 thì nó hin th 5. Chúng ta không th có mt loi
toán t ‘Cng’ đ tính tng ca hai giá tr vn bn (text) ‘Hello!’ và ‘How are you?’ đ
có đc chui vn bn kt qu ‘Hello! How are you?’

Trong h thng hng đi tng thì tình hung mô t trên là kh th.





=++
Lp ng thng


Khi đim
im tn
V đng thng
Lp ng tròn

Bán kính
Tâm đim
V đng tròn
Lp Hình nh

Hình nh
V hình nh
Lp V mt hình

N
hn hình v
V hình
nh ngha

Tính đa hình cho phép mt phng thc có các tác đng khác nhau trên nhiu loi
đi tng khác nhau.
Vi tính đa hình, nu cùng mt phng thc ng dng cho các đi tng thuc các lp
khác nhau thì nó đa đn nhng kt qu khác nhau. Bn cht ca s vic chính là phng
thc này bao gm cùng mt s lng các tham s.

Tính đa hình là mt trong nhng đc tính quan trng nht ca h thng hng đi tng.

Mt ví d khác là phng thc hin th. Tùy thuc vào đi tng tác đng, phng thc
y có th hin th mt chui, hoc v mt đng thng, hoc hin th mt hình nh. Hãy

kho sát hình sau:













Hình trên cho thy rng ‘V’ là mt phng thc đc chia s gia các lp con ca lp
‘Hình th’. Tuy nhiên, phng thc V đc ng dng cho hình hp s khác vi hình
êlip.

Tính đa hình h tr tính đóng gói.

Xét trên mc đ ngi s dng, h ch cn mt phng thc ‘V’ ca lp ‘Hình th’.
Còn cách thc mà phng thc ‘V’ đc thc thi cho các trng hp khác nhau thì h
không cn bit.

1.11 Nhng thun li ca Phng pháp hng i tng

Lp trình hng đi tng đòi hi mt s chuyn hng quan trng trong t duy ca các
lp trình viên. Phng pháp này làm cho tc đ phát trin các chng trình mi nhanh
hn, và nu đc s dng cách đúng đn phng pháp này s ci tin vic duy trì, vic
tái s dng và vic đánh giá phn mm.


Nhng đim thun li ca phng pháp hng đi tng là:

 Phng pháp này tin hành tin trình phân tích, thit k và phát trin mt vn đ
trong khuôn kh nhng khái nim và thut ng thuc lãnh vc ng dng. Vì th,
có mt s tng hp cao nht gia vic phát trin ng dng và vn đ thc t.

Lp: Hình th

Các phng thc:
V
Di chuyn
Khi to
Các lp con
Hình 1.5: Lp ‘Hình th’ và các lp con
 Chng hn nh trong trng hp bán xe hi,  mi giai đon ca vic phân tích,
thit k và phát trin ng dng, luôn luôn có ting nói ca khách hàng, ca nhân
viên bán hàng …

 Phng pháp này h tr vic chia s bên trong mt ng dng.

 Phng pháp này h tr vic tái s dng các đi tng khi các ng dng mi
đc phát trin. ây là s thun li rt quan trng xét trong khía cnh gim thiu
chi phí có ý ngha lâu dài.

 Chng hn nh hành vi ca khách hàng mt khi đc mô hình hóa trong mt ng
dng thì có th đc s dng li cho nhng ng dng liên h có bao gm mô hình
khách hàng.

 Phng pháp này gim thiu các li và nhng vn đ liên quan đn vic bo trì

ng dng do kh nng tái s dng các đi tng.

 Phng pháp này tng tc tin trình thit k và phát trin, mt ln na đây là kt
qu ca vic tái s dng các đi tng.
Tóm tt bài hc

 Lp trình hng i tng là mt cách t duy mi đ gii quyt vn đ vi máy
vi tính. Thay vì n lc đa vn đ vào trong khuôn kh quen thuc vi máy vi
tính, phng pháp hng đi tng tìm kim mt gii pháp toàn vn cho mt vn
đ.

 S tru tng hóa d liu là tin trình xác đnh và nhóm các thuc tính và các
phng thc liên quan đn mt thc th đc thù, trong tng quan vi mt ng
dng.

 Mt lp đnh ngha mt thc th theo nhng thuc tính và nhng phng thc
chung.

 Mt đi tng là mt trng hp ca mt lp.

 Mt lp đnh ngha mt thc th, còn đi tng là thc th hin thc.

 Tin trình hin thc hóa mt đi tng đc gi là Thit lp (Construction).

 Tin trình hy b mt đi tng đc gi là Hy (Destruction).

 Tính bn vng là kh nng lu tr d liu ca mt đi tng vt quá thi gian
tn ti ca đi tng đó.

 Vic đóng gói là tin trình che giu vic thc thi chi tit ca mt đi tng đi

vi ngi s dng đi tng y.

 Tính tha k là c ch cho phép mt lp chis s các thuc tính và các phng
thc đc đnh ngha trong mt hoc nhiu lp khác.

 Tính đa hình là mt thuc tính cho phép mt phng thc có các tác đng khác
nhau trên nhiu đi tng khác nhau.

 Phng pháp hng đi tng đa ra tin trình phân tích, thit k và phát trin
ng dng trong khuôn kh các khái nim và các thut ng thuc lãnh vc ng
dng.
Kim tra s tin b

1. S tru tng hóa d liu đng ngha vi s che giu d liu. úng/Sai
2. nh ngha s Tru tng hóa d liu.
3. Vic đóng gói d liu che giu nhng chi tit thc thi đi vi nhng đi tng
khác. úng/Sai
4. Tính đa hình cho phép chúng ta to nhng đi tng khác vi cùng mt tên.
úng/Sai
5. Mi mt đi tng có mt _____________ và ____________ đc xác đnh rõ.
6. Tt c các đi tng ca mt lp đu có cùng mt tp hp các thuc tính.
úng/Sai
7. Mt đi tng đnh ngha mt thc th, trong khi mt lp là thc th c th.
úng/Sai
8. nh ngha tính a hình.
Bài tp

1. Thit k các thành phn và các hành đng khi mt khách hàng thc hin mt giao
dch ATM (Automatic Teller Machine).


2. Lit kê nhng thuc tính và nhng phng thc cn có đ v mt hình đa giác.

×