Дата: Ср, 23 липня 2003 09:33:31 -0800 До: Стефан Рам [видалено для конфіденційності] Від: Алан Кей [видалено для конфіденційності] Тема: Re: Роз'яснення "об'єктно-орієнтованого"
Привіт Стефане -
Вибачте за затримку, але я був у відпустці.
О 18:27 +0200 7/17/03 Стефан Рам написав:
Шановний доктор Кей,
Я хотів би мати якесь авторитетне слово про термін "об'єктно-орієнтоване програмування" для моєї сторінки підручника з цього питання. Єдині два джерела, які я вважаю "авторитетними", - це Міжнародна організація зі стандартів, яка визначає "об'єктно-орієнтовану" в "ISO / IEC 2382-15", і ви, тому що, як то кажуть, ви ввели цей термін.
Я майже впевнений, що так і зробив.
На жаль, важко знайти веб-сторінку або джерело з визначенням або описом цього терміна. Існує кілька повідомлень про те, що ви могли сказати з цього приводу (наприклад, "успадкування, поліморфізм та інкапсуляція"), але це не джерела з перших рук. Я також усвідомлюю, що пізніше ви більше ставите наголос на "обміні повідомленнями" - але я все одно хотів би знати про "об'єктно-орієнтовану".
Щодо записів, моєї сторінки підручника, а також для подальшого розповсюдження та публікації ви можете, будь ласка, пояснити:
Коли і де вперше вживали термін «об’єктно-орієнтована»?
У штаті Юта, після 66 листопада, коли під впливом Sketchpad, Simula, дизайну для ARPAnet, Burroughs B5000 та мого досвіду біології та математики я подумав про архітектуру програмування. Напевно, у 1967 році хтось запитав мене, що я роблю, і я сказав: "Це об'єктно-орієнтоване програмування".
Первісна концепція його мала наступні частини.
Я подумав, що такі об’єкти, як біологічні клітини та / або окремі комп’ютери в мережі, здатні спілкуватися лише з повідомленнями (тому повідомлення надходило на самому початку - знадобилося певний час, щоб зрозуміти, як зробити обмін повідомленнями на мові програмування достатньо ефективно, щоб бути корисним).
Я хотів позбутися даних. B5000 майже зробив це завдяки своїй майже неймовірній архітектурі HW. Я зрозумів, що метафора комірки / цілого комп'ютера позбудеться даних, і що "<-" буде просто ще одним символом повідомлення (мені знадобилося досить багато часу, щоб продумати це, бо я справді вважав усі ці символи як імена для функції та процедури.
З моїх математичних передумов я зрозумів, що кожен об'єкт може мати кілька алгебр, пов'язаних з ним, і можуть бути такі сім'ї, і що це буде дуже дуже корисно. Термін "поліморфізм" був накладений набагато пізніше (я думаю, Пітер Вегнер), і це не зовсім справедливо, оскільки він дійсно походить від номенклатури функцій, і я хотів зовсім трохи більше, ніж функції. Я склав термін «загальність» для роботи з родовою поведінкою у квазіалгебраїчній формі.
Мені не сподобалося, як наслідували наследство Simula I або Simula 67 (хоча я вважав, що Nygaard і Dahl були просто приголомшливими мислителями та дизайнерами). Тому я вирішив залишити спадщину як вбудовану функцію, поки не зрозумів її краще.
Мої оригінальні експерименти з цією архітектурою були зроблені за моделлю, яку я адаптував із «Узагальнення Алголя» Ван Війнгаартена та Вірта та Вірта Ейлера. Обидва вони були скоріше схожими на LISP, але з більш звичним для читання синтаксисом. Тоді я не розумів ідеї чудовисько LISP про відчутну метамовність, але наблизився до уявлень про розширювані мови, почерпнуті з різних джерел, включаючи IMP Irons.
Друга фаза цього полягала в тому, щоб нарешті зрозуміти LISP, а потім використати це розуміння, щоб зробити набагато приємнішими і меншими, більш потужними та більш пізньозв’язаними підструктурами. Дисертація Дейва Фішера була виконана в стилі "Маккарті", і його ідеї щодо розширюваних структур управління були дуже корисними. Іншим великим впливом в цей час був ПЛАНЕР Карла Хьюітта (який ніколи не здобув визнання, яке заслуговує, враховуючи, наскільки добре і як раніше він міг передбачити Пролог).
Оригінальний Smalltalk у Xerox PARC вийшов із вищезазначеного. У кінці розділу "Історія" скаржиться на наступні малі розмови: вони відступили в бік Simula і не замінили механізми розширення на більш безпечні, які були десь поблизу, як корисні.
Що для вас означає «об’єктно-орієнтоване [програмування]»? (Не потрібне введення, подібне до підручника, лише коротке пояснення [на зразок "програмування з успадкуванням, поліморфізм та інкапсуляція") з точки зору інших понять для читача, знайомого з ними, якщо це можливо. Крім того, не потрібно пояснювати "об'єкт ", оскільки я вже маю джерела з вашим поясненням" об'єкта "з" Рання історія малих розмов ".)
(Я не проти типів, але я не знаю жодної системи типів, яка не викликає повного болю, тому я все ще люблю динамічне введення тексту.)
OOP для мене означає лише обмін повідомленнями, локальне збереження та захист та приховування державно-процесу, а також надзвичайне запізнення всіх речей. Це можна зробити в Smalltalk та LISP. Можливо, є й інші системи, в яких це можливо, але я їх не знаю.
[Крім того,] Одне з речей, які я мав би зазначити, - це те, що існувало два основних шляхи, які каталізували Симула. Ранній (випадково) був маршрутом біо / нетто даних, який я взяв. Інший, який з’явився трохи пізніше як об’єкт дослідження, був абстрактними типами даних, і це отримало набагато більше гри.
Якщо ми подивимось на всю історію, то побачимо, що прото-OOP-матеріали, розпочаті з ADT, мали невелику роздвоєння до того, що я назвав "об'єктами" - це призвело до Smalltalk тощо., - але після маленької вилки, Створення CS дуже багато зробив ADT і хотів дотримуватися парадигми процедур даних. Історично варто поглянути на файлову систему USAF Burroughs 220 (яку я описав в історії Smalltalk), ранню роботу Дага Росса в MIT (AED та новіших версіях), в якій він виступав за вбудовування покажчиків процедури в структуру даних, Sketchpad (який мав повний поліморфізм - де, наприклад, одне зміщення в його структурі даних означало "відображення", і там був би вказівник на відповідний порядок для типу об'єкта, який представляла структура тощо, і Burroughs B5000, чиї довідкові таблиці програм були справжніми "великими об'єктами" і містили покажчики на "дані" та "процедури", але часто могли робити правильно, якби намагалися шукати дані та знаходили покажчик процедури. І найпершими проблемами, які я вирішив зі своїми ранніми матеріалами штату Юта, було "зникнення даних", використовуючи лише методи та об'єкти. Наприкінці 60-х (я думаю) Боб Бальцер написав досить чудовий документ під назвою "Програмування без даних", і незабаром після цього Джон Рейнольдс написав настільки ж чудовий папір "Геданкен" (в 1970 я думаю), в якому він показав, що використовує ламду вирази правильним способом дозволять абстрагувати дані процедурами. але часто можна зробити правильно, якби намагався шукати дані та знаходив покажчик процедури. І найпершими проблемами, які я вирішив у своїх ранніх справах Юти, було "зникнення даних", використовуючи лише методи та об'єкти. Наприкінці 60-х (я думаю) Боб Бальцер написав досить чудовий документ під назвою "Програмування без даних", і незабаром після цього Джон Рейнольдс написав настільки ж чудовий папір "Геданкен" (в 1970 я думаю), в якому він показав, що використовує ламду вирази правильним способом дозволять абстрагувати дані процедурами. але часто можна зробити правильно, якби намагався шукати дані та знаходив покажчик процедури. І найпершими проблемами, які я вирішив у своїх ранніх справах Юти, було "зникнення даних", використовуючи лише методи та об'єкти. Наприкінці 60-х (я думаю) Боб Бальцер написав досить чудовий документ під назвою "Програмування без даних", і незабаром після цього Джон Рейнольдс написав настільки ж чудовий папір "Геданкен" (в 1970 я думаю), в якому він показав, що використовує ламду вирази правильним способом дозволять абстрагувати дані процедурами.
Люди, яким подобалися об'єкти як недієві дані, були меншими за чисельністю, і я включав себе, Карла Хьюітта, Дейва Рід та ще декількох інших людей - майже всі цієї групи були з спільноти ARPA і були так чи інакше пов'язані з дизайн ARPAnet → Інтернет, в якому базовою одиницею обчислення був цілий комп'ютер. Але лише щоб показати, наскільки вперто може зависати ідея, протягом семидесятих та вісімдесятих років, було багато людей, які намагалися обійтись через «Виклик віддалених процедур», а не думати про об’єкти та повідомлення. Sic transit gloria mundi.
Ура,
Алан Кей