Что они называли объектно-ориентированным программированием до того, как Алан Кей изобрел этот термин?

22

Алан Кей утверждает, что «я придумал термин« объектно-ориентированный », и я могу сказать, что я не имел в виду C ++». Разумеется, он имел в виду Smalltalk. Но он не придумал само объектно-ориентированное программирование; он получил основные идеи от Симулы. Так что, если этот термин еще не был изобретен, как они первоначально называли объектно-ориентированное программирование в Simula?

Мейсон Уилер
источник

Ответы:

39

На самом деле Алан Кей не имел в виду Smalltalk, когда придумал термин «объектно-ориентированное программирование»:

В Юте, где-то после 66 ноября, когда под влиянием Sketchpad, Simula, дизайна для ARPAnet, Burroughs B5000 и моего опыта в биологии и математике, я подумал об архитектуре для программирования. Вероятно, это было в 1967 году, когда кто-то спросил меня, что я делаю, и я сказал: «Это объектно-ориентированное программирование».

Первоначальная концепция этого состояла из следующих частей.

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

Smalltalk был результатом этой концепции, заимствовав и расширив понятия «объект» и «класс» от Simula, которые Simula, в свою очередь, унаследовала от ALGOL, как описано в «Развитии языков Simula» Кристен Нюгаард и Оле-Йоханом Даль (1978, стр. 253):

В ALGOL блоки (включая процедуры) внешне рассматриваются как обобщенные операции. Внедряя механизмы квазипараллельного секвенирования, по сути, одна и та же конструкция может играть роль процессов параллельно, а через механизмы именования экземпляров блоков и доступа к их содержимому они могут функционировать как обобщенные объекты данных. Существенные преимущества объединения данных и операций в одной конструкции уже были изучены.

Одним из результатов этого исследования стало обнаружение того, что «атрибуты процедуры» могут быть полезны. Следующий пример класса «абстрактных» автомобильных объектов цитируется в документе «Определение языка» (Dahl and Nygaard 1965), раздел. 5.3.

Еще одним источником вдохновения, особенно для подклассов, стал класс записи CAR Hoare (стр. 258):

Идея подкласса Хоара (68) была естественной отправной точкой, но было две трудности:

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

Осенью 1966 года было потрачено много времени на то, чтобы безуспешно пытаться адаптировать конструкцию класса записей Hoare для удовлетворения наших требований. Решение пришло внезапно, с идеей «префикса», в декабре 1966 года. Мы думали с точки зрения кабины атолла на мосту, с очередью автомобилей, которые были либо грузовиками, либо автобусами. (Этот пример снова появляется в (Dahl and Nygaard 1968)).

Термины «класс» и «объект» также встречаются в SIMULA 67 COMMON BASE LANGUAGE от Оле-Йохана Даля, Бьорма Мирхауга и Кристен Найгаард (стр. 4-5):

Концепция блока соответствует интуитивному понятию «подзадача» или «подалгоритм», который является полезной единицей разложения в ортодоксальных прикладных областях.

Блок - это формальное описание или «шаблон» структуры агрегированных данных и связанных с ними алгоритмов и действий.

...

Концепция расширенного блока вводится посредством объявления «класса» и связанного с ним механизма взаимодействия, такого как «ссылки на объекты» (указатели), удаленный доступ »,« квазипараллельная »операция и блок« конкатенация ».

Классы обсуждаются более подробно в главе 1.3.3 (стр. 5):

Центральным новым понятием в Simula 67 является «объект». Объект - это автономная программа (экземпляр блока), имеющая свои локальные данные и действия, определенные «объявлением класса». Объявление класса определяет программный шаблон (данные и действие), и объекты, соответствующие этому шаблону, называются «принадлежащими одному и тому же классу».

...

Таким образом, хотя термин «объектно-ориентированный» еще не был изобретен, «класс» и «объект» использовались аналогично их современному использованию до того, как Алан Кей начал разработку Smalltalk в 1969 году.

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

