บทที่ 4 คอนสตรัคเตอร์ (Constructor) และ การห่อหุ้มวัตถุ (Encapsulation)

คอนสตรัคเตอร์ (Constructor) และ การห่อหุ้มวัตถุ (Encapsulation)
คอนสตรัคเตอร์ (Constructor) คือการกำหนดเมธอดชนิดพิเศษที่มีชื่อเมธอดว่า New ไว้ภายใน Class หากเป็นภาษาจาวาการทำคอนสตรัคเตอร์คลาสจะใช้ชื่อเดียวกับชื่อของคลาส ซึ่งการใช้งานคลาสคอนสตรัคเตอร์ นั้นใช้ในขณะที่สร้างออบเจ็กต์จากคลาส คลาสนั้นจะสามารถส่งค่าผ่านคลาสไปกำหนดค่าเริ่มต้นให้กับตัวแปรหรือแอททริบิวต์ภายในคลาส โดยจะใช้เมธอดชนิดไม่คืนค่ากลับ (ซับรูทีน) ในการประกาศคอนสตรัคเตอร์คลาส ส่วนรายการพารามิเตอร์นั้นจะมีหรือไม่มีก็ได้
รูปแบบของการประกาศคอนสตรัคเตอร์
Public Sub New(รายการพารามิเตอร์)
                ประโยคคำสั่ง

          End Sub
        ตัวอย่างการสร้างคลาสคอนสตรัคเตอร์เพื่อกำหนดค่าเริ่มต้นให้กับเมธอดพื้นคำนวณพื้นที่สามเหลี่ยมจากโค้ดในบรรทัดที่ 2 ถึง 3 จะเป็นส่วนของการประกาศเมธอดแบบไม่คืนค่า โดยเมธอดจะมีชื่อคือ New และจะรับค่าพารามิเตอร์ ผ่านเมธอด ฐาน ความสูง เป็นชนิด Double
(1)   สร้างคลาสที่มีเมธอดคอนสตรัคเตอร์ชื่อว่า New

|1|  Public Class clsTriangle
|2
|3|      Public Sub New(prmBase As Double, prmHeight As Double)
|4|          _Base = prmBase
|5|          _Height = prmHeight
|6|      End Sub
|7
|8|  End Class        
(2) ในบรรทัดที่ 4 จะเป็นการสร้างวัตถุจากคลาสโดยมีการส่งค่าอาร์กิวเมนต์ ฐานคือ 20 และความสูงคือ 50 ไปยังออบเจ็กต์ objclsTriangle     

|1|  Public Class Form1
|2|      Private Sub btnCal_Click(....) Handles btnCal.Click
|3
|4|          Dim objclsTriangle As New clsTriangle(20, 50)
|5
|6|      End Sub
|7|  End Class


ตัวอย่างที่ 1  การสร้างคลาสคอนสตรัคเตอร์เพื่อส่งค่าเริ่มต้นไปให้กับเมธอดการคำนวณพื้นที่สามเหลี่ยม

(1)  ออกแบบหน้าจอการแสดงผลและกำหนดค่าพร็อพเพอร์ตี้ Name ดังภาพ
(2)  สร้างคอนสตรัคเตอร์คลาสสำหรับการประมวลผลพื้นที่สามเหลี่ยม
|1|  Public Class clsTriangle
|2|      Private _Base As Double
|3|      Private _Height As Double
|4|      '-------------------------------------------------------
|5|      Public Sub New(prmBase As Double, prmHeight As Double)
|6|          _Base = prmBase
|7|          _Height = prmHeight
|8|      End Sub
|9|      '-------------------------------------------------------
|10|     Public Function CalArea() As Double
|11|         Return 0.5 * _Base * _Height
|12|     End Function
|13|  End Class

บรรทัดที่ 2 และ 3 คือ ประกาศตัวแปรที่ใช้ในคลาสเป็นแบบ Private เพื่อเป็นการป้องกันจากออบเจ็กต์
บรรทัดที่ 5 ถึง 8 คือ ประกาศคอนสตรัคเตอร์คลาส โดยรอรับค่าพารามิเตอร์จำนวน 2 ตัว
บรรทัดที่ 6 และ 7 คือ การส่งค่าพารามิเตอร์ไปยังตัวแปรคลาส
บรรทัดที่ 10 ถึง 12 คือ เมธอดสำหรับการคำนวณพื้นที่สามเหลี่ยมซึ่งมีการส่งค่ากลับเป็นชนิด Double

(3)  เขียนโค้ดคำสั่งในส่วนของคลาสฟอร์ม

