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


14

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

แก้ไข ฉันสนใจมากที่สุดว่ามีปัจจัยบางอย่างเกิดขึ้นกับภาษาภายนอกที่พวกเขาอนุญาตหรือไม่


มันสมเหตุสมผล แต่ฉันคิดว่าฉันสนใจในสถานการณ์ภายนอกที่เกิดขึ้นในระหว่างการพัฒนามากขึ้น มันอาจเป็นไปได้ว่าปัจจัยภายนอกมีผล จำกัด

ฉันรับประกันคุณได้ว่าถึงแม้จะมีคำถามเกี่ยวกับปัจจัยภายนอก programmers.stackexchange ก็เป็นสถานที่ที่ดีกว่า มีคนมากมายที่ทำงานอย่างแข็งขันในอุตสาหกรรมและหลายคนที่ทำงานตั้งแต่อุตสาหกรรมเริ่มทำงาน คุณจะพบคนที่มีคำตอบที่ดีสำหรับคำถามของคุณมากกว่าที่นี่
เลือก

2
Smalltalk ไม่ได้เริ่มต้น Simulaสร้างแนวคิดพื้นฐานของการวางแนววัตถุ สิ่งที่สมอลล์ทอล์คทำคือนำความคิดเหล่านั้นมาเปลี่ยนเป็นรูปแบบที่แตกต่างกันมากและใช้ชื่อที่เหมาะสม แต่น่าสังเกตว่าไม่มีภาษาใดที่ตามโมเดล Smalltalk ของ OO ที่จริงแล้วประสบความสำเร็จอย่างมากในการสร้างโปรแกรม (ยกเว้น Objective-C ซึ่งเป็นกรณีพิเศษ: Apple ผลักคอของทุกคนไว้ด้านข้าง แต่ไม่มีใครนอกระบบนิเวศของ Apple ใช้มัน) ภาษา OO ที่ประสบความสำเร็จทั้งหมด: C ++, Delphi, Java, C #, ฯลฯ ใช้แบบจำลอง Simula
Mason Wheeler

1
อิฐของเล่นเลโก้อาจเข้ากันได้ดีกับอิทธิพลภายนอก ...
Jamie F

1
@ ช่างก่ออิฐ: ไม่แน่ใจว่าอะไรแบ่งรุ่น Simula และ Smalltalk คุณจะใส่ทับทิมที่ไหน ลัวะ? งูใหญ่? Javascript?
kevin cline

คำตอบ:


10

คำตอบสั้น ๆ

ฉันคิดว่ามันเป็นความวุ่นวายของโครงการซอฟต์แวร์ก่อนวัน OO OO ช่วยโดยการเพิ่มแนวคิดพื้นฐานที่สำคัญ - รุ่นโลกแห่งความจริง


ภาษาโปรแกรมเชิงวัตถุแรกคือSimulaย้อนกลับไปในปี 1967 อย่างไรก็ตามในขณะนั้นการพัฒนาซอฟต์แวร์ส่วนใหญ่ยังคงอยู่ในห้องทดลองมากขึ้นและกระบวนทัศน์ส่วนใหญ่ยังคงใกล้เคียงกับกรณีฮาร์ดแวร์

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

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

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

ข้อมูลอ้างอิงสำหรับมุมมองเพิ่มเติม - http://journal.thedacs.com/issue/43/88

เหตุใดจึงต้อง OO

ฉันคิดว่าสมัยนั้น (ถ้าคุณดูที่มุมมองความสำเร็จของโครงการ) - มันสมเหตุสมผลที่สิ่งที่คุณสามารถเข้าใจได้ดีกว่าจะจัดการได้ดีขึ้น วิธีการเชิงวัตถุด้วยคำมั่นสัญญา".. ทุกสิ่งในชีวิตคือสิ่งที่เป็นวัตถุ"ดูเหมือนเป็นเรื่องธรรมดามากยิ่งขึ้นก่อนที่มันจะถูกพิสูจน์ว่ามีความหมาย ความสำเร็จในทางปฏิบัติของปัจจัยนี้คือความคิดที่จะสร้างแบบจำลองโลกแห่งความจริงและปัญหาที่เกิดขึ้นก่อนที่จะกระโดดปืน - ซึ่งฉันคิดว่ามีอะไรใหม่ที่เป็นพื้นฐานที่ OO เสนอให้ซึ่งไม่มีกระบวนทัศน์อื่นที่เสนอจนถึงวันนั้น และแน่นอนว่ากระบวนทัศน์นี้บังคับให้คุณคิดก่อนที่คุณจะเขียนโค้ดมากกว่าภาษาเชิงปฏิบัติมันแสดงให้เห็นความสำเร็จที่เห็นได้ชัดในโครงการซอฟต์แวร์ที่ใช้และตั้งแต่นั้นมาพวกเขาก็ติดอยู่!

