PC Magazine/RE logo
©СК Пресс 9/96
PC Magazine, November 7, 1995, p 307

Разберемся с объектами

Ричард В. Дрейган


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

Языки объектно-ориентированного программировани (ООП) уже давно перестали быть чем-то новым. Не только разработчики получили на выбор множество широко применяемых объектно-ориентированных средств разработки - даже конечные пользователи в повседневной работе все чаще сталкиваются с объектами. С этой технологией имел дело каждый, кто хоть раз вставлял электронную таблицу в создаваемый в текстовом процессоре документ. В распространенных операционных системах, например OS/2 Warp, объектно-ориентированна программа выполняется всякий раз, когда пользователь открывает находящийся на рабочем столе документ. Как видите, выгоды от работы с объектами сейчас может получить каждый.

Непосвященных иногда отпугивают формальные термины, описывающие концепции ООП. Заклинания вроде "инкапсуляции данных", "полиморфизм" и "наследование" придают ООП устрашающий вид, хотя на самом деле разработать объектно-ориентированную программу часто оказывается проще, чем создать обычную процедурную программу. "Строгие" объектно-ориентированные языки, такие, как Си++ или Smalltalk/V, теперь содержат инструменты, максимально облегчающие обслуживание и повторное использование созданных модулей. Средства быстрой разработки прикладных программ (Rapid Application Development - RAD), подобные Microsoft Visual Basic 4.0 и PowerBuilder 3.x (корпорации Powersoft), демонстрируют различную степень следовани принципам ООП, но и они позволяют программистам разрабатывать и многократно использовать готовые модули с помощью объектов. Ваша квалификация и профессиональный опыт должны подсказать вам, стоит ли неукоснительно придерживаться теории объектного подхода или выгоднее предпочесть упрощенную парадигму. В любом случае вы сможете пользоваться существующими объектами, ничего не зная об их внутреннем "устройстве", а также создавать свои собственные.

Концепции ООП

