Що вони назвали об'єктно-орієнтованим програмуванням до того, як Алан Кей винайшов цей термін?


22

Алан Кей стверджує, що "я склав термін" об'єктно-орієнтований ", і можу вам сказати, що я не мав на увазі C ++". Що він мав на увазі, звичайно, був Smalltalk. Але він сам не склав об'єктно-орієнтованого програмування; він отримав основні ідеї від Simula. Отже, якщо термін ще не був винайдений, як вони спочатку називали об'єктно-орієнтоване програмування в Simula?

Відповіді:


39

Насправді Алан Кей не мав на увазі Smalltalk, коли придумав термін "об'єктно-орієнтоване програмування":

В штаті Юта, після 66 листопада, коли під впливом Sketchpad, Simula, дизайну для ARPAnet, Burroughs B5000 та мого досвіду біології та математики я подумав про архітектуру програмування. Напевно, у 1967 році хтось запитав мене, що я роблю, і я сказав: "Це об'єктно-орієнтоване програмування".

Первісна концепція його мала наступні частини.

  • Я подумав, що такі об’єкти, як біологічні клітини та / або окремі комп’ютери в мережі, здатні спілкуватися лише з повідомленнями (тому повідомлення надходило на самому початку - знадобилося певний час, щоб зрозуміти, як зробити обмін повідомленнями на мові програмування достатньо ефективно, щоб бути корисним).
  • Я хотів позбутися даних. B5000 майже зробив це завдяки своїй майже неймовірній архітектурі HW. Я зрозумів, що метафора комірки / цілого комп'ютера позбудеться даних, і що "<-" буде просто ще одним символом повідомлення (мені знадобилося досить багато часу, щоб продумати це, бо я справді вважав усі ці символи як імена для функції та процедури.
  • З моїх математичних передумов я зрозумів, що кожен об'єкт може мати кілька алгебр, пов'язаних з ним, і можуть бути такі сім'ї, і що це буде дуже дуже корисно. Термін "поліморфізм" був накладений набагато пізніше (я думаю, Пітер Вегнер), і це не зовсім справедливо, оскільки він справді походить від номенклатури функцій, і я хотів зовсім трохи більше, ніж функції. Я склав термін «загальність» для роботи з родовою поведінкою у квазіалгебраїчній формі.
  • Мені не сподобалося, як наслідували наследство Simula I або Simula 67 (хоча я вважав, що Nygaard і Dahl були просто приголомшливими мислителями та дизайнерами). Тому я вирішив залишити спадщину як вбудовану функцію, поки не зрозумів її краще.

Smalltalk був результатом цієї концепції, запозичивши та розширивши поняття "об'єкт" та "клас" від Simula, які Симула, у свою чергу, успадкував від ALGOL, як це описано у "Розвитку мов імітації" Крістен Нігаард та Оле-Йоган. Даль (1978, стор. 253):

В ALGOL блоки (включаючи процедури) зовні розглядаються як узагальнені операції. Вводячи механізми квазіпаралельного послідовності, ~ по суті, одна і та ж конструкція могла б грати роль процесів паралельно, і через механізми іменування блокових екземплярів та доступу до їх вмісту вони могли функціонувати як узагальнені об'єкти даних. Істотні переваги поєднання даних та операцій в одній конструкції вже були вивчені.

Одним з результатів цього дослідження стало відкриття, що «атрибути процедури» можуть бути корисними. Наступний приклад класу "абстрактних" автомобільних об'єктів цитується з документа визначення мови (Дал та Нігаард, 1965), секта. 5.3.

Наступним натхненням, особливо для підкласингу, став рекордний клас CAR Hoare (стор. 258):

Ідея підкласу Хоара (68) була природною відправною точкою, але були дві складнощі:

  1. Нам потрібні були підкласи процесів із власними діями та локальними стеками даних, а не лише із чистими записами даних.
  2. Нам також потрібно було згрупувати спільні властивості процесу таким чином, щоб вони могли бути застосовані пізніше, у різних різних ситуаціях, не обов'язково відомих заздалегідь.

Восени 1966 року було витрачено багато часу на намагання адаптувати конструкцію рекордів Хоара для задоволення наших вимог, без успіху. Рішення прийшло несподівано, з ідеєю «приставки», у грудні 1966 року. Ми думали про термін кіоску на мосту, з чергою автомобілів, які були або вантажівками, або автобусами. (Цей приклад знову з’являється в (Dahl and Nygaard 1968)).

Терміни "клас" та "об'єкт" також з'являються на SIMULA 67 ОБ'ЄМНІЙ БАЗОВІЙ МОВІ Оле-Йохана Даля, Бьорма Мерхауга та Крістен Нюгаард (стор. 4-5):

Концепція блоку відповідає інтуїтивно зрозумілому поняттю "субпроблема" або "під алгоритм", що є корисною одиницею розкладання в ортодоксальних областях застосування.

Блок - це формальний опис або "шаблон" зведеної структури даних та пов'язаних з ними алгоритмів та дій.

...

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

Класи детальніше обговорюються в главі 1.3.3 (стор. 5):

Нова центральна концепція в Simula 67 - це "об'єкт". Об'єкт - це автономна програма (блок-примірник), що має власні локальні дані та дії, визначені "декларацією класу". Декларація класу визначає програмний шаблон (дані та дії), а об'єкти, що відповідають цьому шаблону, кажуть, "належать до одного класу".

