การตายของเทคโนโลยี OOP [ปิด]


9

ฉันได้ยินมาหลายครั้งเกี่ยวกับการเขียนโปรแกรมที่มุ่งเน้นด้านซึ่งส่วนใหญ่เป็นเทคโนโลยี "รุ่นต่อไป" ในการเขียนโปรแกรมและกำลังจะ 'ฆ่า' OOP

ถูกต้องหรือไม่ OOP จะตายหรือมีเหตุผลอะไร

คำตอบ:


40

เมื่อใดก็ตามที่มีคนบอกคุณว่าเทคโนโลยีซอฟต์แวร์หนึ่งจะฆ่าอีกเทคโนโลยีหนึ่งหรือครองตลาด / ใช้ / ผู้ชมทั้งหมดโปรดจำไว้ว่า:

ระบบนิเวศที่มีสติ (แบบไดนามิก แต่มั่นคง) ทำมาจากสปีชีส์ที่แตกต่างหลากหลาย

นั่นหมายความว่าเทคโนโลยี hyped ใหม่ใด ๆ ที่จะผ่านเส้นโค้ง hypeและในที่สุดจะพบว่ามันเป็นวัตถุประสงค์เฉพาะผ่านเวลาและประสบการณ์กับมัน

Hype Curve

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

แต่มันมีอยู่แล้วเช่น OOProgramming เช่นการเขียนโปรแกรมทั่วไปเช่นการเขียนโปรแกรมการทำงานเช่นการเขียนโปรแกรมขั้นตอน ฯลฯ

คุณสังเกตเห็นหรือไม่ว่าภาษาที่ใช้กันอย่างแพร่หลาย (และเป็นที่นิยมแย้ง) และแพร่หลายในชีวิตจริงนั้น "ไม่บริสุทธิ์"? นั่นเป็นเพราะการอนุญาตให้กระบวนทัศน์หลายอย่างทำให้พวกเขามีความยืดหยุ่นมากขึ้นในการเปลี่ยนบริบทตลอดเวลาและพวกเขาเติมช่องว่างการใช้งานมากขึ้น


1
+1 สำหรับ 'ไม่บริสุทธิ์' ภาษา OOP บริสุทธิ์สะดุดตาตายยกเว้นมากใช้เฉพาะ / นักวิชาการ
jv42

เราจะพิจารณาอะไรเกี่ยวกับภาษา OO บริสุทธิ์ หูฟัง?
Zhehao Mao

20

OOP จะไม่ตายเพราะ AOP AOP เพิ่มคุณค่าบางอย่าง แต่ใช้ชีวิตร่วมกับ OOP ได้อย่างสมบูรณ์แบบ ฉันไม่คิดว่าการเขียนโปรแกรมที่ใช้งานได้จะฆ่า OOP ได้เช่นกัน OOP นั้นดีเกินไปสำหรับโดเมนที่มีปัญหาหลายประเภทมันไม่เหมาะสมที่จะแทนที่มันด้วยกระบวนทัศน์การทำงาน


1
นั่นเป็นเรื่องส่วนตัว ฉันไม่คิดว่า OOP เหมาะสมกับโดเมนปัญหาที่เฉพาะเจาะจง แต่ก็เหมาะสมกับวิธีที่นักพัฒนาซอฟต์แวร์ทำการแก้ปัญหา OOP จะไม่ตายเพราะนักพัฒนาไม่สามารถเปลี่ยนกระบวนทัศน์
Raynos

6
ตัวอย่างคลาสสิกที่ OOP เหมาะสมดีคือ GUI เป็นการยากที่จะจินตนาการว่า API สำหรับชุดเครื่องมือ GUI ที่ไม่ใช่ OO แม้ว่าภาษาจะไม่ใช่ (ได้รับนั่นไม่ใช่วิธีการที่มักจะใช้โดเมนปัญหาคำ) เพื่อให้ตัวอย่างของโดเมนปัญหาจริงที่ OOP เหมาะสม: ระบบอัตโนมัติของคลังสินค้า การสร้างแบบจำลองการจัดเก็บและดึงยานพาหนะและกิจกรรมของพวกเขาคือที่ OOP รู้สึกเหมือนเป็นธรรมชาติ
281377