Объектно-ориентированные средства разработки не следуют каким-либо стандартам, однако в академических кругах общепринятыми считаются некоторые базовые положения (для углубленного изучения вопроса советуем обратиться к учебникам по ООП, например James Martin, James O'Dell; Object-Oriented Analysis and Design; Prentice-Hall, 1992). В основе концепции лежит понятие объекта (object), или вида объекта (object type), соответствующее реально существующему явлению. Класс (class) - это программное представление данного объекта. Поскольку программные объекты отражают категории реального мира, взаимосвязи между классами легко показать графически. Классы содержат методы (methods) - функции, присущие лишь определенному классу. Методы, в свою очередь, выполняют операции классов (operations).

Для вызова метода или операции необходимо послать объекту запрос (request), или сообщение (message). В сообщении должны быть указано имя объекта, имя метода и, если нужно, дополнительные аргументы. При этом в Си++, Visual Basic и PowerBuilder используется знакома вам форма записи через точку: Объект.Метод(Аргументы). Немного иная нотация в Smalltalk/V: Объект Метод: Аргументы.

Как и в реальном мире, объекты бывают связаны друг с другом. С помощью механизма наследования (inheritance) одни классы могут происходить от других. Подкласс, или порожденный (дочерний) класс (subclass), способен унаследовать от своего суперкласса, или родительского класса (superclass) все его методы и данные. Возника как копии родителей, подклассы затем развиваются и претерпевают изменения. Переопределяя старые и ввод новые методы, программист модифицирует поведение объекта. Наследование обеспечивает механизм моделирования взаимоотношений вида (type) и подвида (sub-type), соответствующих отношениям реального мира. С помощью множественного наследования (multiple inheritance) потомок может унаследовать способности и от нескольких родителей.

Пожалуй, самый пугающий термин ООП - это полиморфизм (polymorphism). Он возникает при создании иерархии классов - группы классов, связанных отношениями вида и подвида, если все они используют общий метод. Например, в иерархии классов Vehicle (Транспортные средства) таким методом может быть Move() - Движение. Реализаци этого метода для каждого из подклассов Car(), Plane() и Boat() - Автомобиль, Самолет и Лодка соответственно - может весьма различаться. Вызов метода на вершине иерархии (Vehicle) приведет к вызову специализированного метода класса-потомка. При правильном использовании полиморфизм способен стать мощным средством языка, обеспечивающим сохранение простоты текста программы.

Важнее всего то, что объекты могут существовать изолированно. С помощью инкапсуляции (data encapsulation) данные класса могут быть защищены от других объектов. Такое "сокрытие" информации (information hiding) позволяет объектам спрятать их внутреннее "устройство". Следовательно, объект можно его использовать, ничего не зная о механизме его работы. Гениальность объектно-ориентированного подхода состоит именно в избавлении от ненужных деталей: если вы не создатель объекта, вам незачем знать, что у него внутри.

Многократное использование готовых объектов

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

Поставляемая вместе с пакетом Microsoft Visual C++ 4.0 библиотека Microsoft Foundation Classes 4.0 содержит тысячи строк исходного текста и более ста объектов. В состав среды PARTS Workbench пакета Visual Smalltalk for Win32 3.01 включены объекты дл построения интерфейса пользователя, управления базами данных и выполнения расчетов. Более того, такие библиотеки могут быть дополнены объектами, созданными самим разработчиком, которые затем легко использовать в новых проектах. Конечная цель данного подхода - организовать некое хранилище готовых объектов, доступных как для программистов, так и для рядовых пользователей.

Повторно использовать объекты в большинстве средств ООП, в том числе рассматриваемых в этой статье, сейчас как никогда просто. Если все разработчики в вашей организации создадут общую библиотеку классов и компонентов, каждый разработчик получит возможность использовать их в новых прикладных программах. В пакетах Microsoft Visual Basic 4.0 и Visual C++ данна функция реализуется с помощью механизма OLE Component Object Model (COM), в котором корпорация Microsoft видит будущее программирования. Инкапсуляция данных позволяет не интересоваться тем, как именно работают управляющие элементы OLE (OCX), - имеет значение лишь то, что они позволяют ввести новые функции в проекты, подготовленные с использованием Visual C++, Visual Basic и совместимых с ними средств.

Различные подходы к объектам

Объектно-ориентированные платформы разработки прикладных программ, вообще говоря, следуют одному из двух возможных подходов к созданию и многократному использованию объектов. Некоторые пакеты ориентируютс на использование разрабатываемых пользователем классов, в других работа строится на применении готовых классов. Средства, подобные Visual C++ и Smalltalk/V, позволяют строить основные компоненты (новые классы), не уступающие включенным в комплект поставки. Помните, что время и усилия, затраченные на создание классов в Cи++ или "деталей" в Smalltalk, окупятся, когда вы будете вновь и вновь использовать их в различных проектах.

Такие средства быстрой разработки (RAD), как Visual Basic или PowerBuilder, ориентированы в первую очередь на создание программ в более сжатые сроки с использованием уже имеющихся компонентов. В Visual Basic применяются элементы OCX, а в PowerBuilder - собственная библиотека классов для работы с базами данных и построения интерфейса. Разработчикам, пользующимися этими пакетами, обычно не приходитс создавать новые средства: все необходимые компоненты уже есть в комплекте поставки или предлагаются в качестве дополнительных модулей независимыми фирмами.

Различие между созданием новых объектов и использованием готовых довольно условно. И Visual Basic, и PowerBuilder позволяют разрабатывать новые объекты в дополнение к уже имеющимся, а Visual C++ и Smalltalk/V, разумеется, способны работать и с существующими средствами. Выбор определяется вашей приверженностью тому или иному подходу и объемом ручной работы, который вы хотели бы (или не хотели бы) выполнить.

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


Microsoft Visual Basic 4.0, Professional Edition: ООП с помощью OLE

Вне всякого сомнения, Visual Basic не являетс объектно-ориентированным языком программировани вроде Cи++ или Smalltalk, но пакет Visual Basic 4.0 Professional Edition позаимствовал немало черт, присущих объектно-ориентированным средствам. В предыдущих версиях объектная парадигма была в основном связана с элементами VBX (Visual Basic Controls). Публикация этой спецификации привела к возникновению огромного рынка дополнительных модулей, предлагаемых независимыми фирмами-разработчиками. В рассматриваемой версии в дополнение к VBX были реализованы элементы управления с использованием технологии OLE - OCX. Разработанная корпорацией Microsoft модель OLE Component Object Model (COM) дает возможность применять эти универсальные и взаимозаменяемые модули для построения прикладных программ.

Модель OLE COM

Созданный корпорацией Microsoft протокол OLE 2.0 позволяет объектам "общаться" друг с другом. В Visual Basic 4.0 технология OLE делает все - от вызова стандартного диалогового окна на рабочей станции до запуска модуля на удаленном сервере. Работая с OLE 2.0, многие программисты пользуютс такими понятиями OLE, как редактирование по месту, сервер и контейнер. Однако редактирование по месту - очень сложная операция, реализуемая лишь с помощью библиотеки классов Cи++, подобной MFC. Универсальные компоненты строятся на основе модели OLE COM - мощной, но менее привлекательной родственницы редактирования по месту.

Использование OLE в Visual Basic 4.0 не представляет трудности. Для создания универсальной OLE-формы или библиотеки требуется всего лишь объявить глобальные переменные и процедуры, а затем описать их как общедоступные. Большинство разработчиков привыкли избегать глобальных переменных, но в Visual Basic они являютс неотъемлемой частью программ. Все глобальные переменные, помеченные как общедоступные, превращаются в свойства, или атрибуты [properties; в Cи++ они же называются "элементы данных" (data members), а в Smalltalk - "экземпляры переменных" (instance variables)], а глобальные процедуры становятся методами, которые могут быть использованы в любой другой форме.

Управляющие элементы Visual Basic

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

Создание модулей классов

Объекты, создаваемые разработчиком в Visual Basic 4.0, носят название модулей классов (class modules). Они не являются элементами OCX, однако опираются на механизм OLE для вызова других модулей. Пакет не предусматривает наследование классов, но при построении иерархии существует возможность указать, какие объекты содержат в себе другие объекты. Включение - это обратная сторона инкапсуляции: если один объект содержит другой, он может использовать код включенного объекта. Поскольку нет наследования, не реализован и полиморфизм, предусматриваемый в остальных рассматриваемых в статье пакетах. Хот такой подход к разработке программ нельзя назвать по-настоящему объектно-ориентированным, он все же позволяет моделировать реальные задачи.

Visual Basic 4.0 не предусматривает иерархии классов, этот язык ориентирован на предельное облегчение применения готовых объектов. Модули классов могут быть включены в новый проект с помощью программы Object Browser, где они появляются наряду с элементами OCX. Данное средство позволяет вам бегло ознакомиться со всеми свойствами и методами элемента OCX или модуля класса, а затем вызвать их из своей программы.

Простота использования

Успех пакета Visual Basic показывает, что дл того, чтобы извлекать выгоды применения готовых объектов, не обязательно строго следовать концепциям ООП. В основе версии 4.0 лежит принцип разумной достаточности. Продукт предусматривает условную компиляцию и дает возможность создавать 16- и 32-разрядный код. Имеются средства дл распространения и тестирования программ, построенных на базе механизма OLE. Вскоре после выхода на рынок Windows 95 ожидается появление множества элементов OCX, и вполне вероятно, что в их числе будут и те, что необходимы вам. А скомпоновать их в специализированную прикладную программу проще в Visual Basic 4.0, чем в любом другом пакете.

Microsoft Visual Basic 4.0, Professional Edition
Цена, рекомендуемая изготовителем: 499 долл., обновление версии - 99 долл.
Microsoft Corp., Redmond, WA; 800-426-9400; fax 206-936-7329.

Microsoft Visual C++ 4.0: MFC 4.0 и другие средства

Если вы программируете для Windows, то популярна библиотека классов Microsoft Foundation Classes (MFC) существенно ускорит вашу работу. Эта мощна унифицированная библиотека предоставляет в распоряжение программиста 120 тысяч строк готового текста на языке Cи++. Версия Visual C++ 4.0, во время подготовки статьи проходившая завершающую стадию бета-тестирования, включает не только саму MFC 4.0, но и усовершенствованные средства работы с ней.

Библиотека MFC

В библиотеке MFC реализованы как наследование, так и полиморфизм. К примеру, базовый класс окна дл нее - CWnd - содержит несколько десятков методов, доступных из более узко специализированных классов окон, включая основные управляющие элементы Windows 95 и элементы, соответствующие новому стандарту OCX.

Сама MFC некогда возникла как составленный на скорую руку набор слабо взаимосвязанных классов, построенный на базе интерфейса прикладного программирования (API) Windows. Следовательно, на этапе ее освоения знание API может сослужить программисту хорошую службу. Благодаря MFC 4.0 в классах теперь реализованы новые API-функции Win32 для синхронизации объектов, позволяющие потокам и процессам координировать взаимодействие в таких многозадачных ОС, как Windows 95 и Windows NT 3.51. Библиотека содержит также новый набор классов Database Access Objects (DAO), служащий альтернативой спецификации ODBC при построении прикладных программ, работающих с базами данных.

Усовершенствованный набор инструментальных средств

В составе пакета Visual C++ 4.0 появились несколько новых инструментов и улучшены имеющиеся, облегчающие работу с MFC. Благодаря модулю AppWizard программисты и прежде могли в начале работы над проектом автоматически создать типовую программу, содержащую усовершенствованные средства - инструментальные панели, строки состояния, серверы OLE, функции контейнера и средства работы с базами данных. В версии Visual С++ 4.0 у программиста появилась возможность создать собственную базовую программу, а затем использовать ее в качестве шаблона в различных проектах. В результате все программы, разрабатываемые для нужд одной фирмы, могут иметь единый стиль интерфейса и общие основные возможности.

Новое средство Class Viewer дает возможность просмотреть объекты и методы Си++ еще до начала работы над проектом. Теперь программист может воспринимать проект не как набор исходных текстов, но как совокупность классов, доступ к методам которых легко получить путем выбора из удобного иерархического списка.

Новая утилита Component Gallery значительно совершенствует механизм повторного использовани объектов, позволяя подключать классы Си++ и дополнительные модули (например, элементы OCX) одновременно к нескольким проектам. Когда существующие классы подключаются к программе, Component Gallery автоматически включает в проект все необходимые файлы с исходными текстами. С помощью этой утилиты использовать OCX в проекте почти так же просто, как и старые элементы VBX.

Средства языка Си++

В пакете Visual С++ 4.0 (в отличие от других средств, рассмотренных в этом обзоре), программирование на Си++ представляет собой выполнение последовательности "подготовка исходного текста - компиляция - сборка". Одной из основных задач разработчиков пакета Visual C++ всегда являлось стирание границ между написанием, построением и отладкой проекта. Интегрированна среда разработки Visual C++, получившая название Developer Studio, позволяет с помощью единого центра управления создавать многочисленные рабочие среды (workspaces), каждая из которых в свою очередь контролирует остальные инструментальные средства Си++ - Microsoft SourceSafe, Microsoft Test и различные продукты независимых поставщиков.

В Visual C++ 4.0 предусмотрены две системы именования - стандартная ANSI C++ и, впервые реализованная в версии 4.0, RTTI (runtime type information - информация о типе объекта во врем исполнения). Хотя шаблоны появились уже в версии 2.0, стандартные классы контейнеров включены в шаблоны лишь в описываемой версии. Visual C++ 4.0 стал одним из лучших пакетов разработки программ на языке Си++, и другим фирмам - поставщикам компиляторов - предстоит сильно потрудиться, стараясь сравняться с этим пакетом в простоте использования. Наличие библиотеки MFC 4.0 и прекрасных средств управления программой делает Visual C++ 4.0 непревзойденным инструментом реализации объектно-ориентированных возможностей Си++ во всей их полноте.

Microsoft Visual С++ 4.0
Цена не была установлена ко времени выхода статьи.
Microsoft Corp., Redmond, WA 800-426-9400; fax, 206-936-7329.

PowerBuilder Desktop 3.0A: простота наследования и мощь средств доступа к БД

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

В то время как другие рассматриваемые в этом обзоре пакеты обеспечивают возможность работы и в "профессиональном" и в "упрощенном" режимах программирования, PowerBuilder стремится сделать процесс разработки на всех этапах как можно проще. Панель Powerbar, которая первоначально занимает все окно, но может быть превращена в небольшую удобную панель инструментов, собирает воедино все средства разработки. Эти средства, именуемые "Художниками" (Painters), просты в использовании, но обладают широкими возможностями.

PowerBuilder и его "художники"

"Художники" помогут вам в построении, отладке и даже установке прикладных программ. Так, Window Painter позволяет строить аналоги форм Windows с использованием полного набора стандартных, а также ряда новых, усовершенствованных элементов управления. "Художник" DataWindow Painter, мощный и интеллектуальный инструмент доступа к данным, обеспечивает связь программы с БД средствами SQL-таблиц. С его помощью даже реализация сложных запросов не требует программирования как такового, однако при этом достигаются значительная гибкость и надежность. Разработчик имеет возможность объединять таблицы, устанавливать фильтры и управлять отображением данных с помощью нескольких колонок. "Художник" Menu Painter помогает строить системы меню в окне программы, а Structure Painter облегчает разработку и модификацию структур данных. После того как программа создана и отлажена, "Художник" Application Painter соберет воедино все нужные файлы и создаст исполнимую версию программы.

Локальные и удаленные базы данных

Одна из наиболее привлекательных черт PowerBuilder - возможность исполнять программы как на локальном, так и на удаленном компьютере. В комплект поставки включен пакет Watcom SQL 4.0, с помощью которого вы создаете программу, работающую с базой данных, и отлаживаете ее на локальной базе данных. По завершении этого процесса не составляет труда перенести источник данных на удаленный компьютер. Доступ к удаленной базе данных в PowerBuilder реализован с помощью механизма ODBC, что позволяет устанавливать соединение с большинством популярных SQL-серверов. Еще одно средство - "Художник" Database Painter - обеспечивает возможность следить за разработкой локальных и удаленных баз данных, а также осуществлять подготовку таблиц, добавление и удаление индексов и перемещение данных вашего настольного ПК на сервер.

Объектная парадигма

Как и в пакете Visual Basic, в PowerBuilder все управляющие элементы и другие составляющие пользовательского интерфейса являются объектами. В PowerBuilder объекты описываются атрибутами - attributes (напомним, что в Visual Basic их аналогии - properties, в Visual C++ - data members, а в Smalltalk/V - instance variables). Управление системными объектами (например, объектом транзакции) выполняется с помощью их методов, или - в терминологии PowerBuilder - функций (functions). "Художник" Function позволяет создавать такие методы на языке сценариев PowerScript. Составленная на этом языке программа может содержать объекты, другие стандартные типы данных и даже операторы Embedded SQL.

Разумеется, при работе с реализованной в PowerBuilder объектной моделью объем программирования "вручную" сокращается. С помощью объектов вы получаете возможность не только создать интерфейс или обратиться к базе данных, но и многократно использовать готовые окна и формы. В отличие от Visual Basic пакет PowerBuilder предусматривает наследование, при грамотном применении которого однажды разработанная базова форма может многократно использоваться как в одном проекте, так и в нескольких. Простое в работе средство Class Browser обеспечивает просмотр всех классов (в том числе системных), а также их атрибутов и методов.

Пакеты Visual Basic и PowerBuilder отличает не слишком доктринерское отношение к применению объектов. Однако без использовани объектно-ориентированного подхода к разработке прикладных программ, для баз данных Power Builder не был бы столь гибким и мощным. Простая структура и расширенные средства работы с базами данных обеспечивают пакету неизменный успех в среде разработчиков.

PowerBuilder Desktop 3.0a
Цена по каталогу: 695 долл., обновление версии - 195 долл.
Powersoft Corp., Concord, MA, 800-395-3525; fax, 508-287-1600.

Visual Smalltalk for Win32 3.01: ООП без компромиссов

В свое третье десятилетие пакет Smalltalk/V вступает как один из наиболее развитых и мощных объектно-ориентированных языков программирования. В нем есть все, что только могут ожидать разработчики от объектно-ориентированного языка, - в том числе наследование, полиморфизм и инкапсуляция данных.

Даже те, кто лишь недавно взялся за ООП, не встретят трудностей при освоении элегантного и логичного синтаксиса пакет Smalltalk/V. Верси Smalltalk/V for Win32 3.01 представляет собой дальнейшее усовершенствование среды PARTS Workbench, с помощью которой программисты создают модули Smalltalk и многократно используют их в разных проектах. При этом создание прикладной программы в PARTS часто обходится без написания хотя бы одной строчки исходного текста.

Средство просмотра иерархии классов

Пакет Visual Smalltalk 3.01 предусматривает два пути разработки программ: вы либо создаете текст новой программы на языке Smalltalk/V, либо занимается компоновкой готовых модулей. В первом случае утилита Transcript Window предоставит доступ к мощному средству просмотра иерархии классов Class Hierarchy Browser, отображающему на экране все доступные методы классов, переменные классов и экземпляры переменных. Стандартные классы Smalltalk обеспечивают весьма широкие функциональные возможности. Class Hierarchy Browser содержит мощные графические функции, включая классы, предоставляющие доступ к специфическим для Windows возможностям. Пакет не обеспечивает в должной мере средства работы с базами данных, зато в нем отлично реализованы функции создания интерфейса и вычислительные функции.

Среда разработки PARTS

Среда PARTS (Parts Assembly and Reuse Tool Set - набор средств для сборки из отдельных деталей) Workbench позволяет реализовать второй способ разработки, основанный на использовании готовых модулей. В языке Smalltalk деталь (part) - это заранее определенный класс - либо из группы стандартных классов Smalltalk/V, либо из созданных различными программистами объектов.

Однажды разработав деталь Smalltalk, вы затем сможете многократно использовать ее без написани дополнительных предложений языка сценариев Smalltalk. Примерно те же принципы реализованы в Cи++: элемент OCX создается для конкретной программы, но затем может быть применен в последующих проектах.

Среда PARTS Workbench предназначена для решени широкого круга задач. Знатоки Smalltalk применяют ее в качестве средства разработки форм, в котором компонуются различные классы для построени прикладных программ с полнофункциональным графическим интерфейсом пользователя (без этого средства все элементы экранных форм пришлось бы описывать вручную). Зато начинающие разработчики могут использовать PARTS, почти не зна программирования - объекты легко связывать друг с другом с помощью визуальной технологии (перетаскивание с помощью мыши). Независимо от вашего опыта среда PARTS окажется для вас полезной, а ее интерфейс может служить примером ясной и логичной организации.

Образец объектно-ориентированного совершенства

Несмотря на ограниченные средства доступа к базам данных связь с источниками данных Btrieve обеспечивает единственный дополнительный модуль) язык Smalltalk/V являет собой воплощение объектно-ориентированного программирования. Кроме того, пакет делает возможной разработку многоплатформных прикладных программ: помимо версий для Windows и Windows NT существуют версии для OS/2 и нескольких разновидностей UNIX. Фирма Digitalk объявила о подготовке версии для Windows 95, котора должна появиться в продаже к концу ноября 1995 г.

Благодаря расширенным возможностям ООП язык Smalltalk/V приобрел верных сторонников в среде профессиональных разработчиков. Впрочем, и не очень опытные пользователи смогут в среде PARTS Workbench создавать свои программы, затрачивая на это минимум усилий. Таким образом, Visual Smalltalk как платформа разработки обеспечивает полную гамму средств ООП, сохраняя относительную простоту в обучении и использовании.

Visual Smalltalk for Win32 3.01
Цена, рекомендуемая изготовителем: 1495 долл., обновление версии - 800 долл.
Digitalk, Santa Ana, CA, 800-922-8255; fax, 914-513-3100.