ОБЗОРЫ

Из "древней истории"

Пожалуй, первым компьютерным решением, воплотившим в себе объектный подход, стал программно-аппаратный графический Планшет (Sketchpad: A Man-machine Graphical Communications System), использовавший оборудование DEC PDP. Его в 1963 г. разработал 25-летний Иван Сазерленд, помогавший в создании симуляторов вертолетов военному научному агентству DARPA, а затем занявшийся в Массачусетском технологическом институте докторской диссертацией и имевший удовольствие общения с Клодом Шенноном. С помощью светового пера и системы выпадающих меню пользователь Планшета мог рисовать различные несложные изображения на аналоговом дисплее, перемещать их и точно располагать в определенных позициях экрана, а также хранить. В качестве понятия класса Сазерленд использовал определение "мастер", разделяя описание и реально существующий на экране объект (экземпляр "мастера").

Иван Сазерленд

Основоположниками объектного подхода в программировании считаются норвежцы Оле Джохан Дал и Кристен Нюгорт, авторы языка Симула. В 1952 г. Нюгорт решил заняться моделированием крупных и сложных систем реального мира, в 1957-м получил возможность компьютерной реализации своих замыслов на машине Ferranti MERCURY, но быстро осознал ограниченность машинных языков и Фортрана.

Кристен Нюгорт

История Симулы началась в 1962 г. с проекта Simulation Language, предназначенного для программного моделирования метода Монте-Карло. Нюгорт, занимавший в то время должность директора по науке Норвежского компьютерного центра (NCC), приступил к созданию языка дискретного моделирования. Он привлек к сотрудничеству Оле Джохана Дала, коллегу по экспериментальной группе Министерства обороны Норвегии, которую возглавлял Йан Гэрвик, основатель информатики в этой стране. Для работ NCC приобрел датский компьютер GIER за 280 тыс. долл.

Оле Джохан Дал

Одновременно готовились две версии Симулы. Первая, Симула I, формировалась по контракту с подразделением Univac корпорации

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

Sperry Rand для машины UNIVAC 1107 (обошедшейся NCC в 990 тыс. долл.). Американские заказчики желали видеть этот язык фортраноподобным, от чего, впрочем, авторы категорически отказались; в результате прародителем Симулы стал Алгол 60. Последний был выбран благодаря блочной архитектуре, хорошим средствам сокрытия данных, а также вследствие высокой популярности в европейских научных центрах. А работы над вторым вариантом спонсировал NCC.

В 1965 г. авторам пришла в голову идея объединить данные с процедурами, их обрабатывающими. После успешного обсуждения возможностей Симулы I на саммите НАТО в 1966 г. решено было продолжить его совершенствование. В язык вошли новые средства моделирования и имитации мультипроцессной работы. Авторы также придумали термины "класс" и "объект". Тогда же возникла и технология наследования - создатели Симулы ввели в язык возможность использования разными классами общих свойств путем указания названия класса в виде префикса. После публичного анонса новая технология вызвала интерес в Дании, Германии и СССР. У нас в конце 60-х появилась реализация Симулы для УРАЛа-16.

Новая версия языка была закончена в январе 1967-го. Он поддерживал проектирование "сверху вниз" с помощью виртуальных процедур и технологии статического и динамического связывания. В NCC была сформирована рабочая группа Simula Standards Group. Вскоре к ней подключился Якоб Палме, специалист Шведского института оборонных исследований. Он добавил в Симулу механизм сокрытия переменных. Первый законченный компилятор обновленной Симулы 67 увидел свет в 1969 г. и работал на машинах Control Data. Затем последовали реализации для UNIVAC 1108 и IBM, но все они, к сожалению, стоили очень дорого, что, вероятно, помешало активному распространению этого прекрасного языка. Однако с его помощью были спроектированы, например, первые СБИС-чипы Intel.

Тем временем Алан Кей (человек, придумавший первый персональный компьютер; см. PC Week/RE, N 39/98, с.25) внимательно изучал идеи, заложенные в Планшет, Симулу и еще два оригинальных языка - LISP, применявшийся для задач искусственного интеллекта, и LOGO, предназначенный для обучения базовым понятиям программирования. В ходе ознакомления с этими языками Кей придумал новую концепцию разработки, в соответствии с которой набор последовательно выполняющихся инструкций мог быть заменен на многомерную среду взаимодействия объектов, общающихся друг с другом путем асинхронного обмена сообщениями. В результате появлялась возможность поддержки подобной среды не одним, а множеством компьютеров, объединенных в сеть. Правда, для своего времени эта идея оказалась слишком революционной.

