Разработка приложений
Александр Иванов
В начале 90-х годов IBM сделала ставку на язык Смолток как на главное средство разработки корпоративных приложений, выпустив пакет VisualAge for Smalltalk (VA/St). Коммерческий успех этого продукта подтвердил правильность сделанного корпорацией выбора: на VA/St было выполнено несколько известных проектов - таких, как информационная система зимней олимпиады в Нагано и глобальный пентагоновский проект JWARS. Недавно IBM выпустила версию 4.5 пакета, по составу и набору пользовательских услуг представляющую собой одно из наиболее мощных средств разработки клиент-серверных приложений.
VisualAge for Smalltalk - чисто объектно-ориентированная среда, в которой основное внимание уделяется проектированию и сборке готовых программ, а ручное кодирование применяется лишь для “доводки” приложения. Она позволяет создавать эффективные, переносимые, масштабируемые, легко сопровождаемые программные продукты, интегрированные с современными инфраструктурами (Web, Intranet, Java, ActiveX, OLE, SOM/DSOM, OCX) и унаследованными системами (программами на Си и Коболе, брокерами транзакций CICS, IMS, реляционными СУБД). Встроенные в VA/St средства коллективной работы ENVY/Developer существенно облегчают корпоративную разработку. Широкому распространению среды способствует также абсолютная переносимость как ее самой, так и создаваемых приложений между различными платформами - MS Windows 95, 98 и NT, IBM OS/2 Warp, OS/390, OS/400 и AIX, Sun SPARC Solaris, HP/UX.
Принцип визуального программирования
Приложение в VA/St строится из компонентов, называемых деталями. Разработчику предлагается широкий выбор готовых деталей, например визуальные элементы пользовательского интерфейса, средства работы с таблицами баз данных. Можно подключать библиотеки готовых деталей, поставляемых партнерскими фирмами IBM, создавать и включать в библиотеки собственные детали приложений.
В начале работы вы сразу попадаете в визуальный редактор композиции, где из палитры готовых деталей выбираете те, которые нужны для вашего приложения, и располагаете их на экране так, как это должно выглядеть в конечном продукте. Затем, в соответствии с логикой приложения, связываете детали между собой линиями, нажимаете кнопку Test, и приложение немедленно начинает выполняться. Таким образом можно быстро создать прототип, показать его заказчику и обсудить с ним дальнейшие действия. Если что-то нужно поменять, достаточно возвратиться в визуальный редактор композиции, внести изменения и снова нажать кнопку Test. Цикл жизни программы сокращен до минимума.
Простота применения VA/St обусловлена объектным подходом, при котором программа состоит из классов и объектов (экземпляров этих классов), а ее выполнение задается посылками сообщений между ними. Ничего другого в объектной программе нет. В VA/St палитра деталей - это библиотека классов; помещенные в окно приложения детали - экземпляры этих классов; связующие линии - сообщения, посылаемые от одних объектов к другим. Быстрый запуск приложения объясняется принципом реализации Смолтока: все объекты хранятся в виде заранее скомпилированных байт-кодов, которые при запуске интерпретируются виртуальной машиной.
Виды связей между деталями
Детали могут посылать и принимать различные сообщения, поэтому при установке конкретной связи нужно уточнять, какие именно сообщения к ней относятся. В VA/St деталь как объект имеет внешний интерфейс, определяющий ее свойства и поведение и состоящий из следующих элементов:
- атрибуты - данные, к которым имеют доступ другие детали. Эти данные представляют собой сущность и состояние детали (например, объем двигателя автомобиля, цена товара);
- события - сообщения об изменении состояния детали, посылаемые другим объектам (наример, сообщение о нажатии кнопки, посылаемое окну с целью его закрытия);
- действия - операции или функции, которые деталь может выполнять. Действия могут быть инициированы другими деталями посредством соответствующих связей (например, закрытие окна).
Связи определяют способ взаимодействия деталей. Можно устанавливать различные виды связей. Например, в связи атрибут - атрибут изменение атрибута одной детали приводит к такому же изменению атрибута другой детали, а в связи событие - действие событие в одной детали вызывает действие в другой. Две детали можно связать двумя и более линиями, соответствующими разным связям. Классификация элементов интерфейса и связей на экране с помощью линий разного цвета делает разработку более наглядной, помогая ориентироваться в направлении информационных потоков между деталями.
Построение приложения
Для иллюстрации построения полного приложения рассмотрим электронную записную книжку со списком текущих дел. Такой программе необходимы поле ввода, список, две кнопки и структура для хранения списка. Переместим все эти детали из палитры в рабочую область и расположим их так, как нам удобно.
Для хранения списка выберем деталь Ordered Collection (упорядоченный набор), которая позволяет добавлять и удалять объекты любого типа, и дадим ей на экране имя “Список дел”. Логику взаимодействия деталей можно описать следующим образом: “При нажатии кнопки "Добавить" текст из поля ввода добавляется в набор и его содержимое отображается в списке; при нажатии кнопки "Удалить" выделенный элемент списка удаляется из набора”. В соответствии с этим установим связи между деталями.
Свяжем событие clicked (нажата) кнопки “Добавить” с действием add: (добавить) детали Ordered Collection. Для этого вызовем щелчком мыши меню кнопки, затем пункт меню connect (связать). Появится интерфейс детали-кнопки в виде списка возможных сообщений. Выберем событие clicked и переведем мышь на деталь Ordered Collection. Выберем на ней пункт меню connect и действие add:. На экране от кнопки к детали протянется зеленая соединительная линия-стрелка, обозначающая связь событие - действие. Линия будет штриховая, говорящая о том, что связь не завершена: не указан параметр для вызываемого действия. Свяжем атрибут object поля ввода с атрибутом anObject незавершенной связи кнопка - набор (линия связи - тоже объект со своим интерфейсом!). Зеленая линия станет сплошной, а от поля ввода в нее будет входить фиолетовая, обозначающая параметр.
Рис. 1. Разработка приложения “Записная книжка”
Для того, чтобы содержимое набора отображалось в списке, соединим атрибуты self (сам) набора и items (элементы) списка. С кнопкой “Удалить” поступим так же, как с кнопкой “Добавить”, только вызываемым действием набора будет remove: (удалить), а его параметром - атрибут selectedItem (выбранный элемент) списка. Приложение примет вид, как на рис. 1, а результат его запуска - как на рис. 2.
Рис. 2. Пример работы приложения “Записная книжка”
Итак, мы создали законченное приложение, не написав ни единой строки программы, а всего лишь визуально задав логику взаимодействия его компонентов! Теперь можно запустить процедуру генерации готового приложения, которая создаст оптимизированный по памяти, независимый от платформы выполняемый файл.
Если список дел необходимо хранить в какой-либо базе данных, задача несколько усложняется, но подход к созданию приложения остается прежним. Вместо Ordered Collection нужно взять деталь Multi-row Query (запрос таблицы). Последняя обладает более широким набором свойств, среди которых наиболее интересны действие executeQuery (выполнить запрос) и атрибут resultTable (результирующая таблица). Действие выполняет заданное выражение на языке SQL, а деталь-таблица позволяет работать с полученным результатом. Внешне программа изменится несущественно.
Как правило, имеющихся деталей для создания конечного приложения бывает достаточно. Если же готовых деталей не хватает или вас не устраивает их производительность, вы переходите на уровень языка Смолток. Не знаете Смолтока? Не проблема. Изучить его и программировать на нем гораздо проще, чем на Си++ или на Java, а по возможностям он им не уступает.
Язык Смолток
Смолток существует уже более 25 лет, причем с 1980 г. он практически не менялся, а с 1998-го имеет статус стандарта ANSI. Идеи, заложенные в его основу, оказали фундаментальное влияние на развитие большинства объектно-ориентированных языков и систем.
Взгляните на следующий список средств:
- растровая графика;
- перекрывающиеся окна;
- мышь в качестве указателя экрана;
- выставляемые меню;
- автоматическая сборка мусора;
- компиляция исходного текста в байт-код с последующей интерпретацией виртуальной машиной;
- динамическая компиляция байт-кода в машинный код;
- браузеры иерархии классов и отдельных классов;
- инспекторы объектов;
- динамическая отладка на уровне исходного языка.
Очень похоже на характеристики современной среды разработки Java, не так ли? Но все это было сделано в системе ObjectworksSmalltalk еще в 1985 г.
Смолток - классический объектно-ориентированный язык, программирование на котором ведется исключительно в терминах объектов. Такие понятия, как длина целого типа, точность плавающего типа, указатель, запрос и освобождение памяти, оператор перехода, в языке отсутствуют. Программисты, привыкшие выделять и освобождать память под переменные и объекты, убившие массу времени на поиск причин ошибок типа “нарушение защиты памяти”, вероятно, оценят тот факт, что при выполнении программы на Смолтоке может возникать ошибка только одного типа - “объект класса X не понял сообщения Y”, а отладка ведется на исходном языке. Про память можно вообще забыть - система распределяет ее автоматически.
В настоящее время в области корпоративных разработок клиент-серверных приложений, где важны абсолютная переносимость кода, поддержка групповых проектов, легкость реконструирования программ, язык Смолток является наиболее эффективным инструментом. Он охватывает все направления современного бизнеса: производство, банки, финансы, страхование, учрежденческую деятельность, телекоммуникации. Сообщество пользователей языка, относящихся к самым высокооплачиваемым в США специалистам, постоянно растет, программисты редко переходят на другой язык.
Смолток очень прост в изучении. В нем всего пять ключевых слов и три оператора: посылка сообщения, возврат результата и присваивание. Программа на Смолтоке похожа на текст на английском языке и потому легко читается. Мощь языка проявляется в известных преимуществах объектного подхода (инкапсуляции, наследовании, полиморфизме) и в развитой иерархии из 2500 классов, ставшей стандартом де-факто для построения библиотек классов других языков.
Создание новой детали
Создавая новую деталь на Смолтоке, вы сначала с помощью редактора интерфейса определяете ее атрибуты, события и действия, а затем в редакторе сценариев реализуете их в виде программ. С учетом этой возможности VA/St предлагает два дополнительных вида связей между деталями: атрибут - программа, когда атрибут вычисляется в программе, и событие - программа, когда программа выполняется в ответ на какое-то событие.
Поскольку у вас есть доступ к исходному тексту любой детали, вы можете изменить поведение существующей детали либо унаследовать ее поведение в новой детали и там уже изменить его. Созданная на языке Смолток деталь получает представление в виде пиктограммы и на равных правах участвует в визуальном программировании приложения.
Средства анализа и проектирования
В состав версии 4.5 VA/St включен ряд CASE-средств, направленных на поддержку полного цикла жизни программного продукта:
- UML Designer - средство моделирования на основе универсального языка UML, объединяющее три наиболее известные методики анализа и проектирования - Дж. Рамбо, Г. Буча и И. Якобсона. UML позволяет описывать требования к прикладной системе, анализировать эти требования и проектировать с их учетом структуру и поведение системы. UML Designer осуществляет плавный переход от модели к VA/St, автоматически генерируя программу на Смолтоке и оставляя возможность возврата от программы к модели (обратное проектирование);
- Object Extender - средство, дополняющее объекты постоянной памятью, не опускаясь на уровень Смолтока. Применяется для автоматизации разработки интерфейса к базам данных;
- генератор отчетов, предназначенный для документирования готового приложения.
Заключение
VisualAge for Smalltalk обладает достоинствами, выделяющими его среди других средств разработки клиент-серверных приложений. Он позволяет наглядно отображать связи между компонентами в соответствии с логикой работы и направлением информационных потоков приложения. В нем имеется исчерпывающий набор функциональных средств для разработки и интеграции готового продукта в современные и унаследованные инфраструктуры. Все это позволяет решать задачи путем полного визуального построения приложения без ручного программирования. Если же необходимо создать новые компоненты, то их программирование ведется на чисто объектно-ориентированном языке, органично встроенном в общий процесс разработки.
Ознакомительную копию версии 4.5 VisualAge for Smalltalk можно бесплатно получить в фирме СИКОР (catia@dol.ru). Дополнительную информацию об этом продукте и языке Смолток см. на узлах российского отделения IBM (http://www.ibm.ru) и “Смолток в России” (www.math.rsu.ru/smalltalk).
К автору можно обратиться по адресу: ivanov@smalltalk.msk.ru.