บทที่ 4 ตอน 2 การแสดงผลสูตรคูณซึ่งกำหนดค่าคงที่เลขคูณผ่านทาง Textbox
ตัวอย่างที่ 3 โปรแกรมนี้ใช้ในการแสดงผลสูตรคูณซึ่งกำหนดค่าคงที่เลขคูณผ่านทาง Textbox และให้วนรอบตามจำนวนที่ได้ระบุใน
ช่องจำนวนรอบ โดยในตัวอย่างนี้จะใช้การทำซ้ำแบบ For Next และจะแสดงผลออกทางกล่องข้อความ
(1)
ออกแบบหน้าจอและกำหนดค่าคุณสมบัติ Name ของตัวควบคุมดังภาพ
(2) สร้างคลาส clsMultipy.vb
จะมีการรับค่าผ่านทางสตรัคเตอร์คลาส
โดยในตัวอย่างนี้นี้มีการรับค่าอาร์กิวเมนต์คือ prmN (รับค่าเลขคูณ)
prmL (รับค่าจำนวนรอบ) โดยส่งค่ากลับเป็นชนิด
String ในตัวอย่างนี้มีคำสั่ง Environment.NewLine เพื่อใช้ในการตัดบรรทัดซึ่งมีคุณสมบัติเหมือนกับการ Enter
|1| Public Class clsMultipy
|2| Public Multipy As String
|3|
'-----------------------------------------------------------------
|4| Public Sub New(prmN As Integer, prmL
As Integer)
|5| Multipy = doMultipy(prmN, prmL)
|6| End Sub
|7|
'-----------------------------------------------------------------
|8| Private Function doMultipy(prmN As
Integer, prmL As Integer) As String
|9| Dim s As String = ""
|10| Dim i As Integer
|11| For i = 1 To prmL
|12| s = s & i & " x
" & prmN & " = " & prmN * i &
Environment.NewLine
|13| Next
|14| Return s
|15| End Function
|16| End Class
บรรทัดที่ 2
คือ ประกาศตัวแปรที่ใช้ในคลาสเป็นแบบ Public เพื่อส่งค่าไปยังออบเจ็กต์
บรรทัดที่ 4 ถึง 6 คือ ประกาศคอนสตรัคเตอร์คลาส โดยรอรับค่าพารามิเตอร์เลขคูณและจำนวนรอบ
บรรทัดที่ 8 ถึง 15 คือ เมธอดสำหรับหรับการประมวลผลสูตรคูณและส่งค่ากลับเป็นชนิด
String
4) รันโปรแกรมโดยการกดปุ่ม F5
ป้อนค่าเลขคูณ คือ 9 และ จำนวนรอบ คือ 5 จากนั้นกดปุ่มคำนวณ
สังเกตค่าที่แสดงบนกล่องข้อความ
การห่อหุ้มวัตถุ (Encapsulation)
Encapsulation หากแปลตรงตัวก็คือ
การบรรจุเข้าแคปซูล ชื่อนี้มีที่มาจากแนวคิดการผลิตยา ที่เป็นแบบแคปซูลบรรจุผงยาที่ประกอบด้วยสารต่างๆ
และมีบอกแค่ว่ายาชื่อนี่มีสรรพคุณอะไรบ้าง และต้องกินอย่างไร
โดยคนกินไม่จำเป็นต้องรู้ส่วนผสมและวิธีการผลิต
ในตัวอย่างที่ผ่านมาในคลาส รถ มี เครื่องยนต์
ซึ่งใช้ในฟังก์ชั่นเฉพาะของคลาส ภายนอกคลาสไม่จำเป็นต้องใช้และไม่ควรเปิดโอกาสให้ใช้
จึงไม่กำหนด Modifier ใดๆ ซึ่งการไม่เซ็ต Modifier ใดๆ จะทำให้สมาชิกตัวนั้นเป็น private โดยอัตโนมัติ
ทำให้เครื่องยนต์ของรถ ไม่สามารถถูกเรียกใช้ได้จากนอกคลาสรถ และคลาสเครื่องยนต์เองก็มีสมาชิก
private ที่คลาสรถไม่สามารถเรียกใช้ได้เช่นกัน คลาสรถก็สามารถเรียกใช้ตัวแปรหรือฟังก์ชั่นของคลาสเครื่องยนต์
ได้เฉพาะตัวที่เป็น public เท่านั้น
เหตุผลในการปกป้องข้อมูลและเมธอดนั้นก็เพื่อความเป็นส่วนตัวสามารถป้องกันจากวัตถุอื่นๆเข้ามาทำลายค่าในคุณสมบัติหรือตัวแปรบางอย่าง
เช่น ตัวแปรที่เก็บค่าเงินในบัญชีธนาคารอาจจะมีค่าติดลบได้แทนที่จะเป็นเลขเต็มศูนย์หรือเลขหรือเต็มบวก
หรือ ความกว้างและความสูงของสี่เหลี่ยมอาจจะน้อยกว่าหรือเท่ากับศูนย์
ซึ่งความจริงแล้วความกว้างและความสูงจะมีค่าน้อยกว่า
1 ไม่ได้ และอีกเหตุผลที่สำคัญคือ
การปกป้องข้อมูลให้ใช้ได้เฉพาะในคลาสหรือออบเจ็กต์ทำให้เราสามารถเปลี่ยนแปลงชนิดของตัวแปรหรือค่าในตัวแปรเหล่านั้นได้
โดยไม่กระทบกระเทือนคลาสอื่นที่ใช้คลาสของเรา
ในแนวคิดของการเขียนโปรแกรมเชิงวัตถุนั้น การที่สร้างวัตถุโดยกำหนดสมาชิกที่จะใช้เฉพาะในคลาส
และสมาชิกที่ใช้ติดต่อกับภายนอกคลาส เรื่องของ Encapsulation เกี่ยวข้องกับ Modifier อย่างมาก โดยเฉพาะกลุ่มของ Access
Modifier ซึ่งแต่ละภาษาจะมี Access Modifier
คำประกอบ (Access Modifiers) ในการเข้าใช้ข้อมูล
(1)
คีย์เวิร์ดคำว่า Private เมื่อมีคีย์เวิร์ดนี้นำหน้าการประกาศจะทำให้การเข้าถึงจากวัตถุไม่สามารถเข้าใช้คลาสได้
ตัวอย่างเช่น
|1| Public Class clsTriangle
|2| Private Base As Double
|3| Private Height As Double
|4|
End Class
เมื่อมีความพยายามในการส่งค่าไปให้กับตัวแปร
Base ซึ่งตัวแปรนี้ได้ถูกปกป้องไว้ด้วย Private
|1| Public Class Form1
|2| Private Sub btnCal_Click(....) Handles
btnCal.Click
|3| Dim objclsTriangle As New
clsTriangle()
|4| objclsTriangle.Base = 50
|5| End Sub
|6|
End Class
ก็จะพบกับการแจ้งเตือนข้อผิดพลาดดังนี้
“WindowsApplication1.clsTriangle.Base' is not accessible in this context because it
is 'Private'.”
(2)
คีย์เวิร์ดคำว่า Public เมื่อมีคีย์เวิร์ดนี้นำหน้าการประกาศค่าใดๆ
จะเป็นการอนุญาตให้คลาสอื่นใช้ได้มักจะให้เมธอดมีการเข้าใช้แบบ Public ซึ่งสามารถกำหนดค่าและเข้าถึงจากคลาสหรือออบเจ็กต์อื่นได้ทุกกรณี
ตัวอย่างการประกาศเช่น
Public student As String
Public age As Integer
(3) คีย์เวิร์ดคำว่า Protected การเขียนโปรแกรมโดยมีคำประกอบนี้จะมีการปกป้องการเข้าถึงตัวแปรหรือเมธอดเช่นเดียวกับแบบ
Private แต่ในกรณีนี้จะใช้เมื่อมีการถ่ายทอดคุณสมบัติจากคลาสแม่ไปคลาสลูก
ตัวแปรและเมธอดจะถ่ายทอดไปยังคลาสลูกด้วย แต่ยังคงมีการปกป้องการเข้าถึงจากวัตถุเช่นเดิม
(ตัวอย่างการใช้งานคีย์เวิร์ดนี้จะขอกล่าวอีกครั้งในเนื้อหาการสืบทอดคลาส)
ตัวอย่างการประกาศเช่น
|1|
Public Class clsTriangle
|2| Protected _Base As Double
|3| Protected _Height As Double
|4| End Class
|2| Protected _Base As Double
|3| Protected _Height As Double
|4| End Class
การประกาศตัวแปรค่าคงที่ (Constant)
การประกาศตัวแปรค่าคงที่ใน VB.NET เราจะใช้ Const เป็นการบอก Compiler ว่านี้คือตัวแปรที่ไม่สามารถเปลี่ยนแปลงค่าได้ ซึ่งในการประกาศให้ตัวแปรลักษณะนี้
จะมีผลทำให้ตัวแปรดังกล่าว
ไม่สามารถกำหนดค่าใหม่หรือเปลี่ยนค่าให้กับตัวแปรดังกล่าวหลังจากประกาศได้อีก
รูปแบบ
Public Const ตัวแปร
As ชนิดข้อมูล =ค่าคงที่
ตัวอย่าง
Public Const pi As Double = 3.14
Public Const Lru As String = “Loei Rajabhat University”
Public Const pi As Double = 3.14
Public Const Lru As String = “Loei Rajabhat University”
ตัวแปร pi จะใช้ในการคำนวณค่าพื้นที่ของวงกลมดังนั้นจะมีค่าได้เพียง 3.14
เช่นเดียวกันกับตัวแปร Lru เนื่องจากเป็นตัวย่อของมหาวิทยาลัยราชภัฏเลย
ดังนั้นค่าที่สามารถส่งไปได้จะมีเพียง “Loei Rajabhat University” เท่านั้น
ทดลองกำหนดค่าให้กับตัวแปรค่าคงที่ โดยการส่งค่าคำว่า “teacherroom.net” เข้าไป
Public Const Lru As String =
“Loei Rajabhat University”
Lru = “teacherroom.net”
Lru = “teacherroom.net”
โดยการส่งค่าคำว่า “teacherroom.net” เข้าไปจะพบกับการแจ้งเตือนข้อผิดพลาดคือ
“Constant cannot be the target of an assignment.”
“Constant cannot be the target of an assignment.”
สรุป
1. ความสามารถของวัตถุถูกเขียนไว้ในเมธอดแบบ Public
2. ผู้ใช้สามารถใช้งานวัตถุโดยไม่ทราบว่าวัตถุนั้นมีการทำงานอย่างไร
ถ้าโปรแกรมถูกเขียนโดยใช้หลักการ information hiding
3. ลักษณะของวัตถุจะเก็บไว้ในแอททริบิวท์หรือตัวแปรวัตถุ
4. แอททริบิวท์มักจะมีการเข้าใช้แบบ private
เพื่อป้องกันไม่ให้คลาสอื่นเข้ามาแก้ไขเปลี่ยนแปลง
5. คลาสอื่นไม่สามารถการเข้าใช้เมธอดหรือแอททริบิวต์ที่เป็น private
6. เมธอดในคลาสนั้นสามารถเปลี่ยนแปลงแอททริบิวต์ที่เป็น private ได้
7. ทุกคลาสสามารถเข้าใช้เมธอดหรือแอททริบิวท์ที่เป็น public
อ้างอิง
http://wiki.thaigamedevx.com/index.php?title=Class
ความคิดเห็น
แสดงความคิดเห็น