Які історичні умови призвели до того, що об'єктно-орієнтоване програмування стало головною парадигмою програмування?


14

Які деякі економічні (та інші історичні) фактори спричинили вплив на об'єктно-орієнтовані мови програмування? Я знаю, що Simula розпочала справи, але чи було прийняття мов OOP через постійно зростаючі потреби бізнесу? Або, чи було прийняття зумовлене більшою мірою новими речами, які можна зробити за допомогою мов OOP?

Редагувати Мене справді найбільше цікавить, чи існували якісь фактори, що зовні стосуються самих мов, які дозволяли їм узятись.


Це має сенс, але, мабуть, мене більше цікавили зовнішні обставини, що відбувалися під час розвитку. Цілком може бути, що зовнішні фактори мали обмежений вплив.

Я гарантую вам, що навіть у питанні щодо зовнішніх факторів, програмісти.stackexchange є кращим місцем. У ньому є багато людей, які активно працюють в галузі, і багато людей, які працюють з моменту зняття галузі. Ви набагато частіше знайдете там людину, яка чудово відповість на ваше запитання, ніж тут.
Оп

2
Малий розмову не починав. Симула створила основні поняття орієнтації на об'єкти. Що робив Smalltalk, це взяти ці ідеї та скрутити їх у зовсім іншу модель та відповідати назві. Але варто зазначити, що жодна мова, що відповідає моделі Smalltalk OO, ніколи насправді не була дуже успішною для побудови програм. (За винятком Objective-C, що є особливим випадком: Apple збиває його всім на горло, але ніхто поза екосистемою Apple не використовує його.) Усі успішні мови OO: C ++, Delphi, Java, C #, тощо, використовуйте модель Simula.
Мейсон Уілер

1
Іграшкові цеглини Lego можуть вписатися як зовнішній вплив ...
Джеймі Ф

1
@Mason: не впевнений, що розділяє моделі Simula та Smalltalk. Куди б ти поставив Рубі? LUA? Пітон? Javascript?
кевін клайн

Відповіді:


10

Коротка відповідь

Я думаю, що це був проект програмних проектів до днів ОО. ОО допоміг додавши принципово критичну концепцію - Моделювати реальний світ .


Першою об'єктно-орієнтованою мовою програмування був Simula ще в 1967 році. Однак, на той час розробка програмного забезпечення в цілому ще була в лабораторіях, і більшість парадигм все ще наближалися до апаратних справ.

Протягом повного ще десятиліття розробка програмного забезпечення для корпоративних застосувань зростала за кожні 1970-х, інші комерційні програми, а розробка програмного забезпечення взагалі збільшувалася. Мови, які досі збереглися до цього віку (до 1980 року), були C, Cobol, Fortran та подібні інші. Більшість цих мов є процедурними. Лісп також існував з цього дня - однак я не впевнений, чи це було визначною загальною мовою для комерційного розвитку. Знаменитий термін « Водоспадна модель » також був винайдений на початку 1970-х років.

У більшості комерційних середовищ найважливішим елементом розробки програмного забезпечення було управління проектами. Виникла гостра потреба у жорсткому і принаймні передбачуваному бюджетах та керуванні вимогами, щоб заморозити, щоб проект надійно досягнув фінішу. У цей період був також одним із міфічних Чоловіків ще в 1975 році.

Я думаю, що до кінця 70-х людей було випалено - оскільки процедурні мови не виконали цих обіцянок. І нова парадигма, орієнтована на об'єкти, яка існувала з того часу, зробила її великою. Хоча люди можуть не погодитись, я думаю, що C ++, які допомагають знайомству та перевіреному досвіду та C, та обіцяність орієнтації на об'єкт (спочатку з назвою C з класами) ще в 1983 році стали наріжним каменем до успіху об'єктно-орієнтованого програмування.

Деякі посилання для більш перспективного - http://journal.thedacs.com/issue/43/88

То чому OO?

Я думаю, що ті дні (якщо ви подивитесь на точку зору успіху проекту) - це мало сенс, що те, що ви можете зрозуміти краще, буде керованим краще. Об'єктно-орієнтована методологія з обіцянкою ".. все в житті є об'єктом" здавалося більш схожим на здоровий розум ще до того, як було доведено, що це має сенс. Практичним успіхом цього чинника було саме уявлення про достатню модель моделювання реального світу та проблеми перед стрибком пістолета - що, я думаю, щось принципово нове, що запропонував OO, що жодна інша парадигма не пропонувала до цієї дати. І безумовно, враховуючи, що ця парадигма змусила вас дещо замислитися, перш ніж кодувати більше, ніж процедурні мови, вона показала видимий успіх на програмних проектах, які працювали і з тих пір вони натрапили на!

EDIT
Я також додав би, що мови програмування еволюціонували одночасно паралельно таким фундаментальним поняттям (парадигма ОО, Аспект, Віртуальні машини). Кожна нова концепція та свіже мислення виникали лише тоді, коли нові нові мови програмування опановували її - зберігати лише знайомство, але змінювати основи від серцевина! У той же час - ці нові концепції та нові мови виникли лише через нові бізнес-проблеми. 1980-ті - ОО для великомасштабного програмного забезпечення, 1990 рік Java в епоху Інтернету, PHP / ASP та багато іншого для Інтернету. Інновації в мовах програмування також були зумовлені здебільшого розривною потребою ринку.

