Насправді Алан Кей не мав на увазі 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) була природною відправною точкою, але були дві складнощі:
- Нам потрібні були підкласи процесів із власними діями та локальними стеками даних, а не лише із чистими записами даних.
- Нам також потрібно було згрупувати спільні властивості процесу таким чином, щоб вони могли бути застосовані пізніше, у різних різних ситуаціях, не обов'язково відомих заздалегідь.
Восени 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, таким чином, ознаменувавши першу реалізацію парадигми.