Історія ООП
Мабуть, першим комп'ютерним рішенням, що втілив у собі об'єктний підхід, став програмно-апаратний графічний Планшет (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, а потім кілька книг і велика кількість статей з методологій об'єктного аналізу. Світову популярність набула версія SmallTalk 80, комерційні реалізації якої вийшли в 1981 р. Щоправда, вони відрізнялися невисокою продуктивністю. Згодом Кей брав участь у роботі групи Squeak, що створила реалізацію SmallTalk під девізом "Об'єктно-орієнтованого програмування потрібна швидкість Сі". Однак перевершити популярність Сі проекту Squeak не вдалося. Цей елегантний і спритний мову, придуманий в лабораторії AT & T Bell за участю програмістів Кена Томпсона і Денніса Рітчі (відомих ЄС-програмістам по легендарній грі Star Trek), дістався до ООП своїм шляхом. "Середні віки" ООП. Хронологія
1974 Марвін Мінськ, основоположник теорії штучного інтелекту, запропонував ідею фрейму, відокремившись опис класу (структури) об'єкта від його конкретного уявлення (примірника) і швидко завоював популярність в мовах штучного інтелекту. Фрейм став прямим попередником сучасного поняття об'єктів в Сі + +.
1976 Крінстен Нюгорн створив нову мову BETA, в якому ввів концепцію шаблонів - більш високого рівня абстракцій, ніж об'єкти. Його колега Оле Джохан Дав ще довгий час працював професором інформатики в Університеті Осло. А Нюгорн на деякий час зайнявся політикою і активно виступав проти вступу Норвегії в Євросоюз.
1980 Бьерн Страуструп, що продовжив справу своїх колег з лабораторії Bell, доповнив мова Сі концепцією класів, заснованої на фреймах і об'єктних механізмах Сімули.
1982 р. У Мехіко пройшла 8-а Міжнародна конференція з надвеликим БД (VLDB), де була запропонована концепція об'єктно-орієнтованих БД і розглядалися питання розширення існуючих мов запитів до БД новими, об'єктними типами даних.
1983 Страуструп дав своєму творінню остаточна назва Сі + +. Наш час
1986 Перша всесвітня конференція з об'єктно-орієнтованим системам програмування пройшла в Портленді. Можливо, саме пролунали на ній доповіді надали стимулюючий вплив на Вільяма Аткінсона, інженера Apple, який через рік після цього спроектував систему HyperCard, прообраз сучасних візуальних середовищ швидкої розробки. Ефективність нової технології виявилася настільки високою, що вже в 1989 р. 11 компаній, серед яких були 3Com, American Airlines, Canon, Data General, Hewlett-Packard, Philips Telecommunications, Sun Microsystems і Unisys, заснували групу OMG (Object Management Group), покликану формувати індустріальні стандарти на об'єктне програмування та спрощувати інтеграцію додатків за допомогою універсальних крос-платформних технологій. Ця група першим справою приступила до вироблення єдиного стандарту компонентної моделі CORBA (Common Object Request Broker Architecture) - набору специфікацій, що визначають способи об'єктно-орієнтованого взаємодії компонентів проміжного рівня в гетерогенних середовищах без прив'язки до конкретних мов програмування. З самого початку CORBA націлювалась на підтримку великих, індустріальних проектів, і цей підхід з часом себе повністю виправдав. Сьогодні немає іншого настільки ж поширеного незалежного стандарту, що підтримує самі різні ОС і об'єктні моделі.
1992 Вийшов стандарт CORBA 1.0, що визначає ключові аспекти функціонування CORBA-систем. У нього були включені базове опис об'єктної моделі, набори програмних інтерфейсів підтримки CORBA-систем, а також декларативний мова визначення інтерфейсів Interface Definition Language (IDL), створений OMG для опису розподілених інтерфейсів.
1993 Корпорація Microsoft випустила першу версію компонентної моделі COM (Component Object Model), ідея якої була, мабуть, запозичена з моделі SOM (System Object Model), вже давно існувала в IBM OS / 2 (у створенні OS / 2 Microsoft один час брала активну участь). Спочатку COM готувалася тільки для підтримки технології вбудовування та зв'язування документів OLE, але швидко виділилася в самостійний напрям.
У тому ж 1993-му була запропонована компонентна технологія Microsoft ActiveX, заснована на елементах управління OLE, що прийшли з Visual Basic, де вони називалися VBX / OCX.
1994 Опубліковано стандарт CORBA 2.0, який швидко отримав масове визнання, так як уявляв собою багатий і глибоко пророблений набір документів і охоплював більшість затребуваних ринком завдань. У ньому були ліквідовані недоліки попередньої версії, в результаті чого CORBA 2.0 почав підтримувати транзакції і розуміти універсальну кодування Unicode, а також з'явився набір засобів забезпечення безпеки та взаємодії COM-та CORBA-об'єктів.
Гради Буч і Джеймс Румба з Rational Software вирішили об'єднати дві методології візуального моделювання Booch і OMT і створити на їх основі нову мову UML (Unified Modeling Language).
1995 Sun Microsystems вільно поширює в Інтернеті елемент технології Java - середовище HotJava, підтримуючу мобільний код, розробку проекту Green, яка на той час вважалася в Sun практично пропащою, якби не розвиток Мережі. Новинку одразу ж ліцензує Netscape Communication, а слідом за нею до Java виявляють комерційний інтерес десятки компаній, зокрема Microsoft, IBM, Adobe, Borland, Lotus, Oracle.
Корпорація Borland випустила першу версію середовища швидкої візуальної розробки Delphi 1, засновану на концепції бібліотек стандартних компонентів.
Microsoft повідомляє про нову технологію DCOM - розподіленої версії COM, що дозволила збирати програми з компонентів, що виконувалися на різних комп'ютерах. Спочатку ця технологія називалася Network OLE (мережеве OLE), проте в міру виділення COM в самостійний напрям вирішено було відмовитися від згадки OLE в її назві.
1996 Microsoft називає ActiveX нової об'єктної стратегією, спрямованої на підтримку Інтернету.
1997 Sun Microsystems пропонує концепцію Enterprise JavaBeans - технологію створення корпоративних Java-компонентів, які можна виконувати на серверах додатків, реалізуючи логіку великих, добре масштабованих і захищених систем на платформних-незалежній основі.
Експерти OMG усвідомлюють не тільки важливість об'єктних технологій програмування, а й гостру потребу в універсальних методологічних концепціях проектування великих систем. Секретом стабільності системи і високої віддачі інвестицій фахівці OMG називають незалежну UML-модель і приступають до створення концепції "Архітектура, керована моделлю" (Model Driven Architecture, MDA). В її основу закладається базова платформних-незалежна UML-модель системи, кілька платформних-залежних моделей і колекція визначень програмних інтерфейсів. Першу реалізацію цієї універсальної концепції (так зване "відображення в об'єктний стандарт") OMG виконала, звичайно, для CORBA.
2000 Microsoft анонсує нову об'єктну платформу. NET і нову мову програмування C #, що поєднує кращі властивості С + + і Java. Він був запропонований Microsoft багато в чому на противагу Java.
2001 OMG випускає специфікацію CORBA 3.0. Вона доповнена можливостями асинхронного обміну повідомленнями, розробки систем реального часу та створення вбудованих систем. У ній з'явилися спільні компоненти, підтримка XML і засоби інтеграції різних Інтернет-технологій. Була продумана модель збирання системи з компонентів JavaBeans і ActiveX. Стало припустимим у рамках одного компонента описувати безліч інтерфейсів, а також використовувати мову сценаріїв. Особливий акцент в третій версії CORBA зроблений на ефективній взаємодії з Java.
2002 Опублікована остання офіційна версія CORBA 3.0.2. Що далі?
Незважаючи на багатомільйонні вкладення, зроблені в 1970-1980 роках комерційними компаніями і державними структурами різних країн в універсальні мови програмування (такі, як Алгол, PL / 1, Сі) і мови логічного програмування (перш за все Prolog), найпоширенішою у світі програмної технологією залишається ООП. Найбільш відомим подією нового тисячоліття в цій сфері став швидко набрав популярність мова програмування C #. Його можна сміливо вважати кращим на сьогодні об'єктно-орієнтованим засобом створення графічних додатків (формально - для різних платформ, фактично ж - тільки для. NET, так як без середовища розробки цінність C # дорівнює нулю). Правда, кращим C # можна назвати серед невеликого числа комерційних альтернатив (Java, С + + і, ймовірно, Delphi). Якщо ж порівняти його можливості із засобами SmallTalk, то виявиться, що ряд сильних ідей ООП, закладених у SmallTalk просунутими інженерними умами, опинився в C # згаяним (див. врізку "Оригінальні можливості Smalltalk").
У найближче десятиліття розвиток ООП буде проходити під впливом трьох концепцій: Microsoft. NET (перш за все. NET Framework і її підмножини і відповідно реалізації C #), Java (всі вхідні в це поняття технології) та CORBA. Причому найважливішою особливістю CORBA залишиться незалежність від ОС і мови програмування CORBA-компонентів. Методологія MDA стане основною об'єднує платформою моделювання для всіх цих технологій, перш за все в силу своєї незалежності від конкретного розробника. Важлива і оголошена наскрізна підтримка MDA у всіх засобах розробки "Швейцарії в світі ПЗ" - корпорації Borland - і гіганта IBM (особливо з огляду на недавню купівлю Rational Software і розвиток проекту Eclipse). Що стосується "програмування в малому" (programming in small), то в цій області продовжиться вдосконалення шаблонів проектування (високорівневого об'єктного програмування), їх впровадження в середовища розробки і подальше поєднання шаблонів підходу з активно розвиваються мовою моделювання UML, остання версія якого 2.0 з'явиться з дня на день.