Історія ООП
Об'єктно-орієнтована парадигма програмування не нова. Її витоки сягають Сімуле-67, хоча перша повна реалізація була в Smalltalk-80. ООП (Об'єктно-орієнтоване програмування) стало популярним в другій половині 80-х у таких різних мовах, як C++, Objective C (інше розширення C), Object і Турбо Паскаль (Turbo Pascal), CLOS (ГО-розширення Ліспу ), Eiffel, Ада (в її останніх втіленнях) і недавно - в Джаві (Java).
Ми будемо розглядати основу ООП на мові C++ та досить схожій на неї мові PHP, іноді Обджект Паскалі (Object Pascal) і Джава (Java) та інші мови.
Мабуть, першим комп'ютерним рішенням, що втілив у собі об'єктний підхід, став програмно-апаратний графічний Планшет (Sketchpad: A Man-Machine Graphical Communications System), що використав обладнання DEC PDP. Його в 1963 р. розробив 25-річний Іван Сазерленд, що допомагав у створенні симуляторів вертольотів військовому науковому агентству DARPA, а потім зайнявся в Массачусетському технологічному інституті докторською дисертацією і мав задоволення спілкування з Клодом Шенноном. За допомогою світлового пера і системи меню, що випадають користувач Планшети міг малювати різні нескладні зображення на дисплеї аналоговому, переміщати їх і точно розташовувати в певних позиціях екрану, а також зберігати. Як поняття класу Сазерленд використовував визначення "майстер", розділяючи опис і реально існуючий на екрані об'єкт (екземпляр "майстри").
Сазерленд також придумав перший прототип нинішніх систем віртуальної реальності, ухитрившись спроектувати зображення з двох моніторів безпосередньо в очі людини (як стереоскопічний фільм), а було це в 1968 р. Спеціальні датчики контролювали положення голови і відповідно змінювали прокручуваний перед очима ролики. Ця людина захистив вісім патентів з комп'ютерної графіки, займався крокуючим роботами в Каліфорнійському університеті, а потім працював віце-президентом компанії Sun Microsystems. Основоположниками об'єктного підходу у програмуванні вважаються норвежці Оле Джохан Дав і Крістен Нюгорт, автори мови Сімула. У 1952 р. Нюгорт вирішив зайнятися моделюванням великих і складних систем реального світу, в 1957-му отримав можливість комп'ютерної реалізації своїх задумів на машині Ferranti MERCURY, але швидко усвідомив обмеженість машинних мов і Фортрану.
Ferranti MERCURY - версія, створена Манчестерським університетом в співдружності з компанією Ferranti в ході робіт над комп'ютером Mark 2. Вона відрізнялася підтримкою операцій з плаваючою крапкою. Пам'ять комп'ютера становила 1024 слова по 40 біт з часом доступу 10 мкс до 10-бітове слову. Пристрій адресації могло працювати з 10 -, 20 - і 40-бітовими словами. Довготривала пам'ять налічувала 4096 40-бітних слів і обробляла їх зі швидкістю 17,28 мс. Для виявлення збоїв виконувалася перевірка парності. Програмісти вирішували завдання за допомогою мови Mercury Autocode.
Фірма Ferranti продала 19 таких машин, останню - в 1963 р.
Історія Сімули почалася в 1962 р. з проекту Simulation Language, призначеного для програмного моделювання методу Монте-Карло. Нюгорт, що займав у той час посаду директора з науки Норвезького комп'ютерного центру (NCC), приступив до створення мови дискретного моделювання. Він залучив до співпраці Оле Джохана Дала, колегу по експериментальній групі Міністерства оборони Норвегії, яку очолював Йан Гервік, засновник інформатики в цій країні. Для робіт NCC придбав данський комп'ютер GIER за 280 тис. дол
Одночасно готувалися дві версії Сімули. Перша, Сімула I, формувалася за контрактом з підрозділом Univac корпорації Sperry Rand для машини UNIVAC 1107 (що обійшлася NCC в 990 тис. дол.) Американські замовники бажали бачити цю мову фортраноподобним, від чого, втім, автори категорично відмовилися; в результаті прабатьком Сімули став Алгол 60. Останній був обраний завдяки блокової архітектурі, гарним засобам приховування даних, а також внаслідок високої популярності в європейських наукових центрах. А роботи над другим варіантом спонсорував NCC.
У 1965 р. авторам прийшла в голову ідея об'єднати дані з процедурами, їх обробляють. Після успішного обговорення можливостей Сімули I на саміті НАТО в 1966 р. вирішено було продовжити його вдосконалення. В мову увійшли нові засоби моделювання й імітації мультіпроцессной роботи. Автори також придумали терміни "клас" і "об'єкт". Тоді ж виникла і технологія успадкування - творці Сімули ввели в мову можливість використання різними класами загальних властивостей шляхом зазначення назви класу у вигляді префікса. Після публічного анонсу нова технологія викликала інтерес у Данії, Німеччини і СРСР. У нас в кінці 60-х з'явилася реалізація Сімули для Уралан-16.
Нова версія мови була закінчена в січні 1967-го. Він підтримував проектування "зверху вниз" з допомогою віртуальних процедур і технології статичного і динамічного зв'язування. У NCC була сформована робоча група Simula Standards Group. Незабаром до неї підключився Якоб Палм, спеціаліст Шведського інституту оборонних досліджень. Він додав до Сімулу механізм приховування змінних. Перший закінчений компілятор оновленої Сімули 1967 побачив світло в 1969 р. і працював на машинах Control Data. Потім послідували реалізації для UNIVAC 1108 і IBM, але всі вони, на жаль, коштували дуже дорого, що, ймовірно, завадило активному поширенню цього прекрасного мови. Проте з його допомогою були спроектовані, наприклад, перші НВІС-чіпи Intel.
Тим часом Алан Кей (людина, що придумав перший персональний комп'ютер; див. PC Week / RE, N 39/98, с.25) уважно вивчав ідеї, закладені в Планшет, Сімулу і ще два оригінальні мови - LISP, що застосовувався для задач штучного інтелекту , і LOGO, призначений для навчання базовим поняттям програмування. У ході ознайомлення з цими мовами Кей придумав нову концепцію розробки, відповідно до якої набір послідовно виконувати інструкції міг бути замінений на багатовимірну середу взаємодії об'єктів, що спілкуються один з одним шляхом асинхронного обміну повідомленнями. У результаті з'являлася можливість підтримки таке середовище не одним, а безліччю комп'ютерів, об'єднаних у мережу. Правда, для свого часу ця ідея виявилася занадто революційною. В кінці 50-х років Кей працював на Денвера військово-повітряній базі "Рандольф" (Randolph), де писав на машинному коді програми для ЕОМ Burroughs 220. Тоді він зіштовхнувся з проблемою передачі сформованих на цій машині даних на комп'ютери інших баз. Стандартних форматів і ОС в сучасному розумінні для тих ЕОМ не існувало, тому Кею довелося створювати прошивки, які містили в собі всю необхідну інформацію і після запуску на інших машинах через простий користувальницький інтерфейс самостійно розгортали потрібні дані. Такі програми Кей спочатку назвав "модулями", об'єднували дані та код. У 1966 р. він зайнявся науковою діяльністю в галузі молекулярної біології в Університеті шт. Колорадо, де до нього прийшло розуміння важливості цієї ідеї. Кей задумав створення системи модулів (можливо, вже тоді він дав їм назву "об'єкти"), що поєднують дані і алгоритми їх обробки, здатні взаємодіяти один з одним через певні розробником інтерфейси, але не мають уявлення про те, що відбувається за їх межами. При цьому він активно використовував аналогії з біологічними об'єктами і механізмами взаємодії клітин в живому організмі.
Пізніше Кей перейшов в Стенфордський лабораторію з штучного інтелекту, а в 1972 р. влаштувався на роботу в добре відомий науковий центр Xerox PARC, де і втілив ці ідеї у новому об'єктному мовою SmallTalk, спочатку названому їм Biological System і змодельованої на Бейсике, а потім реалізованому на асемблері. У процесі цієї діяльності він запропонував знаменитий термін "об'єктно-орієнтоване програмування" (ООП). Закладені в SmallTalk ідеї ООП і до цього дня залишилися неперевершеними ні в яких інших мовах і системах.
Якщо Кея нерідко називають батьком SmallTalk, то матір'ю цього унікального мови можна вважати професора лінгвістики Адель Голдберг, яка працювала в ті роки в тісній зв'язці з Аланом в Xerox PARC. Вона написала першу документацію до SmallTalk, а потім кілька книг і велика кількість статей з методологій об'єктного аналізу.