среда, 2 июля 2008 г.

Алан Кей

Алан Кей - изобретатель самого словосочетания "объектно-ориентированный". Еще до поступления в 1966 году в аспирантуру университета штата Колорадо по теме «Математика и молекулярная биология», Алан отслужил на тренировочной базе Рандольф (Randolph), где работал с компьютером Burroughs 220. Burroughs 220 – ламповый компьютер фирмы Burroughs Corporation, расположенной в Детройте. Разработан в 1957 году компанией Electrodata Corporation и назывался Electrodata Datatron 220 до того, как Electrodata была поглощена Burroughs. В разное время стоил от $601 000 до $325 000 и выполнял умножение за 2, а деление почти за 4 микросекунды.

Эта история по-разному перевирается различными изданиями. Здесь приводится версия журнала PC Magazine и самого Алана, которая кажется наиболее правдоподобной.

В 50-х не существовало единых стандартов на форматы документов. Еще до Алана Кея на базе Рандольф работал неизвестный программист, который создал под Burroughs 220 некоторое количество полезного программного обеспечения. Получаемые данные записывались на бобины с магнитной лентой. К сожалению, они не имели никакого смысла для компьютеров Burroughs других тренировочных баз, поскольку на них не было того уникального ПО. Вместо того чтобы распространить свои программы на другие машины, неизвестный гений нашел другое решение: он стал записывать на бобины данные в виде программ, которые содержали и данные, и алгоритмы обработки. Может показаться, что он придумал себе лишнюю работу.

В действительности, им было использовано очень прогрессивное решение, которое обладает следующими преимуществами:

1. Данные полностью переносимы в пределах определенной аппаратной платформы.

2. Изменения в формате данных не затрагивают существующие бобины. Данные по-прежнему доступны, и для этого не требуется дополнительного программирования.

Сущность преимуществ остается непонятной, пока мы смотрим на программное обеспечение, как на конструирование. Ну что нам стоит поддерживать несколько форматов наших же данных? По-видимому, Кей в то время также не оценил подхода. По долгу службы, в 1961 году, ему пришлось поддерживать имеющееся решение, и он слегка изменил его. Теперь на все машины Burroughs все же ставилась небольшая программа, предоставляющая пользовательский интерфейс для загрузки модулей, как он назвал имеющийся гибрид данных и программ. И только работая над кандидатской диссертацией в 1966 году, он понял всю оригинальность идеи.

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


Объектно-ориентированное программирование, придуманное Кеем, вводит два основных принципа. Первыйпринцип рекурсивного дизайна:

The basic principal of recursive design is to make the parts have the same power as the whole.

Alan С. Key: The Early History of Smalltalk, 1993, ACM 0-89791-571-2/93/0004/0069

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

Алан Кей, «Ранняя история SmallTalk», 1993, Издания компьютерного сообщества, статья №0-89791-571-2/93/0004/0069 (далее [KEY01])

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

Второй принцип определен следующим образом:

…everything we can describe can be represented by the recursive composition of a single kind of behavioral building block that hides its combination of state and process inside itself and can be dealt with only through the exchange of messages.

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

[KEY01]

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

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

Рассмотрим подробнее следствия из указанных принципов, какими они видятся на современном этапе развития технологий, и подчеркнем некоторые распространенные, в какой-то степени ошибочные, представления. Собственно, при более подробном изучении вопроса оба принципа выражают одну и ту же точку зрения.

Применение практики рекурсивного дизайна оказывает серьезное влияние на программный проект. Самым простым следствием оказывается тот факт, что приходится писать больше программного кода. Это происходит потому, что рекурсивно стыкуемые элементы обязаны иметь понятный и унифицированный интерфейс. Применение разных критериев качества к «внешним» и «внутренним» компонентам системы становится признаком плохого дизайна, поскольку теперь нет по отдельности «внешнего» и «внутреннего».

Вторым следствием является более согласованная структура системы. Очевидно, что абстракция самого верхнего уровня, выражаемая объектом «Система» (System), «Приложение» (Application) или «Окружение» (Environment), предоставляет наиболее полный и доступный для понимания программный интерфейс. Для прикладного программиста он определяет «лицо» системы. Настолько же высокие требования теперь должны быть представлены и ко всем другим составляющим. Результатом этого оказывается структура, отдельные элементы которой более доступны для непосредственного программного манипулирования и анализа, чем при разработке закрытых модулей. Такую структуру проще понять и проще подвергнуть тестированию.

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

Изучая психологию детей на основе работы Сеймура Паперта (детский психолог, создатель языка LOGO для обучения программированию очень маленьких детей от пяти лет), Кей пришел к выводу о большом значении интерактивной среды программирования, которая бы обеспечивала возможность непосредственного взаимодействия с объектами программируемой системы. Созданная им впоследствии среда для Smalltalk позволяла программировать систему «в горячем режиме», т.е. добавлять и изменять код, не уничтожая существующие в системе объекты и потоки исполнения.

В данный момент Алан Кей не считается авторитетом в среде объектно-ориентированного программирования. Он работает на компанию Walt Disney и разрабатывает новые виды аттракционов для детей и взрослых.


Комментариев нет: