Сравнительный анализ Java и C#: общность платформ и отличительные особенности

Язык Java создан фирмой Sun для Интернета в середине 90-х годов прошлого столетия. Можно было бы сказать, что это еще один вариант С++, только без указателей, без необходимости сборки мусора (очистки памяти от неиспользуемых объектов), наличия лучшей системы защиты и пр., если бы не одно фундаментальное обстоятельство: Java позволял создавать интерактивные приложения (апплеты) непосредственно в клиентских сайтах. Массовость аудитории под общим названием "интернет клиенты" обеспечила мощный импульс для распространения Java. Выяснилось, что Java отлично продуман: громоздкие и тяжеловесные конструкции С++ в нем обрели компактный и изящный вид. Помимо этого, язык Java давал возможность писать распределенные приложения для локальных сетей и баз данных. Наконец, специальные приложения — сервлеты, написанные на Java, позволяли также строить серверные приложения, работающие на удаленных компьютерах и обслуживающие запросы от клиентов. Фирма Microsoft, поняв, что теряет крупный сегмент рынка, с определенным запозданием отреагировала на этот вызов созданием Visual J++. Однако существовало мнение, что Visual J++ — просто переопределенная версия Java. Развернулась конкурентная борьба. Дошло до того, что фирма Microsoft вообще отказалась поддерживать виртуальную машину Java (JVM) в браузере Internet Explorer. Sun возбудила судебное дело и выиграла его.

В процессе развития своих программных концепций Sun создала несколько новых важных технологий: RMI, CORBA, JSP, Java- Beans и др. Венцом этого развития стало появление технологии J2EE (Java 2 Enteiprise Edition), поддерживающей работу с удаленными объектами и позволяющей создавать серверы приложений. Чтобы не отстать и продолжить борьбу, фирма Microsoft создала нечто большее, чем новую Java-подобную версию языка, а именно — платформу .NET, которая содержит виртуальную машину, библиотеки, механизмы, поддерживающие работу с удаленными объектами на основе технологии COM+, средства разработки ASP-страниц и пр. Не будет преувеличением сказать, что одним из ключевых компонентов .NET является язык C#. Хотя, кроме C#, в рамках этой платформы имеются еще и другие языки – C++.NET, VB.NET, ASP.NET, Visual J#.NET, программы на которых компилируются в предназначенный для исполнения виртуальной машиной CLI (Common Language Infrastructure) промежуточный код на языке MSIL (Microsoft Intermediate Language).

C#, без сомнения, замечательный язык, удачно сочетающий в себе элементы и идеи Java (в наибольшей степени), Delphi (в плане реализации среды разработки, обработки событий и интерфейса с элементами), Visual Basic (в плане использования свойств Put и Get) и С++ (как общего родительского языка). Мотивация создания языка C# осталась прежней — борьба за крупнейший сегмент рынка и первенство в области новейших технологий. Ситуация, в которую эта борьба так или иначе завела, может быть резюмирована следующим образом: Java выступил как базовая концепция для C#. Java и C# теперь стоят в целом на различных (но "идеологически" общих) платформах. Коротко охарактеризуем эти платформы.

Прежде всего, начнем с универсальности Java — поддерживается возможность исполнения Java-приложений под управлением различных операционных систем: Windows, UNIX, Solaris и др. Это достигается за счет того, что исходные тексты на языке Java можно скомпилировать в промежуточный байт-код, который затем выполняется виртуальной машиной Java (JVM). Следовательно, Java-программы выполняются везде, где установлена JVM. Аналогичную роль играет виртуальная машина среды .NET — CLI. Однако у CLI есть и преимущества — во-первых, функции одних языков среды .NET можно использовать в других языках, и, во-вторых, во всех языках .NET объекты реализуются одинаково (например, класс, созданный в C++.NET, можно использовать как родительский в VB.NET, и наоборот).

Второй важной особенностью сравниваемых платформ является работа с удаленными объектами. Удаленный объект — это экземпляр некоторого класса, содержащий методы и свойства, которые образуют интерфейс. Ясно, что удаленные объекты создаются на других сетевых компьютерах и становятся доступными через сеть. Фирма Sun разработала пакет классов и интерфейсов, образующих множество объектов EJB (Enteiprise Java Beans), которые размещены в EJB-контейнерах и доступны через сеть. Объекты EJB имеют определенную функциональную ориентацию:

