Перейти к содержимому

Ооп кто придумал

  • автор:

Что такое объектно-ориентированное программирование (ООП)?

Объектно-ориентированное программирование определяет режим программирования, который ориентируется на структурные объекты со связанными свойствами.

Организация играет решающую роль почти во всех процессах, от домашних обязанностей до управления проектами. Программирование ничем не отличается. Хотя цель программирования состоит в том, чтобы посылать инструкции машинам, делать это строка за строкой в последовательном порядке — не всегда лучший подход к такой задаче.

Осмысливая код с точки зрения объектов и классов, разработчики могут создавать программное обеспечение более гибко и интуитивно понятно, чем в противном случае. Этот метод организации долгое время использовался для написания чистого, поддерживаемого и, что наиболее важно, повторно используемого кода.

Что такое объектно-ориентированное программирование?

Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая использует концепцию объектов для создания четко определенных фрагментов кода, которыми можно управлять. Парадигма программирования описывает способ организации программы. До появления ООП процедурное и структурное программирование были основными парадигмами программирования того времени.

    Процедурное программирование работает с помощью пошаговых инструкций. Структурированное программирование немного сложнее, оно использует потоки управления, такие как операторы if/then/else и циклы while/for.

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

Например, автомобиль — это объект с различимыми качествами, такими как цвет и тип. Автомобиль может ездить. Демонстрация поведения автомобиля в программе, использующей процедурное или структурное программирование, несомненно, будет сложной задачей. С помощью объектно-ориентированного программирования вы можете сгенерировать класс автомобиля и кодировать особенности объекта внутри класса. Хотя детали этого предприятия более растянуты, вы можете назначать определяющие аспекты автомобиля и управлять его поведением с помощью простого вызова функции.

4 основных строительных блока ООП

Четыре фундаментальных строительных блока охватывают принцип работы объектно-ориентированного программирования: классы, атрибуты, методы и объекты.

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

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

Класс Автомобиль:
def init (я, цвет, тип):
self.color = цвет
self.type = тип

Здесь «я» представляет экземпляр класса для будущих ссылок на атрибуты и методы объекта. А «цвет» и «тип» представляют собой атрибуты класса.

Программисты также должны определять методы вместе с атрибутами. Методы инкапсулируют функции, которые обрабатывают данные и поведение экземпляра объекта.

В автомобиле метод вождения может быть уместен. Вы можете определить такой метод прямо под определениями атрибутов автомобиля.

Хотя с помощью кода можно отобразить реальный автомобиль и смоделировать приложение для вождения, программирование этого метода немного сложнее, чем строки кода ниже.

защитный диск (сам)
print(‘Я за рулем’ + self.color + self.type)

Объекты существуют наряду с классами. По сути, это поля данных с четкой структурой, которую может определить программист. Как только вы вызываете объект, программа создает экземпляр. Экземпляр — это конкретный объект, сгенерированный из класса. Чтобы вызвать объект, вам нужно будет предоставить информацию, относящуюся к классу, например, конкретный цвет и тип автомобиля.

автомобиль = Автомобиль(‘красный’, ‘Седан’)

Приведенный выше код формально установит конкретный экземпляр уникального автомобильного объекта.

Затем вы сможете увидеть, как метод привода работает в действии.

4 столпа ООП
В дополнение к фундаментальным строительным блокам объектно-ориентированного программирования, следующие технические принципы имеют решающее значение для любого подхода к объектно-ориентированному программированию.

1. Инкапсуляция
Инкапсуляция — это связывание состояния и поведения объекта вместе. Это происходит, когда атрибуты и методы заключены в единый модуль и/или класс. Из-за инкапсуляции поля класса недоступны для публики напрямую. Кроме того, инкапсуляция обеспечивает гибкость и удобство сопровождения. Например, в объекте автомобиля класс Car может быть скрыт от остальной части программы. Преимуществами являются возможность повторного использования без учета конкретных деталей, на которые опирается объект, и более чистый код в целом.

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

