Ж у р н а л   о   к о м п ь ю т е р н ы х   с е т я х   и   т е л е к о м м у н и к а ц и о н н ы х   т е х н о л о г и я х
СЕТИ И СИСТЕМЫ СВЯЗИ on-line
  ПОИСК: ПОДПИСКА НА НОВОСТИ: НОМЕР:
    ДОМОЙ • Архив: Новостей | Конференций | НомеровПодписка
 
   
 
   
    
РЕДАКЦИЯ
 
Все о журнале
Подписка
Как проехать
Где купить
Отдел рекламы
График выхода журнала
Адреса в Интернет

РУБРИКАТОР
   
• Инфраструктура
• Информационные
   системы

• Сети связи
• Защита данных
• Кабельные системы
• Бизнес
• Колонка редактора
• Электронная
   коммерция

• Только на сервере
• Системы
   учрежденческой
   связи

• Новые продукты


Rambler's Top100

  

Java — достойный соперник или претендент в чемпионы?

Дон Маквитти

Хватит ли языку Java, новичку в мире программирования, всех преимуществ, которыми он обладает, чтобы одержать верх в “ближнем бою” с такими прославленными соперниками, как Си и Си++, Perl и Visual Basic? Все будет зависеть от того, насколько тщательно вы подойдете к определению его места и роли в своей сетевой программной среде.

Всего четыре года назад о языке Java практически ничего не было известно. Сегодня же, несмотря на дефицит квалифицированных программистов, работающих на этом языке, и некоторые сомнения в громко разрекламированной его переносимости, большинство фирм из списка Fortune 500 используют его для разработки тех или иных приложений. Независимые поставщики программного обеспечения ринулись писать Java-интерфейсы для своих программных инструментальных средств. Понимая, что этому языку принадлежит будущее, многие известные компании, такие, как IBM, Oracle и Lotus Development, стараются шире использовать его в новых программных проектах.

На протяжении ряда лет мы написали множество приложений на языках Си, Си++, Perl и Visual Basic, а сейчас пишем те же приложения или дополнения к ним на языке Java. Использованный в Java подход к программированию позволяет реализовать на одном языке огромное число проектов и приложений, работающих на большинстве современных систем. На Java можно писать клиентские и серверные части приложений и операционных систем, клиенты, встроенные в браузеры, интерфейсы командной строки, серверные части Интернет-приложений (servlets), а совсем недавно появились и исходные исполняемые файлы для самых разных аппаратных платформ.

Используя пакет разработки программ Java Development Kit (JDK) 1.1 фирмы Sun и высокоэффективный компилятор для Windows, мы написали исполняемые файлы, довольно хорошо работающие под управлением Windows 95 и Windows 98. И все же технология Java еще находится на ранней стадии своего развития. Написанные на Java исполняемые файлы, относительно “медленны” и не отличаются особой компактностью, а методы, упоминаемые фирмой Sun Microsуstems как неприемлемые и устаревшие, иногда попросту не работают в откомпилированных программах. За исключением тех случаев, когда код Java генерировался с помощью средств визуального программирования Visual J++ фирмы Microsoft, лозунг: “Пишется однажды — работает везде”, избранный для продвижения языка Java, действительно оправдывался при создании кодов самых разных сценариев: доступа к базе данных Oracle, интерактивного обмена сообщениями (chat) и обработки запросов данных, формируемых приложениями, работающими на множестве платформ — Windows NT, OS/390, Linux, Unix BSD и Solaris.

Силу и мощь Java преумножают реализованные фирмой Sun дополнительные стандарты. Так, благодаря интерфейсу JNI (Java Native Interface), можно запускать программы, написанные на других языках, что позволяет использовать унаследованные коды или переходить на более подходящие языки программирования в случае возникновения проблем с производительностью. Интерфейс JDBC (Java Database Connectivity) делает возможным доступ к самым разнообразным базам данных на самых разных машинах. Открытый интерфейс взаимодействия с базами данных (ODBC) обеспечивает такой доступ только для программ, работающих на системах Windows.

Но многочисленные соперники Java уже успели пустить длинные корни в интрасетях, а их ретивые приверженцы не перестают ссылаться на багаж программных продуктов, которые были разработаны на протяжении последних лет для нужд различных предприятий. Какие преимущества Java по сравнению с используемыми сегодня унаследованными языками привлекают программистов и готов ли он взвалить на себя всю тяжесть по реализации разнотипных программных проектов? В данной статье мы попытались сравнить его с наиболее сильными конкурентами — языками Си, Си++, Perl и Visual Basic фирмы Microsoft и оценить, насколько прочны его сегодняшние позиции.