В конце 50-х годов Кей работал на Денверской военно-воздушной базе "Рандольф" (Randolph), где писал на машинном коде программы для ЭВМ Burroughs 220. Тогда он столкнулся с проблемой передачи сформированных на этой машине данных на компьютеры других баз. Стандартных форматов и ОС в современном понимании для тех ЭВМ не существовало, поэтому Кею пришлось создавать микропрограммы, которые содержали в себе всю необходимую информацию и после запуска на других машинах через простой пользовательский интерфейс самостоятельно разворачивали нужные данные. Такие программы Кей первоначально назвал "модулями", объединявшими данные и код. В 1966 г. он занялся научной деятельностью в области молекулярной биологии в Университете шт. Колорадо, где к нему пришло понимание важности этой идеи. Кей задумал создание системы модулей (возможно, уже тогда он дал им название "объекты"), объединяющих данные и алгоритмы их обработки, способные взаимодействовать друг с другом через определенные разработчиком интерфейсы, но не имеющие представления о том, что происходит за их пределами. При этом он активно использовал аналогии с биологическими объектами и механизмами взаимодействия клеток в живом организме.

Ferranti MERCURY - версия, созданная Манчестерским университетом в содружестве с компанией Ferranti в ходе работ над компьютером Mark 2. Она отличалась поддержкой операций с плавающей точкой. Память компьютера составляла 1024 слова по 40 бит с временем доступа 10 мкс к 10-битовому слову. Устройство адресации могло работать с 10-, 20- и 40-битовыми словами. Долговременная память насчитывала 4096 40-битных слов и обрабатывала их со скоростью 17,28 мс. Для выявления сбоев выполнялась проверка четности. Программисты решали задачи с помощью языка Mercury Autocode.

Фирма Ferranti продала 19 таких машин, последнюю - в 1963 г.     

Позже Кей перешел в Стэнфордскую лабораторию по искусственному интеллекту, а в 1972 г. устроился на работу в хорошо известный научный центр Xerox PARC, где и воплотил эти идеи в новом объектном языке SmallTalk, первоначально названном им Biological System и смоделированном на Бейсике, а затем реализованном на ассемблере. В процессе этой деятельности он предложил знаменитый термин "объектно-ориентированное программирование" (ООП). Заложенные в SmallTalk идеи ООП и по сей день остались непревзойденными ни в каких других языках и системах.

Если Кея нередко называют отцом SmallTalk, то матерью этого уникального языка можно считать профессора лингвистики Адель Голдберг, работавшую в те годы в тесной связке с Аланом в Xerox PARC. Она написала первую документацию к SmallTalk, а затем несколько книг и большое число статей по методологиям объектного анализа.

Мировую известность получила версия SmallTalk 80, коммерческие реализации которой вышли в 1981 г. Правда, они отличались невысокой производительностью. Впоследствии Кей принимал участие в работе группы Squeak, создавшей реализацию SmallTalk под девизом "Объектно-ориентированному программированию нужна скорость Си". Однако превзойти популярность Си проекту Squeak не удалось. Этот элегантный и шустрый язык, придуманный в лаборатории AT&T Bell при участии программистов Кена Томпсона и Денниса Ритчи (известных ЕС-программистам по легендарной игре Star Track), добрался до ООП своим путем.

"Средние века" ООП. Хронология

1974 г. Марвин Мински, основоположник теории искусственного интеллекта, предложил идею фрейма, отделившего описание класса (структуры) объекта от его конкретного представления (экземпляра) и быстро завоевавшего популярность в языках искусственного интеллекта. Фрейм стал прямым предшественником современного понятия объектов в Си++.

1976 г. Кринстен Нюгорн создал новый язык BETA, в котором ввел концепцию шаблонов - более высокого уровня абстракций, нежели объекты. Его коллега Оле Джохан Дал еще долгое время работал профессором информатики в Университете Осло. А Нюгорн на некоторое время занялся политикой и активно выступал против вступления Норвегии в Евросоюз.

1980 г. Бьерн Страуструп, продолживший дело своих коллег из лаборатории Bell, дополнил язык Си концепцией классов, основанной на фреймах и объектных механизмах Симулы.

1982 г. В Мехико прошла 8-я Международная конференция по сверхбольшим БД (VLDB), где была предложена концепция объектно-ориентированных БД и рассматривались вопросы расширения существовавших языков запросов к БД новыми, объектными типами данных.

1983 г. Страуструп дал своему творению окончательное название Си++. 4

Окончание следует