Конечно, абстракция играет роль в идее инкапсуляции. Объектно-ориентированное программирование гарантирует, что программы инкапсулируют объектные данные внутри класса, чтобы можно было абстрагироваться от сложных механизмов. Масштабируемость — главное преимущество абстракции и ООП в целом. Большие кодовые базы усложняют процесс внесения изменений и обслуживания. Благодаря совместной работе инкапсуляции и абстракции программисты могут вызывать объекты без необходимости доступа или открытия углубленных механизмов классов. В реальной жизни есть масса случаев, эквивалентных абстракции в программировании.

Во-первых, у смартфонов всего несколько значимых кнопок на самом устройстве. Эти кнопки позволяют пользователям выражать функциональные возможности, не увязая в сложности технологии. Точно так же объект — это абстракция чего-то скрытого за кулисами, что гораздо сложнее, чем кажется на первый взгляд .

3. Наследование
Когда в программе есть несколько классов со связанными свойствами, наследование может упростить ландшафт. В объектно-ориентированном программировании дочерние классы могут наследовать родительские классы и аналогичные функции. В качестве примера наследования рассмотрим, как класс Car может совместно использовать свойства с более крупной категорией, например с транспортными средствами.

«Автомобиль» в качестве родительского класса. «Автомобиль» и «Велосипед» — это дочерние классы, которые наследуют атрибуты родительского класса практически без усилий.

4. Полиморфизм
Полиморфизм — это состояние, при котором объект может принимать несколько форм. При этом полиморфизм может проявляться по-разному. Примеры полиморфизма включают:

Полиморфизм с наследованием
Методы в дочернем и родительском классах могут носить одно и то же имя, но иметь разное поведение. Благодаря инкапсуляции это не приведет ни к какой ошибке в программе. Программа по умолчанию будет использовать метод конкретного вызываемого объекта.

Полиморфизм с функциями и объектами . Вы можете определить функцию вне класса, которая зависит от методов и атрибутов класса. После создания экземпляра объекта вы можете использовать объект для развертывания функции.

Полиморфизм с методами класса
Два или более разных класса с одинаковыми именами методов используют полиморфизм для устранения несоответствий. Часто это выглядит как цикл for, в котором поток управления может перебирать кортеж объектов из каждого класса.

Каковы преимущества объектно-ориентированного программирования?

Объектно-ориентированное программирование так выгодно из-за его пластичности. Способность рассматривать структуры кода как объекты в среде программирования позволяет программистам свободно формировать программы.

  • Модульность
  • Возможность повторного использования
  • Возможность подключения
  • Простота

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

Более крупные программы также являются естественным следствием использования принципов объектно-ориентированного программирования. Если у вас есть возможность сжать код, в целом получается больше кода. Другими словами, самый главный недостаток объектно-ориентированного программирования заключается в сложности его компиляции.

В то же время масштабируемость имеет первостепенное значение для любого бизнеса в сфере разработки программного обеспечения. А этого редко можно добиться без объектно-ориентированного программирования.

5 лучших объектно-ориентированных языков программирования
Языки объектно-ориентированного программирования предоставляют разработчикам синтаксис и внутренние меры для использования ООП по своему желанию. Вот самые популярные и высокопроизводительные объектно-ориентированные языки программирования.

1. Питон
Python — это интерпретируемый язык программирования высокого уровня общего назначения. Разработчики выбирают Python для различных вариантов использования. Приложения Python варьируются от разработки игр до науки о данных и машинного обучения.

2. Java
Как язык программирования, основанный на классах, Java спроектирован так, чтобы иметь мало зависимостей; таким образом, разработчики Java могут рассчитывать на непрерывное повторное использование. Java известен как официальный язык программирования для Android-разработки .

3. Руби
Ruby выделяется среди других объектно-ориентированных языков программирования тем, что его цель — воспринимать практически все, что написано на языке, как объект. Юкихиро «Мац» Мацумото, разработчик Ruby, создал язык, когда почувствовал, что альтернативные языки ООП, такие как Python, не были по-настоящему объектно-ориентированными. Ruby on Rails — популярный веб-фреймворк, основанный на языке Ruby.