Java против Си и Си++ — переносимость или производительность?

Более высокая переносимость создаваемых на языке Java приложений — бесспорный факт, чего нельзя сказать о его производительности, так что тем, кого интересует исключительно этот показатель технологии программирования, не следует отказываться от Си и Си++.

На протяжении последних нескольких лет языки Си и Си++ рассматривались как одни из самых мощных языков для выполнения сетевых программных разработок, они и до сих пор сохранили свои прочные позиции на настольных компьютерных системах. Для написания скоростных утилит, работающих в режиме командной строки, администраторы предпочитают использовать язык Си, а разработчики программного обеспечения для среды Windows — Си++, включающий в себя обширную библиотеку базовых классов Microsoft (Microsoft Foundation Clasеs — MFC). Но эти же языки можно с успехом применять и для разработки многих других сетевых программ и приложений. А в сетевой среде Windows на языках Си и Си++ обычно создаются по меньшей мере разделы любых проектов, касающиеся серверных баз данных или серверных частей других программных компонентов. Значительная часть сетевых кодов более низкого уровня — от Windows- и DOS-драйверов устройств до демонов Unix — реализованы на языке Си. На нем же пишется и значительная часть ядра более новых операционных систем.

На уровне исходного кода языки Си и Си++ обладают вполне приемлемой переносимостью, правда при условии, что написанный код использует только программные компоненты стандартных библиотек, разработанных ANSI и ISO. Это вполне подходит тем организациям, которые пытаются писать программные продукты, поддерживающие множество платформ. Проблемы с переносимостью программ обычно возникают из-за различий в построении компиляторов Си и Си++, недоступности одинаковых режимов работы компоновщиков и компиляторов и несоответствия соглашений об именованиях, используемых для некоторых стандартных файлов-заголовков. По сравнению с программными продуктами, написанными на Си и Си++, Java-приложения, за исключением таковых на языке Visual J++ фирмы Microsoft, являются поистине мобильными: их можно свободно перемещать с системы на систему независимо от того, на какой машине и в какой среде они в свое время создавались. Если на целевом компьютере установлена виртуальная Java-машина (Java Virtual Machine — JVM) или имеется механизм для пересылки кода на настольную систему из Web-браузера, то нет никаких причин для переработки кода под конкретную операционную систему.

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

К сожалению, программные проекты, разработанные на языке Си++, зачастую оказываются непомерно сложными, и поэтому сопровождение их не всегда по плечу даже опытным программистам, несмотря на наличие подробнейшей системной документации. Для сравнения: включенный в набор JDK пакет документирования JavaDoc позволяет любому разработчику найти необходимый минимум полезной информации практически по каждому Java-классу. Так что, унаследовав большое количество недокументированных программ, можно получить о них вполне конкретное представление, используя лишь JavaDoc. Аналогичные инструменты для документирования программ имеются и для языков Си и Си++, но они приобретаются отдельно.

Что касается программных продуктов, основанных на браузерах, то языки Си и Си++ не нашли в них сколько-нибудь широкого применения. Хотя они и встречаются иногда в программах, использующих интерфейс CGI, все же по-настоящему правит балом здесь язык Perl со своими непревзойденными процедурами обработки строк. Чтобы сделать Си++ более пригодным для создания Интернет-приложений, Microsoft добавила некоторые новые классы в библиотеку MFC, так что на платформе Windows Си++ может и посоперничать с Java.

Языки Java и Си++ во многих отношениях схожи между собой. Оба они относятся к классу объектно-ориентированных и имеют очень похожий синтаксис. Но Java в отличие от Си++ относится к интерпретируемым языкам, а это означает, что на нем можно писать подпрограммы, обрабатывающие широкий набор событий, непосредственно связанных с текущим статусом системы. Программисты могут создавать определяемые пользователем типы данных “на лету” (в динамическом режиме), тогда как язык Си++ предполагает формирование сложных типов данных до процесса компиляции программ.