แก้ไข
ฉันยังจะเพิ่มภาษาการเขียนโปรแกรมที่พัฒนาพร้อมกันในแนวขนานกับแนวคิดพื้นฐานดังกล่าว (OO กระบวนทัศน์, เครื่องเสมือน,) แต่ละแนวคิดใหม่และการคิดที่สดใหม่เกิดขึ้นเฉพาะเมื่อภาษาการเขียนโปรแกรมใหม่ที่เชี่ยวชาญ - ให้ความคุ้นเคยเท่านั้น หลัก! ในเวลาเดียวกัน - แนวคิดใหม่และภาษาใหม่เหล่านี้เกิดขึ้นเนื่องจากปัญหาทางธุรกิจใหม่เท่านั้น ปี 1980 - OO สำหรับซอฟต์แวร์ขนาดใหญ่, 1990 Java ในยุคอินเทอร์เน็ต, PHP / ASP และอื่น ๆ อีกมากมายสำหรับเว็บ นวัตกรรมในการเขียนโปรแกรมภาษาได้รับแรงผลักดันส่วนใหญ่จากความต้องการของตลาดที่ไม่ต่อเนื่อง

โดยสรุป 80 ต้น ๆ นั้นเป็นยุคที่ซอฟต์แวร์เชิงพาณิชย์ขนาดใหญ่ถูกถอดออกในขณะที่โครงการที่มีภาษาเชิงปฏิบัติมีปัญหา OO แสดงให้เห็นว่ามีแสงที่ดีขึ้นและทำให้โครงการประสบความสำเร็จมากขึ้น


อะไรคือแบคทีเรียของการเปลี่ยนแปลงและจะไปที่ไหน สิ้นสุดยุค 70 นักพัฒนาที่ทำสิ่งใดเข้าใจว่าถึงเวลาแล้ว เบื่อกับขั้นตอนใช่แล้ว แต่ต้องมีตัวเลือกมากมายอยู่ใช่ไหม?
อิสระ

@Jonas - ok - แก้ไขคำตอบ
Dipan Mehta

เท่าที่เราประสบความสำเร็จในประวัติศาสตร์เราประเมินว่าเราสามารถพูดได้ว่าความคุ้นเคยมีบทบาทบางอย่าง C (เป็นตัวตายตัวแทนของ B), C ++ เป็น C ที่ดีกว่าแม้ว่า OO จะเปลี่ยนกระบวนทัศน์ แม้แต่ Java ก็พร้อมกระโดดจาก C ++ (ซึ่งก็เหมือน C ++ มากกว่าโดยไม่มีปัญหา C ++ .eg. memory และ portability) ภาษาเหล่านี้ส่วนใหญ่ข้าม chasmsโดยการหาพื้นที่ที่มีอยู่ได้อย่างมีประสิทธิภาพมากขึ้นแม้ว่าพวกเขาจะมีบางสิ่งพื้นฐานมากขึ้นในพวกเขา มากกว่านั้นเพราะทุกภาษาจะมีโปรแกรมเมอร์บางคนที่รู้จักภาษาโปรแกรมอื่นอยู่แล้ว แต่สิ่งนี้อาจไม่เป็นจริงเสมอไป!
Dipan Mehta

1
ฉันยังจะเพิ่มภาษาการเขียนโปรแกรมที่พัฒนาพร้อมกันในแนวขนานกับแนวคิดพื้นฐานเช่น (OO กระบวนทัศน์, เครื่องเสมือน,) แต่ละแนวคิดใหม่และการคิดที่สดใหม่เกิดขึ้นเฉพาะเมื่อภาษาการเขียนโปรแกรมใหม่ที่เชี่ยวชาญใหม่ - รักษาความคุ้นเคย แต่เปลี่ยนพื้นฐานจากหลัก ! ในเวลาเดียวกัน - แนวคิดใหม่และภาษาใหม่เหล่านี้เกิดขึ้นเนื่องจากปัญหาทางธุรกิจใหม่เท่านั้น ปี 1980 - OO สำหรับซอฟต์แวร์ขนาดใหญ่, 1990 Java ในยุคอินเทอร์เน็ต, PHP / ASP และอื่น ๆ อีกมากมายสำหรับเว็บ นวัตกรรมในการเขียนโปรแกรมภาษาได้รับแรงผลักดันส่วนใหญ่จากความต้องการของตลาดที่ไม่ต่อเนื่อง
Dipan Mehta