4. С++
C++, или C с классами, — это объектно-ориентированное расширение C. C — это классический язык программирования, который до сих пор занимает высокие позиции в индексе TIOBE. Тем не менее, его расширение C++ работает исключительно хорошо при работе со встроенными системами, такими как смарт-часы и медицинские машины.

5. С#
C# — это язык .NET Framework, продукт Microsoft, который помогает разработчикам создавать приложения. Как и C++, C# также является языком промежуточного программного обеспечения, который может тесно взаимодействовать с аппаратным обеспечением. C# в основном используется для разработки игр в Unity .

Объектно-ориентированное программирование — ценный подход к разработке программного обеспечения, который не следует принимать как должное. Вполне вероятно, что разработчики в вашей команде уже хорошо знакомы с принципами ООП и используют их каждый день для оптимизации ваших процессов. Чтобы полностью понять, как ООП может быть полезен для процесса разработки программного обеспечения, вы должны обратить внимание на такие концепции программирования, как инкапсуляция, абстракция, полиморфизм и наследование. Эти основы ООП дают много преимуществ для общей программы, гибкость и согласованность являются всеобъемлющими преимуществами.

HR Блог для IT рекрутера в Телеграм

Хочешь всегда получать новые статьи, бесплатные материалы и полезные HR лайфхаки! Подписывайся на нас в Telegram! С нами подбор ит персонала становится проще 😉

Кто автор объектно-ориентированного программирования?

Сложно назвать конкретного человека, но я бы выделил группу из этих четырех человек:

Кристен Нюгорд, Оле-Йохан Даль, Алан Кэй и Дэн Ингаллс.

Первые двое разработали первый ООП-язык Симула, последние развивали идеии ООП в языке Смолток.

У Алана Кея есть отличная цитата:

«Я придумал термин „объектно-ориентированный“, но я вовсе не имел в виду C++.»

автор вопроса выбрал этот ответ лучшим
в избранное ссылка отблагодарить
Владимир З [22.3K]

Все это так, но это только подходы к ООП, а в полной мере ООП было обосновано и
реализовано чуть раньше, чем SmallTalk в языке Паскаль Никлаусом Виртом. Вот те три «кита»,
на которых должен основываться язык программирования с применением ООП:
— инкапсуляция
— наследование
— полиморфизм
Все эти три свойства в полной мере присутствуют в Паскале, и я бы считал автором
ООП Никлауса Вирта.
Тем не менее, вам +1 — 9 лет назад

xi-tauw [24.4K]
Мне интересно какие вы видите принципы наследования и полиморфизма в Паскале. — 9 лет назад
Владимир З [22.3K]

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

xi-tauw [24.4K]

В стандарте 73 года ничего подобного нет, а следующий стандарт вышел через 5 лет после Смолтока. — 9 лет назад

Владимир З [22.3K]

И тем не менее, все-таки основные принципы ООП были обоснованы и реализованы именно в Паскале, хотя под тем или иным видом или частично присутствовали и в других языках. Мой вопрос был, конечно же, на классическое определение ООП, а оно в полном объеме было дано только Виртом. — 9 лет назад

Для чего придумали объектно-ориентированное программирование

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

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

История развития

Основа ООП была заложена в начале 1960-х годов. Прорыв в использовании экземпляров и объектов был достигнут в MIT с PDP-1, и первым языком программирования для работы с объектами стал Simula 67. Он был разработан Кристен Найгаард и Оле-Джохан Даль в Норвегии с целью создания симуляторов. Они работали над симуляциями взрыва кораблей и поняли, что могут сгруппировать корабли в различные категории. Каждому типу судна было решено присвоить свой собственный класс, который должен содержать в себе набор уникальных характеристик и данных. Таким образом, Simula не только ввела понятие класса, но и представила рабочую модель.