Java также позволяет разработчикам быстро писать коды верхнего уровня, менее критичные ко времени их выполнения, а затем через интерфейс JNI переходить к модулям, написанным на Си и Си++. При этом боўльшая часть кода приложения оказывается хорошо переносимой, и, если возникает необходимость в его перемещении на другую систему, приходится перерабатывать только те его части, которые были написаны на Си и Си++. Использовать Си и Си++ целесообразно именно там, где это действительно дает наибольший эффект: в сугубо специфичных для конкретных систем и трудно поддающихся воспроизведению частях программы или в критичных ко времени выполнения модулях.

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

Язык Java открывает пользователям возможность работы с приложениями, которые трудно реализовать на языках Си и Си++. Так, например, для доступа к Java-аплетам или серверным приложениям Java необходимы только браузер и коммутируемый канал к серверу, на котором эти мини-приложения размещены. Прежде чем пользователь получит доступ к программам, написанным на Си и Си++, клиенты и серверы приложений должны быть, как правило, соответствующим образом сконфигурированы, за исключением тех случаев, когда доступ осуществляется через интерфейс CGI.

Для мобильных пользователей доступ к бизнес-системам, ПО которых написано на Си и Си++, из удаленных узлов сети нередко оказывается затруднительным или вообще невозможным. Java позволяет разместить весь код на сервере, где и производится необходимая его модернизация. Регистрируясь на сервере, пользователи автоматически получают доступ к новой, исправленной версии кода. Хотя такие технологии тонких клиентов, как Citrix и WinFrame, могут сделать доступным для удаленных пользователей практически любое приложение, для их внедрения потребуются дополнительные инвестиции, к тому же при этом может возникнуть необходимость часть программного обеспечения размещать на клиентских системах.

Вряд ли языкам Си и Си++ придется в ближайшее время полностью уступать дорогу своему конкуренту — языку Java: проблемы производительности, связанные со встроенными системами и критичными ко времени приложениями, продолжают тормозить его поступательное движение вперед. Зато он дает возможность разработчикам генерировать действительно переносимый код приложений, а большинство современных коммерческих сред разработки Java позволяют создавать значительную часть этого кода с помощью технологии буксировки (drag-and-drop) — значит, быстро. Java также предусматривает динамическое создание новых классов. Да и предоставлять пользователям доступ к приложениям, клиентские части которых написаны на Java, оказывается гораздо проще, чем когда они написаны на Си и Си++. Таким образом, при разработке программ для обычных систем эти языки, вероятнее всего, так и будут продолжать работать в одной упряжке.

Java против Perl: защита лучше, возможностей больше

Perl, язык программирования, основанный на использовании интерфейса командной строки и отлично согласующийся с Web-технологиями посредством интерфейса CGI (Common Gateway Interface), наиболее предпочтителен для большинства Интернет-приложений, ориентированных на работу в среде Unix. Несмотря на то что он позволяет писать программы для 32-разрядных платформ Windows, он, однако, не нашел столь же широкого применения в этих средах.

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

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

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

Работая в среде разработки Perl, пользователи могут легко получить доступ к его внутренней базе данных, но не к внешним — для них уже необходимо использовать программное обеспечение третьих фирм. Язык Java, напротив, может взаимодействовать с самыми разными базами данных посредством прикладного программного интерфейса JDBC. На сегодняшний день практически все производители баз данных не только реализуют в своих продуктах поддержку этого интерфейса на нижнем уровне, но и разрабатывают средства поддержки других, более удобных интерфейсов к базам данных. Кроме того, с помощью моста JDBC—ODBC (входящего в состав пакета JDK версии 1.1 и более поздних), JDBC-запросы транслируются в ODBC-запросы и пересылаются на сервер любой ODBC-совместимой базы данных.

В среде разработчиков наметилась тенденция к написанию аплетов и серверных приложений Java, обеспечивающих интерактивный режим работы с Интернет — выгодное отличие от языка Perl, использующего основанный на формах CGI-интерфейс. Хотя некоторые приложения Java еще страдают недостатком производительности, тщательное проектирование и программирование, а также отказ от использования громоздких библиотек классов может существенно улучшить ситуацию (см. “Тщательнее разработка — выше производительность”).

