วิธีการแบบนามธรรมเป็นคุณลักษณะเฉพาะในภาษาการเขียนโปรแกรมเชิงวัตถุ เช่น Java, Python และ C# วิธีการเหล่านี้ได้รับการประกาศในคลาสนามธรรม แต่ไม่มีรายละเอียดการใช้งานใดๆ วัตถุประสงค์คือเพื่อให้พิมพ์เขียวสำหรับคลาสอื่นเพื่อกำหนดพฤติกรรมของวิธีการ
ต้นกำเนิดทางประวัติศาสตร์และการกล่าวถึงครั้งแรก
วิธีการเชิงนามธรรมและคลาสนามธรรมโดยทั่วไปมีรากฐานมาจากแนวคิดของประเภทข้อมูลเชิงนามธรรม ซึ่งเป็นองค์ประกอบหลักของการเขียนโปรแกรมเชิงวัตถุ แนวคิดนี้ถูกนำมาใช้ครั้งแรกในภาษาโปรแกรม Simula ในช่วงทศวรรษ 1960 อย่างไรก็ตาม การประยุกต์ใช้วิธีนามธรรมอย่างเต็มรูปแบบปรากฏชัดเจนในภาษาระดับสูงต่อมา เช่น C++, Java, C# และ Python ซึ่งสนับสนุนหลักการเขียนโปรแกรมเชิงวัตถุอย่างสมบูรณ์
เจาะลึกวิธีการเชิงนามธรรม
วิธีการเชิงนามธรรมถูกกำหนดไว้ภายในคลาสนามธรรมและไม่มีเนื้อหา กล่าวอีกนัยหนึ่งก็คือ พวกเขาไม่มีโค้ดการใช้งานใดๆ โดยทั่วไปจะใช้เป็นตัวยึดตำแหน่งสำหรับวิธีการที่ต้องสร้างขึ้นภายในคลาสย่อยที่ไม่ใช่นามธรรม นี่เป็นโครงสร้างสำหรับคลาสเฉพาะในอนาคตในขณะเดียวกันก็อำนวยความสะดวกในความหลากหลาย
วิธีการเชิงนามธรรมสามารถเห็นได้ว่าเป็นภาระผูกพันตามสัญญาสำหรับคลาสย่อยที่เป็นรูปธรรม (กล่าวคือ ไม่ใช่นามธรรม) มันกำหนดว่าคลาสย่อยที่เป็นรูปธรรมใดๆ จะต้องจัดเตรียมรายละเอียดการใช้งานสำหรับวิธีการเหล่านี้
โครงสร้างภายในและกลไกการทำงาน
โครงสร้างภายในของวิธีนามธรรมเกี่ยวข้องกับการประกาศภายในคลาสนามธรรมโดยไม่มีรหัสการใช้งานใด ๆ ที่แนบมาด้วย ไวยากรณ์สำหรับการกำหนดวิธีนามธรรมจะแตกต่างกันไปตามภาษาการเขียนโปรแกรมที่แตกต่างกัน ตัวอย่างเช่น ใน Java คุณจะใช้ abstract
คำสำคัญ:
ชวาabstract void myAbstractMethod();
เมื่อคลาสที่เป็นรูปธรรมขยายคลาสนามธรรม มันจะต้องจัดให้มีการนำไปปฏิบัติสำหรับวิธีนามธรรมทั้งหมด หากไม่ทำเช่นนั้นจะส่งผลให้เกิดข้อผิดพลาดในการคอมไพล์เวลา
ชวาclass ConcreteClass extends AbstractClass {
void myAbstractMethod() {
// Implementation code goes here
}
}
ลักษณะสำคัญของวิธีการเชิงนามธรรม
- คำจำกัดความในคลาสนามธรรม: วิธีการเชิงนามธรรมสามารถกำหนดได้ในคลาสนามธรรมเท่านั้น
- ไม่มีการดำเนินการ: ไม่มีเนื้อหา กล่าวคือ ไม่มีโค้ดการใช้งาน
- บังคับใช้การดำเนินการ: คลาสที่เป็นรูปธรรมใด ๆ ที่ขยายคลาสนามธรรมจะต้องจัดเตรียมการใช้งานสำหรับวิธีนามธรรม
- รองรับความหลากหลาย: วิธีการเชิงนามธรรมเป็นองค์ประกอบสำคัญในการนำความหลากหลายไปใช้ในการเขียนโปรแกรมเชิงวัตถุ
ประเภทของวิธีการเชิงนามธรรม
โดยทั่วไป ไม่มี "ประเภท" ที่ชัดเจนของวิธีการเชิงนามธรรม เนื่องจากคุณลักษณะหลักคือขาดการนำไปปฏิบัติ อย่างไรก็ตาม วิธีการแบบนามธรรมสามารถแยกความแตกต่างได้ตามพารามิเตอร์ ประเภทการส่งคืน และข้อยกเว้นที่สามารถทำได้ เช่นเดียวกับวิธีการทั่วไป
การใช้ประโยชน์จากวิธีการเชิงนามธรรมและประเด็นที่เกี่ยวข้อง
วิธีการแบบนามธรรมจะใช้เมื่อโปรแกรมเมอร์ต้องการบังคับใช้พฤติกรรมบางอย่างในคลาสย่อย ตัวอย่างเช่น ในซอฟต์แวร์จำลองสวนสัตว์ คลาสนามธรรม Animal
อาจมีวิธีการเชิงนามธรรม makeSound()
- สัตว์แต่ละประเภทที่เป็นรูปธรรม (เช่น Lion
, Elephant
ฯลฯ) ต้องใช้วิธีนี้เพื่อให้แน่ใจว่าสัตว์ทุกตัวสามารถส่งเสียงได้ แม้ว่าเสียงจริงจะแตกต่างกันไปตามสัตว์แต่ละตัวก็ตาม
ปัญหาที่เกี่ยวข้องกับการใช้วิธีนามธรรมมักเกิดจากความเข้าใจผิดในวัตถุประสงค์ ตัวอย่างเช่น โปรแกรมเมอร์อาจพยายามสร้างอินสแตนซ์คลาสนามธรรมอย่างผิดพลาดหรือละเลยที่จะใช้วิธีการนามธรรมในคลาสย่อยที่เป็นรูปธรรม
การเปรียบเทียบกับแนวคิดที่คล้ายกัน
คุณสมบัติ | วิธีการเชิงนามธรรม | วิธีการอินเทอร์เฟซ (Java) | ฟังก์ชั่นเสมือนบริสุทธิ์ (C ++) |
---|---|---|---|
คำนิยาม | กำหนดไว้ในคลาสนามธรรม | กำหนดไว้ในอินเทอร์เฟซ | กำหนดในชั้นเรียนและทำเครื่องหมายเป็น = 0 |
การนำไปปฏิบัติ | ไม่มีการใช้งานในคลาสที่กำหนดไว้ | ไม่มีการใช้งานในอินเทอร์เฟซที่กำหนดไว้ | ไม่มีการใช้งานในคลาสที่กำหนดไว้ |
คลาสย่อย/คลาสการใช้งาน | ต้องใช้วิธีนามธรรม | ต้องใช้วิธีอินเทอร์เฟซ | ต้องใช้ฟังก์ชันเสมือนล้วนๆ |
มรดกหลายรายการ | Java ไม่รองรับการสืบทอดหลายคลาสสำหรับคลาส | อินเทอร์เฟซสามารถใช้เพื่อจำลองการสืบทอดหลายรายการได้ | C ++ รองรับการสืบทอดหลายรายการ |
มุมมองและเทคโนโลยีในอนาคต
วิธีการเชิงนามธรรมจะยังคงเป็นส่วนสำคัญของการเขียนโปรแกรมเชิงวัตถุ โดยมีบทบาทสำคัญในการออกแบบซอฟต์แวร์ที่ยืดหยุ่นและบำรุงรักษาได้ สิ่งเหล่านี้จะเป็นส่วนสำคัญในเทคโนโลยีในอนาคต เช่น การเขียนโปรแกรม AI ซึ่งการกำหนดพฤติกรรมเชิงนามธรรมที่สามารถเติมเต็มในภายหลังด้วยการใช้งานเฉพาะเป็นสิ่งสำคัญ
พร็อกซีเซิร์ฟเวอร์และวิธีการบทคัดย่อ
ในบริบทของพร็อกซีเซิร์ฟเวอร์ วิธีการเชิงนามธรรมสามารถใช้เพื่อกำหนดการดำเนินการทั่วไป เช่น การส่งหรือรับข้อมูล ตัวอย่างเช่น ก ProxyServer
คลาสนามธรรมอาจมีวิธีนามธรรม handleRequest()
- คลาสคอนกรีตเช่น HTTPProxyServer
และ SocksProxyServer
จะให้การใช้งานเฉพาะของวิธีนี้ เพื่อให้สามารถจัดการคำขอเฉพาะโปรโตคอลได้