Chương 1. LAP TRÌNH HƯỚNG BOI TƯỢNG TRONG VB.1 Giới thiệu e VB.Net là một ngôn ngữ lập trình hường đối tương (OOP object-vriented Programming ). © Irong lập trình hướng đối tương có hai khái niệm quan trong là elass(lớp) va objeet(đối tượng). © Class là một sự tông quát hóa (bỏ bớt các chỉ tiếu) của các thực thẻ trong thẻ giới thực hoặc ao.1 Class là gi? © 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). ® 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. Vidth As Double Thuốc tinh place As Integer ‘_place As Integer sub 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.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. „ 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.) Có thẻ khởi tạo các đối tương that sự từ các Class đã được khai báo. Cá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. Khuan làm bánh Nhung cải bánh that su Hình 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) - Get » Return mtenbien ~ End Get ~ 'Gán trị cho thuộc tinh tức giá trị cho bien Set (ByVal Value As String) » mtenbien=Value End 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.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).2 Xác định các thuộc tính (cần thiết, chung) của các thực thể.Minute=30,Second=23 13:45:16=>>Hour= 13.Second= 16 22:0:1 S®Hour=22,Minute=0.
(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.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() —— setTime(0, 0, 0) = End Sub a Public Sub setTime(ByVal hour As Integer, ByVal minute As Integer, ByVal second As Integer) End Sub tÀ Public Sub setHour(ByVal hour As Integer) End Sub Public Sub setMinute(ByVal minute As Integer) End Sub Public Sub setSecond(ByVal second As Integer) End Sub Hinh 1.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. Public Function toStandardTiime() As Sưing Public Function toUniversalTime() As String Hinh 1.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.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 Hinh 1.6 Minh họa các phương thức.(Class CTimev1) ft arin « Goi aTime.setHour{ 15) rin » Gọi aTime.setTime(12,80,21) ⁄ 4 ra Tine Z Hinh 1.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).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).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 Tom 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. 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.1 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.NET sẽ chon constructor thích hợp.vb + - ‘ Represents time and contains overloaded constructors. “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.
ensures that each CTime2 object starts in consistent state 11. Public Sub New() 12. End Sub‘ New 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. ByVal minuteValue As Integer) ———?' Contructor 2 23.
End Sub' New 35.' CTime2 constructor: hour, minute and second supplied 26. Public Sub New(By Val hourValue As Integer. ByVal minuteValue As Integer, ByVal secondValue As Integer) 28. 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. 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.
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.' perform validity checks on minute, then set minute 14 44. 1f (minute Value >= 0 AndAlso minuteValue < 60) Then mMinute = minute Value Else mMinute = 0 45." perform validity checks on second, then set second 47. 1f (secondValue >= 0 AndAlso second Value < 60) Then mSccond = second Value 48.
End Sub ' SctTime 31.” convert String to universal-time format $2. Public Function ToUniversalString() As String 53. 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 62.` convert from universal-time format to standard-time format 64.1f(mHour 12 OrElse mllour = 0) Then standard} four = 12 6S. Else suandardHour = mHour Mod 12 66.
End Function ' ToStandardString 69. End Class ' CTime2 \.vb Lộ ‘Demonstrates overloading constructors. 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. 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 14." invoke timel methods 15. Dim output As String = “Constructed with: " & vbCri." tmel: all arguments defaulted" & vbCrLf 17." invoke time2 methods 20.
output &= vbCrLf & _ 21," time2: hour specified; minute and second defaulted" & & Space(SPACING) & _ 22.‘ invoke time3 methods 26.” time3: hour and minute specified; second defaulted” & _ 28." invoke time4 methods 3]." time4: hour, minute and second specified” & _ 33." invoke times methods %6." timeS: hour, minute and second specified" & 38. vbCrLf & Space(SPACING) & timeS." invoke time6 methods 17 41." time6: Time2 object timed specified" & vbCrLf & 43. vbCrLf & Space(SPACING) & time6. "Demonstrating Overloaded Constructors”) 47.
End Sub ' Main 48. End Module ' modTimeTest2 Demonstrating Overloaded Constructors xi Constructed with: time1: all arguments defaulted 0:00:00 12:00:00 AM time2: hour specified; minute and second defaulted 2:00:00 2:00:00 AM time3: hour and minute specified; second defaulted 21:34:00 9:34:00 PM time4: hour, minute and second specified 12:25:42 12:25:42 PM time5; hour, minute and second specified 0:00:00 12:00:00 AM time6: Time2 object time4 specified 12:25:42 12:25:42 PM Lo 18 Ding overloaded Constructors ‘use overloaded constructors Dim time! As New CTime2() > 0 tham số được gọi Dim time2 As New CTime2(2) > | tham sé được gọi Dim time3 As New CTime2(21, 34) > 2 tham số được gọi Dim time4 As New CTime2(12. 25, 42) > 3 tham số được gọi Dim times As New CTime2(27. 99) > 3 tham số được gọi Dim timc6 As New CTime2(time4) > Copy ‘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. - Viết code trong module của Test sử dung class trên.