Серверные приложения Java позволяют также “залатать” часть дыр, имеющихся в интерфейсе CGI, так как к инструментам защиты самого сервера добавляются еще и встроенные средства безопасности Java. (Следует отметить, что, хотя проблема безопасности свойственна любому приложению, использующему интерфейс CGI, в языке Perl она является более острой, чем в других языках программирования, поскольку он редко обходится без этого интерфейса.) Решение проблем защиты данных с помощью серверных приложений Java может в равной степени входить в компетенцию персонала групп информационной безопасности и сетевых администраторов. Учитывая, что Perl способен работать только на серверных системах или системах, имеющих интерфейс командной строки, а Java-приложения, помимо этого, могут запускаться еще и в графической среде, язык Ja va предоставляет программистам более широкие возможности написания программ для любых сетевых сред.

Java против Visual Basic: многоплатформенность

Язык программирования Visual Basic (VB), в том числе и язык написания сценариев VBScript (специальная версия VB для использования в Web), конкурирует с языком Java по двум направлениям: как средство создания Windows-клиентов и серверных приложений для Windows. Если вы используете

Windows NT Server фирмы Microsoft в качестве сервера промежуточного уровня или сервер IIS (Internet Information Server) той же фирмы в качестве Web-сервера, то язык VB для вас более предпочтителен, но что касается программных разработок на других платформах, то здесь все преимущества за языком Java.

Microsoft довольно жестко привязала VB к операционной среде Windows, а VBScript — как к Windows NT, так и к серверу IIS (компонент Windows NT 4.0). Это означает, что производительность VB сравнима с производительностью средств разработки более низкого уровня, основанных на использовании графического интерфейса, таких, как Delphi. И все же благодаря своей интерпретируемой природе этот язык, несомненно, является мощным средством разработки программ, популярность которого быстро растет, поскольку он прост в изучении. Используя VB или VBScript, можно получить непосредственный доступ к управляющим компонентам COM+, DCOM и ActivеX фирмы Microsoft. Таким образом, разработчик получает необходимый ему комплект компонентов, успешно конкурирующий с компонентными моделями JavaBeans и Enterprise Jav aB eans. К тому же если учесть, что Enterprise JavaBeans — это совсем молодая технология, то более надежными для разработок на сегодняшний день все же следует считать уже получившие признание объектные модели компонентов Microsoft — по крайней мере для создания систем, работающих только в сетевых средах Windows.

Но VB — это все тот же Basic, который, как известно, никогда не претендовал на роль инструмента для разработки программных продуктов в промышленном масштабе. Для приложений, которые пишутся однажды, а затем продолжительное время без излишней “опеки” используются, VB подходит как нельзя лучше. Но, как показывает практика, с усложнением программных продуктов, создаваемых на языке VB, стоимость их технического обслуживания растет значительно быстрее, чем стоимость аналогичных продуктов, написанных на других языках, в том числе и на Java.

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

Многие производители выпускают достаточное число разных средств разработки для языка Java, так что для усовершенствования этой технологии сегодня имеется масса доступных возможностей. Вышедший недавно пакет JDK 2.0 наглядно показал, в каком направлении должны развиваться будущие версии подобных продуктов. Согласно нашим неофициальным исследованиям “внешней политики” пяти крупнейших производителей — Inprise, IBM, Microsoft, Symantec и Sun, действия ни одной из них не были направлены на то, чтобы вынудить пользователей перейти на новые версии ее продуктов или на прекращение технической поддержки устаревших версий программ (в прошлом с такими проблемами нередко сталкивались пользователи программ на VB). Мало того, как оказалось, единственный производитель, а именно Microsoft, вовсе не собирается внедрять пакет JDK 2.0 в свой продукт Visual J++.

Конечно, если вы планируете долго работать со своей программой, вам рано или поздно придется ее модифицировать. Если при этом вы используете классы, поставляемые производителем применяемой вами интегрированной среды разработки (Integrated Development Environment — IDE), то вам придется усовершенствовать свой продукт, опираясь именно на этого поставщика. Хотя реальность такова, что все компании-производители в конце концов прекратят поддержку версий своих продуктов, разработанных на основе JDK 1.1, к тому же найдется немало производителей, которые способны обеспечить приемлемые пути модернизации ваших программ, правда при условии, что вы не используете частные классы своего производителя.

Следует учитывать и то, что Java в отличие от VB — это поистине объектно-ориентированный язык программирования. Начиная с версии VB 4.0, Microsoft не перестает громко рекламировать эту его особенность — но не будьте так доверчивы. К классу объектно-ориентированных можно отнести язык программирования, обладающий следующими свойствами: наследование, инкапсуляция, полиморфизм и абстрагирование. Два из них — инкапсуляция и полиморфизм — в Visual Basic отсутствуют.