Термин «объектно-ориентированное программирование» был впервые использован Xerox PARC в языке программирования Smalltalk. Понятие ООП использовалось для обозначения процесса использования объектов в качестве основы для расчетов. Команда разработчиков была вдохновлена проектом Simula 67, но они спроектировали свой язык так, чтобы он был динамичным. В Smalltalk объекты могут быть изменены, созданы или удалены, что отличает его от статических систем, которые обычно используются. Этот язык программирования также был первым, использовавшим концепцию наследования. Именно эта особенность позволила Smalltalk превзойти как Simula 67, так и аналоговые системы программирования.

  • Курс HTML для начинающих
  • Курс PHP для начинающих
  • Курс MySQL для начинающих
  • Курс ООП в PHP

Simula 67 стала новаторской системой, которая впоследствии стала основой для создания большого количества других языков программирования, в том числе Pascal и Lisp. В 1980-х годах объектно-ориентированное программирование приобрело огромную популярность, и основным фактором в этом стало появление языка С++. Концепция ООП также имела важное значение для разработки графических пользовательских интерфейсов. В качестве одного из самых ярких примеров можно привести структуру Cocoa, существующую в Mac OS X.

Общие принципы модели стали применяться во многих современных языках программирования. Некоторые из них — Fortran, BASIC, Pascal. На тот момент многие программы не были разработаны с учетом ООП, что было причиной возникновения некоторых проблем совместимости. “Чистые” объектно-ориентированные языки программирования не обладали многими функциями, необходимыми программистам. Для решения этих проблем ряд исследователей предложили несколько новых языков программирования, созданных на основе принципов ООП с сохранением других, необходимых программистам, функций. Среди наиболее ярких примеров можно выделить Eiffel, Java, .NET. Даже в серьезных веб-разработках используются языки программирования, основанные на принципах ООП — PHP (у нас вы можете пройти курс ООП в PHP), Python, Ruby. По мнению экспертов, в ближайшие несколько десятилетий именно объектно-ориентированный подход будет оставаться основной парадигмой в развитии программирования.

Принципы

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

  • Привет, мир!
  • Развернуть строку
  • Чётные числа
  • Числа Фибоначчи

В основе концепции объектно-ориентированного программирования лежат несколько базовых принципов:

  1. Инкапсуляция. Принцип инкапсуляции, обеспечивающий максимальную изолированность объектов и автономность каждой функции, обеспечивает простоту обнаружения и устранения неисправностей. Если в процессе написания кода вы обнаружили, что какие-либо отдельные функции выполняются неправильно, или же есть проблемы с графическим представлением информации, вы всегда будете четко понимать, в какой части программы искать ошибку.
  2. Наследование. Второй принцип ООП — наследование — предполагает возможность повторного использования кода по наследству от старших классов. Допустим, что в дополнение к объекту “Машина”, одному пользователю нужен объект “Гоночный автомобиль” а другому — “Лимузин”. Каждый строит свои объекты по отдельности, но обнаруживает общие черты между ними. На самом деле, каждый объект на самом деле является лишь разновидностью автомобиля. Именно здесь принцип наследования позволяет сэкономить время: достаточно создать один общий класс, а затем — несколько подклассов, каждый из которых будет иметь набор свойств, включающий как общие, так и сугубо индивидуальные параметры.
  3. Полиморфизм. Принцип полиморфизма позволяет использовать один и тот же интерфейс для выполнения ряда близких по смыслу и назначению действий. Фактически, вы создаете набор шаблонов для решения определенных задач, а результат будет зависеть от типа данных.

Объектно-ориентированное программирование часто является наиболее естественным и прагматичным подходом к разработке приложений и сервисов самого разного назначения. Языки ООП позволяют вам разбить ваше программное обеспечение на небольшие блоки, решая небольшие задачи — по одной за раз.

Ключевые преимущества

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