2
@ammoQ, GUIs นั้นแย่มากเมื่อแสดงใน OO นั่นคือเหตุผลที่ API ทั้งหมดกำลังลอยไปหา DSL (WPF และเหมือนกัน) มันไม่ยากที่จะจินตนาการว่าจะพูดว่า Tk - ไม่มีร่องรอยของ OOP เพียงอย่างเดียว แต่ก็ยังยอดเยี่ยม (สำหรับการเขียนโปรแกรมไม่ใช่สำหรับรูปลักษณ์และความรู้สึก) ดีกว่าชุดเครื่องมือ Java OO ที่มีการเปิดใช้งานมากเกินไป OOP นั้นเหมาะสมกับการจำลองแบบของตัวแทน (เช่นที่คุณอยู่ในรายการ) แต่มันก็เป็นปัญหาเล็กน้อยที่มีอยู่ในปัจจุบัน
SK-logic

6
ดูตัวอย่างแรกของ tk ที่ฉันหาได้นั่นไม่ใช่ OO อย่างไร จากบทช่วยสอน: "วิดเจ็ตคือวัตถุอินสแตนซ์ของคลาสที่แสดงปุ่มเฟรมและอื่น ๆ " tkdocs.com/tutorial/concepts.htmlยิ่งกว่านั้น DSL เองนั้นพึ่งพาการเขียนโปรแกรม OO มาก ดังนั้นฉันไม่เข้าใจสิ่งที่คุณพยายามจะพูด?
Inca

3
@ Sk-logic, @ammoQ, @Raynos, @jkocking ฉันได้เลื่อนระดับเป็นคำถามของตัวเอง: programmers.stackexchange.com/questions/88385/ …ฉันจะสนใจมากที่จะมีคำอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้ฉันมาก สนใจที่จะเรียนรู้
Inca

12

กระบวนทัศน์มาและไป แต่รหัสดั้งเดิมเป็นของตลอดกาล จะต้องมีรหัส C ++ เพื่อรักษาไว้เสมอดังนั้น OOP จะไม่มีวันตายอย่างสมบูรณ์


6
+1 สำหรับวลีที่ยอดเยี่ยมอย่างแท้จริง: "กระบวนทัศน์มาและไป แต่รหัสดั้งเดิมคือตลอดไป"
NoChance

8

คำตอบสั้น ๆ : ไม่ฉันไม่คิดอย่างนั้น

คำตอบอีกต่อไป: จากสิ่งที่ฉันเข้าใจเกี่ยวกับ AOP ไม่ใช่กระบวนทัศน์การเขียนโปรแกรมในตัวเอง (ในขณะที่มันไม่ได้แทนที่ OOP) แต่นอกเหนือจากนี้เป็นชุดเครื่องมือเพิ่มเติมที่ช่วยให้คุณเขียนวิธีที่สั้นลงได้ง่ายขึ้น , เป็นต้น แต่มันไม่ได้แทนที่ OOP

สิ่งที่ไม่ (อย่างน้อยในบางส่วน) เปลี่ยนหรือเพิ่มไป OOP เป็นโปรแกรมการทำงานซึ่งอันที่จริงเป็นกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกัน (แม้ว่าจะสามารถผสมกับ OOP ยกตัวอย่างเช่นในการเขียนโปรแกรมภาษา Scala ) มันชอบโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปแบบและฟีเจอร์แฟนซีทุกประเภทที่มีแนวโน้มที่จะทำให้นักพัฒนา OOP ผิดหวังโดยเฉพาะเมื่อมันเกิดขึ้นพร้อมกัน


