# SOLID Principles คืออะไร อธิบายแบบง่ายที่สุด ดั่งเด็ก 8 ขวบก็เข้าใจ
เอาล่ะครับ ลองนึกถึงตอนที่เราเล่นตัวต่อ LEGO กันนะครับ การสร้างสิ่งของด้วย LEGO ให้สวยงามและแข็งแรงนั้น มีหลักการเล็กๆ ให้ได้ตาม การเขียนโปรแกรมก็เช่นกัน มีหลักการที่ช่วยให้โค้ดของเราสวยงามและแข็งแรง หลักการเหล่านั้นมีชื่อว่า "SOLID Principles" ครับ
SOLID คืออะไร? SOLID เป็นชื่อย่อของ 5 หลักการพื้นฐานในการเขียนโปรแกรมที่ช่วยให้โค้ดของเราหลีกเลี่ยงปัญหา และง่ายต่อการนำไปปรับปรุงหรือแก้ไขในอนาคต เรามาดูกันครับว่าแต่ละหลักคืออะไร:
1. Single Responsibility Principle (S) - หลักของความรับผิดชอบเดียวจินตนาการว่าคุณกำลังสร้างตัวต่อ LEGO รูปตัวหนังสือ 'A' คุณจะใช้ LEGO หลายสีเพื่อสร้างตัว 'A' มั้ยครับ? หรือจะใช้สีเดียว เพื่อให้มันเป็นตัว 'A' ที่ดูชัดเจนและไม่สับสน? ในการเขียนโปรแกรม, Single Responsibility Principle แนะนำว่าคลาสหรือฟังก์ชั่นนั้นควรมีเหตุผลเดียวที่จะเปลี่ยนแปลง (ให้ทำหน้าที่เดียวเท่านั้น)
2. Open/Closed Principle (O) - หลักของการเปิดและปิดเหมือนกับตอนที่คุณเล่นตัวต่อและคุณต้องการเพิ่มรายละเอียดใหม่ๆ ให้กับผลงานของคุณ แต่คุณไม่ต้องการทำลายสิ่งที่สร้างไปแล้ว เราจึงใช้ LEGO ชิ้นอื่นๆ มาต่อเติม นั่นคือหลักของการเขียนโปรแกรมให้สามารถขยายความสามารถได้โดยไม่ต้องแก้ไขโค้ดเดิม
3. Liskov Substitution Principle (L) - หลักของการแทนที่ลิสคอฟลองคิดว่าคุณมีตัวต่อ LEGO ตัวหนึ่งที่คุณคิดว่ามันคล้ายๆ กัน และคุณสามารถใช้แทนตัวเดิมได้โดยไม่มีปัญหา ตรงนี้ถ้าในโค้ดของเรา, หลักการนี้บอกนั่นคือคลาสลูกควรสามารถทดแทนคลาสแม่ได้โดยไม่ทำให้การทำงานของโปรแกรมเกิดปัญหา
4. Interface Segregation Principle (I) - หลักของการแยกอินเตอร์เฟสคุณเคยดูกล่องของ LEGO แล้วบางชิ้นมีหลายพันธุ์อยู่ในชิ้นเดียวกันมั้ยครับ? บางทีเราแค่ต้องการชิ้นเล็กๆ น้อยๆ แต่กลับต้องหยิบทั้งกล่องมา ในโลกของการเขียนโปรแกรม เราควรแยกอินเตอร์เฟสออกจากกันเพื่อไม่ให้โค้ดที่เราใช้อินเตอร์เฟสนั้นต้องมีหน้าที่มากเกินไป
5. Dependency Inversion Principle (D) - หลักของการแปลงความขึ้นต่อในที่สุดเมื่อคุณสร้างหุ่นยนต์ LEGO คุณไม่สามารถวางกำลังสำหรับมันที่พื้นหรือแขนของมันได้ใช่มั้ยครับ? คุณจะต้องมีฐานที่แข็งแรง ในการเขียนโปรแกรม, หลักการนี้แนะนำว่าควรทำให้คลาสระดับสูงและระดับต่ำมีความยืดหยุ่นเท่ากันและไม่ขึ้นต่อกันโดยตรง
การใช้ SOLID Principles ในโปรแกรมมิ่งช่วยให้โค้ดของเรามีความยืดหยุ่น ง่ายต่อการบำรุงรักษาและเป็นมิตรกับการเปลี่ยนแปลง ทีนี้เรามาดูตัวอย่างการเขียนโค้ดที่ใช้หลัก SOLID กันครับ:
class Animal:
def __init__(self, name):
self.name = name
def sound(self):
pass
class Dog(Animal):
def sound(self):
return "Woof!"
class Cat(Animal):
def sound(self):
return "Meow!"
animals = [Dog("Buddy"), Cat("Kitty")]
for animal in animals:
print(f"{animal.name} says {animal.sound()}")
ในตัวอย่างข้างต้น เราสร้างคลาส `Animal` ที่มีฟังก์ชั่น `sound()` แต่เราไม่กำหนดการทำงานในนั้น และมีคลาส `Dog` และ `Cat` ที่สืบทอดมาจาก `Animal` และทำการ override ฟังก์ชั่น `sound()` เพื่อให้แสดงเสียงของสัตว์นั้นๆ
คลาส `Animal` ใช้หลัก Single Responsibility Principle เพราะมีหน้าที่เดียวในการเป็นพิมพ์เขียว (blueprint) เสียงของสัตว์ และหลัก Liskov Substitution Principle เพราะคลาส `Dog` และ `Cat` สามารถใช้แทนคลาส `Animal` ได้โดยไม่เกิดปัญหาใดๆ
นี่เป็นภาพรวมและตัวอย่างเบื้องต้นของ SOLID Principles นะครับ หวังว่าคุณจะนำไปใช้ในงานเขียนโปรแกรมของคุณได้ และถ้าคุณสนใจที่จะเรียนรู้โปรแกรมมิ่งอย่างจริงจัง SOLID เป็นเพียงเรื่องเล็กๆ ที่คุณจะได้เจอในโลกของการเขียนโค้ดอันน่าตื่นเต้นนี้ครับ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: solid_principles ความรับผิดชอบเดียว หลักเขียนโปรแกรม พื้นฐานการเขียนโปรแกรม หลักการ_solid python การสืบทอดคลาส การเขียนโค้ด การเขียนโปรแกรม หลักการเขียนโปรแกรม การทดแทนคลาส การแยกอินเตอร์เฟส การแปลงความขึ้นต่อ เขียนโค้ด_python ข้อกำหนด_solid พีชคณะ_solid
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ 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