Среди прочих аргументов в пользу использования объектно-ориентированного программирования можно выделить такие:

  • Простота. Программы, написанные с применением языков ООП, действительно легко понять. Поскольку все рассматривается как объекты, объектно-ориентированные языки позволяют смоделировать концепцию реального мира.
  • Высокая скорость разработки. Подход ООП предлагает возможность многократного использования классов. Вы можете повторно использовать уже созданные классы вместо того, чтобы записывать их снова. Кроме того, концепция ООП допускает параллельную разработку и использование нескольких классов. Больше усилий прилагается к объектно-ориентированному анализу и проектированию, что также снижает общие затраты на разработку ПО.
  • Удобство тестирования и обслуживания. Поскольку конструкция кода является модульной, часть системы может быть обновлена в случае возникновения проблем без необходимости внесения масштабных изменений. Существующий код легко поддерживать и менять, поскольку новые объекты могут создаваться с небольшими отличиями от существующих. Это делает объектно-ориентированное программирование легко расширяемым — новые функции или изменения в операционной среде могут быть легко внедрены на основе уже существующих.

Объектно-ориентированные языки программирования поставляются с богатыми библиотеками объектов, а код, разработанный в ходе реализации проекта, также может быть повторно использован в будущем при создании других программ. Используя готовые библиотеки, вы можете еще больше ускорить процесс разработки, адаптируя и модифицируя для своих проектов уже существующие рабочие решения. Это особенно полезно при разработке графических интерфейсов пользователя. Поскольку объектные библиотеки содержат много полезных функций, разработчикам программного обеспечения не нужно “изобретать велосипед” так часто, что дает возможность максимально сосредоточиться на создании новой программы.

История объектно-ориентированного программирования

Пожалуй, первым компьютерным решением, воплотившим в себе объектный подход, стал программно-аппаратный графический Планшет (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. Вскоре к ней подключился Якоб Палме, специалист Шведского института оборонных исследований. Он добавил в Симулу механизм сокрытия переменных. Первый законченный компилятор обновленной Симулы 67 увидел свет в 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 г. одиннадцать компаний, среди которых были 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 появится со дня на день. Хочется также надеяться, что со временем в коммерческих оболочках создания ПО на популярных языках программирования все же будут реализованы возможности ООП, предложенные еще 25 лет назад авторами SmallTalk. Оригинальные возможности Smalltalk Объекты могут обмениваться сообщениями (одна из ключевых идей ООП). SmallTalk – это не только язык программирования, но и комплексная стандартизованная ANSI-среда разработки. Она легко переносима между платформами, так как написана на самой себе и при этом очень компактна (например, Squeak «весит» 7 Мб). В нее входят средства создания многооконных приложений, встроенные службы конфигурационного управления и контроля версий, а кроме того, она поддерживает отладку на всех этапах создания и развертывания продукта. SmallTalk создавался как среда прототипирования (важный принцип ООП, подразумевающий спиральную разработку приложения, быстрое получение и совершенствование действующего прототипа). Подготовленное с помощью SmallTalk приложение представляет собой один файл, хранящий все состояние системы. Можно динамически создавать отложенные последовательности действий (блоки), что под силу лишь интерпретируемым системам. Хотя из SmallTalk, как из Java и C#, удалена возможность множественного наследования, только эта среда позволяет элегантно имитировать его с помощью протоколов обмена сообщениями между классами. Объект умеет информировать внешнюю среду о попытках неправильного использования самого себя (метод doesNotUnderstand). В SmallTalk нет разделения между типами и классами, благодаря чему можно избегать ошибок приведения типов. Концепция набора базовых типов, позволяющая выявлять такие ошибки на этапе компиляции, далеко не всегда себя оправдывает, поскольку уводит разработчика от мышления в истинно объектном духе. Имеются механизмы динамического расширения классов и приведения типов, перезагрузки исключений, расширения возможностей операторов, организации замкнутых выражений и др. Документацию и комментарии можно встраивать в код. Статья опубликована в PC Week/RE № 28 от 05.08.2003 г., стр. 10, и № 29 от 12.08.2003 г., стр. 20.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *