Smalltalk - предвестник Java и .NET
Объектно-ориентированное программирование покорило мир. Технологии Java и .NET прочно завоевали рынок и пока не собираются его никому уступать. А ведь идеи, лежащие в их основе, придуманы давно, и именно Smalltalk вдохновил создателей этих технологий...
На самом деле сейчас, когда без ООП даже плюнуть сложно, мало кто задумывается, как выглядело программирование в те не такие уж и далёкие годы, когда об объектах слышали только самые продвинутые. Программирование без объектов приводило к путанице в кодах. Хотя бы даже самый простой эффект, получающийся в результате применения ООП, - группирование переменных. У вас есть одна переменная, у которой есть несколько свойств, логически связанных с этой переменной. Если не использовать объекты, то есть несколько переменных, которые в тексте программы, вообще говоря, выглядят точно так же, как и другие, между собой не связанные. То же касается методов - вместо написания процедур с огромным количеством параметров можно написать метод, который будет выглядеть гораздо проще и читабельнее. Но это всё довольно просто, как и эффекты наследования (хотя бы даже повторное использование кода), наличие компонентных моделей разработки ПО и прочее, что, думаю, большинство разработчиков себе представляет. Гораздо интереснее посмотреть на развитие ООП и задаться вопросом о том, что ждёт эту концепцию в ближайшем будущем. А в том, что она продолжит своё развитие, мне кажется, можно не сомневаться. Но для отслеживания грядущей динамики нужно представлять путь, уже пройденный объектно-ориентированной парадигмой в ходе своего развития. Собственно, именно в этом нам поможет Smalltalk с его богатой на идеи историей.
Прежде чем говорить о роли Smalltalk'а в развитии ООП, стоит, как мне кажется, рассказать о том, что же такое этот самый Smalltalk собой представляет. Smalltalk - это объектно-ориентированный язык программирования с динамической типизацией. Что значат слова о динамической типизации? В некоторых языках программирования (например, том же C++) типизация переменной выполняется в момент её объявления. То есть, тип переменной известен заранее, что накладывает на её использование определённые ограничения. То есть, даже в весьма гибком C++ нельзя присвоить переменной типа short int целую строку. В более строго типизированных языках (Паскаль, Ада) гибкость в работе с переменными теряется ещё больше - правда, в угоду надёжности программы. В Smalltalk всё иначе: тип переменной определяется во время операции присваивания, то есть за время выполнения программы одна и та же переменная может успеть "примерить" на себя несколько разных типов. Как это получается? Концептуально всё очень просто - каждая переменная в Smalltalk является объектом. Объекты обмениваются между собой сообщениями - собственно говоря, в этом и состоит выполнение программы. Что интересно, объектами являются не только переменные, но и многое другое - например, память. Такой подход нашёл своё применение и во многих современных технологиях. Например, в Windows все окна обмениваются друг с другом и с самой операционной системой сообщениями, а во многих современных языках программирования, активно используемых в промышленных масштабах, все типы данных - объектные. Каждая переменная в Smalltalk является объектом. Объекты обмениваются между собой сообщениями - собственно говоря, в этом и состоит выполнение программы. Что интересно, объектами являются не только переменные, но и многое другое - например, память.
Но, конечно, динамическая типизация - не единственная (и даже не самая главная) идея, сумевшая сделать Smalltalk знаменитым. Во-первых, модель объектов, обменивающихся сообщениями, приводит к довольно необычным результатам: в Smalltalk нет ключевых управляющих конструкций наподобие циклов, инструкций выбора (if) и других подобных вещей. Почему? Потому что в Smalltalk это реализуется с помощью всё тех же вездесущих своеобразных Smalltalk'овских объектов. Например, в конструкции выбора посылается сообщение для проверки на истинность специализированным объектом, который возвращает код, который должен отправиться на выполнение также в виде специфического объекта. Объекты, кстати, могут не только отвечать на сообщения, но и перенаправлять их - то есть, метафора сообщений довольно глубока и несколько отличается от объектной метафоры, которая используется в том же, например, C++. Во-вторых, Smalltalk изначально был задуман и реализован как язык, программы на котором выполняются некоторой виртуальной машиной. Ничего не напоминает? Ну да, конечно, Java и .NET - так и видно, как из-за их могучих плеч высовывается Smalltalk. Конечно, нельзя сказать, что Smalltalk был пионером в области виртуальных машин - однако, несмотря на это, во многом именно Smalltalk, как хранилище удачных идей и концепций программирования, повлиял на возникновение виртуальных машин для других языков программирования. Вместе с виртуальной машиной в Smalltalk есть и сборщик мусора - вещь, полезность которой все уже давно успели осознать и оценить. В-третьих, Smalltalk разрабатывался таким образом, чтобы всё можно было с максимальной лёгкостью менять и перестраивать. Как сказал когда-то один из гуру экстремального программирования Кент Бек, "Smalltalk, с его акцентом на человеческом аспекте программирования, был той питательной средой, на которой выросло Экстремальное Программирование. Smalltalk всё еще не имеет себе равных по уменьшению стоимости изменений в течение всего времени жизни проекта. А это то, без чего существование XP невозможно". Собственно, это просто ещё одно следствие уникальной, безумно удачной объектной модели Smalltalk. Благодаря минимуму встроенных в язык конструкций и механизмов можно легко добавлять собственные (что мешает добавить второй объект для if, который, скажем, будет работать как switch из С++?). Думаю, если экстремальное программирование и дальше будет активно использоваться и развиваться, эта особенность Smalltalk'а окажется ещё более востребованной. Smalltalk изначально был задуман и реализован как язык, программы на котором выполняются некоторой виртуальной машиной. Вместе с виртуальной машиной в Smalltalk есть и сборщик мусора - вещь, полезность которой все уже давно успели осознать и оценить.
Чтобы разбавить описание возможностей языка, приведу пример программы на нём - ведь язык характеризуется не только возможностями, но и синтаксисом. Эта программа написана на Dolphin Smalltalk. В качестве задачи на интуицию (она для программиста тоже полезна) и логику предлагаю попытаться самим догадаться самостоятельно, что же именно эта программа делает. Правильный ответ - в конце статьи. Вертикальная палочка определяет переменные, двоеточие определяет параметры, а квадратные скобки, в данном случае, являются аналогом фигурных в C-подобных языках. Итак, программа: words := 'ma79ma 9n8e7 mila r1a2m3u' subStrings. sortedWords := words asSortedCollection: [:a :b | (a reject: [:each | each isDigit]) <= (b reject: [:each | each isDigit])]. sortedWords inject: '' into: [:a :b | a = '' ifTrue: [ b ] ifFalse: [ a, ' ', b ] ].
А теперь немного истории. Совсем немного, потому что, хотя история создания Smalltalk, как история любого языка программирования, по-своему интересна и поучительна, но место в газете ограничено. Местом, где создавался Smalltalk, стал легендарный Xerox Palo Alto Research Center (XPARC). Да-да, этот язык программирования придуман там же, где и графический пользовательский интерфейс, и многие другие ИТшные блага. Основной идеей, легшей в основу языка, была идея создания объектно-ориентированного языка программирования, предельно простого в описании и основанного на модели обмена сообщениями. В качестве основы был взят язык Симула, первый объектно-ориентированный язык программирования, так и не ставший популярным в массах из-за не слишком качественной реализации. Впрочем, ни первая версия, 1971 года выпуска, ни вторая, 1972-го, не смогли предложить ничего такого, чтобы стать всемирно известными, а потому авторы не выпускали их за пределы XPARC. Сейчас их даже принято относить к отдельному языку программирования, настолько они отличались от того, что в результате кропотливого труда было создано разработчиками языка к 1980 году. В этой версии уже было наследование, метаклассы, и именно эту версию языка впервые увидела широкая общественность. Сейчас существует несколько разных диалектов Smalltalk и версий его реализации. Самые распространённые - VisualWorks Smalltalk и Dolphin Smalltalk.
Глядя на идеи, реализованные в Smalltalk, и вообще на идеи XPARC'а, реализованные в разных сферах ИТ, можно дать следующий прогноз: всё большее число идей из этого языка программирования будет реализовываться в новых технологиях, изобретаемых крупными софтверными компаниями, а также в новых версиях уже существующих технологий. Хотя, конечно, Smalltalk - не единственный источник вдохновения для современных творцов средств и технологий разработки программного обеспечения, но, тем не менее, вклад его весьма весом, в чём вы могли убедиться сами. Думаю, самое широкое развитие получит одна из старейших и главнейших идей этого языка - концепция обмена сообщениями между объектами. Согласитесь, это гораздо интереснее и эффективнее, чем перегрузка операторов из C++. Что касается самого Smalltalk'а, то он
сейчас очень даже активно
применяется и совершенствуется.
Для тех, кто заинтересовался этим
языком, могу порекомендовать
следующие ресурсы: Всё большее число идей из этого языка программирования будет реализовываться в новых технологиях, изобретаемых крупными софтверными компаниями, а также в новых версиях уже существующих технологий.
Программу эту я взял отсюда: Вадим СТАНКЕВИЧ,
Чтобы разместить новость на сайте или в блоге скопируйте код:
На вашем ресурсе это будет выглядеть так
Технологии Java и .NET прочно завоевали рынок и пока не собираются его никому уступать. А ведь именно Smalltalk вдохновил их создателей...
|
|