7

7


Альтернативы
Честно говоря, апплеты Java не оправдали начальных восторгов. При первом появлении Java все относились к апплетам с большим энтузиазмом, потому что они делали возможным серьезное программирование на стороне клиента, повы¬шали скорость отклика и снижали загрузку канала для Интернет-приложений. Апплетам предрекали большое будущее.
И действительно, в веб можно встретить ряд очень интересных апплетов. И все же массовый переход на апплеты так и не состоялся. Вероятно, главная проблема заключалась в том, что загрузка 10-мегабайтного пакета для установки среды Java Runtime Environment (JRE) слишком пугала рядового пользователя. Тот факт, что компания Microsoft не стала включать JRE в поставку Internet Explorer, окончательно решил судьбу апплетов. Как бы то ни было, апплеты Java так и не получили широкого применения.
• Впрочем, апплеты и приложения Java Web Start в некоторых ситуациях при¬носят большую пользу. Если конфигурация компьютеров конечных пользова¬телей находится под контролем (например, в организациях), применение этих технологий для распространения и обновления клиентских приложений впол¬не оправдано; оно экономит немало времени, труда и денег (особенно при час¬тых обновлениях).
.NET и С#
Некоторое время основным соперником Java-апплетов считались компоненты ActiveX от компании Microsoft, хотя они и требовали для своей работы нали¬чия на машине клиента Windows. Теперь Microsoft противопоставила Java пол¬ноценных конкурентов: это платформа .NET и язык программирования С#. Платформа .NET представляет собой примерно то же самое, что и виртуальная машина Java (JVM) и библиотеки Java, а язык С# имеет явное сходство с язы¬ком Java. Вне всяких сомнений, это лучшее, что создала компания Microsoft в области языков и сред программирования. Конечно, разработчики из Micro¬soft имели некоторое преимущество; они видели, что в Java удалось, а что нет, и могли отталкиваться от этих фактов, но результат получился вполне достой¬ным. Впервые с момента своего рождения у Java появился реальный соперник. Разработчикам из Sun пришлось как следует взглянуть на С#, выяснить, по ка¬ким причинам программисты могут захотеть перейти на этот язык, и прило¬жить максимум усилий для серьезного улучшения Java в Java SE5.
Выданный момент основные сомнения вызывает вопрос о том, разрешит ли Microsoft полностью переносить .NET на другие платформы. В Microsoft утвер¬ждают, что никакой проблемы в этом нет, и проект Mono (www.go-mono.com) пре¬доставляет частичную реализацию .NET для Linux. Впрочем, раз реализация эта неполная, то, пока Microsoft не решит выкинуть из нее какую-либо часть, делать ставку на .NET как на межплатформенную технологию еще рано.
Интернет и интрасеть
Веб предоставляет решение наиболее общего характера для клиент/серверных задач, так что имеет смысл использовать ту же технологию для решения задач в частных случаях; в особенности это касается классического клиент/серверно- го взаимодействия внутри компании. При традиционном подходе «клиент/сер- вер» возникают проблемы с различиями в типах клиентских компьютеров, к ним добавляется трудность установки новых программ для клиентов; обе про¬блемы решаются браузерами и программированием на стороне клиента. Когда технология веб используется для формирования информационной сети внутри компании, такая сеть называется интрасетью. Интрасети предоставля¬ют гораздо большую безопасность в сравнении с Интернетом, потому что вы можете физически контролировать доступ к серверам вашей компании. Что ка¬сается обучения, человеку, понимающему концепцию браузера, гораздо легче разобраться в разных страницах и апплетах, так что время освоения новых сис¬тем сокращается.
Проблема безопасности подводит нас к одному из направлений, которое ав¬томатически возникает в клиентском программировании. Если ваша программа исполняется в Интернете, то вы не знаете, на какой платформе ей предстоит ра¬ботать. Приходится проявлять особую осторожность, чтобы избежать распро¬странения некорректного кода. Здесь нужны межплатформенные и безопасные решения, наподобие Java или языка сценариев.
В интрасетях действуют другие ограничения. Довольно часто все машины сети работают на платформе Intel/Windows. В интрасети вы отвечаете за каче¬ство своего кода и можете устранять ошибки по мере их обнаружения. Вдоба¬вок, у вас уже может накопиться коллекция решений, которые проверены на прочность в более традиционных клиент/серверных системах, в то время как новые программы придется вручную устанавливать на машину клиента при ка¬ждом обновлении. Время, затрачиваемое на обновления, является самым вес¬ким доводом в пользу браузерных технологий, где обновления осуществляются невидимо и автоматически (то же позволяет сделать Java Web Start). Если вы участвуете в обслуживании интрасети, благоразумнее всего использовать тот путь, который позволит привлечь уже имеющиеся наработки, не переписывая программы на новых языках.
Сталкиваясь с объемом задач клиентского программирования, способным поставить в тупик любого проектировщика, лучше всего оценить их с позиций соотношения «затраты/прибыли». Рассмотрите ограничения вашей задачи и попробуйте представить кратчайший способ ее решения. Так как клиентское программирование все же остается программированием, всегда актуальны тех¬нологии разработки, обещающие наиболее быстрое решение. Такая активная позиция даст вам возможность подготовиться к неизбежным проблемам разра¬ботки программ.
Программирование на стороне сервера
Наше обсуждение обошло стороной тему серверного программирования, кото¬рое, как считают многие, является самой сильной стороной Java. Что происхо¬дит, когда вы посылаете запрос серверу? Чаще всего запрос сводится к просто¬му требованию «отправьте мне этот файл». Браузер затем обрабатывает файл подходящим образом: как HTML-страницу, как изображение, как Java-апплет, как сценарий и т. п.
Более сложный запрос к серверу обычно связан с обращением к базе дан¬ных. В самом распространном случае делается запрос на сложный поиск в базе данных, результаты которого сервер затем преобразует в HTML-страницу и посылает вам. (Конечно, если клиент способен производить какие-то дейст¬вия с помощью Java или языка сценариев, данные могут быть обработаны и у него, что будет быстрее и снизит загрузку сервера.) А может быть, вам пона¬добится зарегистрироваться в базе данных при присоединении к какой-то группе, или оформить заказ, что потребует изменений в базе данных. Подобные запро¬сы должны обрабатываться неким кодом на сервере; в целом это и называется серверным программированием. Традиционно программирование на сервере осуществлялось на Perl, Python, С++ или другом языке, позволяющем созда¬вать программы CGI, но появляются и более интересные варианты. К их числу относятся и основанные на Java веб-серверы, позволяющие заниматься сервер¬ным программированием на Java с помощью так называемых сервлетов. Серв- леты и их детища, JSPs, составляют две основные причины для перехода ком¬паний по разработке веб-содержимого на Java, в главном из-за того, что они ре¬шают проблемы несовместимости различных браузеров.
Несмотря на все разговоры о Java как языке Интернет-программирования, Java в действительности является полноценным языком программирования, способным решать практически все задачи, решаемые на других языках. Пре¬имущества Java не ограничиваются хорошей переносимостью: это и пригод¬ность к решению задач программирования, и устойчивость к ошибкам, и боль¬шая стандартная библиотека, и многочисленные разработки сторонних фирм — как существующие, так и постоянно появляющиеся.
Резюме
Вы знаете, как выглядит процедурная программа: определения данных и вызо¬вы функций. Чтобы выяснить предназначение такой программы, необходимо приложить усилие, просматривая функции и создавая в уме общую картину. Именно из-за этого создание таких программ требует использования промежу¬точных средств — сами по себе они больше ориентированы на компьютер, а не на решаемую задачу.
Так как ООП добавляет много новых понятий к тем, что уже имеются в про¬цедурных языках, естественно будет предположить, что код Java будет гораздо сложнее, чем аналогичный метод на процедурном языке. Но здесь вас ждет при¬ятный сюрприз: хорошо написанную программу на Java обычно гораздо легче понять, чем ее процедурный аналог. Все, что вы видите, — это определения объ¬ектов, представляющих понятия пространства решения (а не понятия компью¬терной реализации), и сообщения, посылаемые этим объектам, которые пред¬ставляют действия в этом пространстве. Одно из преимуществ ООП как раз и состоит в том, что хорошо спроектированную программу можно понять, про¬сто проглядывая исходные тексты. К тому же обычно приходится писать гораз¬до меньше кода, поскольку многие задачи с легкостью решаются уже сущест¬вующими библиотеками классов.
Объектно-ориентированное программирование и язык Java подходят не для всех. Очень важно сначала выяснить свои потребности, чтобы решить, удовле¬творит ли вас переход на Java или лучше остановить свой выбор на другой системе программирования (в том числе и на той, что вы сейчас используете). Если вы знае¬те, что в обозримом будущем вы столкнетесь с весьма специфическими потребно¬стями или в вашей работе будут действовать ограничения, с которыми Java не справляется, лучше рассмотреть другие возможности (в особенности я рекомендую присмотреться к языку Python,www.Python.org). Выбирая Java, необходимо пони¬мать, какие еще доступны варианты и почему вы выбрали именно этот путь.