1
"จำลองโลกแห่งความเป็นจริง" ฟังดูข้อสรุป แต่ในกรณีส่วนใหญ่มันไม่ได้เกิดขึ้น Customerชั้นไม่ได้มีวิธีการเช่นeatLunch, goToWorkหรือsleepแม้เรื่องนี้เป็นสิ่งที่ลูกค้าทำในโลกแห่งความจริง Productชั้นจะมีวิธีการหลายวิธี แต่ผลิตภัณฑ์ส่วนใหญ่ได้ว่าพฤติกรรมที่ทุกคนในโลกแห่งความจริง ดังนั้นฉันขอยืนยันว่าแบบจำลอง OO นั้นสอดคล้องกัน (มากหรือน้อยกว่า) ในแง่ของคุณสมบัติ แต่ไม่ใช่ในแง่ของพฤติกรรมกับโลกแห่งความเป็นจริง แต่คุณไม่ต้องการให้ OO มีโมเดลข้อมูลที่สอดคล้องกับวัตถุในโลกแห่งความเป็นจริง ประเภทเร็กคอร์ดคือทั้งหมดที่ใช้
281377

6

ฉันคิดว่าเหตุผลที่ใหญ่ที่สุดคือความสำเร็จของส่วนติดต่อผู้ใช้แบบกราฟิกเช่น X และ Windows GUI ประกอบด้วยวัตถุหลายอย่างที่มีพฤติกรรมของตนเองสิ่งที่ OO สามารถแสดงได้อย่างใกล้ชิด

ในทางกลับกันส่วนติดต่อผู้ใช้แบบข้อความ (ซึ่งไม่ได้พยายามคล้ายกับ GUI) มักจะเป็นไปตามรูปแบบการตอบสนองคำสั่งซึ่งสามารถนำไปใช้อย่างง่ายดายในภาษาขั้นตอน กฎเกณฑ์ทางธุรกิจและสิ่งที่คล้ายกันได้ถูกนำมาใช้กับภาษาเชิงปฏิบัติมานานหลายทศวรรษโดยไม่มีปัญหามากเกินไปและในทุกวันนี้โปรแกรม OO จำนวนมากสำหรับการใช้งานทางธุรกิจค่อนข้างเป็นขั้นตอน ด้วยวัตถุโง่ที่เก็บข้อมูลและวัตถุไร้สัญชาติที่มีกฎเกณฑ์ทางธุรกิจ สิ่งแรกอาจเป็นบันทึกในชุดคำสั่งขั้นตอนต่อไปอาจเป็นขั้นตอนได้


4

ฉันเห็น OOP เป็นขั้นตอนวิวัฒนาการตามธรรมชาติจากรหัสขั้นตอน:

  1. รหัสขั้นตอน: บอกให้เครื่องทำ A จากนั้นบอกให้ทำ B
  2. OOP: จัดทำแพคเกจคำแนะนำขั้นตอนให้เป็นชิ้นที่นำกลับมาใช้ใหม่ได้โดยกำหนดอินเตอร์เฟส / อินพุต / เอาต์พุต (คำเตือน: การทำให้เข้าใจง่าย)

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

ในมุมมองนี้ปัจจัยภายนอกที่ใหญ่ที่สุดคือลดค่าใช้จ่ายของตัวประมวลผลแรงม้า (เทียบกับต้นทุนแรงงานของนักพัฒนาเพื่อสร้างโปรแกรมทั่วไป): การคำนวณค่าใช้จ่ายในการใช้คลาส OOP กลายเป็นเรื่องที่น่ากังวลน้อยกว่าการประหยัดเวลาของนักพัฒนา (การแลกเปลี่ยนค่าใช้จ่าย CPU เดียวกันนี้กับค่าใช้จ่ายโปรแกรมเมอร์มีผลต่อการเขียนโปรแกรมด้านอื่น ๆ อีกมากมาย)


2

ในการเริ่มต้นมีการเขียนโปรแกรมที่จำเป็น (ถ้าคุณสามารถเรียกมันว่า) คำแนะนำง่ายๆที่บอกเมนเฟรมว่าควรคำนวณอะไรและอย่างไร ภาษาการเขียนโปรแกรมเหล่านั้นใช้การข้ามแบบไม่มีเงื่อนไขและคำแนะนำ "ไม่มีโครงสร้าง" ส่วนใหญ่เป็นภาษาแปลกใหม่ตามมาตรฐานของวันนี้

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

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

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

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