LỜI CẢM ƠN -Em xin chân thành cảm on đến tắt cả các thầy cô trong Khoa Toan ‘Tin da tin tỉnh chỉ bao truyền dạt những kinh nghiệm kiến thức cho chúng em để chúng em cỏ được những cơ x
Trang 1
TRUONG ĐẠI HỌC SƯ PHẠM TP.HCM KHOA TOAN - TIN
BO MON TIN
HQ VA TEN: NGUYEN VAN THUAN
TÊN ĐÔ ÁN: LẬP TRÌNH HƯỚNG _ DOI TUGNG TRONG VB.NET VA MO
Trang 2LỜI CẢM ƠN
-Em xin chân thành cảm on đến tắt cả các thầy cô trong Khoa Toan ‘Tin da tin tỉnh
chỉ bao truyền dạt những kinh nghiệm kiến thức cho chúng em để chúng em cỏ được những cơ xơ kiến thức cần thiết hoàn thành đỗ án này Thực hiện đồ ân tắ nghiệp à một dịp tố để chúng em có thể rên luyện kỉ 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 diện Rên luyện tỉnh tư chủ sàng tạo vành thần trách nhiệm trong công việc, Phất huy tỉnh độc lập, xing 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 hun
-ÂĐ sở được thình qua tối đẹp cho hôm nay và mai sao, em xin chân thành cảm on
sỗ đã tận tỉnh giang dạy hướng dẫn em trong suỗt năm học
"Xin chân thành cảm ơn thẫy Lê Minh Trung đã tận tỉnh hướng dẫn, tạo điều kiện cho eo trong suất thôi gian thực hiện đổ án tốt nghiệp Nhờ thầy ma em đã có lập trình hướng đổi tượng trong vb.net và mô được những kiến thức quý báo
Trang 313 Bài Toán CầnthiếLkế| làp tượng trang thi diém CTime 13.1 Xie dinh ed tp thue the ed tit ke 7 7
132 Xée dinh ede (ci thi, chúng) của các thực thể 1
133 Case study (Thiét ké Class CTime 8
1.34 Xác định consuclorphương thức xây đựng) và các phương thức khác hiên
un i i i gi cho instance bông Ì.355 — Xác dịnh các hành động có hệ thực thì ôi thực thẻ đi ượng 9
Reuse ability && RAD (Object Browser) x
Trang 4W182 Uudiém ia Inert?
L187 Cath kai Bio KE tha ong NEL
LISR - Sơđổ kế thừa
1159 Proeeted vi Friend (Access modifier
1.1310 Mộtsểđiểu nổi thêm
L.16 ` TINILDA HINH Polymorphism {46K if Tah d inh Pyar)
1162 Tinh da hinh trong cude sng doi thực
1 nk Copan ugmg & Lapev the Abst & Concrete Cass Lind Vidy
L168 Tiekhoa MustOveride
1166 Nottheritable Class(NotOveridable Method)
1467 Gin din erie
B14 Các phương thức Phương thức khởi tạo 3g ”
Trang 53.1 Bign dich thanh StyledTextArea dll 22 Nig yin vo ig dng
2.1 Cit bute nhing StyledTextArea vio ding dung
33 Thiết v ph va viết code: a3 ¢ form chinh: Ung đạng muinh họa
'Cưhht tư ng Sạn
2.1 Cae chire ning trong menu Fil
3432 Các chức năng trong menu Edit
3.323 Cac chite ning trong menu Format
Trang 6LẬP TRÌNH HƯỚNG ĐÓI TƯỢNG TRONG VB.NET VÀ MÔ HÌNH MVC
+ OOP thươ ding class dé bao boc (che
xariables (dữ liệu) và method (phương thức) chỉ ti encapsulate) cba instance 1.12 Ví dụ
+ Giả xử ta cần "cải đặt” các hình chữ nhật trong một chương trình Ta sẽ phẩntích tìm ra những thuộc tỉnh và hành động chung nhất mà một hình chữ nhật nối shúng phải có Tạ sẽ "bao bọc”."che giấu chỉ tiết” thuộc tỉnh và hành động này trong mat lp Class Rectangle
Trang 7hub SetWidth(value As Double)
tunction Area() As Double
Sụb MoveTo(X As Inleger.Y As Integer)
tub Draw(LineColor As Inleger.BackColor As Integer)
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ỗ aceess modifier là Publie
và phương thức Publie gọi là "giao điện” của một lớp
1.1.4 Tôm lại
Cluss là khuôn mô hình tạo nên đối ương
Classis ao bọc cả dữ liệu (instanee variable data member,property lẫn hành động (method.i
inction member.behavior )
“Có thể khởi tạo các đổi tương thật sự từ các Class đã dược khai báo
Trang 8ắc thành viên (dữ liệu phương thie ) ¢6 acess modifier public
1.2 Khai báo lớp VB.net
[Private|Protected|Public] Class <Tén Class>
Trang 9Mùi 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ể
13:45:16 Hour=13,Minute~45.Second= 16
22:0:1 9 Hour=22,Minute=0,Second=1
Trang 10Pai Seth Mane) End Sub ub biel minute Ae rng?) End Sub Phe SubsetSecon&Vloncond htntoge) End Sub Hình L3
Trang 11Public Class CTimevi
=_ Biển dịch lớp thành tập tin thu vign ‹dH
= _ Lâm thễ não sử dụng class trong các ứng dung?
inh 15
Trang 12+ Gol aTime.setHour(15) ⁄ ati + Gol aTime.setTime(12,80,21)
Hình L7
Trang 13+ Sự tách biệt mình bạch giữa "phí sử dụng client” và "phía cung cấp server" làm, cho chương trình:
Mềm dẻo, nh hoatdé thay d6i hom,
Vige ái sử dụng các class cho phép RAD (Rapid Application Development) lam ting ki tăng sản x ft (productivity)
Hệ thống chương trình là sự tương tác của các Objet độc ip hoat ding dũng dễ lập trình, báo tì và gỡ rỗi
+ _ Sự tách biệt mình bạch giữa "phía sử dụng lien và "phía cụng cắp srxer" làm, cho chương trình
+ Mam dễo nh họa đễ thay đổi hơn
+ Vige ải sử đụng các class cho phép RAD (Rapid Application Development) lim ting kha nding sin xuit (productivity), 1S Hoat vi Class
“Các thành viên (dữ liệu & phương thức) của một Class có hoạt vì Cluss và có thể được truy cập bởi các thành viên khác của Class
“Các thành viên Publie có thể được tham chiều từ các đổi tương eta Class, + _ Các biển của các method cỏ họat vi cục bộ trong method (block scope) Truy c 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
ua Class sé gay ra một lỗ lập trình,
VD: Trong Client sir dung Class Time
Dim aTime As Time = few Time()
aTimemHour=7 “gay ra lỗi
Trang 14
16
1.6
Constructor (Phương thức khởi tạo )
Chúng ta dùng Constructor để khởi tạo giá trị cho cắc instanee variable,
Constructor ty động được gọi (invoke) khi có một đổi tượng được khởi tạo (instantiate) tir Class
Nếu không cỏ construetor nào trong khai bảo của Clas thị VB.NET s@ ding
«onstruetor mặc định (defalut constructor) va khai tạo giả trị ngằm định cho các
instance variable,
Trong một Class có thể có nhiều constructor (averloaded constructors) cung,
'onstructor (Overload construetor
sắp nhiễu cách đ khối ạo đối tượng,
(Cae consrutor có cùng tên New chỉ khác nhau danh sich các tham số, Các conamiclor là Sub và không trí về gỉ ea
Túy thuộc vào danh sách đổi số cung cấp lúc khởi tạo đổi tượng VB.NET sẽ chọn construelor thích hợp,
2 VíDụ
Fig, Ro: CTime2.vb
Represents time and contains overloaded constructors, Class CTime?
Trang 155 “Ucelare Integers for hour, minute and second
vate mllour As Integer ‘0-23
vate mMinute As Integer "0 - 59
vate mSecond As Integer " 0 - 59
9 “constructor initializes each variable to zero and 10.” ensures that each CTime? object stars in consistent tate
11 Publie Sub New)
12.SetTimed)
13.End Sub,
14° Cime2 constructor: hour supplied:
15." minute and second default to 0
16, Publie Sub New(ByVal hourValue As Integer) 17.Setlime(hourValue)
18, End Sub‘ New
19." Cig
constructor: hour and minute supplied: 20," second detaulted to 0
21 Publi Sub New(ByVal hourValue As Integer
22, ByVal minuteValue As Integer)
28 SetTimethourValue, minuteValue)
24, End Sub" New
Trang 1626 Publie Sub New(ByVal hourValue As Integer _
27 ByVal minuteValue As Integer, ByVal secondValue As Integer)
28, SetTime(hourValue, minuteValue, secondValue) 30." CTime? constructor: another CTime2 object supplied
31 Public Sub New(By Val timeValue As CTime2)
33 SetTimetimeValue mHour, tìmeValue.mMinute, timeValue mSecond) 34." set new time value using universal time
35." pertrm validity checks on data;
36." set invalid values to zero
37 Public Sub Set ime(Optional ByVal hourValue As Integer
38 Optional ByVal minuteValue As Integer ~ 0, 40." perform validity checks on hour, then set hour 4L-If (hourValue >= 0 AndAlso hourValue < 24) Then
Trang 1758, im format As String = "{0):(1:D2)=(2:D2)"
‘59 Dim standardHlour As Integer
60," determine whether time is AM or PM
61 If mllour < 12 Then suffix = " AM"
Trang 18(03 convert from universal-time format to standard-time format 64.1 (mHlour 12 OrBlse mllour = 0) Then standandllour = 12
ind Function * ToStandardSiring
End Class’ CTime2
L "Fig, 8.5: TimeTest2.vb
Demonstrates overloading constructors
3 Imports System Windows.Forms
4, Module mod TimeTest2
‘ub Main()
6, ‘use overloaded constructors
Dirm time! As New CTime2()
8 Dim time? As New CTime2(2)
9 Dim times As New CTime2(21, 34)
10, Dim times As New CTime2(12,
MD Dim time6 As New CTime2(timed)’ use timed as initial value timeS As New CTime2(27, 74,99) 5.42)
13 Const SPACING As Integer = 13 spacing between output text
Trang 19im output As String ~ "Constructed with: * & vbCrI.1 a _
timel; all arguments defaulted” & vbCrL& _
17 Space(SPACING) & time] ToUniversalString() &
18 vbCrl.1 & Space(SPACING) & time] ToStandardString() 19." invoke time? methods
20, output &= vbCrLf & _
ime2: hour specified; minute and second defaulted” & _
22 vbCHL & Spaee(SPACING) & _
23.time2.VoLniversalString() & vbCrLf & Space(SPACING) & _ 24-time?:FoStandardString)
invoke time3 methods
26, output &= VOCHLE &
27." time: hour and minute speci
28 VaCHL.£& Space(SPACING) & time3.ToUniversalString() & _
39 xhCH.E& Space(SPACING) & time3.ToStandardString()
med: hour minute and second specified” & _
33 vbC#LL & Space(SPACING) & times ToUniversalString() & _ 1M vbC#L & Space(SPACING) & timet.ToStandardString() 3S." invoke timeS methods
1X6 output &= vbCHL ER _
¥7." time!
hour minute and second specified” &
38 vbCrL.L & Space(SPACING) & timeS.ToUniversalString() &
39, vbCr1 & Space(SPACING) & timeS.ToStandardString() 40." invoke time6 methods
Trang 20+
4
46
48
time: Time2 object timed speci
Space(SPACING) & time6.ToUniversalString() & xhCrl.Ÿ& Spaee(SPACING) & time6 ToStandardString()
" & vOCrL I & MessageBox,Show(ourput
“Demonstrating Overloaded Construct
End Sub’ Main
End Module‘ modTimeTest2
Trang 21* use overloaded constructors
Dim time} As New CTime2() > 0 tham sé duge goi
Dim time? As New CTime2(2) > | tham sé được gọi Dim time} As New CTime2(21, 34) > 2tham sé duge gọi Dim timed As New CTime2(12, 25,42) > 3 tham số được gọi Dim time6 As New CTime2(times) > Copy
"use times as initial value
Minh hga overloaded constructors
Tạo ra một Console appication Test
- Thêm vào ứng dụng Test class CTimev2 với 5 construetors có chữ kí khác nhau + Viễt code trong module của Test sử dụng class trên
Nhược điểm của instance variables
+ Aeeess Modifier của các instance variables nên là Private.Khỏng thể truy cập &: cắn giả trị cho các instance variables ciia mot déi tượng một cách trực tiếp
+ Chang ta ao ước có thể dùng cú pháp anObjectinstanee, variable để truy cập Sede sắn gỉ
1.7 Thuộc tính của Class
`VR Net khắc phục điều này bằng khải niệm Property(thuge tinh) Mot property gắn với một instance variable và cung cấp: Get accessor cho phép truy cập giá trị
Set accessor cho phép thiét lip gia r
Trang 22Trong một số trường hợp thiết kế class sẽ rô rùng hơndiện hơn nếu class cố
xiên dữ liệu tham chiếu tới đối tượng thuộc lớp khác thải
5 Private mFirstName As String
7 Private mBirthDate As CDay ' member object refereni
Trang 2312 mLastName -lastNameValue
Day instance for employee birthday
14, mBirthDate = New CDay(irthMonthValue, bithDayValue, birth YearValue) 15." create CDay instance for employee hire date
1s milireDate ~ New CDay(hireMonthValue hireDay Value hireYearValue)
17 End Sub! New
18 "return employee information as standard-format String
19, Public Funetion ToStandardString() As String
20 Return mLastName & "," & mFirstName & "Hire:
& millireDate‘ToStandardString() & " Binhday: "&mBithDate.ToStandardString()
21, End Funetion * ToStandardString
22 End Class ' Cemployee
Trang 24* Encapsulates month, day and year
Imports System Windows.Forms
Class CDay
S Inherits Object
6 Private mMonth As Integer 1-12
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
1, Publie Sub New(ByVal monthValue As Integer
12, ByVal day Value As Integer, ByVal yearValuc As Integer) 13." ensure month value is valid
Ie(monthValue > 0 AndAlso monthValue
| S.mMonth = monthValue
Else
16.mMonth = |
17." inform user of error
18, Dim errorMessage As String = "Month invalid Set to month 1."
Trang 2523 End Sub’ New
24." confirm proper day value based on month and year
te Function CheckDay(ByVal testDay Value As Integer) As Integer
26 Dim daysPerMonth() As Integer = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30 31 39.31)
27.If (testDay Value > 0 AndAlso
testDayValue <> daysPerMonth(mMonth)) Then
28 Return testDayValue
29.End If
30." check for leap year in February
31 If (mMonth = 2 AndAlso testDayValue ~ 29 AndAlso _ mYear Mod 400 = 0 OrElse mY ear Mod 4 = 0 AndAlso mYear Mod 100 <> 0) Then
32 Return testDayValue
Ele
Trang 2644 Dim errorMessage As String,
“day * & testDDayValue & “invalid Set to day 1."
35, MessageBox Show{erromMessage, MessageBoxButtons OK MessageBoxleon Error)
36 Return "leave object in consistent state 37-End If
38 End Function ' CheckDay 39." ereate string containing month’day/year format
40 Public Function ToStandardString() As String
41, Return mMonth & "7" & mDay & "7" & mYear
42 End Function ToStandardString
43, End Class ' CDay
Trang 274
Demonstrate an object with member object reference Imports System Windows Forms Module modCompositionTest Sub Maino)
Dim employee As New CEmployee(
"Bob", “Jones”, 7 24, 1949, 3, 12, 1988)
6, MessageBox Show(employee.ToStandardString() Testing Class Employes
7 End Sub’ Main
End Module‘ modCompositionTest
Jones, Bob Hired: 3/12/1968 Birthday: 7/24/1949
Lm
Hình L9
Trang 28+ Trong mat class e6 thé ding tham chiều Me để tham chiếu tắt cả các thành vign (Public/Private) cia nd
“Tham chiều Me tham chiéu chinh elass (chính xác hơn đối tượng khởi tạo từ class
1.10 Garbage Collector
Constructor New( ) đùng để khởi tạo và cấp phát bộ nhớ cho các đồi tường Khi một đổi tượng trong bộ nhớ không côn được tham chiếu đến nữa thì sao”? Chúng a cô phải viết mã giải phống bộ nhớ và tài nguyên như trong C®&C ¡ VB.Net the hign gidi phông bộ nhớdấi nguyên một cách tự động bằng kĩ thuật Garbage Collector
Ci dinh ki Garbage Collector s8 được kích họat gom lại và giải phóng dối tượng không côn ding nba
Dua hod tan và G không giữ là gii pháp tốt Một số ti nguyễn như Network Conneston Siream nm dage gi phông chủ động dưỡng mính (im hiểu sau)
1.11 Shared Member(Thanh vién được chỉa s
1.1.1 Giới Thiệu
Trong lập trình, đôi khi ta can biết số đối tượng đã được khởi tạo của một class
đang tôn tại Thành viên dữ liệu,biển số đổi tượng nay , phải giống nhau
cho mọi đối tượng
'Cách tốt nhất là cải đặt thành viên mCount là một thành viên được chia sẻ bởi
mọi đối tượng (shared member) Thành viên mCount sẽ được cập nhật giá trị mỗi khi cỏ đổi tượng được khởi tạo hay hủy
Trang 29L "Fig 8.17 CEmployee3.vb
2 *Class C:mployee3 uses Shared variable
3, Publie Class CE:mployce3
4 TnheritsObjeet
5 Private nFirstName As String
6 Private nl.astName As String
7." numbe:of objects in memory
8 PrivateShared mCount As Integer- Chia sé bai tt ced
15 End Sub’ New
16." finalizer method decrements Shared count of employees
17, Protected Overrides Sub Finalize()
Trang 3019, Console WriteL ine ("Employee object finalizer: " & mFirstName &
& mLastName & ": count =" & mCount)
20, End Sub! Finalize
25 End Property ’ FirstName
26, retuen last name
27, Public ReadOnly Property LastName() As String Get
Trang 3134 End Get
45, End Property * Count
36, End Class ' CEmployee3
inh chat Shared Member(Thanh vién duge chia sé )
1.1143
Thường ding Shared Data Member cho những thành viên chúng cho mọi đổi tượng của Class (mCoun)
Tắt cả các đối tượng chia sẻ chung một shared member
Public Shared member ei thể được ruy cập thậm chi khi chưa có di tượng nào
ng qua cú pháp,
sua Class được khởi tạo th
Class Name SharedMember
“Cổ thể khai bảo Shared method,
Trong shared method không thể truy cp non-shared member 1.12 Const va ReadOnly Data Member
Dung cho những thành viên dữ liệu không thay dỗi giá trị thành viên Const hoặc ReadOnly khéng thay dồi giá trị khi được khởi tạo (cung cắp giá tị)
NỔ lục thay đổi giá trị của thành viên Const hoặc ReadOnly sẽ dẫn tới một lắp trình
1, ° Bíg, 8.15: CCireleConstanls.vb
2 * Encapsulate constants PL and radius
Trang 324 "PL is constant data member
5 Public Const PI As Double = 3.14159
6 "radius is uninitialized constant Palblie RendOnly RADIUS As Integer
8, “constructor of elass CCireleConstants Public Sub New(ByVal radiusValue As Integer)
10 RADIUS = radiusValue End Sub" New
12, nd Class’ CeircleConstants
* Fig, 8.16: ConstAndReadOnly.vb
* Demonstrates Const and ReadOnly members Imports System, Windows.Forms Module modConstAndReadOnly Sub Maing)
Dim random As Random = New Random() Dim circle As CCireleConstants = _ New CCireleConstants(random.Next( 1 20))
Trang 339, Dim ouput As String = "Radius =" & radius & vbCrLf
10 & "Cireumference = "+ 8
1 circle RADIUS * 2 # CCireleConstants.P1) ing Format("{0:N3}"
12 MessageBox Show(output, “Circumference”,
m khác biệt giữa Const && ReadOnly ?
+ Khi ndo ding Const? Khi ndo ding ReadOnly? Const thing số chung cho Class
ReadOnly:thanh vign dt iệu khỏi tạo giá trị 1 lần trong constructor Now( ) && khong bạo giờ thay đối
Trang 34+ Class được biên dich thanb file dll (dynamic link library), ¢6 thé ti sir dung trong các ứng dụng khác
ốt,đã được kiểm tra cin thin cho Tải sử dụng các đọan mã
phép(RAD:Rapid App!
+ Con é ding Object Browser để xem một class phii hyp với nhu cầu hay Development),
không”
1.14 Namespace + Mi class sẽ gẵn với một namespaee
Được tổ chức theo cầu trúc phân cấp
Tránh va chạm tén (name collision)
Không có hai clas trong cũng namespnse có công tên Mai class trong namespaee khác nhau cỏ thể có cùng tên + System, Windows, Forms TextBox
4 MyDesign MyTools TextBox
iNH KE THUA (INHERITANCE)
Trang 35cho phép elass mới “kể thừa” töan bộ instanee variables thuộc tỉnh & phương thức của class cũ
Xuất ved
Hình tì!
1.182 Ưu điểm của Inheritanee?
“Cho pháp tải sử dụng class đã được kiểm nghiệm họat động hiệu qua Tải ử dụng, Tiết kiệm thời gian
Reusability RAD
1 âm rõ rằng cầu trúc đối tượng lập trình
115.3 Nhược điểm của Inheritance
+ Class din suit (derived elass) có thể kế thừa những thuộc tính dinh chất không mong muôn
"Người thiết kể class phải đảm bảo thiết kể ra những class vữa đỏ (Class din xuất có thể không hài lòng về một phương thức thuộc tính nổ được kế thừa
Trong class dẫn xuất có thể định nghĩa li (cười lên - overidden) thuộc tính,phương thức của elass cơ sở,
Trang 36CClast B kế thừn trực tiếp class A
Class B Ia class din x class Á là class cơ sở Class B là elass on(subslass)elass A là elass cha(supperelas) Mỗi đối tượng của B cũng là đối tượng của A (ISA relationship) (ngược lại không đúng)
Trang 37Base class Detived classes
CUndergraduatestudent CShape €Cirele CTriangle
CRectangle
CRemeTmprovenentLoan CMortgageLoan
CBtafEMenber CAccount €ChackingAccount CBavingeAccount
1.157 Cách khai báo kế thừa trongVB.NET
Trang 38Người ta thường biểu diễn sơ đồ kế thừa ở dạng cấy
Các đối tượng tham chiéu base class && derived class Thành viên Private cua lap cơ sở chỉ có thể được truy cập trong thân của lớp cơ Protected cụng cấp khả năng truy cập ở mức giữa Public va Private hành viên Proteeted của lớp cơ sở có thể truy cập bởi các thành viên khác của hase class vi derived class,
Trang 39Mi class dễu được kế thửa từ System.Object
Muốn t ng class dẫn xuất có thể cuối lên (overidden) một phương thức của glass cơ sở thì cần phi khai bảo class co sở với từ khóa Over rong System.Objeet những phương thức có thé cưỡi lên Public Overridable Function ToString() As String,
able tim
Trang 401.16.1 Khải niệm Tính đa hinh (Polymorphism) 1à 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)
1
Co thé hiểu như : một đối tượng biết cách thực hiện đúng "phương thức” cua nĩ én quan mật thiết tới tính kể thừa
sn” hơn,
"Với cơ chế polymorphism việc lập trình trở nên "th
pọntl ~ New CPoint(30, 50)
cirelel New CCirele(120 89.2.7)
point? cirelel 'hưan tưan cho phép
point2.ToString( )
kiểu đối tượng được Phương thức được thực thỉ la 2 phương thức cự
Tham chiếu tởi chứ khơng phải phương thức của kiểu của biển tham, Chiếu _> Tính đa hình
tiến trường hợp xây ra