ออบเจ็ค

6 October 2016

ในบทก่อนหน้า คุณได้เรียนรู้เกี่ยวกับการสร้างคลาสไปแล้ว ในบทนี้คุณจะได้เรียนรู้เกี่ยวกับการนำคลาสมาสร้างออบเจ็คในภาษา 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 การใช้งานคอนสตรัคเตอร์ในการสร้างออบเจ็ค และการสร้างออบเจ็คเป็นแบบอาเรย์

บทความนี้เป็นประโยชน์หรือไม่?Yes·No