div.main {margin-left: 20pt; margin-right: 20pt}Ява - только для аплетов и
Интернет
Java нераразрывно связывают с аплетами. И действительно, аплеты,
это неотъемлемая часть как языка, так и платформы Java в целом. Аплеты - удачный
маркетинговый шаг Sun. Без аплетов мир о Java не узнал бы так быстро.
Хотя идея встраиваемых приложений в гипертекстовые документы (HTML)
не такая уж и новая. Многие фирмы пытались продвинуть свои технологии на этот
сектор рынка. Но к сегодняшнему дню, конкурентов Java практически и не осталось.
На сегодня это пожалуй только JavaScript, да технология Flash. Но
последняя работает только под управлением Windows (хотя и есть плагины для
других систем). Что же касается Java, то создание аплетов - лучший способ
заявить миру о новых технологиях.
Мощная модель безопасности, единый код для всех платформ, широкие
возможности для использования готовых библиотек, простота программирования, не
это ли нужно для успеха? На самом же деле, не все так радужно, как хотелось бы.
Модель безопасности безусловно не плоха, но вот ее реализации разными
производителями программного обеспечения могут различаться, в результате чего
код прекрасно работающий под управлением одного браузера, не работает под
управлением другого.
Единый код для всех платформ, то же вещь сама по себе не плохая, но
то, как будет написан этот код, уже зависит от квалификации программиста, его
создающего. Ведь даже на платформо независимом языке можно написать платформо
зависимую программу. К тому же разные реализации виртуальной машины, могут
предъявлять свои специфические требования к исполняемому коду, хотя казалось бы
существует единая спецификация, и все производители должны ее придерживаться. Но
во-первых досконально все специфицировать нельзя, все равно остануться какие-то
нюансы, которые заранее предусмотреть нельзя. Да и производиетели JVM не всегда
строго следуют букве и духу спецификаций.
Широкие возможности ограничены широтой их реализации в вирутальной
машине. Но в общем их хватает для реализации определенных целей.
Как видно, аплет - не лучший выбор. Так почему же применение
аплетов так популярно, что Java ассоциируется только с ними? Ведь существует же
замечательная технология Flash, почему-бы не использовать ее, для своей работы
требует небольшой модуль для браузера, работает быстро, да и везде. А везде ли?
Не следует забывать, что кроме Windows, существует еще множество платформ, и их
пользователи просто напросто не смогут увидеть все дизайнерские изыски на HTML
страничке с FLash технологией, а вот Java есть во всех современных браузерах.
Правда не во всех она самой последней версии, но все же. Да и открытые
спецификации позволяют любому удостовериться, что система безопасности
достаточно надежная и злоумышленнику не удасться навредить пользователю просто
загрузившему страницу с аплетом.
Ну если в браузерах Java есть, то как обстоят дела с приложениями,
которые выполняются без браузера, а под управлением виртуальнойй машины прямо в
операционной системе? Сдесь ситуация похожая, в каждой современной операционной
системе уже установлена какая-то версия JVM. И пользователи способны исполнять с
ее помощью имеющиеся у них приложения для JVM. А что же пользователи?
Большинство пользователей даже не и подозревает о такой возможности. А странные
файлы с расширениями class или jar и вовсе пугают, ведь нажав на них ничего не
происходит, в лучшем случае на экран выдастся краткое сообщение о какой-то
непонятной ошибке. К тому же приложений для JVM написано катастрофически мало. И
дело тут не в отсутствии хороших средст разработки (как раз их наверное больше,
чем для любого друго языка программирования). Нет необходимости писать
переносимые приложения. К тому же, большинство функций используемых в типичном
пользовательском приложении опирается на функции операционной системы. В
результате программисту придется или реализовывать эти функции самостоятельно
или же использовать функции операционной системы. В первом варианте ему придется
затратить намного больше времени, а во втором сразу же пропадет переносимость.
Выход из такой ситуации может быть только один - все эти функции должны быть
стандартизированны для всех платформ, на которых может быть использована JVM, и
включены в поставку JVM, стать так называемыми core классами, т.е. классами,
которые гарантированно существуют на любой из JVM данного класса. Именно в таком
направлении и осуществляется разработка текущих спецификаций JVM. В платформе
Java 2, реализовано множество полезных и нужных функций, особенно большой прорыв
сделан в мультимедийной области. Те функцции, которые раньше приходилось решать
при помощи отдельных пакетов, теперь можно решить штатными средствами. Но не
стоит забывать, что за красивую жизнь, нужно платить. А раплачиваться приходится
размерами пакетов JDK, от версии к версии они становятся все больше и больше.
Может сложиться и такая ситуация, когда что бы запустить приложением размером 20
кб, потребуется установить новый пакет JVM размером в 50 мб.
Так для чего же все это нужно? А вот представьте себе, что вы
производите некий программный продукт и вам хочется покрыть все сектора рынка,
т.е. что бы пользователи всех операционных систем и аппаратных платформ (с
разумными, конечно ограничениями), смогли использовать ваш продукт. Как вы
поступите? Будете разрабатывать паралельно несколько одинаковых программ? На
самом деле такой подход - ночной кошмар любого разработчика сколько нибудь
крупного программного продукта. Для этого нужно в несколько раз больше
программистов, вычислительной техники, площадей, больше сотрудников в службу
поддержки и т.д. МОжно пойти и другим путем, написать весь продукт на каком либо
высокоуровневом языке программирования, для которого есть компиляторы подо все
искомые платформы и наслаждаться жизнью, при этом будет у штат сотрудников не на
много больше, если бы писалась программа только под одну платформу. Но вот там,
несколькими строчками выше, как раз написано, что в программах используются
функции операционных систем и простой компиляцией здесь не обойтись. Как же
быть? Можно реализовать некий общий интерфейсный модуль, специфичный для каждой
платформы, а из основной программы обращаться прямо к нему. Или реализовать все
необходимые функции своими собственными силами основываясь на общих для всех
платформ свойствах. Стоп, опять не то, опять дополнительные программисты,
специалисты в службу поддержки и т.д. Хотя для программ типа "Hello World!" этот
вариант весьма не плох. Причем, как в первом варианте, так и во втором
увеличится время на разработку, ведь с увеличением общего количества
программистов, увеличатся так же и накладные временные расходы на написание
собственно кода и его отладку. Ведь всем этим людям нужно будет общаться между
собой, выяснять детали реализации того или иного метода и т.д. А время, это
основной критерий коммерческой удачи программного продукта, ведь программа,
которая нужна сегодня как воздух, уже завтра может вообще не найти своего
покупателя. Ведь мощности вычислительной техники растут не по дням, а по часам,
и с момента своего появления на свет, компьютеры повысили свою
производительность в тысячи, десятки и сотни тысяч раз, а вот производительность
работы программиста возрасла едва ли на пару десятков раз. Есть еще один
вариант, приобрести мощный компилятор, с обширными библиотеками, реализации
которых будут на всех требуемых платформах. Такие или почти такие компиляторы
существуют, но даже для опытного программиста работа с такими системами весьма
затруднительна. И даже при этом не будет полной переносимости исходного кода.
Все как всегда испортят детали. Маленькие такие различия между аппаратными
платформами, это и различные реализации вычислительных потоков, и представления
данных в памяти и прочие неприятные различия, которые все будут и будут
преследовать разработчкиов на стадиях отладки.
Отсюда напрашивается вопрос, а что же делать? Нужно как можно
больше абстрагироваться от операционных систем, аппаратных платформ и
сконцентрироваться собственно на самой разработке программного продукта, а связь
с "внешним окружающем миром" пусть выполняет кто либо другой. А вот именно это и
выполняет виртуальная машина Java. Она позаботится и о связи программы с
реальностью и избавит от компиляций кода на каждой новой платформе, ко всему
этому добавляемся возможность безопасного программирования, программа
выполняется в специальной среде и программист может получть управление и
обработать внештатную ситуацию, даже в случае каких-либо сбоев.
В сложившейся ситуации можно пойти и другим путем, создать некую
универсальную операционную систему, для которой уже и писать свои программы.
Идея хорошая и уже не новая. Но наврядли какой либо производитель операционных
систем согласится добровольно уйти с рынка операционных систем. Да и создать
нечто универсальное пока еще никому не удалось.
А есть ли в действительности такие программные продукты или это
только теоретические выкладки? Конечно есть, хотя их не так уж и много. К прмеру
это Together (http://www.togethersoft.com/) - мощный продукт, для
проектировки и разработки программных продкутов, StarOffice (http://www.sun.com/products-n-solutions/software/prodapps) -
полный комплект оффисных программ, начиная от текстового процессора и заканчивая
настольной СУБД. К сожалению, разработка таких больших продуктов до недавнего
времени задерживалась, это было связано с невысокой скоростью работы программ
под JVM, сейчас же со скоростью все в порядке. Но не хватает квалифицированных
программистов. Ведь разработка ведется обычно на полностью
объектноориентированном языке Java, а специалистов действительно могущих
использовать все возможности объектного подхода не так уж и много.
Кроме этого не следует забывать и о такой огромной области
применения, как серверные приложения. Включая доступ к базам данных и сетевые
приложеия. Причем все это без какой либо зависимости от операционной системы или
аппаратной платформы и с универсальным доступом. Причем в эту классификацию
подпадают не только приложения промежуточного уровня, но и сами серверные
приложения. А если к этому прибавить еще и клиентские приложения, или даже
аплеты, то получается полный комплект автоматизации.
Для решения всех этих задач, в рамках платформы Java разрабатаны
или реализованы такие технологии, как applet, servlet, JSP, RMI, CORBA,
JDBC.
Получается, что платформа Java это не только алпеты, но и вообще
все применения, какие только возможны. А если вспонить, что Java применяется не
только на ЭВМ, но и в сотовых телефонах, бытовой технике, то создаеется
впечатление, что Java проникла уже во все сектора рынка, где хоть как-то
возможно применение программирования.
Владислав Кравченко, Григорий Григоренко
|