ฉันได้ยินมาหลายครั้งเกี่ยวกับการเขียนโปรแกรมที่มุ่งเน้นด้านซึ่งส่วนใหญ่เป็นเทคโนโลยี "รุ่นต่อไป" ในการเขียนโปรแกรมและกำลังจะ 'ฆ่า' OOP
ถูกต้องหรือไม่ OOP จะตายหรือมีเหตุผลอะไร
ฉันได้ยินมาหลายครั้งเกี่ยวกับการเขียนโปรแกรมที่มุ่งเน้นด้านซึ่งส่วนใหญ่เป็นเทคโนโลยี "รุ่นต่อไป" ในการเขียนโปรแกรมและกำลังจะ 'ฆ่า' OOP
ถูกต้องหรือไม่ OOP จะตายหรือมีเหตุผลอะไร
คำตอบ:
เมื่อใดก็ตามที่มีคนบอกคุณว่าเทคโนโลยีซอฟต์แวร์หนึ่งจะฆ่าอีกเทคโนโลยีหนึ่งหรือครองตลาด / ใช้ / ผู้ชมทั้งหมดโปรดจำไว้ว่า:
ระบบนิเวศที่มีสติ (แบบไดนามิก แต่มั่นคง) ทำมาจากสปีชีส์ที่แตกต่างหลากหลาย
นั่นหมายความว่าเทคโนโลยี hyped ใหม่ใด ๆ ที่จะผ่านเส้นโค้ง hypeและในที่สุดจะพบว่ามันเป็นวัตถุประสงค์เฉพาะผ่านเวลาและประสบการณ์กับมัน
นั่นก็หมายความว่าแนวคิดแบบสุดโต่งเช่นการเขียนโปรแกรมแบบเชิงกว้างนั้นมีประโยชน์ถ้าจำเป็นความหมายไม่เสมอไปและไม่บ่อยนักเนื่องจากต้นทุนโดยนัย
แต่มันมีอยู่แล้วเช่น OOProgramming เช่นการเขียนโปรแกรมทั่วไปเช่นการเขียนโปรแกรมการทำงานเช่นการเขียนโปรแกรมขั้นตอน ฯลฯ
คุณสังเกตเห็นหรือไม่ว่าภาษาที่ใช้กันอย่างแพร่หลาย (และเป็นที่นิยมแย้ง) และแพร่หลายในชีวิตจริงนั้น "ไม่บริสุทธิ์"? นั่นเป็นเพราะการอนุญาตให้กระบวนทัศน์หลายอย่างทำให้พวกเขามีความยืดหยุ่นมากขึ้นในการเปลี่ยนบริบทตลอดเวลาและพวกเขาเติมช่องว่างการใช้งานมากขึ้น
OOP จะไม่ตายเพราะ AOP AOP เพิ่มคุณค่าบางอย่าง แต่ใช้ชีวิตร่วมกับ OOP ได้อย่างสมบูรณ์แบบ ฉันไม่คิดว่าการเขียนโปรแกรมที่ใช้งานได้จะฆ่า OOP ได้เช่นกัน OOP นั้นดีเกินไปสำหรับโดเมนที่มีปัญหาหลายประเภทมันไม่เหมาะสมที่จะแทนที่มันด้วยกระบวนทัศน์การทำงาน
กระบวนทัศน์มาและไป แต่รหัสดั้งเดิมเป็นของตลอดกาล จะต้องมีรหัส C ++ เพื่อรักษาไว้เสมอดังนั้น OOP จะไม่มีวันตายอย่างสมบูรณ์
คำตอบสั้น ๆ : ไม่ฉันไม่คิดอย่างนั้น
คำตอบอีกต่อไป: จากสิ่งที่ฉันเข้าใจเกี่ยวกับ AOP ไม่ใช่กระบวนทัศน์การเขียนโปรแกรมในตัวเอง (ในขณะที่มันไม่ได้แทนที่ OOP) แต่นอกเหนือจากนี้เป็นชุดเครื่องมือเพิ่มเติมที่ช่วยให้คุณเขียนวิธีที่สั้นลงได้ง่ายขึ้น , เป็นต้น แต่มันไม่ได้แทนที่ OOP
สิ่งที่ไม่ (อย่างน้อยในบางส่วน) เปลี่ยนหรือเพิ่มไป OOP เป็นโปรแกรมการทำงานซึ่งอันที่จริงเป็นกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกัน (แม้ว่าจะสามารถผสมกับ OOP ยกตัวอย่างเช่นในการเขียนโปรแกรมภาษา Scala ) มันชอบโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบและฟีเจอร์แฟนซีทุกประเภทที่มีแนวโน้มที่จะทำให้นักพัฒนา OOP ผิดหวังโดยเฉพาะเมื่อมันเกิดขึ้นพร้อมกัน
OOP ถูกพูดถึงน้อยวันนี้เนื่องจากสันนิษฐานว่าเป็นแนวทางพฤตินัยในหลาย ๆ สถานการณ์ AOP ไม่เคยลุกขึ้นจากพื้นเหมือนกับการเคลื่อนไหวมวลชน
ฉันจำได้ว่าเคยได้ยินเกี่ยวกับการเขียนโปรแกรมมุมมองเชิงเป็นครั้งแรกในการสอน OOPSLA '97 พวกเขาบอกว่ามันจะฆ่า OO เมื่อกี้ ตั้งแต่นั้นมา OO ได้เติบโตเกินความคาดหวังที่สุดเท่านั้น AOP ยังเป็นที่รู้จักกันดีโดยแทบไม่มีผลกระทบใด ๆ ต่ออุตสาหกรรมคอมพิวเตอร์ ฉันคิดว่าคำตอบนั้นชัดเจนว่า AOP ไม่ใช่นักฆ่า OO
ดูระบบ AOP ที่มีอยู่ พวกเขาขึ้นอยู่กับว่าคุณมีรหัสที่เขียนในบางรูปแบบ - ตัวอย่างเช่น Spring AOP ขึ้นอยู่กับว่าคุณมีวิธีการที่กำหนดไว้ในชั้นเรียน Castle Windsor รองรับภาษา C # ซึ่งเป็นภาษาเชิงวัตถุ
ในทางทฤษฎีคุณสามารถเปลี่ยนจาก OOP ไปเป็นการเขียนโปรแกรมที่มีโครงสร้างและยังคงรักษา AOP ไว้ แต่ในทางปฏิบัติมันอาจเป็นเรื่องยาก มันง่ายที่จะซับคลาสบางอย่างแทนที่วิธีที่เกี่ยวข้องเพื่อเรียกตัวกรองก่อน / หลังที่เหมาะสมและส่งต่อในกระบวนการฉีดพึ่งพา
เป็นการยากที่จะเปรียบเทียบกับการเขียนวิธีการแบบคงที่เพื่อกำหนดเส้นทางไปยังวิธีการแบบแทรมโพลีนซึ่งออกแบบมาเพื่อเรียกตัวกรองที่ผู้ใช้กำหนด
ดังนั้นจากมุมมองการใช้งานทั่วไป AOP ต้องใช้ OOP
ในขณะที่ OOP ไม่ใช่กระสุนเงิน แต่ก็สามารถพูดได้สำหรับ AOP สนับสนุนการออกแบบตามองค์ประกอบอย่างไรก็ตามในโครงร่างยิ่งใหญ่ส่วนประกอบของคุณเป็นวัตถุใหม่และส่วนต่อประสานส่วนประกอบนั้นเป็นรายการของวิธีการทำธุรกรรมซึ่งไม่เป็นความจริง OOP
การออกแบบตามองค์ประกอบ AOP เพิ่มเติมสนับสนุนรูปแบบข้อมูลโรคโลหิตจางซึ่งคนฉลาดกว่าที่ฉันวิจารณ์อยู่
http://martinfowler.com/bliki/AnemicDomainModel.html
(ฉันรู้ว่าบทความข้างต้นเก่า แต่มีความเกี่ยวข้องอย่างน่าประหลาดใจ)
ประเด็นสำคัญก็คือระบบ AOP อยู่ที่นี่ แต่พวกเขาก็ยังห่างไกลจากความสมบูรณ์แบบเช่นกัน ไม่มีระบบที่สมบูรณ์แบบ