□               для работы с базами данных;

□               для обмена сообщениями;

□               для выполнения сложных вычислений.

Технология EJB позволяет реализовать так называемые серверы приложений. Аналогом этой технологии в .NET является COM+. До появления .NET фирма Microsoft использовала технологии

COM/DCOM (Component Object Model/Distributed Component Object Model), общий смысл которых можно передать следующим образом. Создается класс СОМ-компонента, свойства и методы которого хранятся в двоичном файле, так что для запуска методов порождаемых из него СОМ-объектов не имеет значения, из какой программной среды они вызываются. Доступ к этим методам выполняют специальные сервисные программы, образующие интерфейс с СОМ-компонентами и использующие информацию, хранящуюся в реестре Windows. Клиентская сторона выполняет запрос на создание и получение (через сеть) СОМ-объекта. Создается объект некоторого класса СОМ с определенной функциональностью (методами и свойствами) После создания объект становится доступным на другом сетевом компьютере, связанном с тем, где зарегистрирован исходный класс. Недостаток COM/DCOM состоит в привязке к реестру Windows. В этом случае ни о какой платформенной независимости не может идти речи. В .NET такой привязки к реестру нет. Используется аналог службы имен Java. Таким образом, технология COM+ доведена до уровня платформенной независимости, изначально характерной для Java.

Важной особенностью Java является возможность создания Web- серверных приложений на базе технологии страниц JSP. Задача Web-серверного приложения состоит в получении информации от интернет-клиента, ее обработке и возврате результатов на сторону клиента. Web-серверное приложение на языке Java запускается на выполнение программой Web-cepeepa (в качестве которого, например, можно использовать Tomcat). Аналогом этой технологии в C# является создание в среде разработки приложений .NET ASP-страниц, написанных на C#. Следует отметить, что разработка ASP-страниц в среде .NET автоматизирована в значительно большей степени, чем в Java.

Программы в Java и C# состоят из классов (class) — основной структурной единицы приложения. И в Java, и в C# разрешается наследование только от одного класса; вместе с тем, можно подключать к классу более одного интерфейса. C# позволяет программисту не заботиться об удалении объектов (сборке мусора) — это делается, как и в Java, автоматически. Аналогичным образом в Java и C# реализован механизм области видимости имен. В C# этот механизм назван пространством имен, в Java — использованием пакетов (packages). И в Java, и в C# не используются указатели, а рабочим языком в обоих случаях является С, так что некоторые фрагменты кода на Java и C# могут быть неотличимы. В деталях некоторые отличия все же есть. Например, в Java главная точка входа в приложение есть public static void main (string [] args). Этот синтаксис является неизменным. В C# метод Main () может быть переопределен. Например, таким образом: public static void Main()

В C# имеется оператор goto (перехода на метку), в языке Java — нет. В C# можно определять структуры и перечисления; в Java эта возможность исключена. Имеются различия в реализации оператора switch. Оба языка поддерживают многопоточность. Эти общие черты и отличия вполне конкретизируются в материалах практических занятий.

Специфическими компонентами .NET являются службы каталогов и службы Windows, о которых можно прочитать в специальной литературе [3, 9].

Зачем нужно знать и Java и C#?

Ответ частично сформулирован выше. Уместно систематизировать рассуждения следующим образом.

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

□               Позиции Sun и Microsoft на момент написания этой книги достаточно сильны. В настоящее время спрос на специалистов по Java и по C# сравнительно высок. Знание обоих языков создает более сильную позицию в перспективе.

□               Изучение одного языка при знании другого, как пишет Гиббонз [3], — дело нескольких часов. Мы, разумеется, полагаем, что времени требуется побольше, но с мыслью Гиббонза согласны, поскольку:

•                концептуальные основы сравниваемых языков в целом одинаковы;

•                коды приложений базируются на синтаксисе языка С и имеют много общего;

•                современное программирование требует скорее понимания, чем запоминания.

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

□               Сравнительное изучение позволяет рассмотреть возможности языков более критично.

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100