หลักการเขียนโปรแกรม ตอนที่ 5

ในบทความนี้นจะต่อเรื่องจากบทความที่แล้วในเรื่องของ low coupling ในตอนนี้จะเป็นเรื่องของ high cohesion ก่อนอื่นเราต้องทำความเข้าใจเรื่องของ cohesion กันก่อน คำว่า cohesion แปลว่าเนื้อเดียวกัน หรือ การทำงานร่วมกัน ดังนั้นถ้าพูดถึงในเชิงของ Software Engineer เราจะใช้ค่า cohesion เป็นมาตรวัด ถ้าค่า codesion สูงๆ หมายถึง code นั้น reusability และ readability ที่สูง

Cohesion จะเพิ่มขึ้นถ้า

  • เราสร้าง class แล้วให้เรียกใช้ function ผ่าน method ของ class นั้น
  • 1 class ต้องมีจุดประสงค์เพื่อทำงานอย่างใด อย่างหนึ่งเท่านั้น อย่าทำหลายอย่าง
  • method แต่ละ method ต้องทำงานให้น้อยที่สุด อย่าให้ 1 method ทำงานหลายอย่าง

ข้อดีของการทำให้ระบบของเรามี high cohesion

  • ลดความซับซ้อนของแต่ละ module ลง
  • ทำให้ระบบสามารถแก้ไขได้ง่ายขึ้น
  • เพิ่มค่า reusability ที่สูง

การเพิ่มค่า Cohesion อย่างง่ายๆคือ การเขียนโปรแกรมแบบ Object Oriented และใช้แนวคิด Seperation of Concern

หลักการเขียนโปรแกรม ตอนที่ 4

ในการเขียนโปรแกรม เราต้องรู้จักหลักการที่สำคัญอีกตัวนึงคือ Low coupling และ High cohesion ในบทความนี้เราจะพูดถึงในส่วนแรก คือ Low coupling

ก่อนอื่นมาทำความรู้จักกับ คำว่า Coupling กันก่อน Coupling หมายถึงการเชื่อมต่อ นั่นหมายความว่า การที่เกิด coupling เยอะๆ ในระบบ ของเราจะทำให้ code ติดกันเป็นก้อน เวลาทำการย้าย หรือ แก้ไขก็ทำได้ลำบาก เพราะ แต่เมื่อทำการแก้ไขส่วนใดส่วนหนึ่งก็จะกระทบกับส่วนอื่นๆที่เกี่ยวข้อง ดังนั้นการตามไปแก้ไขจะทำได้ยาก

ลักษณะของ Coupling มีอยู่ 2 ประเภทคือ

  • low Coupling หรือ loosely Coupled (แต่ละ module เป็นอิสระ ไม่ขึ้นต่อกัน)
  • high Coupling หรือ tightly Coupled (แต่ละ module จะผูกติดกันเป็นก้อน)

ประเภทของการ Coupling ที่เป็นแบบ Procedural มีดังนี้

  • Content Coupling – เกิดจากการไปทำการ access local data(เช่นตัวแปร) ของ module อื่นๆ
  • Common Coupling – เกิดจาก 2 module เรียก global variable ตัวเดียวกัน
  • External Coupling – เกิดจาก 2 module มีการ export output ในรูปแบบเดียวกัน (เวลาแก้ต้องแก้ทั้ง 2 ที่)
  • Control Coupling -เกิดจาก module นึงทำการควบคุมอีก module นึง
  • Stamp Coupling – เกิดจากการ share composite data structure
  • Data Coupling – เป็น coupling ที่เกิดจากการส่ง parameter
  • Message Coupling (low) – ถ้าจำเป็นจะต้องเกิด coupling ต้องเป็นประเภทนี้ ใช้การส่ง message หากัน

ประเภทของการ Coupling ที่เป็นแบบ Object Oriented (OOP) มีดังนี้

  • Subclass Coupling – เกิดจากการ Inheritance ซึ่งเป็นความสัมพันธ์ที่ควรจะมีให้น้อยที่สุด
  • Temporal Coupling – เกิดจากมี 2 action ทำงานใน module เดียวกัน

วิธีการทำให้เกิด low coupling หรือ เรียกว่าการ decoupling ทำได้หลายวิธี ต้องทำการศึกษาในรายละเอียดของแนวคิดแต่ละแบบ แต่โดยส่วนมากให้ยึดแนวทางตาม Design Pattern เป็นหลักจะดีที่สุด