Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

Статьи - разминка для умаC# глазами Java

C# глазами Java

Версия 2.0

Я являюсь координатором Java User Group, но уже больше года разрабатываю на C# приложения в области Quantitative Finance. В этой статье я попытаюсь поделиться своими мыслями и ощущениями, ни в коем случае не претендуя на истину в последней инстанции.

Есть два подхода к сравнению языков программирования: религиозная война и «a нам всё равно». Я постараюсь втиснуться между ними и начну с общего. Ключевой особенностью и Java, и C# является автоматическое управление памятью. Оба языка из-за этого совершенно не подходят для написания ядра операционной системы, но существенно упрощают разработку прикладных программ, потому что:

  • остаётся меньше возможностей для memory leak;
  • не надо писать код для освобождения памяти;
  • можно написать f(g(x)) и не думать об освобождении памяти от результата g(x).

Конечно, бывают другие подходы: например, языки с динамической типизацией, да и старый добрый C++ не стоит на месте, но сейчас Java и .NET получили наибольшее распространение.

Битва гигантов

В .NET есть такой язык — J#. Он до такой степени похож на Java, что на нём можно писать код, из которого будут получаться сразу два практически одинаковых приложения: одно для .NET, а другое — для Java. Такой подход иногда применяется на практике, но не даёт использовать в полной мере возможности ни той, ни другой платформы. Однако, большинство инвесторов хотят добиться как можно более хорошего результата, поэтому им приходится выбирать.

И Microsoft, и Sun Microsystems стремятся всеми правдами и неправдами привлечь потенциальных клиентов на свою сторону и это хорошая основа для взаимовыгодного партнёрства. Но какая главная цель у больших корпораций? Правильно, они хотят заработать побольше денег. Поэтому нельзя принимать за чистую монету всё, что говорят их маркетологи.

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

Целевая аудитория

Если вы разрабатываете на .NET, то ваше приложение будет запускаться под Windows и пользователи будут ждать от вас интеграции с Outlook, Word и Excel, причём, возможно, делать это нужно будет через COM. Ваши клиенты будут находиться под очень сильным влиянием Microsoft, поэтому с Microsoft вы будете стараться дружить по полной программе.

Но если .NET развивается на авторитете Microsoft, то Sun Microsystems благодаря Java сводит концы с концами, поэтому Java-разработчики от Sun Microsystems практически не зависят. Условно рынок Java можно разделить на четыре части: веб-приложения (преимущественно использующие Tomcat), кроссплатформенные desktop-приложения для Windows/Linux/Mac, игры для мобильных телефонов и кластерные решения (в основном для финансовой индустрии). В первых двух случаях можно полностью сконцентрироваться на предметной области — какая у клиента операционная система особого значения не имеет. Для разработчиков мобильных приложений очень важны хорошие отношения с операторами и издателями, но все они имеют дело с одним и тем же парком сотовых телефонов.

Большие системы для онлайновой торговли технически весьма сложны и для решения таких задач вполне оправданы многопроцессорные сервера от Sun Microsystems и дорогие EJB-контейнеры от BEA, Borland и других компаний. Отличительная особенность этого сегмента — влияние Microsoft на него крайне незначительно.

Различия в языках

Сразу отметим, что C# совсем не скопирован с Java — между этими языками есть множество принципиальных различий. Пожалуй, самое главное — отсутствие в С# checked exceptions. Подробное объяснение этому даёт Anders Hejlsberg. Обе точки зрения по этому вопросу имеют свои аргументы, но спорить не имеет смысла, решение давно принято: в Java checked exceptions есть, в C# — нет. Я только хочу заметить, что грамотная обработка ошибок — одно из существенных отличий качественного программного обеспечения от школьного домашнего задания.

После Java в C# не хватает анонимных классов, которые довольно часто используются при написании GUI-приложений. Зато в C# есть delegate и event, которые позволяют решать аналогичные задачи с меньшим количеством кода. Но лично мне кажется более предпочтительным объектно-ориентированный подход - без ссылок на методы.

Многие ключевые слова в C# кажутся мне лишними. Например, мне трудно представить мотивы реализации поддержки goto, во всяком случае я не думаю, что это нужно кому-то из программистов Microsoft. Также, когда я пишу на C#, я не использую перегрузку операторов и ключевые слова ref и out. Слова virtual и override я, конечно, использую, но по-моему опыт Java наглядно показал, что можно жить и без них.

Однако, языки программирования не стоят на месте: например, Java 5 с типизированными коллекциями уже есть, а .NET 2.0 пока нет. Но перечислимые типы в .NET были с самого начала, а на Java 5 многие перейдут ещё очень не скоро. Какое влияние окажут на индустрию аттрибуты в .NET и аннотации в Java лично я просто не берусь предсказать.

Средства разработки

Джентльменский набор разработчика приложений для .NET можно описать очень кратко: это полный комплект продуктов Microsoft. Конечно, кто-то использует ReSharper и другие плагины к Visual Studio, кого-то категорически не устраивает Visual SourceSafe и он использует другую систему контроля версий, а кому-то Oracle нравится больше чем MS SQL. Из особенностей .NET я бы выделил поддержку визуального проектирования GUI, широко известного со времён Delphi, и язык VB.NET.

В Java принято делать код независимым от используемых инструментов, для сборки проектов повсеместно используется Apache Ant. Для Java есть множество самых разных средств разработки и они постоянно совершенствуются.

Google

Разработка веб-приложений

Паттёрны разработки веб-приложений одинаковы для всех, более того - они легко реализуются на любой платформе. Но если взять исходный код произвольного корпоративного сайта, то скорее всего мы увидим внутри макароны разной степени ужасности. Можно сделать вывод, что разработка веб-приложений — не самый интересный бизнес с точки зрения программирования.

Заключение

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

Благодарности

Огромное спасибо Дмитрию Жемерову за помощь в написании первой версии этой статьи, компании JetBrains за средства разработки и компании DataArt за возможность работать программистом.

Ссылки

1. The C# Programming Language for Java Developers
http://msdn.microsoft.com/vstudio/java/gettingstarted/csharpforjava/

2. J2EE fundamentals for .NET developers
http://www-106.ibm.com/developerworks/java/library/j-roadmap1/

Автор: Яков Сироткин
июль-август 2004 года, май 2005


Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


Опрос
Считаете ли вы целесообразным сделать аналог упражнений по Hibernate на базе вопросов www.sql-ex.ru?
Да, полный аналог упражнений
Да, но с реализацией основных конструкций объектной модели
Нет, Hibernate не актуален, использую др. технологии
Нет



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95