...

Отже, хоча термін "орієнтована на об'єкти" ще не був винайдений, і "клас", і "об'єкт" використовувались аналогічно їхньому сучасному використанню ще до того, як Алан Кей почав розробляти Smalltalk у 1969 році.

На Sketchpad Іван Сазерленд іде до того, щоб визначити Simula як першу об'єктно-орієнтовану мову програмування : система графічної комунікації людина-машина (стор. 4), також визнаючи вплив CAR Hoare, Douglas T. Ross ' , ALGOL та Sketchpad:

Тим не менш, спроба Сазерленда усунути поділ між користувачами та програмістами була не єдиною системою, яка, не виконавши цього, забезпечила образний стрибок до нової парадигми програмування. Сімула Нігаарда і Даля [7] була першою традиційною мовою програмування, що включала принципи орієнтації на об'єкти, але реалізація Скетчпадом успадкування на основі класів і екземплярів (хоча і не називаються об'єктами) передувала Simula протягом декількох років.

Схоже, це було загальним впливом завдяки роботі Дугласа Т. Росса, який згадується у визнаннях цієї дисертації, а також цитується в технічному звіті лабораторії MIT Lincoln Laboratory. Росс сидів у комітеті Algol 68 разом з CAR CAR Hoare в середині 1960-х, де його попередня робота над рекордною структурою даних (називається плекс) вплинула на власні ідеї Хоара щодо абстрактних типів даних [3], пізніше зараховані Нігаардом і Далем як джерело механізмів визначення класу в Simula [7].

Проект Dynabook Alan Kay, що призвів як до «Зірки Xerox», так і до вибуху інтересу до об’єктно-орієнтованого програмування через його мову Smalltalk, був безпосередньо під впливом Sketchpad. Кей писав про те, що генезис Малталка лежав у збігу випадкових випадків на його столі як стрічки роздачі Симули, так і копії тези Сазерленда "Ескіз" [5]. Кей визнав, що обидві системи базуються на одних і тих же базових концепціях типу (очевидно, отриманих за допомогою двох різних маршрутів від плекс Росса), і що вони можуть стати основою більш широко використовуваної системи програмування. Порівнюючи ці два шляхи впливу, Simula був набагато більшим проектом, ніж Sketchpad, справедливо визнаний першою об'єктно-орієнтованою мовою програмування,

Однак Алан Кей, очевидно, вважає Smalltalk першою об'єктно-орієнтованою мовою :

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

і, придумавши цей термін, я думаю, що там не так багато дискусій.

Нарешті, щоб відповісти на ваше запитання: Деякі основні поняття орієнтації на об'єкти існували на Simula та на більш ранніх мовах, таких як Algol і LISP, але сама парадигма цього не зробила, отже, насправді не було потреби в імені.

Smalltalk був розроблений з урахуванням орієнтації на об'єкт, принаймні, як Алан Кей вважав об'єктну орієнтацію :

OOP для мене означає лише обмін повідомленнями, локальне збереження та захист та приховування державно-процесу, а також надзвичайне запізнення всіх речей. Це можна зробити в Smalltalk та LISP. Можливо, є й інші системи, в яких це можливо, але я їх не знаю.

Архітектура може здатися об'єднанням більш ранніх концепцій, але її центральні концепції були введені Smalltalk, таким чином, ознаменувавши першу реалізацію парадигми.


2
+1 Як завжди, відмінна відповідь Янніс! Я з цього навчився зовсім небагато.
Джонатан Хенсон

6
Насправді, тут багато дискусій, і вагомі причини для цього. Незважаючи на твердження Алана Кей про "нову парадигму", практично немає способу визначити "об'єктно-орієнтований", який включає Smalltalk, але виключає Simula. Ідея "все є об'єктом" була присутня в деяких реалізаціях (і це здебільшого концепція в Smalltalk - як оптимізація, малі цілі об'єкти мають уявлення, які майже не відрізняються від того, що б використовували щось на зразок C або Pascal).
Джеррі Труну

1
@JerryCoffin Я не погоджуюсь з тим, що більшість концепцій та принципів були там, нічого нового під сонцем, в "Ранній історії Smalltalk Kay" навіть згадує Платона як натхнення для орієнтації на об'єкт, серед тонни інших впливів. Особисто я продовжуватиму думати Smalltalk як про введення парадигми, оскільки це було першою реалізацією, розробленою з урахуванням парадигми, тоді як для попередніх реалізацій відповідні концепції, де особливості, основні чи мінорні, але не філософія рушійної діяльності, яка принесла далі мова.
янніс

1
@JerryCoffin (продовження ...) Це, однак, територія полум'я війни, і я дійсно не думаю, що це має значення. Я думаю, що цитата Сазерленда, яку я включив, гідно містить уявлення про те, що не всі згодні з тим, що Кей "винайшов" парадигму, і моя особиста думка з цього приводу є не що інше, як виноска.
янніс

5
Власне, центральне поняття - це не "кожна сутність є об'єктом", а "кожна дія є надсиланням повідомлення". Алан Кей навіть каже, що шкодує, називаючи це "об'єктно-орієнтованим" і що щось на кшталт "орієнтоване на повідомлення" було б кращим терміном.
Йорг W Міттаг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.