# GRASP (General Responsibility Assignment Software Patterns) คืออะไร? อธิบายแบบง่ายๆ ที่เด็ก 8 ขวบก็เข้าใจ
บทความนี้ตั้งใจเขียนขึ้นเพื่ออธิบายแนวความคิดเกี่ยวกับ GRASP หรือ General Responsibility Assignment Software Patterns ซึ่งเป็นหนึ่งในคำศัพท์ที่เราอาจได้ยินบ่อยๆ เมื่อเข้าสู่โลกการเขียนโปรแกรม แต่ก่อนอื่นเรามาทำความเข้าใจกับงานออกแบบซอฟต์แวร์หรือการวางแผนในการสร้างโปรแกรมกันหน่อย
ลองคิดถึงการสร้างบ้าน เราจะต้องวางแผนหลายอย่าง เช่น พื้นที่ใช้สอย, การกระจายน้ำหนัก, ประตูและหน้าต่างที่จะต้องมีกี่บาน หรือแม้กระทั่งจำนวนห้องน้ำ การออกแบบซอฟต์แวร์ก็เหมือนกับการสร้างบ้านนั้น คือคิดว่าแต่ละส่วนของโปรแกรมควรจะทำอะไรบ้าง เพื่อให้ทุกอย่างทำงานร่วมกันได้ดีที่สุด
GRASP หรือ General Responsibility Assignment Software Patterns ช่วยให้เรามีแนวทางในการจัดการปัญหาเหล่านั้น มันคือชุดของหลักการที่ช่วยเราตัดสินใจว่า "ใครควรทำอะไร" ในโปรแกรมของเรา กล่าวง่ายๆ คือกฏนิ้วมือสำหรับนักพัฒนาซอฟต์แวร์เพื่อออกแบบโค้ดที่ดี
ประโยชน์ของ GRASP ในการเขียนโปรแกรม
โดยทั่วไป GRASP ช่วยในเรื่อง:
- การทำโปรแกรมให้เข้าใจง่าย: ถ้าเราจัดสรรความรับผิดชอบได้อย่างเหมาะสม โปรแกรมของเราจะทำความเข้าใจได้ง่ายขึ้น เพราะทุกส่วนมีหน้าที่ชัดเจน - การปรับแต่งและขยาย: เมื่อโปรแกรมเติบโตขึ้น เราจะสามารถเพิ่มฟีเจอร์หรือแก้ไขได้ง่าย ด้วยการเพียงเปลี่ยนแปลงส่วนที่ต้องการโดยไม่กระทบส่วนอื่น - การป้องกันความผิดพลาด: ถ้าแต่ละส่วนของโปรแกรมทำเพียงสิ่งที่ควรจะทำ โอกาสที่จะเกิดปัญหาหรือข้อผิดพลาดก็จะน้อยลง
หลักการของ GRASP
GRASP ประกอบด้วยหลายหลักการ แต่เราจะย่อให้เด็ก 8 ขวบเข้าใจง่ายๆ ผ่านตัวอย่างนี้:
- Information Expert (ผู้เชี่ยวชาญข้อมูล): มอบหมายการทำงานให้กับส่วนที่มีข้อมูลที่จำเป็นในการทำงานนั้นๆ - Creator (ผู้สร้าง): สร้างวัตถุใหม่ในส่วนที่ "รู้จัก" วัตถุนั้นๆ ดีที่สุด - Low Coupling (ต่อกันน้อย): ทำให้โปรแกรมมีความสัมพันธ์กันน้อยที่สุด เพื่อที่การเปลี่ยนแปลงจะไม่กระทบกัน - High Cohesion (เกาะกลุ่มกันมาก): ทำให้แต่ละส่วนของโปรแกรมที่ทำงานเกี่ยวข้องกันมาอยู่ด้วยกันตัวอย่างง่ายๆ
พิจารณาโปรแกรมสำหรับการจัดการหนังสือในห้องสมุด มีการใช้ GRASP ดังนี้:
- Information Expert: วัตถุชื่อ 'หนังสือ' อาจมีหน้าที่เก็บข้อมูลเกี่ยวกับหนังสือ และมีฟังก์ชันสำหรับค้นหาหนังสือ - Creator: ถ้าต้องเพิ่มหนังสือใหม่ อาจมีวัตถุ 'ห้องสมุด' ที่มีหน้าที่สร้างวัตถุ 'หนังสือ' เพราะเป็นส่วนที่รู้จักข้อมูลของหนังสือมากที่สุด - Low Coupling: แยกระบบการค้นหาหนังสือออกจากระบบยืม-คืน เพื่อที่แต่ละระบบจะต่อกันน้อยที่สุด หากมีการเปลี่ยนแปลงเราสามารถทำได้โดยไม่กระทบระบบอื่น - High Cohesion: ทุกฟังก์ชันที่เกี่ยวข้องกับการประมวลผลหนังสือจะอยู่ภายในวัตถุ 'หนังสือ' เอง เพื่อให้ง่ายต่อการจัดการตัวอย่างโค้ด:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def search_book(self, keyword):
return keyword in self.title or keyword in self.author
class Library:
def __init__(self):
self.books = []
def add_book(self, title, author):
new_book = Book(title, author)
self.books.append(new_book)
def find_book(self, keyword):
return [book for book in self.books if book.search_book(keyword)]
# รหัสด้านบนแสดงถึงการใช้ Information Expert และ Creator
# ห้องสมุดสร้างหนังสือ และหนังสือรับผิดชอบในการค้นหา
การใช้ GRASP ในแบบนี้ช่วยให้โปรแกรมของเรามีการจัดระเบียบที่ดี และง่ายต่อการบำรุงรักษาในอนาคต เด็กอายุ 8 ขวบที่ฟังเรื่องนี้อาจจะยังไม่เข้าใจทั้งหมด แต่เขาจะเห็นภาพว่าเรากำลัง "สอนกฎ" ในการเล่นเกมแห่งการออกแบบโค้ดให้เป็นระเบียบมากขึ้น
โปรแกรมเขียนโปรแกรมไม่ใช่เรื่องง่าย แต่มีหลักการที่ช่วยให้เรารู้ว่าจะเริ่มต้นจากที่ไหนและยังไง ถ้าคุณรู้สึกว่าพร้อมที่จะเรียนรู้การเขียนโปรแกรมให้มีโครงสร้างที่ดีและคงทน การเรียนรู้ที่จะนำ GRASP มาใช้คือหนึ่งในการเริ่มต้นที่ดี!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: grasp general_responsibility_assignment_software_patterns โปรแกรม ออกแบบซอฟต์แวร์ ข้อมูล นิยาม ความรับผิดชอบ เกี่ยวข้อง ความเข้าใจ โค้ด information_expert creator low_coupling high_cohesion
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ 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