Все является объектом

Е
сли бы мы говорили на другом языке, то и мир воспринимали бы по-другому.
Людвиг Витгенштейн (1889-1951)
Хотя язык Java основан на С++, он является более «чистокровным» объект- но-ориентированным языком.
Как С++, так и Java относятся к семейству смешанных языков, но для созда¬телей Java эта неоднородность была не так важна, если сравнивать с С++. Сме¬шанный язык позволяет использовать несколько стилей программирования; причиной смешанной природы С++ стало желание сохранить совместимость с языком С. Так как язык С++ является надстройкой языка С, он включает в себя много нежелательных характеристик своего предшественника, что при¬водит к излишнему усложнению некоторых аспектов этого языка.
Язык программирования Java подразумевает, что вы занимаетесь только объектно-ориентированным программированием. А это значит, что прежде, чем начать с ним работать, нужно «переключиться» на понятия объектно-ориенти- рованного мира (если вы уже этого не сделали). Выгода от этого начального усилия — возможность программировать на языке, который по простоте изуче¬ния и использования превосходит все остальные языки ООП. В этой главе мы рассмотрим основные компоненты Java-программы и узнаем, что в Java (почти) все является объектом.
Для работы с объектами используются ссылки
Каждый язык программирования имеет свои средства манипуляции данными. Иногда программисту приходится быть постоянно в курсе, какая именно мани¬пуляция производится в программе. Вы работаете с самим объектом или же с каким-то видом его косвенного представления (указатель в С или в С++), требующим особого синтаксиса?

Report Page