หน้าที่ <-> ความจำเป็นคือบรรทัด OOP ขนานกับมัน ฉันคิดว่าขั้นตอนอยู่ที่ปลายอีกด้านของ OOP แต่ฉันไม่แน่ใจ แน่นอนว่ามันเป็นกระบวนทัศน์ที่เก่าแก่กว่าและเป็นกระบวนทัศน์ของ OOP :)
Raynos

2
@ Raynos ไม่มีเส้นตรง OOP เป็นเพียงนามธรรมเล็ก ๆ ที่เป็นนามธรรมของภาษานามธรรมที่เป็นไปได้ และแน่นอนว่ามันช่างโง่เหลือเกินที่จะ จำกัด ตัวเองให้เข้ากับคนใดคนหนึ่ง
SK-logic

6

OOP ถูกพูดถึงน้อยวันนี้เนื่องจากสันนิษฐานว่าเป็นแนวทางพฤตินัยในหลาย ๆ สถานการณ์ AOP ไม่เคยลุกขึ้นจากพื้นเหมือนกับการเคลื่อนไหวมวลชน

http://imgur.com/9VmKC


5

ฉันจำได้ว่าเคยได้ยินเกี่ยวกับการเขียนโปรแกรมมุมมองเชิงเป็นครั้งแรกในการสอน OOPSLA '97 พวกเขาบอกว่ามันจะฆ่า OO เมื่อกี้ ตั้งแต่นั้นมา OO ได้เติบโตเกินความคาดหวังที่สุดเท่านั้น AOP ยังเป็นที่รู้จักกันดีโดยแทบไม่มีผลกระทบใด ๆ ต่ออุตสาหกรรมคอมพิวเตอร์ ฉันคิดว่าคำตอบนั้นชัดเจนว่า AOP ไม่ใช่นักฆ่า OO


1

ดูระบบ AOP ที่มีอยู่ พวกเขาขึ้นอยู่กับว่าคุณมีรหัสที่เขียนในบางรูปแบบ - ตัวอย่างเช่น Spring AOP ขึ้นอยู่กับว่าคุณมีวิธีการที่กำหนดไว้ในชั้นเรียน Castle Windsor รองรับภาษา C # ซึ่งเป็นภาษาเชิงวัตถุ

ในทางทฤษฎีคุณสามารถเปลี่ยนจาก OOP ไปเป็นการเขียนโปรแกรมที่มีโครงสร้างและยังคงรักษา AOP ไว้ แต่ในทางปฏิบัติมันอาจเป็นเรื่องยาก มันง่ายที่จะซับคลาสบางอย่างแทนที่วิธีที่เกี่ยวข้องเพื่อเรียกตัวกรองก่อน / หลังที่เหมาะสมและส่งต่อในกระบวนการฉีดพึ่งพา

เป็นการยากที่จะเปรียบเทียบกับการเขียนวิธีการแบบคงที่เพื่อกำหนดเส้นทางไปยังวิธีการแบบแทรมโพลีนซึ่งออกแบบมาเพื่อเรียกตัวกรองที่ผู้ใช้กำหนด

ดังนั้นจากมุมมองการใช้งานทั่วไป AOP ต้องใช้ OOP


0

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

การออกแบบตามองค์ประกอบ AOP เพิ่มเติมสนับสนุนรูปแบบข้อมูลโรคโลหิตจางซึ่งคนฉลาดกว่าที่ฉันวิจารณ์อยู่

http://martinfowler.com/bliki/AnemicDomainModel.html

(ฉันรู้ว่าบทความข้างต้นเก่า แต่มีความเกี่ยวข้องอย่างน่าประหลาดใจ)

ประเด็นสำคัญก็คือระบบ AOP อยู่ที่นี่ แต่พวกเขาก็ยังห่างไกลจากความสมบูรณ์แบบเช่นกัน ไม่มีระบบที่สมบูรณ์แบบ

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