ออบเจ็ค
ในบทก่อนหน้า คุณได้เรียนรู้เกี่ยวกับการสร้างคลาสไปแล้ว ในบทนี้คุณจะได้เรียนรู้เกี่ยวกับการนำคลาสมาสร้างออบเจ็คในภาษา Visual Basic
ออบเจ็ค คืออะไร
ออบเจ็ค (objects) คือตัวแปรที่สร้างมากจากคลาส (class instance) ออบเจ็คจะประกอบไปด้วยสมาชิกที่เป็นตัวแปร และเมธอดที่ถูกกำหนดโดยคลาส ทุกๆ ออบเจ็คนั้นเป็นอิสระต่อกัน ยกตัวอย่างเช่น รถยนต์เป็นออบเจ็ค รถยนต์จะมีแอททริบิวส์ของมัน เช่น สี ชื่อ หรือจำนวนเชื้อเพลิง ในขณะเดียวกันก็จะมีรถคันอื่นๆ อีกที่มีโครงสร้างเหมือนกัน แต่ค่าของแอททริบิวส์จะแตกต่างกัน
การเขียนโปรแกรมเชิงวัตถถูกออกแบบมาสำหรับการเขียนโปรแกรมเพื่อให้ใกล้เคียงโลกแห่งความจริงมากที่สุด โดยจะมองทุกอย่างเป็นเหมือนออบเจ็ค เนื่องจากออบเจ็คเป็นตัวแปรของคลาส ดังนั้นเราใช้คลาสสำหรับสร้างออบเจ็ค และคลาสหนึ่งคลาสสามารถสร้างออบเจ็คได้ไม่จำกัด เช่น เดียวกันแบบผลิตของรถยนต์ สามารถนำไปผลิตรถได้ไม่จำกัด
การสร้างออบเจ็คในภาษา Visual Basic
ต่อไปมาดูตัวอย่างการสร้างออบเจ็คในภาษา Visual Basic เราจะใช้คลาส Person
ในบทก่อนหน้าสำหรับตัวอย่าง
Module Module1
Sub Main()
Dim person1 As New Person()
Dim person2 As New Person()
person1.name = "Mateo"
person1.birthYear = 1988
person2.SetName("Danny")
person2.birthYear = 1983
Console.WriteLine("Name = {0}", person1.name)
Console.WriteLine("Age = {0}", person1.GetAge())
Console.WriteLine("Name = {0}", person2.name)
Console.WriteLine("Age = {0}", person2.GetAge())
End Sub
End Module
Public Class Person
Public name As String
Public birthYear As Integer
Sub SetName(ByVal s As String)
name = s
End Sub
Function GetName()
Return name
End Function
Function GetAge()
Return Date.Today.Year - birthYear
End Function
End Class
ในตัวอย่าง เราได้นำคลาส Person
มาสร้างออบเจ็ค ในการเขียนโปรแกรมสำหรับสร้างออบเจ็คนั้น เราต้องเขียนในโมดูล และภายในฟังก์ชัน Main()
เพราะเป็นที่ที่โปรแกรมจะเริมต้นทำงาน
Dim person1 As New Person()
Dim person2 As New Person()
ในสองคำสั่งนี้ เป็นการสร้างออบเจ็คจากคลาส Person
เช่นเดียวกันกับการประกาศตัวแปร เราใช้คำสั่ง Dim
สำหรับการประกาศออบเจ็ค เมื่อเราใช้คำสั่ง New
สำหรับการสร้างออบเจ็คในทันทีตอนที่มันถูกประกาศ
person1.name = "Mateo"
person1.birthYear = 1988
person2.SetName("Danny")
person2.birthYear = 1983
Console.WriteLine("Name = {0}", person1.name)
Console.WriteLine("Age = {0}", person1.GetAge())
Console.WriteLine("Name = {0}", person2.name)
Console.WriteLine("Age = {0}", person2.GetAge())
ในการเข้าถึงสมาชิกภายในออบเจ็คจะใช้เครื่องหมาย dot (.) ซึ่งอาจจะเป็นการเข้าถึงเพื่อการกำหนดค่าหรือเพื่ออ่านค่าสมาชิกของออบเจ็ค เช่นในคำสั่ง person1.name
เป็นการเข้าถึงตัวแปร name
ในออบเจ็ค person1 และการเข้าถึงเมธอดก็เช่นเดียวกัน โดยในการสร้างออบเจ็ค ออบเจ็คแต่ละออบเจ็คจะมีสมาชิกเป็นของตัวมันเอง
Name = Mateo
Age = 28
Name = Danny
Age = 33
นี่เป็นผลลัพธ์ของโปรแกรม คุณจะเห็นว่าเราสามารถนำคลาสไปสร้างได้หลายๆ ออบเจ็ค ซึ่งเป็นแนวคิดในการใช้ซ้ำโค้ด
Dim person1 As Person = New Person()
' Or
Dim person2 As Person
person2 = New Person()
เนื่องจากออบเจ็คนั้นเป็นตัวแปร คุณสามารถประกาศตัวแปรออบเจ็คและกำหนดค่าให้มันในภายหลังเช่นเดียวกันกับการประกาศตัวแปรปกติ เหมือนตัวอย่างด้านบน
การใช้งานคอนสตรัคเตอร์
ในตัวอย่างก่อนหน้าเป็นการสร้างออบเจ็คอย่างง่ายจากคลาสที่ไม่มีคอนสตรัคเตอร์ ซึ่งโปรแกรมจะเรียกใช้ default คอนสตรัคเตอร์ของคลาส ซึ่งเป็นคอนสตรัคเตอร์ว่างในการสร้างออบเจ็ค ต่อไปเราจะสร้างออบเจ็คจากคลาสที่มีคอนสตรัคเตอร์
Module Module1
Sub Main()
Dim person1 As Person = New Person()
person1.name = "Mateo"
person1.birthYear = 1988
Dim person2 As Person = New Person("Danny")
person2.birthYear = 1983
Dim person3 As Person = New Person("Sam", 1978)
Console.WriteLine("Person 1")
Console.WriteLine("Name = {0}", person1.name)
Console.WriteLine("Age = {0}", person1.GetAge())
Console.WriteLine(vbNewLine & "Person 2")
Console.WriteLine("Name = {0}", person2.name)
Console.WriteLine("Age = {0}", person2.GetAge())
Console.WriteLine(vbNewLine & "Person 3")
Console.WriteLine("Name = {0}", person3.name)
Console.WriteLine("Age = {0}", person3.GetAge())
End Sub
End Module
Class Person
Public name As String
Public birthYear As Integer
Sub New()
' The empty constructor
End Sub
Sub New(ByVal n As String)
name = n
End Sub
Sub New(ByVal n As String, ByVal b As Integer)
name = n
birthYear = b
End Sub
Sub SetName(ByVal s As String)
name = s
End Sub
Function GetName()
Return name
End Function
Function GetAge()
Return Date.Today.Year - birthYear
End Function
End Class
ในตัวอย่างเราได้เพิ่ม 3 คอนสตรัคเตอร์เข้ามาในคลาส Person
โดยคอนสตรัคเตอร์ในภาษา Visual Basic นั้นจะใช้คำสั่ง New
เป็นชื่อของมัน และคอนสตรัคเตอร์ก็คือเมธอดที่จะถูกเรียกใช้งานตอนที่เราได้ออบเจ็ค เราสามารถส่งอากิวเมนต์เข้าไปยังคอนสตรัคเตอร์สำหรับกำหนดค่าเริ่มต้นให้กับออบเจ็ค
Dim person1 As Person = New Person()
person1.name = "Mateo"
person1.birthYear = 1988
นี่เป็นการสร้างออบเจ็คโดยการใช้คอนสตรัคเตอร์แบบต่างๆ person1
เป็นการสร้างออบเจ็คโดยการใช้คอนสตรัคเตอร์หรือถ้าเราไม่ได้สร้างคอนสตรัคเตอร์ใดๆ ขึ้นมาโปรแกรมจะสร้างคอนสตรัคเตอร์นี้ให้คลาสอัตโนมัติ ดังนั้นเราจึงต้องกำหนดค่าให้กับออบเจ็คนี้ในภายหลัง
Dim person2 As Person = New Person("Danny")
person2.birthYear = 1983
Dim person3 As Person = New Person("Sam", 1978)
ต่อมาเราสร้างออบเจ็ค person2
และ person3
โดยการใช้คอนสตรัคเตอร์เพื่อกำหนดค่าเริ่มต้นให้กับมัน เพราะว่าเรามีคอนสตรัคเตอร์หลายแบบเราสามารถใช้แบบไหนก็ได้ สำหรับออบเจ็ค person2 เนื่องจากเราใช้คอนสตรัคเตอร์ที่กำหนดให้แค่ชื่อ ดังนั้นเราจึงต้องกำหนดอายุการเข้าถึงตัวแปรแบบปกติ
Person 1
Name = Mateo
Age = 28
Person 2
Name = Danny
Age = 33
Person 3
Name = Sam
Age = 38
นี่เป็นผลลัพธ์ของโปรแกรมในการใช้ของคอนสตรัคเตอร์
การใช้คอนสตรัคเตอร์จะช่วยให้เราสามารถกำหนดค่าเริ่มต้นให้กับออบเจ็คได้พร้อมกับการสร้างตัวแปร ซึ่งจะทำให้การเขียนโปรแกรมรวดเร็วและไม่ต้องกำหนดค่าในภายหลัง ซึ่งจะทำให้โค้ดดูยาวและปรับปรุงยาก
การสร้างอาเรย์ของออบเจ็ค
ตัวแปรทุกประเภทในภาษา Visual Basic นั้นสามารถเก็บในอาเรย์ได้ การใช้งานอาเรย์กับออบเจ็คนั้นคุณสามารถทำได้เพียงแค่เปลี่ยนประเภทข้อมูลเป็นคลาสที่ต้องการ มาดูตัวอย่างการใช้งานอาเรย์กับออบเจ็ค
Module ObjectArray
Sub Main()
Dim students(3) As Student
students(0) = New Student("Mateo", 80)
students(1) = New Student("Danny", 75)
students(2) = New Student("Sam", 50)
students(3) = New Student("Marco", 90)
Console.WriteLine("Math score program:")
For i As Integer = 0 To students.Length - 1
Console.WriteLine("{0} has score {1}", students(i).name, students(i).score)
Next
End Sub
End Module
Public Class Student
Public name As String
Public score As Integer
Sub New(ByVal n As String, ByVal s As Integer)
name = n
score = s
End Sub
End Class
ในตัวอย่าง เรามีคลาส Student
เป็นคลาสของนักเรียนและคะแนนของเขา และเราสร้างอาเรย์สำหรับเก็บออบเจ็คทั้งหมด
Dim students(3) As Student
students(0) = New Student("Mateo", 80)
students(1) = New Student("Danny", 75)
students(2) = New Student("Sam", 50)
students(3) = New Student("Marco", 90)
นี่เป็นการประกาศอาเรย์สำหรับเก็บออบเจ็คของคลาส Student
ที่มีขนาดเป็น 4 ต่อมาเราสร้างออบเจ็ค และกำหนดชื่อและคะแนนด้วยคอนสตรัคเตอร์ของคลาส ออบเจ็คแต่ละออบเจ็คจะมี index ของมันคือ 1, 2, 3 และ 4 ตามลำดับ ซึ่งเราจะใช้ในการเข้าถึงข้อมูลภายในอาเรย์
For i As Integer = 0 To students.Length - 1
Console.WriteLine("{0} has score {1}", students(i).name, students(i).score)
Next
นี่เป็นการอ่านค่าอาเรย์ของออบเจ็ค โดยการใช้คำสั่ง For loop โดยเราสามารถเข้าถึงออบเจ็คลำดับใดๆ ได้โดย students(index).member
โดย member นั้นจะเป็นตัวแปรที่เป็นสมาชิก เมธอด หรือ property ภายในออบเจ็ค
Math score program:
Mateo has score 80
Danny has score 75
Sam has score 50
Marco has score 90
นี่เป็นผลลัพธ์ของโปรแกรมในการใช้อาเรย์กับออบเจ็ค
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการสร้างออบเจ็คในภาษา Visual Basic การใช้งานคอนสตรัคเตอร์ในการสร้างออบเจ็ค และการสร้างออบเจ็คเป็นแบบอาเรย์