|1|  Public Class Form1
|2|      Private Sub btnCal_Click(....) Handles btnCal.Click
|3|          Dim objclsTriangle As New clsTriangle(txtBase.Text, txtHeight.Text)
|4|          MsgBox(objclsTriangle.CalArea)
|5|      End Sub
|6|  End Class

บรรทัดที่ 3 คือ ประกาศตัวแปรออบเจ็กต์โดยมีการส่งค่าอาร์กิวเมนต์เพื่อกำหนดค่าเริ่มต้น
บรรทัดที่ 4 คือ การแสดงผลบนกล่องข้อความจากการส่งค่ากลับของเมธอด CalArea  

(4)  รันโปรแกรมโดยการกดปุ่ม F5 แล้วป้อนค่าฐาน 90 และความสูงคือ 200 จากนั้นกดปุ่มคำนวณ โดยการแสดงผลจะได้ดังภาพ
ตัวอย่างที่ 2  โปรแกรมตัดเกรด แบบ 5 เกรด (A-E) ตามเงื่อนไขของคะแนนคือ ถ้าคะแนนตั้งแต่ 80 ขึ้นไปผลลัพธ์คือ A , ถ้าคะแนนตั้งแต่ 70 ขึ้นไปผลลัพธ์คือ B  ถ้าคะแนนตั้งแต่ 60 ขึ้นไปผลลัพธ์คือ C , ถ้าคะแนนตั้งแต่ 50 ขึ้นไปผลลัพธ์คือ D  ถ้าน้อยกว่า 50 ผลลัพธ์คือ E , และหากไม่ตรงเงื่อนไขใดๆ ผลลัพธ์คือ Error

(1)  ออกแบบหน้าจอและกำหนดค่าคุณสมบัติ Name ของตัวควบคุมดังภาพ
(2)  สร้างคลาส clsGrade.vb ลักษณะการทำงานนั้นจะรับค่าผ่านทางคอนสตรัคเตอร์คลาสและส่งค่าเกรดผ่านทางผ่านทางเมธอด doGrade() จากนั้นจึงส่งค่าให้กับตัวแปรคลาสชื่อว่า Score ซึ่งวิธีนี้จะเป็นการรับค่าผ่านทางคอนสตรัคเตอร์คลาสและส่งค่ากลับทางตัวแปรของคลาส



บรรทัดที่ 2 คือ ประกาศตัวแปรที่ใช้ในคลาสเป็นแบบ Public เพื่อส่งค่าไปยังออบเจ็กต์
บรรทัดที่ 4 ถึง 6 คือ ประกาศคอนสตรัคเตอร์คลาส โดยรอรับค่าพารามิเตอร์คะแนน
บรรทัดที่ 8 ถึง 23 คือ เมธอดสำหรับหรับการประมวลผลเกรดโดยการส่งค่ากลับเป็นชนิด String

(3)  เขียนโค้ดคำสั่งในส่วนของคลาสฟอร์ม

|1|  Public Class Form1
|2|      Private Sub btnGrade_Click(....) Handles btnGrade.Click
|3|          Dim objclsGrade As New clsGrade(txtScore.Text)
|4|          Dim grade As String = objclsGrade.Score
|5|          MsgBox(grade)
|6|      End Sub
|7|  End Class

บรรทัดที่ 3 คือ ประกาศตัวแปรออบเจ็กต์โดยสร้างจากคลาส clsGrade โดยคลาสนี้มีการรับค่า
                    อาร์กิวเมนต์จาก
txtScore.Text เพื่อนำไปประมวลผลในเมธอด doGrade()
บรรทัดที่ 4 คือ การประกาศตัวแปร และกำหนดค่าเริ่มต้นโดยการส่งค่าจากแอททริบิวต์(ตัวแปรใน
                    ออบเจ็กต์) ไปยังตัวแปร
บรรทัดที่ 5 คือ การแสดงค่าจากตัวแปร Grade ในกล่องข้อความ

4)  รันโปรแกรมโดยการกดปุ่ม F5 แล้วป้อนค่าคะแนนคือ 79 เข้าไปยังช่องรับข้อมูล จากนั้นกดปุ่มเกรดเพื่อแสดงผลเกรด B ออกทางกล่องข้อความ



ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

บทที่ 11 ตอน 3 การออกแบบรายงานด้วย Crystal Report

บทที่ 6 กระบวนการพอลิมอร์ฟิซึม (Polymorphism)

บทที่ 11 ตอน 3 การออกแบบรายงานด้วย Crystal Report Ex2