อ่าน 4 นาที
การเขียนโปรแกรมที่เน้นเนื้อหาเฉพาะเรื่อง
ในด้านการคำนวณการเขียนโปรแกรมเชิงอัตวิสัยเป็นกระบวนทัศน์ซอฟต์แวร์เชิงวัตถุ ซึ่งสถานะ (ฟิลด์) และพฤติกรรม (เมธอด) ของวัตถุไม่ได้ถูกมองว่าเป็นคุณสมบัติที่แท้จริงของวัตถุเอง...
การเขียนโปรแกรมที่เน้นเนื้อหาเฉพาะเรื่อง
ในด้านการคำนวณการเขียนโปรแกรมเชิงอัตวิสัยเป็นกระบวนทัศน์ซอฟต์แวร์เชิงวัตถุ ซึ่งสถานะ (ฟิลด์) และพฤติกรรม (เมธอด) ของวัตถุไม่ได้ถูกมองว่าเป็นคุณสมบัติที่แท้จริงของวัตถุเอง แต่มาจากการรับรู้เชิงอัตวิสัยต่างๆ ("อัตวิสัย") ของวัตถุ คำศัพท์และแนวคิดนี้ได้รับการตีพิมพ์ครั้งแรกในเดือนกันยายน พ.ศ. 2536 ในเอกสารการประชุม[ 1 ]ซึ่งต่อมาได้รับการยอมรับว่าเป็นหนึ่งในสามเอกสารที่มีอิทธิพลมากที่สุดที่นำเสนอในการประชุมระหว่างปี พ.ศ. 2529 ถึง พ.ศ. 2539 [ 2 ]ดังที่ได้อธิบายไว้ในเอกสารนั้น มีการเปรียบเทียบกับความแตกต่างระหว่างมุมมองทางปรัชญาของเพลโตและคานต์เกี่ยวกับลักษณะของวัตถุ "จริง" แต่นำมาประยุกต์ใช้กับซอฟต์แวร์ ตัวอย่างเช่น ในขณะที่เราทุกคนอาจรับรู้ว่าต้นไม้มีความสูง น้ำหนัก มวลใบ ฯลฯ ที่วัดได้ แต่จากมุมมองของนก ต้นไม้ก็อาจมีคุณค่าเชิงเปรียบเทียบในแง่ของอาหารหรือการทำรัง หรือจากมุมมองของเจ้าหน้าที่ประเมินภาษี ต้นไม้ก็อาจมีมูลค่าที่ต้องเสียภาษีในแต่ละปี ข้อมูลเพิ่มเติมที่นกและเจ้าหน้าที่ประเมินภาษีรับรู้ไม่จำเป็นต้องมองว่าเป็นคุณสมบัติที่แท้จริงของต้นไม้ แต่เป็นการเพิ่มเข้ามาจากมุมมองของนกและเจ้าหน้าที่ประเมินภาษี และจากการวิเคราะห์ของคานท์แล้ว สิ่งเดียวกันนี้อาจเป็นจริงแม้กระทั่งกับลักษณะที่เราคิดว่าเป็นคุณสมบัติที่แท้จริง
การเขียนโปรแกรมเชิงหัวข้อสนับสนุนการจัดระเบียบคลาสที่อธิบายวัตถุเป็น "หัวข้อ" ซึ่งอาจประกอบกันเป็นหัวข้อที่ใหญ่ขึ้นได้ ณ จุดที่เข้าถึงฟิลด์หรือเมธอดการมีส่วนร่วมของหัวข้อหลายๆ หัวข้ออาจประกอบกันได้ จุดเหล่านี้มีลักษณะเป็นจุดเชื่อมต่อ[ 3 ]ของหัวข้อ ตัวอย่างเช่น หากต้นไม้ถูกตัดลง เมธอดที่เกี่ยวข้องอาจจำเป็นต้องเชื่อมต่อพฤติกรรมในหัวข้อของนกและผู้ประเมินภาษีกับพฤติกรรมของต้นไม้เอง ดังนั้นโดยพื้นฐานแล้วจึงเป็นมุมมองเกี่ยวกับลักษณะการประกอบของการพัฒนาซอฟต์แวร์ ตรงข้ามกับลักษณะเชิงอัลกอริทึม (เชิงกระบวนการ) หรือการซ่อนการแสดงแทน (เชิงวัตถุ)
ความสัมพันธ์
ความสัมพันธ์กับการเขียนโปรแกรมเชิงแง่มุม
การนำการเขียนโปรแกรมเชิงแง่มุมมาใช้ในปี 1997 [ 4 ]ทำให้เกิดคำถามเกี่ยวกับความสัมพันธ์กับการเขียนโปรแกรมเชิงหัวข้อ และเกี่ยวกับความแตกต่างระหว่างหัวข้อและแง่มุม คำถามเหล่านี้ยังไม่ได้รับคำตอบเป็นเวลานาน แต่ได้รับการแก้ไขในสิทธิบัตรเกี่ยวกับการเขียนโปรแกรมเชิงแง่มุมที่ยื่นในปี 1999 [ 5 ]ซึ่งมีสองประเด็นที่โดดเด่นแตกต่างจากงานก่อนหน้า:
- โปรแกรมส่วนนี้ประกอบด้วย ก) ส่วนตัดขวางซึ่งประกอบด้วยจุดในการดำเนินการที่ต้องการรวมพฤติกรรมตัดขวาง และ ข) การกระทำตัดขวางซึ่งประกอบด้วยส่วนของการใช้งานที่เกี่ยวข้องกับส่วนตัดขวาง โดยส่วนของการใช้งานนั้นประกอบด้วยรหัสโปรแกรมที่คอมพิวเตอร์อ่านได้ซึ่งนำพฤติกรรมตัดขวางไปใช้
- ลักษณะดังกล่าวบังคับให้เกิดพฤติกรรมข้ามสายงานอย่างโปร่งใสในคลาสวัตถุและเอนทิตีซอฟต์แวร์อื่นๆ
ในมุมมองที่เน้นเรื่องเป็นหลัก การตัดขวางอาจถูกวางแยกจากแง่มุม (เรื่อง) และพฤติกรรมจะไม่ถูกบังคับโดยแง่มุม แต่ถูกควบคุมโดยกฎของการประกอบ การมองย้อนหลัง[ 6 ]ยังทำให้สามารถแยกแยะการเขียนโปรแกรมเชิงแง่มุมได้ด้วยการแนะนำและการใช้ประโยชน์จากแนวคิดของจุดตัด คล้ายแบบสอบถาม เพื่อกำหนดจุดเชื่อมต่อที่ใช้โดยแง่มุมในลักษณะทั่วไปจากภายนอก
ในการนำเสนอการเขียนโปรแกรมเชิงเนื้อหา จุดเชื่อมต่อถูกจำกัดไว้โดยเจตนาให้เข้าถึงฟิลด์และเรียกใช้เมธอดโดยอ้างว่าจุดเหล่านั้นเป็นจุดที่เฟรมเวิร์กที่ออกแบบมาอย่างดีได้รับการออกแบบมาเพื่อรองรับการขยายฟังก์ชัน การใช้ pointcuts ที่กำหนดจากภายนอกเป็นความสามารถทางภาษาที่สำคัญ แต่ยังคงเป็นหนึ่งในคุณลักษณะที่ถกเถียงกันมากที่สุดของการเขียนโปรแกรมเชิงแง่มุม[ 7 ]
ความสัมพันธ์กับการพัฒนาซอฟต์แวร์เชิงแง่มุม
เมื่อเข้าสู่สหัสวรรษใหม่ เป็นที่ชัดเจนว่ากลุ่มวิจัยจำนวนหนึ่งกำลังศึกษาเทคโนโลยีต่างๆ ที่ใช้การประกอบหรือการเชื่อมต่อสถานะและฟังก์ชันที่บรรจุแยกกันเพื่อสร้างวัตถุ[ 8 ]เพื่อแยกแยะขอบเขตความสนใจร่วมกันจากการเขียนโปรแกรมเชิงแง่มุม (Aspect-Oriented Programming) ด้วยคำจำกัดความสิทธิบัตรเฉพาะ และเพื่อเน้นย้ำว่าเทคโนโลยีการประกอบนั้นเกี่ยวข้องมากกว่าแค่ขั้นตอนการเขียนโค้ดในการพัฒนาซอฟต์แวร์ เทคโนโลยีเหล่านี้จึงถูกจัดกลุ่มเข้าด้วยกันภายใต้คำว่าการพัฒนาซอฟต์แวร์เชิงแง่มุม (Aspect-Oriented Software Development ) [ 9 ]และได้มีการจัดการประชุมนานาชาติหลายชุดขึ้นในหัวข้อนี้ เช่นเดียวกับการเขียนโปรแกรมเชิงแง่มุม การเขียนโปรแกรมเชิงหัวข้อ (Subject-Oriented Programming) ตัวกรองการประกอบ (Composition Filters) การเขียนโปรแกรมเชิงคุณลักษณะ (Feature-Oriented Programming)และวิธีการปรับตัว (Adaptive Methods) ถือเป็นแนวทางการพัฒนาซอฟต์แวร์เชิงแง่มุมเช่นกัน
มิติ
การแยกความกังวลแบบหลายมิติ, Hyper/J และสภาพแวดล้อมการจัดการความกังวล
การกำหนดรูปแบบดั้งเดิมของการเขียนโปรแกรมเชิงหัวข้อนั้นตั้งใจให้เป็นเทคโนโลยีการบรรจุหีบห่อ ซึ่งช่วยให้สามารถขยายพื้นที่ของฟังก์ชันและประเภทข้อมูลได้ทั้งสองมิติ การใช้งานครั้งแรกนั้นมีไว้สำหรับ C++ [ 10 ]และ Smalltalk [ 11 ]การใช้งานเหล่านี้ใช้ประโยชน์จากแนวคิดของป้ายกำกับซอฟต์แวร์และกฎการประกอบเพื่ออธิบายการรวมหัวข้อ
เพื่อแก้ไขข้อกังวลที่ว่าควรมีการวางรากฐานที่ดีกว่าสำหรับการวิเคราะห์และองค์ประกอบของซอฟต์แวร์ ไม่ใช่แค่ในแง่ของบรรจุภัณฑ์ แต่ในแง่ของข้อกังวลต่างๆ ที่บรรจุภัณฑ์เหล่านี้กล่าวถึง จึงได้มีการพัฒนาการจัดระเบียบเนื้อหาอย่างชัดเจนในรูปของ "เมทริกซ์" หลายมิติ ซึ่งข้อกังวลต่างๆ จะสัมพันธ์กับหน่วยซอฟต์แวร์ที่นำไปใช้ การจัดระเบียบนี้เรียกว่าการแยกข้อกังวลแบบหลายมิติและเอกสารที่อธิบายเรื่องนี้[ 12 ]ได้รับการยอมรับว่าเป็นเอกสารที่มีอิทธิพลมากที่สุดในการประชุม ICSE ปี 1999 [ 13 ]
แนวคิดใหม่นี้ถูกนำมาใช้สำหรับการเขียน ซอฟต์แวร์ Javaโดยใช้ชื่อHyper/Jสำหรับเครื่องมือ[ 14 ]
องค์ประกอบและแนวคิดของหัวข้อสามารถนำไปใช้กับสิ่งประดิษฐ์ซอฟต์แวร์ที่ไม่มีความหมายที่สามารถดำเนินการได้ เช่น ข้อกำหนดความต้องการหรือเอกสาร เครื่องมือวิจัยสำหรับEclipseที่เรียกว่าConcern Manipulation Environment (CME) ได้รับการอธิบายไว้[ 15 ]ซึ่งเครื่องมือสำหรับการสอบถาม การวิเคราะห์ การสร้างแบบจำลอง[ 16 ]และองค์ประกอบจะถูกนำไปใช้กับสิ่งประดิษฐ์ในภาษาหรือการแสดงใด ๆ ผ่านการใช้อะแดปเตอร์ปลั๊กอินที่เหมาะสมเพื่อจัดการการแสดง
เอ็นจิ้นการจัดองค์ประกอบ Hyper/J [ 17 ]ได้รับการพัฒนาต่อยอดเป็นส่วนหนึ่งของ CME ซึ่งใช้แนวทางทั่วไปสำหรับองค์ประกอบต่างๆ ของเอ็นจิ้นการจัดองค์ประกอบ:
- ภาษาการสอบถามที่มีการรวมเพื่อระบุจุดเชื่อมต่อ
- รูปแบบการยึดติดโครงสร้างที่ยืดหยุ่น
- ข้อกำหนดกราฟแบบซ้อนกันสำหรับการเรียงลำดับองค์ประกอบที่ระบุไว้
- และข้อกำหนดลำดับความสำคัญเพื่อแก้ไขข้อขัดแย้งระหว่างกฎที่ขัดแย้งกัน
ทั้ง Hyper/J และ CME มีให้บริการจาก alphaWorks [ 18 ]หรือ sourceforge [ 19 ]ตามลำดับ แต่ไม่มีการสนับสนุนอย่างจริงจัง
การเขียนโปรแกรมเชิงเนื้อหาในฐานะ "มิติที่สาม"
การเรียกใช้เมธอดในการเขียนโปรแกรมเชิงวัตถุสามารถคิดได้ว่าเป็น "สองมิติ" ในแง่ที่ว่าโค้ดที่ดำเนินการขึ้นอยู่กับทั้งชื่อเมธอดและวัตถุที่เกี่ยวข้อง ซึ่งสามารถเปรียบเทียบได้[ 20 ]กับการเขียนโปรแกรมเชิงขั้นตอน ซึ่งชื่อขั้นตอนจะแก้ไขโดยตรงหรือในมิติเดียวไปยังรูทีนย่อย และยังเปรียบเทียบกับการเขียนโปรแกรมเชิงหัวข้อ ซึ่งผู้ส่งหรือหัวข้อก็มีความเกี่ยวข้องกับการเรียกใช้เมธอดเช่นกัน ซึ่งประกอบเป็นมิติที่สาม
ดูเพิ่มเติม
ลิงก์ภายนอก
- ลักษณะการกระจายตัวของการเขียนโปรแกรมเชิงเนื้อหา: การประเมินด้วยกระบวนทัศน์เชิงกระบวนการและเชิงวัตถุ
- alphaWorks: HyperJ
- โครงการเทคโนโลยีที่เก็บถาวรของ Eclipse
- Amethyst: ไลบรารี JavaScript สำหรับการเขียนโปรแกรมเชิงหัวข้อ (Subject-Oriented Programming)
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การเขียนโปรแกรมที่เน้นเนื้อหาเฉพาะเรื่อง
ในด้านการคำนวณการเขียนโปรแกรมเชิงอัตวิสัยเป็นกระบวนทัศน์ซอฟต์แวร์เชิงวัตถุ ซึ่งสถานะ (ฟิลด์) และพฤติกรรม (เมธอด) ของวัตถุไม่ได้ถูกมองว่าเป็นคุณสมบัติที่แท้จริงของวัตถุเอง...
ความสัมพันธ์กับการเขียนโปรแกรมเชิงแง่มุม
การนำการเขียน โปรแกรมเชิงแง่มุมมาใช้ ในปี 1997 [ 4 ] ทำให้เกิดคำถามเกี่ยวกับความสัมพันธ์กับการเขียนโปรแกรมเชิงหัวข้อ และเกี่ยวกับความแตกต่างระหว่างหัวข้อและแง่มุม คำถามเหล่านี้ยังไม่ได้รับคำตอบเป็นเวลานาน...
ความสัมพันธ์กับการพัฒนาซอฟต์แวร์เชิงแง่มุม
เมื่อเข้าสู่สหัสวรรษใหม่ เป็นที่ชัดเจนว่ากลุ่มวิจัยจำนวนหนึ่งกำลังศึกษาเทคโนโลยีต่างๆ ที่ใช้การประกอบหรือการเชื่อมต่อสถานะและฟังก์ชันที่บรรจุแยกกันเพื่อสร้างวัตถุ [ 8 ] เพื่อแยกแยะขอบเขตความสนใจร่วมกันจากการเขียนโปรแกรมเชิงแง่มุม (Aspect-Oriented Programming)...
การแยกความกังวลแบบหลายมิติ, Hyper/J และสภาพแวดล้อมการจัดการความกังวล
การกำหนดรูปแบบดั้งเดิมของการเขียนโปรแกรมเชิงหัวข้อนั้นตั้งใจให้เป็นเทคโนโลยีการบรรจุหีบห่อ ซึ่งช่วยให้สามารถขยายพื้นที่ของฟังก์ชันและประเภทข้อมูลได้ทั้งสองมิติ การใช้งานครั้งแรกนั้นมีไว้สำหรับ C++ [ 10 ] และ Smalltalk [ 11 ]...