สำหรับโปรแกรมเมอร์และผู้ที่ชื่นชอบการเขียนโปรแกรม เทคโนโลยีของคลาสใน VB ถือเป็นจุดที่ยากในการเรียนรู้ ในกระบวนการพัฒนาซอฟต์แวร์ขนาดใหญ่ โมดูล (Moudle) การควบคุม (Activeocx) ไลบรารีลิงก์ (Activedll) และคลาส (Classmoudle) ถือเป็นวิศวกรรมซอฟต์แวร์ที่เป็นระบบและมีประสิทธิภาพ และเทคโนโลยีคลาสเป็นพื้นฐานของเทคโนโลยีไลบรารีการควบคุมและลิงก์ ดังนั้นจึงมีความหมายมากที่จะเชี่ยวชาญทฤษฎีและวิธีการเขียนโปรแกรมของคลาส
(1) คำจำกัดความพื้นฐานและภาพรวมการใช้งานของคลาส
คลาสเป็นโมดูลโค้ดระดับสูงที่มีเมธอด คุณสมบัติ และสมาชิกข้อมูล ไม่เพียงแต่อยู่ภายในขอบเขตของโมดูลเท่านั้น แต่ยังรวมถึง Activeocx ที่ไม่มีอินเทอร์เฟซแบบกราฟิกอีกด้วย เห็นมัน เป็นที่น่าสังเกตว่าคลาสไม่สามารถสืบทอดได้
คลาสช่วยให้เราสามารถดำเนินการที่ซับซ้อนบนอ็อบเจ็กต์หนึ่งหรือหลายอ็อบเจ็กต์ได้อย่างมีประสิทธิภาพ การกระทำของอ็อบเจ็กต์เป็นวิธีการของคลาส และคุณลักษณะของอ็อบเจ็กต์คือกระบวนการคุณลักษณะของคลาส หากวัตถุของการเขียนโปรแกรมเป็นกลุ่มของสิ่งต่าง ๆ ก็เหมาะสมมากสำหรับเราที่จะใช้โมดูลมาตรฐาน ในสองกรณีต่อไปนี้ คลาสควรใช้สำหรับการประมวลผลโค้ด:
(1) สร้างวัตถุจำนวนมากที่มีคุณสมบัติคล้ายกัน
(2) ปรับปรุงการห่อหุ้มโค้ด
การสร้างคลาสนั้นง่ายมาก เมื่อเขียนโค้ด ให้เลือกรายการ "เพิ่มโมดูลคลาส" ในเมนู "โครงการ" เพื่อเพิ่มคลาสว่าง
โดยทั่วไปไฟล์คลาสจะถูกบันทึกด้วยนามสกุล .cls
(2) การใช้วิธีการแบบคลาส ;
วิธีการของคลาสจะคล้ายกับฟังก์ชันอินเทอร์เฟซของไดนามิกลิงก์ไลบรารี โดยสามารถรับพารามิเตอร์ประเภทที่ระบุจากโค้ดฟอร์มอื่นและส่งผ่านไปยังคลาสได้ โดยทั่วไปแล้ว วิธีการเรียนสามารถระบุได้ว่ามีค่าส่งคืนหรือไม่ โดยปกติจะเป็นขั้นตอนสาธารณะในชั้นเรียน พิจารณาตัวอย่างโค้ดต่อไปนี้ ซึ่งทำให้กล่องรหัสผ่านปฏิเสธการป้อนข้อมูลที่ไม่ใช่ตัวอักษร:
(1) รหัสคล้าย cls;
การตรวจสอบตัวแปร OptionExplicit'
ส่วนตัวด้วยกิจกรรม mytxtAsTextBox
'วิธีการในคลาสนี้ยอมรับและควบคุมกล่องรหัสผ่านข้อความ
DimisNUMAsบูลีน
'ตัวแปรระดับโมดูลของชั้นเรียน
PublicSubAttach(itTEXTAsTextBox)
'ยอมรับตัวแปรภายนอกเข้าสู่ mytxt
Setmytxt=itTEXT
สิ้นสุดย่อย
PrivateSubmytxt_KeyUp (KeyCodeAsInteger, ShiftAsInteger)
isNUM=(รหัสคีย์>=65)และ(รหัสคีย์<=90)
'ทดสอบว่าอินพุตคีย์บอร์ดในกล่องรหัสผ่านเป็นตัวอักษรภาษาอังกฤษหรือไม่
IfisNUM=เท็จแล้ว
บี๊บ
mytxt.Text=
'หากอินพุตไม่ใช่ตัวอักษรภาษาอังกฤษ กระดิ่งจะดังขึ้นและเนื้อหาของกล่องรหัสผ่านจะถูกล้าง
MsgBox ใส่อักขระไม่ถูกต้อง!
สิ้นสุดถ้า
Debug.Printmytxt.ข้อความ
'เนื้อหากล่องรหัสผ่านเอาท์พุทดีบัก
สิ้นสุดย่อย
'รหัสปิดชั้นเรียน'
(2) การอ้างอิงคลาส ;
คลาสที่เขียนสามารถอ้างอิงได้สองรูปแบบ วิธีแรก: ส่วนตัว (สาธารณะหรือสลัว) myCLS (ชื่อคลาสที่ระบุ) AsNewcls (ชื่อคลาสที่เขียน); ขั้นแรกให้ทำการประกาศระดับโมดูล - DimmyCLSAscls - ในโค้ดฟอร์ม จากนั้นสร้างคำจำกัดความเฉพาะ - Setmycls=Newcls ในกระบวนการโค้ดเฉพาะ อาจมีความแตกต่างในประสิทธิภาพและความเรียบง่ายของโค้ดระหว่างสองวิธีนี้ แต่ในการฝึกเขียนโปรแกรมของผู้เขียนไม่มีความรู้สึกพิเศษ อย่างไรก็ตาม ฉันชอบวิธีแรกเพราะสะดวกกว่าในการเขียน นอกจากนี้ ในตอนท้ายของโค้ด การใช้ SetmyCLS=Nothing เพื่อยกเลิกการครอบครองทรัพยากรของชั้นเรียนถือเป็นนิสัยการเขียนโปรแกรมที่ดีมาก
ในแบบฟอร์ม form1 (แบบฟอร์มมีกล่องรหัสผ่านควบคุม text1, passworldchar=*) เพิ่มรหัสต่อไปนี้:
ตัวเลือกที่ชัดเจน
PrivatemyCLSAsNewcls
'อ้าง cls
ส่วนตัวSubForm_Load()
myCLS.แนบข้อความ1
'คลาสสตาร์ทอัพ
สิ้นสุดย่อย
'อย่าลืมปล่อยทรัพยากรที่ส่วนท้ายของโค้ด
PrivateSubForm_Unload (ยกเลิก AsInteger)
SetmyCLS=ไม่มีอะไร
จบ
สิ้นสุดย่อย
รหัสในบทความนี้แสดงกระบวนการเขียนโค้ดและวิธีการเรียกวิธีการเรียน (แม้ว่าจะคล้ายกับเหตุการณ์ในชั้นเรียนมากก็ตาม) ผลก็คือหากป้อนข้อความที่ไม่ใช่ตัวอักษรลงในกล่องรหัสผ่าน ระบบจะทำเช่นนั้น แหวนและกล่องรหัสผ่านจะถูกลบออกจากข้อมูลเดิม - ปกป้องรหัสผ่านในระดับหนึ่ง
วิธีการเรียนไม่ต้องการพารามิเตอร์ใด ๆ ซึ่งคล้ายกับฟังก์ชั่นหรือขั้นตอนสาธารณะ นอกจากนี้ยังเป็นวิธีที่ใช้กันอย่างแพร่หลายในชั้นเรียน ในบทความถัดไป ผมจะพูดถึงวิธีการใช้คุณสมบัติ เหตุการณ์ และวิธีการของคลาสสำหรับการเขียนโปรแกรมแบบครอบคลุม
เราได้พูดคุยถึงทฤษฎีของคลาส การสร้างคลาส และการฝึกเขียนโปรแกรมของวิธีคลาส จริงๆ แล้ว เหตุผลหลักว่าทำไมคลาสถึงสามารถนำมาใช้กันอย่างแพร่หลายในวิศวกรรมซอฟต์แวร์ก็คือ พวกมันสามารถสรุปคุณลักษณะต่างๆ ที่จำเป็นสำหรับการเขียนโปรแกรมได้อย่างสะดวกสบาย ไม่เพียงแต่ช่วยให้โปรแกรมเมอร์สามารถเอาชนะความซับซ้อนในการออกแบบและการดีบักตัวควบคุม (ocx) และไลบรารีลิงก์ (dll) ได้ในระดับหนึ่ง แต่ยังปรับปรุงความเรียบง่ายและประสิทธิภาพของโค้ดโปรแกรมด้วย - บทความนี้จะกล่าวถึงการเขียนโปรแกรมคลาสที่สมบูรณ์รวมถึงวิธีการต่างๆ คุณลักษณะและเหตุการณ์พื้นฐาน
(1) ลักษณะและคำจำกัดความของคุณลักษณะคลาส
เช่นเดียวกับคุณสมบัติของการควบคุมมาตรฐาน คุณสมบัติคลาสอนุญาตให้ผู้ใช้กำหนดค่าภายในช่วงข้อมูลที่ระบุ และค่าเหล่านี้จะถูกแชร์โดยส่วนต่างๆ ของโค้ดภายในคลาส การได้มาและการถ่ายโอนคุณสมบัติจำเป็นต้องมีการเขียนโปรแกรมผ่านคำสั่ง PropertyLet และ PropertyGet แน่นอนว่าก่อนอื่นเราจำเป็นต้องกำหนดตัวแปรที่เกี่ยวข้องในระดับโกลบอลหรือระดับโมดูลในคลาส
(2) ลักษณะและคำจำกัดความพื้นฐานของเหตุการณ์
เช่นเดียวกับเหตุการณ์ในแบบฟอร์ม คลาสยังมีเหตุการณ์พื้นฐานสองเหตุการณ์ Class_Initialize (ทริกเกอร์เมื่อคลาสถูกโหลด) และ Class_Terminate (ทริกเกอร์เมื่อมีการยกเลิกการโหลดคลาส) ซึ่งทั้งสองเหตุการณ์เป็นแบบส่วนตัว ในความเป็นจริง เราสามารถเพิกเฉยต่อเหตุการณ์ทั้งสองนี้ได้อย่างสมบูรณ์ ตราบใดที่คุณอย่าลืมกรอกวิธีการและคุณสมบัติของคลาสให้ครบถ้วน
คลาสยังสามารถกำหนดเหตุการณ์ของตนเองได้ ซึ่งคล้ายกับรูปแบบการเขียนโปรแกรมของเมธอด ยกเว้นว่าคีย์เวิร์ด WithEvents จำเป็นสำหรับการประกาศพารามิเตอร์ และเหตุการณ์ไม่สามารถมีพารามิเตอร์ที่มีชื่อหรือพารามิเตอร์ทางเลือกใดๆ และไม่มีค่าส่งคืน
ในความเป็นจริง วิธีการและคุณสมบัติที่มีโครงสร้างดีสามารถแทนที่เหตุการณ์ของคลาสที่มีโครงสร้างที่ซับซ้อนได้อย่างสมบูรณ์
(3) ตัวอย่างการเขียนโปรแกรมของวิธีการเรียน เหตุการณ์ และคุณสมบัติ
วัตถุประสงค์ของโปรแกรมนี้คือเพื่อควบคุมการเรียงลำดับเนื้อหาของกล่องข้อความในรูปแบบตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก และแบบย้อนกลับทั้งหมดผ่านคลาสต่างๆ
เพื่ออำนวยความสะดวกในการเขียนและการเรียกใช้โค้ด ฉันจึงอ้างอิงวิธีการเขียนโปรแกรมการแจงนับในชั้นเรียน
รหัสต่อไปนี้อยู่ในคลาส Class1:
ตัวเลือกที่ชัดเจน
PrivateWithEventsmyTXTAsTextBox
'อินเทอร์เฟซพารามิเตอร์วิธีการ
สาธารณะEnumsTYLE
แอตทริบิวต์ตัวพิมพ์เล็ก Lcaseit'
แอตทริบิวต์การใช้อักษรตัวพิมพ์ใหญ่ของ Lbigit
แอตทริบิวต์การเรียงลำดับแบบย้อนกลับของ Nlogoit
สิ้นสุดEnum
'การแจงนับแบบกำหนดเอง ใช้ในการกำหนดคุณลักษณะโดยอัตโนมัติ
PrivatemvarBiaozhiAssTYLE
'ใช้การเชื่อมต่อของค่าคงที่การแจงนับ
PublicFunctiondONE()AsString'
'วิธี DONE ใช้เพื่อตั้งค่า
'ดำเนินการแปลงอักขระที่สอดคล้องกันในกล่องข้อความแบบฟอร์ม
'และส่งคืนสตริงที่แปลงแล้ว
IfmvarBiaozhi=Nlogoitแล้ว
เสร็จสิ้น=StrReverse(myTXT)
'การเรียงลำดับย้อนกลับ
ElseIfmvarBiaozhi=Lcaseitแล้ว
เสร็จสิ้น=LCase(myTXT)
'บังคับให้แปลงตัวพิมพ์เล็ก
อื่น
เสร็จสิ้น=UCase(myTXT)
'บังคับให้แปลงตัวพิมพ์ใหญ่
สิ้นสุดถ้า
EndFunction
'วิธีการเสร็จสิ้นแล้ว'
คุณสมบัติสาธารณะLetBiaozhi (ByValvDataAssTYLE)
'รับค่าที่กำหนดของแอตทริบิวต์'
mvarBiaozhi=vData
สิ้นสุดคุณสมบัติ
PublicPropertyGetBiaozhi()AssTYLE
'โอนค่าคุณลักษณะไปยังชั้นเรียน'
SetBiaozhi=mvarBiaozhi
สิ้นสุดคุณสมบัติ
PublicSubAttach(itTEXTAsTextBox)
'วิธีการเชื่อมต่อคลาส
SetmyTXT=itTEXT
สิ้นสุดย่อย
PrivateSubClass_Initialize()
'กิจกรรมนี้จะเปิดใช้งานเมื่อมีการโหลดคลาส
MsgBox สวัสดี! โปรแกรมนี้จะแสดงเทคนิคการเขียนโปรแกรมโดยใช้วิธีคลาส คุณสมบัติ และเหตุการณ์ต่างๆ!
สิ้นสุดย่อย
PrivateSubClass_Terminate ()
'กิจกรรมนี้จะเปิดใช้งานเมื่อมีการยกเลิกการโหลดคลาส
MsgBox สวัสดี! อย่าลืมกรอกโค้ดหลังจากที่วัตถุถูกเพิกถอนใน Class_Terminate!
สิ้นสุดย่อย
'รหัสของชั้นเรียนหมดแล้ว'
(4) การเขียนโปรแกรมอ้างอิงของโค้ดแบบฟอร์ม
เพิ่มตัวควบคุมข้อความ TEXT1 ตัวควบคุมรายการแบบหล่นลง COMBO1 และปุ่มคำสั่ง COMMAND1 (CAPTION=เริ่มการแปลง) เพื่อสร้าง FORM1 และปรับตัวควบคุมทั้งสามให้อยู่ในตำแหน่งที่เหมาะสม
DimmyTAsคลาสใหม่1
'การอ้างอิงชั้นเรียน
ส่วนตัวSubForm_Load()
Combo1.เคลียร์
Combo1.AddItem สตริงการแปลงตัวพิมพ์ใหญ่
Combo1.AddItem สตริงการแปลงตัวพิมพ์เล็ก
Combo1.AddItem สตริงการเรียงลำดับแบบย้อนกลับ
Combo1.ListIndex=0
'เพิ่มตัวเลือกแอตทริบิวต์ลงในกล่องรายการ
สิ้นสุดย่อย
PrivateSubCommand1_คลิก()
'เปิดใช้งานคลาสเมื่อกดปุ่มคำสั่ง'
myT.แนบข้อความ1
'การเชื่อมต่อพารามิเตอร์วิธี
SelectCaseCombo1.ListIndex
กรณีที่0
myT.Biaozhi=Lbigit
กรณีที่ 1
myT.Biaozhi=Lcaseit
กรณีที่ 2
myT.Biaozhi=Nlogoit
สิ้นสุดการเลือก
'ตามการเลือกในกล่องรายการ ให้กำหนดค่าให้กับแอตทริบิวต์ Biaozhi ของคลาส
'โปรดทราบว่าในสภาพแวดล้อมการเขียนโปรแกรม ค่าแอตทริบิวต์ข้างต้นจะถูกเพิ่มโดยอัตโนมัติ
Text1.Text=myT.dONE
'ส่งคืนสตริงหลังจากการเรียงลำดับ
สิ้นสุดย่อย
PrivateSubForm_Unload (ยกเลิก AsInteger)
SetmyT=ไม่มีอะไร
จบ
'นิสัยการเขียนโปรแกรมที่ดี
สิ้นสุดย่อย
โค้ดของเราดูกระชับมาก รู้สึกเหมือนใช้การควบคุม ซึ่งไม่เพียงแต่สามารถเรียกได้ตามต้องการ แต่ยังใช้ฟังก์ชันพร้อมท์อัตโนมัติของ VB ได้อย่างสะดวกอีกด้วย
(5) สรุปเทคนิคการเขียนโปรแกรมแบบคลาส
พูดอย่างเคร่งครัด คลาสเป็นเทคโนโลยีที่มีประโยชน์มากในการเขียนโปรแกรม VB และคลาสเหล่านี้ยังยากต่อการเรียนรู้และเชี่ยวชาญอีกด้วย เพื่อประสิทธิภาพและความชัดเจนของโค้ด คุณควรหลีกเลี่ยงการใช้โมดูลคลาส การควบคุม และไลบรารีการเชื่อมต่อเพิ่มเติม และแทนที่ด้วยโมดูลมาตรฐาน
ตัวอย่างโค้ดในบทความนี้ค่อนข้างง่าย แต่ครอบคลุมทุกแง่มุมของเทคโนโลยีการเขียนโปรแกรมโมดูล ฉันหวังว่าผู้เริ่มต้นจะเรียนรู้จากมันและโปรแกรมเมอร์สามารถพูดคุยด้วยกันได้ เราควรเชื่อว่าไม่ว่าอาคารสูงจะซับซ้อนแค่ไหน พวกมันล้วนสร้างจากอิฐธรรมดา ในทำนองเดียวกัน ไม่ว่าโครงการซอฟต์แวร์จะซับซ้อนแค่ไหน พวกมันก็ประกอบด้วยคำสั่งพื้นฐานสำหรับผู้ที่ชื่นชอบการเขียนโปรแกรมและโปรแกรมเมอร์ นักวิเคราะห์คือโปรแกรมที่สร้างด้วยคำสั่งโปรแกรมเดียวกันนั้นแตกต่างกัน -