Các đổi tương 14 minh dụ instance của một class cỏ thê truy cập vả thực hiệnvác thành viên dữ liệu,phương thức.... Cae thành viên đữ liệu & phương thức của một Class có hgat vi Class và
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHAM TP.HCM
KHOA TOÁN - TIN
Trang 2LỜI CẢM ƠN
-Em xin chan thành cam ơn đền tat ca các thay cô trong Khoa Toán Tin đã tận tinh chi bao truyền đạt những kinh nghiệm kiến thức cho chúng em dé chủng em cỏ
được những cơ sơ kiến thức can thiết hoàn thành đỏ an nay.
Thực hiện đồ án tốt nghiệp là một dip rất tốt dé chúng em có thẻ rèn luyện ki năng
chuyên món, biết tông hợp các kiến thức đã học trên mọi phương điện Rèn luyện
tính tự chu sang tạo va tinh than trách nhiệm trong công việc Phát huy tinh doc
lập sang tạo và tự nghiên cứu đẻ tạo ra một sản phẩm một báo cáo trình bảy hoản
chinh.
Dé có được thành qua tốt đẹp cho hôm nay và mai sao, em xin chan thành cam ơn
den tắt ca thay có đã tan tinh giảng day hướng dẫn em trong suốt 4 năm học.
-Xin chan thành cam on thay Lê Minh Trung đã tận tinh hướng dẫn, tạo điều kiện
cho em trong suốt thời gian thực hiện đồ án tốt nghiệp Nhờ thay ma em da có
được những kiện thức quý báo vẻ lập trình hướng đối tượng trong vb.net và mô
Trang 31.2 Khai bao lop VB.net
1.3 Bai Toán: Can thiết kế 1 lớp tượng trưng | thời điểm GIHTESesnsnnneaessssno 7
1.3] Xác định các tập thực thẻ can thiết! KỄ:s=:z=cnocptreitsgrtessoiiiEtigieriobaseia 7 1.3.2 Xác định các thuộc tinh (can thiết, chung) của các thực thẻ -. : 7
1.3.7 Khởi tạo một đối tượng từ một cÌass cseoeseroserosersoseee 10
14 Thực thi kiểu đữ liệu trừu tương Time với Class 2-5255525555s2 HH
1.5 OARS ESS ing iniitiinannenc nnn heen rE ANNIE ONT NN NMUNCA EN tinneNeNy II 1.6 Constructor (Phương thức khởi tạo ) c1 12
1.6.1 Quá tải constructor (Overload conStructOr ) - o5 sc<<s se sec se ceezxecee 12 1.6.2 NVIIDŨttrdnrrtinegttrrGTGTTGGENIAGGERINIGKINHIGtRRGiGSiSiGNIdiSXISGWGSIERIS0MSI4M1703/0018S§ 12
lÿ dct intretha Clast.:/(PTDDENY::()Lssssecrnsicpnnntoittoiiuiietteuiiitoiiiriiittiatiasrdie 19
li (GAMPOSHION CHSS:aornsrnn-ftntrãadunntiff6Yryntểfasqurnitadwwaaaa 20
1.8.1 HIỜI MEGA |, sassnsansiarennsassamnsasconssannpunpannspssasehiaensaspannédensasasddiiaennse eausiiiioiasaiiaaiaaaaiea 20
1.8.2 VÀ VỤ tri noingiioioiintuiá00012685551160101086686088150338/518551460783810818631854888311662129118X701125616E83 20
1.9 Tham chiều Me (Me Referrence ) - sư g1 2110110111 111112522 26
CIO GafDREEiGGIIEE(Dfsvurauơaruansdiitirdiieutiniiirtitrtittritrirddtietifsrrtgffitrtr0St'G1 26 I.II Shared Member(Thanh viên được chia sẻ } - HH HH Y1 xài 26
AD TH THHHH TH HH HH TH HH HH HH Hưng cry 27
I.II.3 _ Tính chat Shared Member(Thanh viên được chia sẻ ) s55 562522522 29
[.I? Const và ReadOnly Data) MemiĐer : ccccieeeiieiicooociicciecieeooaecea 29
I 12.1 GOT EG cacnsaninirititirtitttcpttt1001010001100 0011371100 0EEEEEEEREGEENOSYNNISTrrrrờ 29
BS VD uuasenisintniatiinaiiijiaeBiiniiraiiiiitGi555311ã812ã s6 E4 š853004514558111ý15194815Y9148484ã201178128 29
I.12.3 Kha biệt giữa Const && ReadOnly à Seo BI
1.13 Reuse ability && RAD (Object Browser) -Ặ Soi
aN INBMESDNDEiuoarerrrrrrerorritrotirtititiiiiiiirttiiradtafiiitiitiit@ 0 Giãn ESISE 32
A Ec) - GiớitiiÐUtcsasasecesreerrrcrrrrroetrrotitGtidhtlfifltyStiEnalasgfiogfavfositiie 32
Trang 4Pts?) Uu điểm của Inhcritance? ¬— Ề ẽ Re)
IIÁ3 — Nhược điểm của Inheritance, . ccccccececesecessecssecseessssesssessssssananansnsesscesenee BO
PIS4 — Một xố khái niệm cua Inheritance se cố tense teens 34 11SS IsA Relationship Has A Relationship 44
WS) Abaca fh ie na emesis nan meen an ecsnennonesnennasnesnanmannsnnapssnsesasnnzansonsonssoesinnn 35 1.18.7 Cách khai bảo kế thừa trongVB.NEI ciieeeeouer để
We | a 36
1.15.9 — Protected và Friend (Access MODEL) che 36
\.1§.10— Một số điều nói thêm cccccccssssseesoossssveesssssenenvansenns woeeeonnneeenennsseeenneeesenunnseeee 37 1.06) TỈNH ĐA HỈNHIPDIYHGNMISÌbscresreeeeeeerrrnrersnsereeasertinnaaniansssrtirinn 38
1161 Khải niệm Tinh đa hình (Polymorphism) ¬ XÀ8886/2A83268ã8255458ãÿ4585ã35385ã8853538535E 38
11063 tinh đa hình trong cuộc song đời thực tín ốc À9
116.3 Lớp trưu tượng & Lớp cụ the Abstract & Concrete eC lass J123sa3808858332385353342437 40
1164 Vidụ
Llos Vee khóa MustOveride
1166 — Nottheritable Class(NotOveridable Method) eer |
1.167 Giao etic intertace) TẢ" "ẢAẢ"' 4l
lia9 Kiến chết wanna “sẽ san X4ã51584453X558 5 VE8522G2812858695655555858359a2s8553ã2a88sả 42
1.16.10 [)clegate STL HeLa aL TL 42
Lod QỰ KiED(EVERbeoieoiaioeeaatissesieiiaeneten1014452104193221185288032858ã88ã28ãã515/888ã58188ã85888aS8ã58 43
Chuong 2 MO HINH MVC VA DO AN MINH HOA
\ NMG TRAD A osc sccccersesscscensseaseszzassesesceseascassescesvesssassaossosnactssxeescasseresucsesszecceonssvesseessessceses + 44
2 Dé An Minh Họa =—— oacaiT TaN eanaeeSeua RTT INRTTNTTaRaAaNRaRRRTOU NATTA TTENeaTe 46
a 0D) 46
2.1.1 IMUGIGONNI gguanttrtritroirtrettrtritrtttattttrrritiiitottrititii110171091800711100900000099111317V08808W0/f5 46
ze TỐC! SƯ IKICHÍ!oi:z:01503655682575135382g675381353155582740532855583558A333553858ã388845388538458155 855858 TH: 46
131 Public Event LineCountChanged As LineCountl ventHandler đag28s3g3£ 46
3.1.3.3 Public Event LongestLineCharCountC hanged As [.ongestl.ineEventl landler
281 Mục dich GSìït4Y428ã651ã851504830410010863si1vìvfÄiT2Eftfffigt0YNititd18461801111032(10043021308: 72
22 TRUQGiỦfN :‹.-s¿:::s:2::sp:c22255023525503525223535050285530593538513958583635857583039503157514058008588/188 72
1x»
Trang 52143 CAC phương thỨC cong sen kieceeesecerreeisIAA020001089 73
234 lớp Styled Textarea cccscccsesssssseeesnereeeeseseeeeseeeseseeeeneneneenananansessncunarrareeeseseseenceneases 74
341 NET HD Socncceeenirrccnorntseeestaigx6i00604029230606031888000030080008105008868005)528380108 14
DULY Củc sự KIỆN:azcoicsra-iniiriiiraraifgigaiatsiiitldilifsiitifsùïsurStðtissisiNeiäfSsãss3isgssãse 14
2.4.1.2 ColumnChanged csseseeneennnnennnhheinsessneeeeeerersEreesesdeerrse 74
2.4.1.3 LimeChanged csccssssssseseerssssnssessececscssssecesssscenesssssansssnsnanunresrensnetesssees 74
2.4.2 Các thành viên dit liệu: cà Share 75
24.3 Các phương WUC cccccsscsesssscssessssstevsessserseecscessesssssenssssssssssnsecssssnseesssnsstecsnane 86
Chương 3 SỬ DUNG DIEU KHIEN STYLEDTEXTAREA TRONG
CAC DO AN KHAC
3.1 Biển dịch thành StyleđTextA rea.dÏÌ chien 116
3 Nhiúng điều KHiến vào Unig đÙP:c::occcccaccccn in tnngi ion nnnngnt0118888s 8 88886 119
8) Các bước nhúng StyledTextArea vảo ứng dụng c:ccccccc sec 1193.3 Thiet kể giao diện va VIỆT CODE ceccccsssssssssovssssssssssevsssssvsssesovsvessevesvvesseessssessenseseessesee 122
31 Lhiết kế form chính: Ung dung muinh họa (seo 122
3.3.1.1 Các chức năng trong menu ÍiÍe ¿- cịc cccccercererrrerrrrrrererrrrier 1223.3.1.2 Cac chức năng trong menu Window - càng 125
3.3.2 Thiết kế form con: Nhung điều khiển vào ứng dụng -. -:-55- 128
S321 Các chức nang trong menu Pile oo cece cee eeeenese nee eseeneeseesessasenneeens 128
3.3.2.2 Các chức năng trong menu Eit ccsscsssssesssecsssssssessessersssersessssesesesereres lầu
1.3.3.3 Các chức năng trong menu Formai co cenineieeree 133
DM a0 aw Ani ¢ cae xueh
nh đz\ dạn 40 Ty +i eG, hy de’
Xiếu Ghar mac WAG tis caw tC let bey Pu
avs Chay thu clude
Trang 6LẬP TRÌNH HƯỚNG ĐÓI TƯỢNG
TRONG VB.NET VÀ MÔ HÌNH MVC
Chương 1 LAP TRÌNH HƯỚNG BOI TƯỢNG TRONG VB.NET
© Class thường được mô ta như là một mô hình hoặc thiết kế mô hình qua đó Object
(doi tượng) có thẻ được tạo.
® OOP thương dùng class để bao bọc (che dau chỉ tiết encapsulate) của instance
variables (dữ liệu) và method (phương thức).
1.1.2 Ví dụ
® Giá sử tạ can “cải dat” các hình chữ nhật trong một chương trình Ta sẽ phản tích
đẻ tìm ra những thuộc tinh và hành động chung nhất mà một hình chữ nhật noi
chung phải có Ta sẽ “bao bọc” "che giấu chỉ tiết” thuộc tính và hành động nay
trong một lớp Class Rectangle.
Trang 7sub SetHeight(value As Double)
sub Set Width(value As Double)
‘unction Area() As Double
unction Perimetter() As Double Phương thức |
sub MoveTo(X As Integer.Y As Integer)
sub Draw(L.ineColor As Integer.BackColor As Integer)
sub IncementSize( wBias As Double,hBias As Double)
1.1.3 Khởi tạo đối tượng
Sau khi khai bao mot Class chúng ta có thé khởi tao (instantiate) các doi tuong
tử nó.
» Các đôi tượng có thẻ truy cập và sử dụng các thành viên (dữ liệu phương thức)
có access modifier là Public
lập hyp các thành viên dữ liệu và phương thức Public gọi là “giao diện” cua
một lớp.
1.1.4 Tóm lại
„ Class là khuôn mô hình tạo nên đối tương.
„ Class là sự bao bọc cả dit liệu (instance variable, data member,propcrty ) lần
hanh động (method.function member behavior )
Có thẻ khởi tạo các đối tương that sự từ các Class đã được khai báo.
Trang 8Các đổi tương 14 minh dụ (instance) của một class cỏ thê truy cập vả thực hiện
vác thành viên (dữ liệu,phương thức ) có access modifier public,
Class ¿jŠ Objects
Giồng như
Khuan làm bánh Nhung cải bánh that su
Hình 1.1
1.2 Khai báo lớp VB.net
+ [Private|Protected|Public] Class <Tén Class>
Biến thé hiện
+ [Private|Protected|Public] mtenbien As <kiêu dữ liệu>
Thuộc tính (Property)
+ [Private|Protected|Publie] Property tenThuoctinh() As < kiểu dữ liệu
“Truy xuất giá trị của thuộc tính (truy xuất đến giá trị của biến)
Trang 9End Get
* End Property
Phuong thirc (Method)
* |Private|Protected|Public] Sub <tén thu tục >({<ds các tham sd>})
+ End Sub
* Hoặc
+ |Private|Protected|Public] Function <tén hàm>{{<ds các tham sỏ>|)
Return <gia tri>
* End Function
* End Class
I.3 Bài Toán: Can thiết kế I lop tượng trưng | thời điểm CTime
1.3.1 Xác định các tập thực thé cần thiết kế.
Mot thời điểm cụ thé (1:30:20).
1.3.2 Xác định các thuộc tính (cần thiết, chung) của các thực thể.
1:30:33 >Hour=1.Minute=30,Second=23
13:45:16=>>Hour= 13.Minute=45.Second= 16
22:0:1 S®Hour=22,Minute=0.Second= I
Trang 101.3.3 Case study (Thiết kế Class CTime )
‘Khai báo các instance variables
'0-23
‘0-59
Trừu tượng hóa là quá trình triw tượng những cái chung nhét |
Hinh 1.2
1.3.4 Xác định constructor(phương thức xây đựng) và các phương
thức khác liên quan tới thiết lập giá trị cho instance variables.
Môi Class có một hoặc một vải constructor:
La phương thức xây dựng được gọi một cách tự động khi một đối
tương được khởi tạo từ Class
Dùng dé khởi tao (instantiate) đối tượng cho class.
Thiết lập giá trị ban đầu cho các instance variables.
Public Sub New() ——
Hinh 1.3
Trang 111.3.5 Xác định các hành động có thé thực thi với thực thể,đối tượng
Public Class CTimev1
ÔÔÖÔÖÔÖÔÒÔÖÒÔÖÔÖÒÔÖÔÖÔÖÐÖÐSŠ5SŠ` `
Public Function toStandardTi ime() As Sưing
Public Function toUniversalTime() As String
Hinh 1.4
1.3.6 Sur dụng lớp trong các đồ án khác
Biên dịch lớp thành tập tin thư viện dll
» Làm thẻ nao sử dụng class trong các ứng dụng?
Server Client
Hinh 1.5
Trang 121.3.7 Khởi tạo một đối tượng từ một class
- Cú pháp:
Dim anObject As New ClassName( gument )
~Vi du:
Dim aTime As CTimev1 aTime | id
“Tham chiêu aTime đưa tham chiếu tới
đôi tương nào
aTime=New CTimev1() #fm |
‘bay giờ aTime them chiều vào một đói
tương thật sự trong bộ nhớ Heap
Trang 131.4 Thực thi kiều dữ liệu trừu tương Time với Class
Sự tách biệt minh bạch giữa “phía sử dụng client” và "phía cung cấp server” làm
cho chương trình:
Mềm dẻo, linh hoat.dé thay đôi hơn.
Việc tai sử dụng các class cho phép RAD (Rapid Application
Development) làm tăng khả năng sản xuất (productivity).
Hệ thông chương trình là sự tương tac của các Object độc lập họat đồng
ding dé lập trình, bao trì và gỡ rồi
Sự tách biệt minh bạch giữa “phía sử dụng client” và “phía cung cap server” làm
cho chương trinh:
Mềm déo,linh hoat.dé thay đổi hơn.
Việc tai sử dụng các class cho phép RAD (Rapid Application
Development) làm tăng khả năng sản xuất (productivity).
1.5 Hoat vi Class
Cae thành viên (đữ liệu & phương thức) của một Class có hgat vi Class và có
the được truy cập bởi các thành viên khác của Class.
Cúc thành viên Public có thẻ được tham chiều từ các đổi tương của Class.
Cúc biến của các method cỏ họat vi cục bộ trong method (block scope).
Truy cập các thành viên
Nỗ lực từ một đối tương khởi tạo từ một Class truy cập vào thành viên Private
của Class sẽ gây ra một lỗi lập trình.
VD: Trong Client sử dụng Class Time
Dim aTime As Time = New Time()
aTime.mHour=7 “gay ra lỗi
II
Trang 14Tom tat Access Modifier
Access | Thành viên khác của class Di
Modifier
‘6 thê truy cập Không thẻ truy cập
1.6 Constructor (Phương thức khởi tạo )
1.6.1
Chúng ta ding Constructor đẻ khởi tao giá trị cho các instance variable.
Constructor tự động được gọi (invoke) khi có một đối tượng được khởi tạo
(instantiate) từ Class.
Nếu không có constructor nao trong khai bao của Class thi VB.NET sé dùng
constructor mặc định (defalut constructor) va khởi tạo gia trị ngằm định cho các
instance variable.
ons fi constructor (Overload constructor )
Irone một Class có thé có nhiều constructor (overloaded constructors) cung
cap nhiều cách dé khơi tao đối tượng.
Các constructor có cùng tên New chỉ khác nhau danh sách các tham sé
Các constructor là Sub và không trả vẻ gì cả.
lay thuộc vào danh sách đổi số cung cấp lúc khởi tạo đối tượng VB.NET sẽ
Trang 154 Inherits Object
3 “declare Integers for hour minute and second
6 Private milour As Integer ‘0 - 23 ~
7 Private mMinute As Integer ' 0 - 59
8 Private mSecond As Integer ' 0 - 59
9 ‘ constructor initializes each variable to zero and
If
11 Public Sub New()
12 Set Vime()
13 End Sub‘ New
ensures that each CTime2 object starts in consistent state
14.° CTime2 constructor: hour supplied:
1Š,” minute and second default to 0
16 Public Sub New(By Val hourValue As Integer)
17 Set Vime(hourValue) Contructor |
18 End Sub ' New
19." C Lime? constructor: hour and minute supplied:
20." second defaulted to 0
21 Public Sub New(ByVal hourValue As Integer.
———?' Contructor 2
22 ByVal minuteValue As Integer)
23 Setlime(hourValue minute Value)
24 End Sub ' New
Trang 1635.' CTime2 constructor: hour, minute and second supplied
26 Public Sub New(By Val hourValue As Integer _
27 ByVal minuteValue As Integer, ByVal secondValue As Integer)
28 SetTime(hourValue, minute Value, secondValuc)
29 End Sub ' New —— CC Camwetw 3 —
3U." CTime2 constructor: another CTime2 object supplied
31 Public Sub New(By Val time Value As CTime2)
32 SetTime(time Value.mHour, time Value.mMinute, timeValue.mSecond)
33 End Sub ' New
Copy Contructor
34." set new time value using universal time;
35." perform validity checks on data;
36.’ set invalid values to zero
37 Public Sub SetTime(Optional By Val hourValue As Integer = 0
38 Optional By Val minute Value As Integer - 0, _
39 Optional By Val secondValue As Integer = 0)
40.' perform validity checks on hour, then set hour
41.1f (hourValue >= 0 AndAlso hourValue < 24) Then
mblour = hourValue
Else
milour = 0 42.End If
43.' perform validity checks on minute, then set minute
14
Trang 1744 1f (minute Value >= 0 AndAlso minuteValue < 60) Then
mMinute = minute Value
Else
mMinute = 0
45 End If
46." perform validity checks on second, then set second
47 1f (secondValue >= 0 AndAlso second Value < 60) Then
mSccond = second Value
48 Else mSecond = 0
49 End If
50 End Sub ' SctTime
31.” convert String to universal-time format
$2 Public Function ToUniversalString() As String
53 Return String.Format("{0}:{1:D2}:{2:D2}", _
mHour, mMinute, mSecond)
34 End Function ' ToUniversalString
35.° convert to String in standard-time format
%6 Public Function ToStandardString() As String
$7 Dim suffix As String = " PM"
$8 Dim format As String = "{0}:{1:D2}:{2:D2}"
59 Dim standardHour As Integer
60." determine whether time is AM or PM
61.1f mllour < 12 Then suffix = " AM"
15
Trang 1862.End If
6Ầ.` convert from universal-time format to standard-time format
64.1f(mHour 12 OrElse mllour = 0) Then
standard} four = 126S Else suandardHour = mHour Mod 12
66 End If
67 Return String.Format(format standardHour, mMinute.
mSecond) & suffix
68 End Function ' ToStandardString
69 End Class ' CTime2
\ "Fig 8.5: TimeTest2.vb
Lộ ‘Demonstrates overloading constructors.
3 Imports System Windows.Forms
4 Module modTimeTest2
Š, Sub Main()
6 ‘use overloaded constructors
7 Dim time] As New CTime2()
8 Dim time2 As New CTime2(2)
9 Dim time} As New CTime2(21 34)
10 Dim ume4 As New CTime2(12, 25, 42)
11 Dim times As New CTime2(27, 74, 99)
(2 Dim time6é As New CTime2(time4) ' use timed as initial value L3 Const SPACING As Integer = 13' spacing between output text
16
Trang 1914." invoke timel methods
15 Dim output As String = “Constructed with: " & vbCri.f& _
16." tmel: all arguments defaulted" & vbCrLf & _
17 Space(SPACING) & time ToUniversalString() & _
18 vbCrlt & Space(SPACING) & time! ToStandardString()
19." invoke time2 methods
20 output &= vbCrLf & _
21," time2: hour specified; minute and second defaulted" &
22 vbCri.f & Space(SPACING) & _
23 time2 VoUniversalString() & vbCrLf & Space(SPACING) & _
24 time2 FoStandardString()
25.‘ invoke time3 methods
26 output &= vbCrLf & _
37.” time3: hour and minute specified; second defaulted” & _
28 vhCrl.f & Space(SPACING) & time3.ToUniversalString() & _
29 vbCri.f & Space(SPACING) & time3.ToStandardString()
30." invoke time4 methods
3] output &= vbCrLfF & _
32." time4: hour, minute and second specified” & _
33 vbCrl.f & Space(SPACING) & time4 ToUniversalString() & _
34 vbCri.f & Space(SPACING) & time4.ToStandardString()
35." invoke times methods
%6 output &= vbCrLf &
-37." timeS: hour, minute and second specified" &
38 vbCrLf & Space(SPACING) & timeS.ToUniversalString() & |
39 vbCri.f & Space(SPACING) & timeS ToStandardString()
40." invoke time6 methods
17
Trang 2041 output &= vbCrLf &
42." time6: Time2 object timed specified" & vbCrLf &
43 Space(SPACING) & time6 ToUniversalString() &
44 vbCrLf & Space(SPACING) & time6.ToStandardString()
4Š MessugeBox.Show(output,
46 "Demonstrating Overloaded Constructors”)
47 End Sub ' Main
48 End Module ' modTimeTest2
Demonstrating Overloaded Constructors xi
Constructed with:
time1: all arguments defaulted
0:00:0012:00:00 AM
time2: hour specified; minute and second defaulted
2:00:002:00:00 AM
time3: hour and minute specified; second defaulted
time6: Time2 object time4 specified
12:25:4212:25:42 PM
Lo
18
Trang 21Ding overloaded Constructors
‘use overloaded constructors
Dim time! As New CTime2()
Dim time2 As New CTime2(2)
Dim time3 As New CTime2(21, 34)
Dim time4 As New CTime2(12 25, 42)
Dim times As New CTime2(27 74 99)
Dim timc6 As New CTime2(time4)
‘use timed as initial value
Minh họa overloaded constructors
- Tao ra một Console appication Test
- Thêm vào ứng dung Test class CTimev2 với Š constructors có chữ ki khác nhau.
> 0 tham số được gọi
> | tham sé được gọi
> 2 tham số được gọi
> 3 tham số được gọi
> 3 tham số được gọi
> Copy
- Viết code trong module của Test sử dung class trên.
Nhược điểm của instance variables
Access Modifier của các instance variables nên là Private.Không thé truy cập &
pan giả trị cho các instance variables của một đối tượng một cách trực tiếp.
‹ Chúng ta ao ước có thé dùng cú pháp anObject.instance_ variable dé truy cập &&
gảán giá tri
17 Thuộc tính của Class (Property )
VB.Net khắc phục điều nay bằng khái niệm Property(thuộc tính).
Một property gắn với một instance variable va cung cấp:
Get accessor cho phép truy cập giá trị
Set accessor cho phép thiết lập gia trị.
Trang 22anObj.Hour=x = mHour=x
M=anObj.Hour M=mlHour
1.8 Composition Class
1.8.1 Giới Thiệu
[rong một so trường hợp thiết kế class sẽ rõ rang hơn.tiện hơn nếu class có
thành viên dữ liệu tham chiếu tới đối tượng thuộc lớp khác.
Cac lớp như vậy được gọi là composition class.
5 Private mlirstName As String
6 Private ml.astName As String
7 Private mBirthDate As CDay ' member object reference
8 Private mHireDate As CDay ' member object reference
9 "Chmplovee constructor
10 Public Sub New(By Val firstNameValue As String.
ByVal lastNameValue As String ByVal birthMonthValue As Integer.
ByVal birthDay Value As Integer, ByVal birthYcarValue As Integer.
ByVal hireMonthValue As Integer, ByVal hirelay Value As Integer.
ByVal hireYearValue As Integer)
20
Trang 23II mfirstName - firstNameValue
I3 ml astName - lasUNameValue
13.‘ reate CDay instance for employee birthday
14 mBirthDate = New CDay(birthMonthValue birthDayValue, birthYearValue)
15.‘ create CDay instance for employee hire date
I6 mblireDate - New CDay(hireMonthValue hireDay Value hire YearValue)
1? End Sub ' New
I# ` return employee information as standard-format String
19 Public Function ToStandardString() As String
30 Return mLastName & "," & mFirstName & " Hired:
"-& mHireDate.ToStandardString() "-& " Birthday: ""-&mBirthDate ToStandardString()
21 End Function’ ToStandardString
22 End Class ' Cemployce
21
Trang 246 Private mMonth As Integer ' 1-12
7 Private mDay As Integer ' 1-31 based on month
8 Private mYear As Integer ' any year
9 * constructor confirms proper value for month, then calls
10," method CheckDay to confirm proper value for day
I1 Public Sub New(ByVal monthValuc As Integer.
12 ByVal day Value As Integer, By Val ycarValuc As Integer)
13." ensure month value is valid
14 H (monthValue > 0 AndAlso monthValue <= 12) Then
15 mMonth = monthValue
Else
16.mMonth = |
17." inform user of error
18 Dim crrorMessage As String = "Month invalid Set to month 1."
tw tv
Trang 25I9 MessageBox.Show(errorMessage, "", MessapeBoxButons.OK,_
MessageBoxlcon.Error)
20 End If
21.mYear = yearValue
22 mDay = CheckDay(dayValue) ' validate day
23 End Sub ' New
24." confirm proper day value based on month and year
25 Private Function CheckDay(By Val testDay Value As Integer) As Integer
26 Dim daysPerMonth() As Integer = {0 31 28 31 30 31,30 31 31, 30 31
30 31)
27.1f (testDay Value > 0 AndAlso
-testDayValue <= daysPerMonth(mMonth)) Then
28 Return testDayValue
29 End If
30.' check for leap year in February
31.1f (mMonth = 2 AndAlso testDayValue = 29 AndAlso _
mYcar Mod 400 = 0 OrElse mYecar Mod 4 = 0 AndAlso
-mYcar Mod 100 <> 0) Then
32 Return testDayValue
Else
Trang 2633.' inform user of error
34 Dim errorMessage As String
“day " & testDayValue & “invalid Set to day |."
35 MessageBox .Show(crrorMessage ""
MessageBoxButtons.OK, MessageBoxlcon.Error)
36 Return | ' leave object in consistent state
37 End If
38 End Function ' CheckDay
39." create string containing month/day/year format
40 Public Function ToStandardString() As String
41 Return mMonth & "/" & mDay & "/" & mYear
42, End Function ` ToStandardString
43 End Class ' CDay
Trang 27"big 8.10: CompositionTest.vb
1 ' Demonstrate an object with member object reference.
2 Imports System Windows.Forms
"Testing Class Employee")
7 End Sub ' Main
8 End Module’ modCompositionTest
Testing Class Employee
Jones, Bob Hired: 3/12/1988 Birthday: 7/24/1949
Lt)
Trang 281.9 Tham chiếu Me (Me Referrence )
Trong một class cỏ thê dùng tham chiếu Me dé tham chiếu tat cả các thành
viên (Public/Private) của nó.
Tham chiều Me tham chiều chính class (chính xác hơn đổi tượng khởi tạo từ
class)
1.10 Garbage Collector
Constructor New( ) dùng dé khởi tao va cap phat bộ nhớ cho các dối tượng.
Khi một đổi tượng trong bộ nhớ không còn được tham chiếu đến nữa thi sao??
Chúng ta có phải viết mã giải phóng bộ nhớ và tài nguyên như trong C&&C | +.
VB.Net thực hiện giải phóng bộ nhớ.tải nguyên một cách tự dong bằng kĩ thuật
Garbage Collector
Cứ định ki Garbage Collector sẽ được kích họat gom lại và giải phóng doi
tượng khỏng còn dùng nữa
Dựa hoàn tòan và GC không giải là giải pháp tốt Một số tài nguyên như
Network Connection,Stream, nên được giải phóng chu động tường minh (tìm
cho mọi đối tượng.
Cách tốt nhất là cai đặt thành viên mCount là một thành viên được chia sẻ bơi
mọi doi tượng (shared member) Thanh viên mCount sẽ được cập nhật giá trị
mỗi khi cỏ doi tượng được khởi tao hay hủy.
Trang 291.11.2 VíDụ
1 ' Fig 8.17: CEmployee3.vb
2 'Class Œ:mployee3 uses Shared variable.
3 Public Class CEmployee3
4 InheritsObject
5 Private nl irstName As String
6 Privaten].astName As String
7 ‘numbe: of objects in memory
Chia sẽ bởi tat ca các
8 PrivateShared mCount As Integer HH SOE
đôi tượng của Class
9 *Cl:mnlsyee3 constructor
10 Public Sub New(ByVal firstNameValue As String,
ByVal lastNameValue As String)
11 mFirstName = firstNameValue
12 mLastName = lastNameValue
13 mCoun: | * increment shared count of employees
14 Console.WriteLine (“Employee object constructor: " & mFirstName &
"" & mi astName)
15 End Sub ' New
16.' finalizer method decrements Shared count of employces
17 Protected Overrides Sub Finalize()
Trang 3018 mCount -= |” decrement mCount, resulting in one fewer object
19 Console WriteLine ("Employee object finalizer: " & mFirstName &
""& mLastName & ": count =" & mCount)
20 End Sub ' Finalize
21 'return first name
22 Public ReadOnly Property FirstName() As String
Get
23 Return mFirstName
24 End Get
25, End Property ` FirstName
26.' return last name
27 Public ReadOnly Property LastName() As String
Trang 3131, Return mCount
34 End Get
35 End Property ‘ Count
36 End Class ' CI'mployee3
1.11.3 Tinh chat Shared Member(Thanh viên được chia sẻ )
- Thudng ding Shared Data Member cho những thành viên chung cho mọi dai
tượng của Class (mCount)
lat ca các đối tượng chia sẻ chung một shared member.
Public Shared member có thẻ được truy cập thậm chi khi chưa có doi tượng nao
cua Class được khởi tạo thong qua cú pháp:
+ Class Name.SharedMember
Có thé khai bao Shared method
[rong shared method không thẻ truy cập non-shared member.
1,12 Const va ReadOnly Data Member
1121 — Giới thiệu
Ding cho những thành viên dữ liệu không thay doi giá trị.
- Thanh viên Const hoặc ReadOnly không thay dôi giá trị khi được khởi tạo (cung
Trang 329.
Class CCircleConstants
‘PL is constant data member
Pulblic Const Pl As Double = 3.14159
* radius is uninitialized constant
Pulblic ReadOnly RADIUS As Integer
‘constructor of class CCircleConstants
Public Sub New(By Val radiusValue As Integer)
10 RADIUS © radiusValue
II End Sub ` New
12 End Class‘ CcireleConstants
* Fig 8.16: ConstAndReadOnly.vb
tv
~ aw
* Demonstrates Const and ReadOnly members.
Imports System Windows.Forms
Trang 33& Dim radius As String = Convert ToString(circle RADIUS)
9 Dim output As String = "Radius = ” & radius & vbCrLf
yn
10 & “Circumlerence =" + String.Format("{0:N3}".
LÍ circle RADIUS * 2 * CCireleConstants.P[)
12 MessapeBox.Show(output “Circumference”,
13 MessageBox Buttons.OK MessageBoxlcon.Intormation)
I4 End Sub ' Main
Lš End Module ' modConstAndReadOnly
Circumference
Lx |
Hinh 1.10
1.123 Khác biệt giữa Const && ReadOnly
Điểm khác biệt giữa Const && ReadOnly ? Khi nao dùng Const ? Khi nao dùng ReadOnly?
Const :hang số chung cho Class.
ReadOnly:thanh viên dit liệu khởi tao giá trị 1 lần trong constructor
New( ) && không bao giờ thay dõi.
31
Trang 341.13 Reuse ability && RAD (Object Browser)
Class được bién dich thành file dll (dynamic link library), có thẻ tải sử dụngtrong các ứng dụng khác
Tai sử dụng các đọan mã tốt đã đựợc kiêm tra cân thận cho
phép(RAD:Rapid Application Development)
Có thé dùng Object Browser dé xem một class phù hợp với nhu cầu hay
khéng?
1.14 Namespace
Mỗi class sé gắn với một namespace.
Được tô chức theo cau trúc phân cap.
Tránh va chạm tên (name collision)
Không cỏ hai class trong cùng namespace có cùng tên.
Hai class trong namespace khác nhau có thé có cùng tên.
System Windows Forms TextBox
Trang 35Khi tạo ra một class thay vì phải viết ma cho class từ dau đến cuối ta có the
cho phép class mới “kẻ thừa” tòan bộ instance variables.thuộc tinh &
phương thức cua class cũ
Ké thừa
Lớp cơ sở (Base class)
Hinh 111
1.15.2 Uu điểm của Inheritance?
- Cho phép tai sử dụng class đã được kiêm nghiệm họat động hiệu qua.
lai sử dụng, Tiết kiệm thời gian.
Reusability RAD
1.4m rõ rang cau trúc đối tượng lập trình
1.15.3 Nhược diem của Inheritance
» Class dan xuất (derived class) có thé kế thừa những thuộc tính tinh chat không
mong muốn.
Người thiết kẻ class phải dam bảo thiết ké ra những class vừa du.
Class dẫn xuất có the không hai lòng vẻ một phương thức, thuộc tinh nó được kẻ
thừa.
Lrong class dẫn xuất có thê định nghĩa lại (cưỡi lên - overridden) thuộc
tính.phương thức cua class cơ sở.
33
Trang 361.15.4 Một số khái niệm của Inheritance
Class B kế thừa trực tiếp class A.
Class B là class dẫn xuất class A là class cơ sở.
Class B là class con(subclass).class A là class cha(supperelass)
Mỗi doi tượng của B cũng là doi tượng của A (ISA relationship) (ngược
lại không đúng)
Class C kế thừa gián tiếp class A.
Tip:
Các thuộc tinh,phuong thức của class B không thé truy cập các
instance variables, thuộc tính và phương thức Private của class A.
(đảm bảo information hiding)
Trang 37CTriangle CRectangle
CCarLoan
CHomeImprovementLoan CMortgageLoan
Trang 381.15.9 Protected và Friend (Access modifier)
- Ching ta dã biết hai lọai access modifier là Public/Private.
Thanh viên Public của lớp cơ sở có thé được truy cập mọi nơi.
Than của base class và derived class
Các đôi tượng tham chiéu base class && derived class.
‹ Thanh viên Private của lớp cơ sở chỉ có thẻ được truy cập trong than của lớp cơ
SO,
Protected cung cấp kha nang truy cập ở mức giữa Public va Private.
[hành viên Protected của lớp cơ sở có thẻ truy cập bởi các thành viên khác của
base class va derived class
36
Trang 39[hành viên Friend của base class có the truy cập boi các doi tượng trong cùng
mot assembly
Bang tom tat
1.15.10 Một số điều nói thêm
Mọi class déu được kẻ thừa từ System.Object
- Muôn trong class dẫn xuất có thé cưỡi lên (overridden) một phương thức của
class cơ sở thì can phải khai báo class cơ sở với từ khóa Overridable.
lim trong System.Object những phương thức có thẻ cưỡi lên.
Public Overridable Function ToString() As String
37
Trang 401.16 TINH DA HÌNH Polymorphism
1.16.1 Khai niém Tinh da hinh (Polymorphism)
- Là một khái niệm cơ bản và tương đối khó hiểu của OOP(lập trình hướng đổi
tượng).
liên quan mật thiết tới tính kẻ thừa.
Co the hiệu như : một đối tượng biết cách thực hiện đúng "phương thức” cua nó.
Với cơ chế polymorphism việc lập trình trở nên "thuận tiện” hơn.
pomtl - New CPoint(30 50)circle] New CCircle(120 89 2.7)point2 circle] 'hòan toan cho phép
point2 ToString( )
Phương thức được thực thi la 2 phương thức cua kiều đối tượng được
[ham chiều tới chứ không phải phương thức của kiểu của biến tham
[ham chiếu thuộc lớp con "tham chiếu” vào đôi tượng thuộc lớp cha >
NGUY HiEM => Phát sinh lỗi lập trình
Can phải dùng hàm chuyên đôi kiêu Ctype
38