Java же — это чисто объектно-ориентированный язык, позволяющий писать программы и для Интернет. Чтобы разрабатывать приложения для Web, нет нужды покупать какую-либо специальную версию этого языка. Кроме того, Java — платформно-независим, т. е. не привязан ни к одной из конкретных аппаратных или программных платформ. Чтобы лучше приспособить VB для разработки Web-приложений, фирма Microsoft реализует три различных приема. Во-первых, она содействует тому, чтобы партнеры использовали ее объектные модели COM и DCOM на своих Unix-платформах, обеспечивая доступ к Unix-системам с помощью сценариев, написанных на VBScript. Во-вторых, компания применяет те же самые типы ориентированных на конкретные сетевые архитектуры расширений, что были добавлены в Visual C++. В-третьих, она предоставляет пользователям массу объектов COM и DCOM, облегчающих разработку Web-приложений на языке V BScript.

Но перечисленные выше меры так и не дали сколько-нибудь заметного эффекта. А что касается расширений объектных моделей COM и DCOM, то им предстоит неравная борьба с такими новыми технологиями, как JINI (технология распределенных корпоративных вычислений фирмы Sun, основанная на Java) и Enterprise JavaBeans.

Чаще всего VB используется для написания клиентских частей клиент-серверных систем или для автономных Windows-разработок. На этом рынке также широко представлены и специализированные управляющие компоненты третьих фирм — VBX (Visual Basic custom controls) и OCX (OLE custom controls). Кроме того, VB предоставляет относительно простой интерфейс к библиотекам DLL (Dynamic Link Libraries) платформ Windows.

Поскольку язык сценариев VBScript жестко привязан к Windows NT и IIS, получить доступ к информации, хранимой в базах данных, поддерживаемых интерфейсом ODBC, оказывается совсем не сложно. Если этот язык используется с СУБД фирмы Microsoft, он, помимо прочего, позволяет увеличить и общую производительность системы. Но по той же самой причине вы не сможете перенести написанное на VBScript приложение с персонального компьютера, работающего под Windows, на систему с другой ОС, в случае когда нагрузка, создаваемая сервером, перегружает ресурсы этой системы. На сегодняшний день кластеризация систем Windows NT не самый подходящий способ для замены большой Unix-системы при проведении крупномасштабных вычислений.

Производительность интерфейсов JDBC и ODBC напрямую зависит от качества их кодов, написанных производителями. Таким образом, скорость доступа к базам данных, исключая, быть может, MS Access и MS SQL Server, полностью зависит от поставщиков обоих продуктов. Единственное, в чем VB имеет преимущество над Java, так это производительность автономных прикладных Windows-систем. В настоящее время фирма Sun и ее лицензиаты работают над этой проблемой.

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





  
13 '1999
СОДЕРЖАНИЕ

колонка редактора

• Интернет на плечах гигантов

локальные сети

• Особенности демаркационного пункта на границе общедоступной и корпоративной оптических сетей

• Кабельные тестеры: наперегонки со стандартами

• Сервисные пакеты Windows NT 4.0: береженого Бог бережет

• Библиотеки DLT среднего уровня

бизнес

• Венгерская рапсодия OCS

интернет и интрасети

• Технология Java: на сервере и на клиенте

• Java - достойный соперник или претендент в чемпионы

новые продукты

• FastNet - система контроля уровня обслуживания в сетях передачи данных, Платформа компьютерной телефонии фирмы "Беркут", С SurviveIT -- как за каменной стеной

корпоративные сети

• Технологии управления трафиком

• "Блуждающие" пользователи: все надежды на Web

• "Повзрослевшие" мониторы приложений

услуги сетей связи

• Новые возможности старых знакомых

• Пора открывать коды, или Новый виток развития маршрутизации

• Планирование сети GSM

• Доступ к Интернет на основе спутниковых технологий

• Сигнализация в сетях IP-телефонии. Часть I

защита данных

• Пограничный контроль: руководство по антивирусным шлюзам



 Copyright © 1997-2007 ООО "Сети и Системы Связи". Тел. (495) 234-53-21. Факс (495) 974-7110. вверх