Bài 4
Nhng chc năng Đối Tượng mi ca VB.NET (phn
I)
V B.NET khc phc nhng gii hn v Đối Tượng (Object-Oriented) ca VB6 và
mang đến cho ta mt ngôn ng lp trình hoàn toàn Object-Oriented (OO). Gn như
mi th trong VB.NET đều liên h vi Object. Nếu bn còn mi vi lp trình theo
hướng đối tượng (Object Oriented Programming) thì phn gii thích sau đây s giúp
bn làm quen vi nó.
Classes và Objects, nguyên tc Abstraction
Theo phương pháp đối tượng, program được thiết kế để mt phn code đại din cho
mt vt tương đương ngoài đời. Nó được gi là Class.
Khi lp trình VB6 ta đã dùng nhng controls t Toolbox như Textbox, Label, Listbox
..v.v.. Textbox là Class ca các Objects Text1, Text2. Cũng như Label1, Label2 là
nhng Objects to ra t Class Label. Ta hay dùng hai t Class và Object ln ln
nhau. Điu đó không quan trng, min là ta biết rng Class là mt ý nim Tru tượng
(Abstraction), còn Object là mt vt thc hu. Ging như Class CaSĩ là mt ý nim
tru tượng, còn Object KhánhHà ca Class CaSĩ là mt người bng da, bng tht vi
tiếng hát được nhiu người ngưỡng m.
Ta nói Object là mt Instance ca Class, và ta instantiate Class để có mt Object.
Thường thường khi ta phân tích mt vn đề để thiết kế chương trình thì các Danh t
(Nouns) là nhng Classes. Gi d ta phân tích hot động ca mt Nhà Kho
(warehouse). Ta có phòng cha, ngăn t, bãi nhn hàng, xe nâng hàng, nhân viên
..v.v., mi th đều có th là mt Object nên ta s thiết kế mt Class cho nó.
Fields, Properties, Methods và Events, nguyên tc Encapsulation
Class CaSĩ din tã CaSĩ là người như thế nào. Như SBàiHát là mt Public Variable
ca Class, được gi là Field có th được đọc/viết trc tiếp. Còn Kiu tóc (dài, ngn,
màu đen, có sc nâu ...), Ging hát (cao, trm, ..). là nhng Properties. Chúng cũng
ging như Field nhưng được implemented (thi hành) bng cách dùng procedures
Property Get và Property Set. Property Set có th được coded để kim soát nếu
"Kiu tóc" không thích hp thì s b loi b. Ngược li, nếu "Kiu tóc" thích hp và
được áp dng thì ta s thy kết qu ngay là CaSĩ li đẹp thêm ra. Thường thường
Fields và Properties là các Danh t (Nouns).
Mt CaSĩ có kh năng ĐơnCa, KýTênLưuNim, TrìnhDin. Ta gi đó là nhng
Methods mà ta implemented bng Subs và Functions (thí d như Function
KýTênLưuNim s return mt ch ký). Thường thường Methods là nhng Động t
(Verbs)
Đối vi code bên trong Class thì Property ging như mt Method còn đối vi Client
(tc là program đang dùng Class) thì Property ging như Field.
Đôi khi, nếu trình din lâu, CaSĩ cn mt ly nước. CaSĩ s ra Raise Event KhátNước
để nhân viên trong hu trường phc v.
Ta gi chung Fields, Properties, Methods và Events là nhng Class Members (Các
Thành viên ca Class)
Có mt ngoi l v s khác bit gi Class và Member, đó là khi ta dùng các Shared
Class Members ca mt Class thì ta không nht thiết phi instantiate mt Object. Ta
có th dùng thng tên ca Class như mt Object.
Cái li đim ca Object Oriented Programming là ta có th gói tt c nhng đặc đim,
kh năng ca mt Class vào trong mt Unit of Code (Đơn v mã) t túc. Khi chúng ta
lch s yêu cu thì CaSĩ ĐơnCa. Ta biết CaSĩ ca thì thu hút lòng người, nhưng ta
không cn biết làm sao CaSĩ đạt đến trình độ như vy. Đó không phi là chuyn để
chúng ta quan tâm.
Đối vi ta Class CaSĩ là mt Black Box, ta không biết và không cn biết chuyn gì
xãy ra bên trong. Nếu sau ny CaSĩ thay đổi k thut đơn ca để hát d và hay hơn,
điu đó không nh hưởng gì đến chúng ta. Đặc tính OO y gi là Encapsulation (Gói
kín).
Cách ta lp trình vi Class ch khác cách ta lp trình trưc đây mt chút thôi. Nếu
trước đây ta phi t làm, thì bây gi ta instantiate mt Object ca Class chuyên tr
nhng chuyn ta mun làm, ri bo nó làm cho ta. So vi ngoài đời, thí d bn có m
mt tim photocopy. Sau mt năm bn t trông coi, công chuyn làm ăn n định và có
kết qu tt. Bn mun m thêm mt tim photocopy na ch khác. Trước khi đi lo
ch khác bn hun luyn ngh photocopy cho mt người làm công trung thành, ri
giao cho người y làm qun lý để thay thế bn. Người đó là môt Object ca Class
QunLýTimPhotoCopy.
Tr li cách lp trình, nhng công vic bn làm hng ngày trong tim photocopy là
nhng Methods. Tt c đồ đạc, s sách ca tim là nhng Properties. Bn đã sp
đặt mi tun phi gi người li quét dn tim, mi tháng phi bo trì các máy
photocopiers, đó là nhng Events. Bây gi bn gói tt c nhng th y li thành
Class QunLýTimPhotoCopy. Ln đầu bn instantiate Class
QunLýTimPhotoCopy làm thành ChúTưThông, người s thay thế bn làm qun lý
tim photocopy đầu tiên. Khi bn mun m thêm tim th ba, bn s instantiate Class
QunLýTimPhotoCopy mt lân na làm thành DìSáuHương , người s thay thế bn
làm qun lý tim photocopy th nhì.
Khi đã phân chia trách nhim các phn code thành nhng Class, bn có th tp trung
tư tưởng vào tng Class mt, không cn phi c nh mi th trong đầu khi gii quyết
chuyn gì. Vì code ca Class nào ch làm vic và nh hưởng trong phm vi hot đng
ca nó, không đụng chm đến ai khác. Nếu có gì trc trc, thưng thường ta có th
xác định đó là li ca Class nào tương đối d dàng.
Có mt câu hi đùa rng theo phương pháp OO thì: "Thay mt bóng đèn cn bao
nhiêu programmers?". Đáp: "Không cn programmer nào hết, bn bo đèn t thay
bóng ca nó." (Li đáp khác: "Không cn programmer nào hết, Microsoft đã đi tiêu
chun ra bóng đêm.")
Do đó, nếu trước kia bn lp trình để t mình lo liu công chuyn thì bây gi hãy giao
cho các Objects t lo cho chúng. Tc là trước đây, nếu bn là ch đin mi năm bn
phi đi góp lúa rung, thì bây gi bn bo các tá đin phi t đem np lúa vào trong
kho cho bn. Sướng không? Ch trong thế gii lp trình OO, ta mi có th mơ mng
như vy.
Inheritance (Tha Kế)
Nguyên tc Encapsulation nói trên cho phép ta dùng nhiu Objects ca mt hay nhiu
Classes mt cách an toàn, tc là không s Methods ca các Objects gim chân lên
nhau.
Gi s ta mun dùng li mt Class để làm mt Class mi, đặc bit hơn, thí d như ta
mun làm nên mt Class CaSĩ t Class NghSĩ. Cách làm y gi là Inheritance
(Tha kế). Công vic tha kế ny được thc hin qua mt quá trình gi là
Subclassing.
đây ta dùng li Class NghSĩ mà hoàn toàn không đụng đến Source Code (Ngun
Mã) ca Class NghSĩ. Nguyên tc y gi là Reusability (Dùng li). Lưu ý là nếu ta
dùng li Source code mà có sa đổi mt chút trong Source Code thì không th gi là
Reuse được vì có th vic sa đổi Source Code đó s gây ra bugs mi. Ta phi ch
cn Inherit t Object Code ca mt Class cũng được thì mi tht s là Reuse.
Ta dùng Inheritance để cho thêm các Class Members, tc là thêm đặc tính và chc
năng. Thí d NghSĩ thì có Property TâmHn (NhyCm (Sentitive) , ThơMng
(Romantic),...), và Methods KýTênLưuNim, TrìnhDin. Class CaSĩ s gi y các
đặc tính và chc năng y và thêm Sub ĐơnCa, Function HátNhcYêuCu, .v.v..
Tương t như vy, ta cũng có th tha kế t Class NghSĩ để to ra Class HaSĩ.
Class HaSĩ s gi y các đặc tính và chc năng ca Class NghSĩ nhưng thêm
Function VChânDung, Sub TrangTrí.
Trong thí d nói trên, người ta gi Class NghSĩ là Parent Class, Super Class hay
Base Class. Còn Class CaSĩ và Class HaSĩ được gi là Child Class hay
SubClass.