# Accessibility in OOP Concept และการใช้งานในภาษา Golang
Accessibility ในแนวคิดของการเขียนโปรแกรมแบบวัตถุอิง (Object-Oriented Programming - OOP) หมายถึงระดับของการเข้าถึงสมาชิก (fields และ methods) ภายในวัตถุ (object) ซึ่งมีการกำหนดกฎระเบียบหรือการจำกัดการเข้าถึง เพื่อให้การเขียนโปรแกรมมีความคงที่ ปลอดภัย และสามารถคาดการณ์ได้
ภาษาการเขียนโปรแกรม Golang หรือ Go มีการจัดการคอนเซ็ปต์ของ Accessibility ที่มีความเฉพาะเจาะจง โดยพิจารณาจากการใช้ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กเป็นตัวกำหนดค่าของ Visibility (การมองเห็น):
- ถ้าชื่อของตัวแปรหรือฟังก์ชั่นเริ่มต้นด้วยตัวพิมพ์ใหญ่ (Capitalized) หมายความว่ามีสถานะ Public นั่นคือสามารถเข้าถึงจาก packages อื่นๆ ได้
- ถ้าเริ่มต้นด้วยตัวพิมพ์เล็ก (Unexported) หมายความว่ามีสถานะ Private ซึ่งจะเข้าถึงได้เฉพาะใน package นั้นเท่านั้น
การกำหนด Access Modifiers ใน Struct และ Method
package main
import (
"fmt"
)
// Animal struct มี field ที่เป็น Public และ Private
type Animal struct {
Name string // Public เนื่องจากเริ่มต้นด้วยตัวพิมพ์ใหญ่
sound string // Private เนื่องจากเริ่มต้นด้วยตัวพิมพ์เล็ก
}
// NewAnimal สร้าง instance ของ Animal
// ฟังก์ชันนี้เป็น Public เนื่องจากเริ่มต้นด้วยตัวพิมพ์ใหญ่
func NewAnimal(name, sound string) Animal {
return Animal{Name: name, sound: sound}
}
// Speak เป็น Public method ที่เรียกได้จากนอก package
func (a Animal) Speak() {
fmt.Printf("The %s says %s\n", a.Name, a.sound)
}
func main() {
cat := NewAnimal("Cat", "Meow")
cat.Speak() // เรียกใช้ public method
}
อธิบายการทำงาน
ในตัวอย่างนี้ `Animal` struct มี field `Name` ที่เป็น public และ `sound` ที่เป็น private. `NewAnimal` function ช่วยให้สามารถสร้าง instance ของ `Animal` จากนอก package ได้ เนื่องจากเป็น public function. `Speak` method เป็น public ทำให้สามารถเรียกใช้จากนอก package เพื่อให้ `Animal` "พูด" โดยใช้ field `sound` ที่เป็น private.
Usecase ในโลกจริง
1. การสร้าง Application สำหรับการจัดการข้อมูลสัตว์ในสวนสัตว์: สามารถกำหนดสิทธิ์ในการเข้าถึงข้อมูลที่เฉพาะเจาะจง เช่น การนำ struct `Animal` มาใช้ โดยที่ข้อมูลสำคัญอาจถูกซ่อนไว้ไม่ให้เข้าถึงได้ตามปกติจากนอก package.
การทำ Encapsulation ด้วย Getter และ Setter Methods
package main
import (
"fmt"
)
// Person struct กำหนดให้ fields เป็น private
type Person struct {
firstName string
lastName string
Age int // public เนื่องจากเริ่มต้นด้วยตัวพิมพ์ใหญ่
}
// NewPerson สร้าง instance ของ Person
func NewPerson(firstName, lastName string, age int) Person {
return Person{firstName: firstName, lastName: lastName, Age: age}
}
// SetFirstName กำหนดค่าให้กับ firstName
func (p *Person) SetFirstName(firstName string) {
p.firstName = firstName
}
// GetFirstName เรียกดูค่าของ firstName
func (p Person) GetFirstName() string {
return p.firstName
}
// GetLastName เรียกดูค่าของ lastName
func (p Person) GetLastName() string {
return p.lastName
}
func main() {
john := NewPerson("John", "Doe", 30)
john.SetFirstName("Johnny")
fmt.Printf("%s %s is %d years old\n", john.GetFirstName(), john.GetLastName(), john.Age)
}
อธิบายการทำงาน
Struct `Person` มีทั้ง fields ที่เป็น public และ private. Getter และ Setter methods (`SetFirstName` และ `GetFirstName`) ช่วยให้สามารถควบคุมการเข้าถึงและการปรับเปลี่ยนค่าของตัวแปร private.
Usecase ในโลกจริง
2. การพัฒนาระบบการจัดการลูกค้า (Customer Relationship Management - CRM): โดยใช้ struct ของบุคคลที่ต้องการควบคุมการเข้าถึงข้อมูลส่วนบุคคล เช่น เลขประจำตัวประชาชน หรือข้อมูลอื่นๆ ที่เกี่ยวข้องกับความเป็นส่วนตัวโดยผ่าน getter และ setter methods.การทำความเข้าใจกับ Accessibility ใน OOP ประกอบกับการเขียนโค้ดอย่างมีโครงสร้างยังยกย่องการปฏิบัติที่ดีในการพัฒนาซอฟต์แวร์ หากคุณสนใจในการเรียนรู้การเขียนโปรแกรมแบบ OOP ประกอบด้วยการจำลองสถานการณ์จริงและเทคนิคต่างๆ ที่กล่าวมา EPT หรือ Expert-Programming-Tutor พร้อมที่จะเป็นผู้นำในการเรียนการสอน การฝึกฝน และการพัฒนาศักยภาพของคุณให้ก้าวหน้าในโลกของการเขียนโปรแกรมอย่างมืออาชีพ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: accessibility oop object-oriented_programming golang go_language encapsulation public private access_modifiers struct methods getter setter fields visibility
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com