ทำความเข้าใจความสำคัญของการเขียนโปรแกรมตามอินเตอร์เฟซ
เมื่อดำดิ่งสู่โลกของการพัฒนาซอฟต์แวร์ โดยเฉพาะในสถาปัตยกรรมระบบ มักจะมีคำหนึ่งเกิดขึ้น: การเขียนโปรแกรมตามอินเตอร์เฟซ แนวคิดนี้ไม่ใช่แค่ทางเลือกทางเทคนิค แต่เป็นแนวทางพื้นฐานที่สามารถส่งผลกระทบอย่างมีนัยสำคัญต่อความยืดหยุ่นและความแข็งแกร่งของซอฟต์แวร์ที่คุณพัฒนา แต่หมายความว่าอย่างไร และทำไมสถาปนิกจึงให้ความสำคัญกับมัน?
ในบทความนี้ เราจะอธิบายความสำคัญของการเขียนโปรแกรมตามอินเตอร์เฟซ และพูดคุยเกี่ยวกับวิธีที่มันเปลี่ยนแปลงวิธีการออกแบบแอปพลิเคชันของเรา
“การเขียนโปรแกรมตามอินเตอร์เฟซ” หมายถึงอะไร?
การเขียนโปรแกรมตามอินเตอร์เฟซหมายถึงการกำหนดสัญญาสำหรับความสามารถที่ชั้นเรียนต่างๆ จะต้องดำเนินการแทนที่จะผูกฟังก์ชันการทำงานกับชั้นเรียนหรือการนำไปใช้เฉพาะ นักพัฒนาจะใช้อินเตอร์เฟซในการกำหนดวิธีการที่ชั้นเรียนใดๆ สามารถตั้งค่าได้ แนวทางนี้ส่งเสริมการทำให้เป็นนามธรรมและส่งเสริมสถาปัตยกรรมที่มีการเชื่อมโยงอย่างหลวม
หลักการสำคัญ
- สัญญา: อินเตอร์เฟซทำหน้าที่เป็นสัญญา ตัวอย่างเช่น หากคุณมีอินเตอร์เฟซชื่อ
IPoweredByMotor
มันอาจกำหนดวิธีการเช่นstart()
ชั้นเรียนใดก็ตามที่ดำเนินการตามอินเตอร์เฟซนี้ ไม่ว่าจะเป็นMotorizedWheelChair
,Automobile
หรือSmoothieMaker
จะต้องจัดเตรียมการดำเนินการที่เป็นรูปธรรมของวิธีการstart()
ข้อดี
ด้วยการมุ่งเน้นที่อินเตอร์เฟซแทนการนำไปใช้แบบเฉพาะ มีข้อดีหลายประการ:
- ความยืดหยุ่น: เนื่องจากชั้นเรียนต่างๆ สามารถนำไปใช้ร่วมกันในเบื้องต้นได้หลายวิธี โค้ดของคุณสามารถปรับตัวได้ง่ายต่อความต้องการใหม่หรือการเปลี่ยนแปลง ตัวอย่างเช่น หากคุณต้องการแนะนำชั้นเรียน
Drone
ใหม่ที่ใช้มอเตอร์ คุณสามารถดำเนินการตามอินเตอร์เฟซเดียวกันได้โดยไม่กระทบต่อโค้ดที่มีอยู่ - การนำกลับมาใช้ใหม่: โค้ดที่ออกแบบมาให้ทำงานบนอินเตอร์เฟซสามารถนำกลับมาใช้ใหม่ได้ในระบบหรืองานต่างๆ นี้ช่วยส่งเสริมประสิทธิภาพและการจัดการทรัพยากรที่ดีขึ้น
- ความสามารถในการบำรุงรักษา: การเปลี่ยนแปลงการนำไปใช้หรือการเพิ่มคุณสมบัติใหม่ทำได้ง่ายขึ้น เพราะคุณจำเป็นต้องแก้ไขชั้นเรียนเฉพาะเพียงชั้นเดียว แทนที่จะต้องแยกโครงสร้างทั้งหมดของแอปพลิเคชันออก
ทำไมไม่ใช้คลาสนามธรรมแทน?
บางคนอาจสงสัยว่าทำไมอินเตอร์เฟซจึงได้รับความนิยมมากกว่าคลาสนามธรรม ทั้งๆ ที่ดูเหมือนว่าทั้งสองมีวัตถุประสงค์ที่คล้ายกัน นี่คือข้อพิจารณาบางประการที่ช่วยชี้แจงทางเลือกนี้:
- ความยืดหยุ่นในการสืบทอด: ชั้นเรียนสามารถดำเนินการหลายอินเตอร์เฟซได้ แต่สามารถสืบทอดจากคลาสนามธรรมได้เพียงหนึ่งเดียว สิ่งนี้ทำให้นักพัฒนามีความเป็นไปได้มากขึ้นในการสร้างสถาปัตยกรรมที่หลากหลายและหลายมิติ
- เจตนาของการออกแบบ: เมื่อคุณกำหนดฟังก์ชันการทำงานเป็นพฤติกรรม (อินเตอร์เฟซ) แทนที่จะเป็นสายการสืบทอด (คลาสนามธรรม) จะส่งเสริมการออกแบบที่มีแนวโน้มมุ่งเน้นว่า วัตถุสามารถทำอะไรได้บ้าง แทนที่จะมองไปที่ว่าวัตถุเป็นอย่างไร
ตัวอย่างสถานการณ์
เพื่ออธิบายแนวคิดนี้ให้ชัดเจนยิ่งขึ้น ลองมาดูตัวอย่างเชิงปฏิบัติกันดีกว่า ลองนึกภาพว่าต้องการควบคุมยานพาหนะที่ใช้มอเตอร์ต่างๆ ในการจำลองซอฟต์แวร์
- คุณมีอินเตอร์เฟซ
IPoweredByMotor
ที่มีวิธีการstart()
- การนำอินเตอร์เฟซนี้ไปใช้ในชั้นเรียนต่างๆ จะเป็นดังนี้:
public class MotorizedWheelChair implements IPoweredByMotor {
public void start() {
// โค้ดในการเริ่มต้นรถเข็น
}
}
public class Automobile implements IPoweredByMotor {
public void start() {
// โค้ดในการเริ่มต้นรถยนต์
}
}
public class SmoothieMaker implements IPoweredByMotor {
public void start() {
// โค้ดในการเริ่มทำสมูทตี้
}
}
วิธีนี้คุณได้ออกแบบระบบของคุณให้โต้ตอบผ่านอินเตอร์เฟซ IPoweredByMotor
ทำให้สามารถเรียกใช้วิธีการ start()
บนวัตถุที่ใช้มอเตอร์ได้โดยไม่ต้องกังวลว่าทุกๆ ตัวดำเนินการเช่นไร
สรุป
การเขียนโปรแกรมตามอินเตอร์เฟซเป็นปรัชญาการออกแบบที่ทรงพลังที่สถาปนิกระบบพึ่งพาเพื่อสร้างระบบที่ยืดหยุ่น สามารถบำรุงรักษา และขยายตัวได้ โดยการเขียนโปรแกรมตามสัญญามากกว่าการนำไปใช้เฉพาะ นักพัฒนาสามารถทำให้สถาปัตยกรรมของพวกเขาสามารถรองรับการเปลี่ยนแปลงในอนาคตได้และเพิ่มความสามารถในการนำกลับมาใช้ใหม่ของโค้ดของพวกเขา
ครั้งต่อไปที่คุณเริ่มต้นโครงการพัฒนาซอฟต์แวร์ ให้คำนึงถึงคุณค่าของ การเขียนโปรแกรมตามอินเตอร์เฟซ อาจเป็นกุญแจสำคัญในการสร้างระบบที่แข็งแกร่งและปรับเปลี่ยนได้มากขึ้น