# OOP ในภาษา Go: การใช้ Polymorphism ใน Go
การเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming - OOP) เป็นกระบวนทัศน์ในการออกแบบซอฟต์แวร์ที่เน้นการใช้ "วัตถุ" ที่มีสถานะและพฤติกรรมด้วยกัน ภาษาโปรแกรมหลายภาษา เช่น Java, C++, และ Python รองรับแนวคิดนี้อย่างเต็มที่ แต่สำหรับภาษา Go (Golang) ซึ่งเป็นภาษาที่ถูกออกแบบมาเพื่อเรียบง่ายและมีประสิทธิภาพ จะมีแนวโน้มที่จะแตกต่างไปจากเดิม
ถึงแม้ว่า Go จะไม่ได้ถูกออกแบบมาเพื่อรองรับ OOP อย่างเต็มรูปแบบเช่นภาษาอื่นๆ แต่ Go ก็มีวิธีการของตัวเองในการจัดการ OOP โดยเฉพาะเรื่องของ Polymorphism ซึ่งหมายถึงความสามารถของวัตถุที่จะแสดงพฤติกรรมในหลายรูปแบบ
ในบทความนี้ เราจะสำรวจวิธีการใช้ Polymorphism ในภาษา Go ผ่านการใช้ Interface เพื่อสามารถสร้างซอฟต์แวร์ที่ยืดหยุ่นและมีประสิทธิภาพ
Polymorphism มาจากภาษากรีก ที่แปลว่า "มีหลายรูปแบบ" เป็นคุณสมบัติที่อนุญาตให้เมธอดเดียวกันสามารถทำงานในลักษณะที่แตกต่างกันตามบริบทของวัตถุที่เรียกใช้
ตัวอย่างการใช้ Polymorphism ในภาษาเชิงวัตถุอื่นๆ
ในภาษา OOP ทั่วๆ ไป เช่น Java หรือ Python, Polymorphism มักเกิดขึ้นผ่านการใช้ Abstract Classes หรือ Interfaces ที่ทำให้สามารถเปลี่ยนแปลงพฤติกรรมของเมธอดในคลาสลูกได้
ตัวอย่างใน Java:
interface Animal {
void makeSound();
}
class Dog implements Animal {
public void makeSound() {
System.out.println("Woof");
}
}
class Cat implements Animal {
public void makeSound() {
System.out.println("Meow");
}
}
ในตัวอย่างนี้เราสามารถเรียก `makeSound()` ผ่านสัตว์แต่ละตัวได้และจะได้เสียงที่แตกต่างกัน
ในภาษา Go วิธีใช้งานที่คล้ายคลึงกันคือการใช้ Interface ที่ Language-level
Interface ในภาษา Go
Interface เป็นสัญญาที่วัตถุต้องทำตาม โดยประกอบไปด้วยชุดของเมธอดที่วัตถุต้อง implement
ตัวอย่าง Interface ใน Go:
package main
import "fmt"
type Animal interface {
MakeSound()
}
type Dog struct{}
func (d Dog) MakeSound() {
fmt.Println("Woof")
}
type Cat struct{}
func (c Cat) MakeSound() {
fmt.Println("Meow")
}
func main() {
var animals = []Animal{Dog{}, Cat{}}
for _, animal := range animals {
animal.MakeSound()
}
}
ในตัวอย่างนี้ เราได้สร้าง Interface ชื่อ `Animal` ที่มีเมธอด `MakeSound()`. คลาส `Dog` และ `Cat` ได้ทำการ implement interface นี้ เมื่อเรา loop ผ่าน slice ของ `animals` ทุก Object จะรู้ว่าต้องทำอะไรโดยดูจากการ implement ของตัวเอง
Imagine you are building a drawing application, where you need to deal with multiple shapes such as circles, rectangles, and triangles. Each shape needs to implement the ability to draw itself on the screen.
Using Go interfaces, you can do the following:
package main
import "fmt"
type Shape interface {
Draw()
}
type Circle struct{}
type Rectangle struct{}
func (c Circle) Draw() {
fmt.Println("Drawing a Circle")
}
func (r Rectangle) Draw() {
fmt.Println("Drawing a Rectangle")
}
func PrintShape(s Shape) {
s.Draw()
}
func main() {
c := Circle{}
r := Rectangle{}
PrintShape(c)
PrintShape(r)
}
ในตัวอย่างนี้ทั้ง Circle และ Rectangle มีวิธีการ `Draw()` ทำให้ง่ายต่อการจัดการรูปทรงที่หลากหลายในโปรแกรม
การใช้งาน Polymorphism ใน Go ผ่าน Interface เป็นวิธีที่ทรงพลังในการสร้างโปรแกรมที่ยืดหยุ่นและสามารถดูแลรักษาได้ดี แม้ว่า Go อาจจะไม่มีคุณสมบัติบางอย่างที่ภาษาชั้นนำด้าน OOP มี แต่มันยังมีวิธีที่เรียบง่ายในการสร้างสรรค์ซอฟต์แวร์ที่มีคุณภาพและประสิทธิภาพ
ถ้าคุณรักในความเรียบง่ายแต่ทรงพลังของภาษา Go และต้องการพัฒนาไปยังการเขียนโปรแกรมเชิงวัตถุให้ดียิ่งขึ้น โรงเรียนสอนเขียนโปรแกรมอย่าง EPT อาจเป็นสถานที่ที่เหมาะสมสำหรับคุณในการเรียนรู้และฝึกฝนทักษะการเขียนโปรแกรมของคุณต่อไป
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM