อะไรคือความแตกต่างระหว่างการเขียนโปรแกรมที่มุ่งเน้นด้าน, มุ่งเน้นเรื่องและบทบาท?


14

ฉันรู้ว่ามีเอกสารมากมายที่อธิบายกระบวนทัศน์ทั้งสามนี้ แต่ฉันกำลังมองหาคำอธิบายแผนผัง

มีคำอธิบายที่ดีมากบางประการเกี่ยวกับการเขียนโปรแกรมที่มุ่งเน้นด้านนี้ดังนั้นฉันจึงถามคำถามนี้ด้วยความหวังว่าจะได้รับคำตอบที่มีคุณภาพสูงที่ผู้คนใน Stack Overflow คุ้นเคยกับการนำเสนอ


นี่อาจเป็นคำถามที่โปรแกรมเมอร์มากกว่านี้ แต่มันก็เป็นแบบปลายเปิดจริงๆ ดูstackoverflow.com/faq#dontask - "คำถามของคุณควรถูกกำหนดขอบเขตพอสมควรหากคุณสามารถจินตนาการหนังสือทั้งเล่มที่ตอบคำถามของคุณคุณกำลังถามมากเกินไป"
Merlyn Morgan-Graham

ฉันจะเริ่มต้นด้วยการอ่านต้นฉบับ Thomas Kuhn: amazon.com/Structure-Scientific-Revolutions-Thomas-Kuhn/dp/…

ฉันสามารถจินตนาการคำตอบสั้น ๆ สำหรับคำถามของฉัน ตัวอย่างเช่นนี่คือวิธีที่ฉันจะอธิบายการเขียนโปรแกรม Aspect-oriented-programming: เป็นวิธีเพิ่ม "การประมวลผล - หน่วย" เรียกว่าแง่มุมในลักษณะโมดูลาร์ก่อนและหลังหน่วยประมวลผลอื่น ๆ โดยใช้วิธีการชี้ สำหรับฉันดูเหมือนว่าการเขียนโปรแกรมแบบอิงกฎเช่นภาษาโปรแกรม Inform7 inform7.com/learn/man/doc188.html

คำตอบ:


9

เราสามารถตอบคำถามนี้ได้ด้วยการเขียนหนังสือเกี่ยวกับเรื่องนี้ อย่างไรก็ตามนี่เป็นการเปรียบเทียบพื้นฐาน

1. การเขียนโปรแกรมเชิงหัวเรื่อง

การเขียนโปรแกรมที่เน้นวิชาเป็นเรื่องที่ต่างไปจากเดิมอย่างสิ้นเชิง ใน OO วัตถุจะถูกกำหนดในรูปแบบของความเป็นจริง (เช่นตามแบบจำลองที่อธิบายอย่างอิสระ) และขึ้นอยู่กับคุณสมบัติ (คุณสมบัติ) และวิธีการ (พฤติกรรม) ของมัน แอพลิเคชันที่ทำให้เฉพาะการใช้งานของคุณสมบัติและพฤติกรรมเหล่านี้ ตรงกันข้ามกับสิ่งนี้ในเรื่องการเขียนโปรแกรมเชิงวัตถุไม่มีวัตถุ (และจำลอง) ในการแยก ในกระบวนการ แต่พฤติกรรมของวัตถุถูกจัดทำโดย "วิชา" อื่น ๆ อีกมากมายของวัตถุที่อยู่นอกเหนือขอบเขตและการควบคุมของผู้เขียนของวัตถุต้นฉบับคิดว่ามันเป็นวิธีการขยายพฤติกรรมต่างๆ "บนวัตถุฉันคิดว่านี่จะเป็นวิธีที่เกินกว่าการกำหนดแม่แบบของการสืบทอดเมื่อเทียบกับสิ่งที่กล่าวถึงที่นี่

ต้นกำเนิดของคำศัพท์ (และแนวคิด) ที่ไม่มีปัญหานั้นมาจากบทความ " การเขียนโปรแกรมหัวเรื่อง: คำวิจารณ์ของวัตถุบริสุทธิ์ , William Harrison และ Harold Ossher" นี่เป็นสิ่งที่ดีอีกกระดาษ แม้ว่าโดยส่วนตัวแล้วฉันเชื่อว่านี่เป็นกรอบทฤษฎี ฉันไม่รู้ว่ามีภาษา / การติดตั้งใช้งานหรือไม่

ดูนี้ , นี้และนี้สำหรับข้อมูลเพิ่มเติม

2. มุมมองการเขียนโปรแกรมเชิง

ด้านการเขียนโปรแกรมเชิงที่มีต้นกำเนิดมาจากแนวคิดของ " การแยกของ oncerns " โดยทั่วไปจะขยายการเขียนโปรแกรมตามขั้นตอนหรือเชิงวัตถุสำหรับความกังวลที่ข้ามตัด การทำให้ง่ายขึ้นคน ๆ หนึ่งสามารถพูดได้ว่าซอฟต์แวร์นั้นมีข้อกำหนดด้านการใช้งานและไม่มีคุณสมบัติที่ใช้งานได้ ข้อกำหนดตัดขวางเหล่านี้มีตัวอย่างเช่นการบันทึกการจัดการข้อยกเว้นการซิงโครไนซ์เธรดการจัดการหน่วยความจำการปรับให้เหมาะสมและอื่น ๆ ASPECTS แบบตัดขวางเหล่านี้ควรจะแสดงและนำไปปฏิบัติแยกต่างหากและเป็นอิสระกับส่วนการทำงานอื่น ๆ
งานที่ครอบคลุมในพื้นที่นี้มาจากIBM ; โดยทั่วไปแต่ละข้อกังวลดังกล่าวหรือด้านสามารถเป็นอิสระจากกันสร้างมิติ "พื้นที่กังวล" หลายมิติ , (อ่านนี้ )

บางส่วนของการใช้งานในทางปฏิบัติที่ดีของมุมมองเชิงเป็นAspectJและAspectC ++และหลายมากขึ้น ดูนี่สิ

3. การวางโปรแกรม
ตามบทบาทในขณะที่เราพัฒนาไปสู่ตัวแทนหลาย ๆ ครั้งจำเป็นต้องกำหนด "บทบาท" และวัตถุประสงค์ที่กิจกรรมที่แน่นอนซึ่งสิ้นสุดการทำงานของตัวแทนขึ้นอยู่กับสภาพแวดล้อมที่มีอยู่สิ่งนี้คล้ายกับความเข้าใจแนวคิดมนุษย์

วัตถุประสงค์หลักคือการแยกวัตถุประสงค์ของงานจากความสามารถในการให้ความร่วมมือของมันด้วยการกำหนดโครงสร้างที่เรียกว่าอย่างชัดเจนกระบวนการความร่วมมือ บทบาทถูกจำลองเป็นชุดของความสามารถและพฤติกรรมที่คาดหวัง อย่างไรก็ตามวิธีการเหล่านี้ยังอนุญาตให้สร้างแบบจำลองของสภาพแวดล้อมการดำเนินการและวิธีการที่ตัวแทน / วัตถุสามารถรับรู้สภาพแวดล้อมเช่นกัน ดูนี่สิ

มีกรอบต่าง ๆ ที่เสนอในการวิจัยสำหรับการสร้างแบบจำลองตามบทบาทและการใช้งาน ไม่กี่ของพวกเขาเป็นเชือก , สมอง , ALAADINและอื่น ๆ อีกมากมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.