Тем не менее, попытка Сазерленда устранить разделение между пользователями и программистами была не единственной системой, которая, не сумев этого сделать, обеспечила творческий скачок к новой парадигме программирования. Simula Nygaard и Dahl [7] был первым традиционным языком программирования, включающим принципы объектной ориентации, но реализация Sketchpad наследования на основе классов и экземпляров (хотя и не называемых объектами) предшествовала Simula на несколько лет.

Похоже, что общее влияние оказали работы Дугласа Т. Росса, который упоминается в благодарностях к этой диссертации и также цитируется в техническом отчете лаборатории Линкольна Массачусетского технологического института на ее основе. Росс сидел в комитете Algol 68 с CAR Hoare в середине 1960-х годов, где его предыдущая работа над структурой данных, похожей на запись (называемая сплетением), повлияла на собственные идеи Хоара об абстрактных типах данных [3], которые позже были приписаны Nygaard и Dahl. как происхождение механизмов определения классов в Simula [7].

Sketchpad оказал непосредственное влияние на оригинальный проект Алана Кея Dynabook, который привел к появлению Xerox Star и взрыву интереса к объектно-ориентированному программированию через его язык Smalltalk. Кей написал о том факте, что происхождение Smalltalk лежало в его случайном появлении на его столе как раздаточной ленты Simula, так и копии тезиса Сазерленда Sketchpad [5]. Кей признал, что эти две системы основаны на одних и тех же базовых концепциях типов (очевидно, полученных по двум различным маршрутам из плекса Росса), и что они могут составить основу более широко используемой системы программирования. Сравнивая эти два пути влияния, Simula был гораздо большим проектом, чем Sketchpad, по праву признанным первым языком объектно-ориентированного программирования.

Однако Алан Кей, очевидно, считает Smalltalk первым объектно-ориентированным языком :

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

и, придумав термин, я думаю, что там не так много споров.

Чтобы наконец ответить на ваш вопрос: некоторые из основных концепций объектной ориентации существовали в Simula и в более ранних языках, таких как Algol и LISP, но сама парадигма не существовала, следовательно, в действительности не было необходимости в имени.

Smalltalk был разработан с ориентацией на объект, по крайней мере то, что Алан Кей считал объектной ориентацией :

Для меня ООП означает только обмен сообщениями, локальное хранение и защиту, а также скрытие процесса состояния и крайнюю позднюю привязку всех вещей. Это можно сделать в Smalltalk и в LISP. Возможно, есть другие системы, в которых это возможно, но я не знаю о них.

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

Яннис
источник
2
+1 Как обычно, отличный ответ Яннис! Я многому научился из этого.
Джонатан Хенсон
6
На самом деле, есть много споров и веских причин для этого. Несмотря на самоусиливающееся утверждение Алана Кея о «новой парадигме», практически невозможно определить «объектно-ориентированный», который включает Smalltalk, но исключает Simula. Идея «все является объектом» существовала в некоторых реализациях (и в основном это также концепция в Smalltalk - в качестве оптимизации у целочисленных объектов малого размера есть представление, которое в значительной степени неотличимо от того, что будет использовать что-то вроде C или Pascal).
Джерри Коффин
1
@JerryCoffin Я не согласен с тем, что в «Ранней истории Smalltalk Kay» было большинство концепций и принципов, ничего нового под солнцем, и даже упоминает Платона как источник вдохновения для ориентации на объект среди множества других влияний. Лично я буду продолжать думать о Smalltalk как о введении этой парадигмы, потому что это была первая реализация, разработанная с учетом этой парадигмы, тогда как в более ранних реализациях это связанные концепции, в которых особенности, основные или второстепенные, но не философия вождения, которая принесла вперед язык.
Яннис
1
@JerryCoffin (продолжение ...) Это, однако, территория пламенной войны, и я действительно не думаю, что это имеет значение. Я думаю, что цитата Сазерленда, которую я включил, адекватно отражает тот факт, что не все согласны с тем, что Кей «изобрел» эту парадигму, и мое личное мнение по этому вопросу - не более чем сноска.
Яннис
5
На самом деле, центральным понятием является не «каждый объект - это объект», а «каждое действие - это отправка сообщения». Алан Кей даже говорит, что сожалеет о том, что назвал его «объектно-ориентированным», и что-то вроде «ориентированного на сообщения» было бы лучше.
Йорг Миттаг