Підсумовуючи це, початок 80-х років був віком, коли комерційне програмне забезпечення масштабніших масштабів знімалося - в той час як проекти з процедурними мовами мали свої проблеми, OO демонструвало краще світло і робило проекти більш успішними.


Якою була характеристика зміни та куди поїхати? Кінець 70-х. Що розроблені розробники розуміють, що потрібно йти? Втомився від процедурних процедур, так, але там повинні бути десяткові альтернативи?
Незалежна

@Jonas - добре - відповідь змінила.
Діпан Мехта

Щодо історичного успіху, який ми оцінюємо - ми можемо однозначно сказати, що знайомство відіграє певну роль. C (був спадкоємцем B), C ++ був кращим C, хоча OO нібито змінює парадигму. Навіть Java був готовим стрибком з C ++ (що більше нагадувало C ++ без проблем C ++. Наприклад, пам'ять та портативність). Більшість цих мов схрещували прірви , більш ефективно придбавши існуючий простір, хоча в них було щось більш фундаментальне. Тим більше, що кожну мову придбають деякі програмісти, які вже знають деякі інші мови програмування. Але це може бути не завжди правдою!
Діпан Мехта

1
Я також додам, що мови програмування еволюціонували одночасно паралельно таким фундаментальним поняттям (парадигма ОО, Аспект, Віртуальні машини). Кожна нова концепція та свіже мислення виникали лише тоді, коли нові нові мови програмування опановували її - зберігати лише знайомство, але змінювати основи від основної ! У той же час - ці нові концепції та нові мови виникли лише через нові бізнес-проблеми. 1980-ті - ОО для масштабного програмного забезпечення, 1990 рік Java в епоху Інтернету, PHP / ASP та багато іншого для Інтернету. Інновації в мовах програмування також були зумовлені здебільшого розривною потребою ринку.
Діпан Мехта

1
"Моделювати реальний світ" звучить переконливо, але в більшості випадків цього не відбувається. У Customerкласі немає таких методів eatLunch, goToWorkабо sleep, хоча це роблять клієнти в реальному світі . У Productкласі є кілька методів, хоча більшість продуктів взагалі точно не мають поведінки в реальному світі . Тому я б заперечував, що модель ОО відповідає лише (більш-менш) за властивостями, але зовсім не за поведінкою, реальному світу. Але вам не потрібно OO, щоб мати модель даних, що відповідає об'єктам реального світу. Типи записів - це все, що потрібно.
користувач281377

6

Я думаю, що найбільшою причиною став успіх графічних інтерфейсів користувача, таких як X та Windows. Графічний інтерфейс складається з декількох об'єктів, які мають поведінку самостійно, те, що OO вміє тісно представляти.

З іншого боку, користувальницький текстовий інтерфейс (який не намагається нагадувати графічний інтерфейс) часто просто слідує шаблону відповіді команд, який легко реалізується на процедурній мові. Правила ведення бізнесу та подібні матеріали впроваджуються з процедурними мовами десятиліттями без особливих проблем, і досі багато програм OO для бізнес-додатків є доволі процедурними; з дурними об'єктами, що містять дані, та об'єктами без громадянства, що містять бізнес-правила; перший може бути записом у процедурному мові, пізніше - це процедури.


4

Я розглядаю ООП як природний еволюційний крок від процесуального кодексу:

  1. Процедурний код: Скажіть машині зробити A, а потім скажіть, щоб вона робила B.
  2. OOP: Упакуйте процедурні інструкції в шматки для багаторазового використання шляхом визначення інтерфейсів / входів / виходів. (Попередження: спрощення.)

Я впевнений, що хтось із ширшим поглядом задзвенить, але здається, що це було природним прогресом у простому дозволі програмістам швидше виробляти код: тобто дозволяти більшого використання коду.

На цей погляд, найбільшим зовнішнім фактором було зменшення витрат на кінські сили процесора (порівняно з витратами на робочу силу розробника для створення типових програм): обчислення витрат на використання класів OOP стало менш занепокоєнням, ніж економія часу розробника. (Цей самий компроміс витрат CPU проти витрат програміста вплинув на багато інших аспектів програмування.)


2

На початку було імперативне програмування (якщо можна так назвати). Прості інструкції, які розповідали мейнфрейму, що і як слід обчислювати. Ці мови програмування використовували безумовні стрибки та інші "неструктуровані" інструкції, більшість із яких є екзотичними за сьогоднішніми стандартами.

Потім хтось придумав структури для програмування. Про те, що в той час, як ми робимо, і пропонуємо, що ми знаємо сьогодні. Це було великим нововведенням, оскільки зараз заявки з відносно складним потоком можна було легко написати та зрозуміти. Таким чином народилося структуроване програмування.

Потім приїхали деякі інші люди, які сказали, що вам потрібно повторити багато коду тут і там, і це був кошмар, щоб підтримувати так, щоб було винайдено спосіб повторного використання коду. Люди придумали процедури та функції для обмеження багаторазових бітів коду. Це також породило принципи інкапсуляції та єдиної відповідальності.

Тоді деякі вчені сказали, що функціональність повинна тісно поєднуватися з даними, над якими вона працює. Потім вони додали поняття успадкування для повторного використання коду та поліморфізму, щоб відповідати логічному способу класифікації, що працювала в реальному житті. Так народилися мови програмування третього покоління та ООП.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.