Допустим, есть набор основных библиотек, конфигураций и профилей, поддержка которых присутствует в Java-машинах устройств в обязательном порядке, а есть и дополнительные (а порой и "экзотические") элементы, добавляемые разработчиками "по желанию" или по необходимости. А поскольку аппаратные/программные характеристики устройств отличаются, разработчики встраивают ровно те возможности, которые, по их мнению, будут востребованы пользователями и в то же время поддерживаются на уровне железа. Зачем, например, бюджетному телефону поддержка JSR-184 (Mobile 3D Graphics API), если его процессор все равно не справится с обработкой трехмерной графики? Посему такая возможность в Java-машину и не закладывается. Свою роль здесь играет и маркетинг: почему бы дополнительно не разделить устройства на классы по их Java-функциональности? Возьмем те же игры: если пользователя устроят простенькие 2D-игрушки, пусть покупает аппарат за сот ню долларов, а если ему хочется насладиться 3D-графикой - пусть поднакопит денег и возьмет аппарат подороже.
Впрочем, все относительно, и многое зависит еще и от амбиций производителя. Скажем, LG не считает нужным добавлять поддержку 3D-графики даже в свои топовые продукты, а бюджетные телефоны Sony Ericsson ценят в том числе и за хорошую производительность в 3D-Java.
В основе платформы Java 2ME лежат две основные конфигурации: CDC (Connected De vice Configuration, JSR-36 для версии 1.0 и JSR-218 для версии 1.1) и CLDC (Connected Limited Device Configuration, JSR-30 для версии 1.0 и JSR-139 для версии 1.1).
Разница между CDC 1.0 и 1.1, а также между CLDC 1.0 и 1.1 заключается в возросшем количестве возможностей и, следовательно, в новых требованиях к аппаратной составляющей устройств; причем новые версии не переписаны с нуля, а представляют собой эволюцию (обновление) старых версий. Конфигурация CDC предназначена по большому счету для наиболее сложных мобильных устройств, вроде смартфонов, автомобильных навигационных систем и даже игровых приставок, а CLDC применяется в простых мобильниках. Очевидно, что эти конфигурации как раз и относятся к "костяку" платформы и поддерживаются большинством современных продуктов соответственно их классу и способу применения. Разница между CDC и CLDC заключаются в наличии или отсутствии некоторых библиотек, свойствах языка Java, возможностях виртуальных машин, а также аппаратных требованиях к устройствам. Но для непосредственного написания приложений, предназначенных для работы в устройстве, конфигураций мало, - вот мы и подобрались к вершине "Java-айсберга", которая называется MIDP (Mobile Information Device Profile, JSR-37 - версия 1.0, JRS-118 - 2.0).
Базируется MIDP на CLDC и, собственно, представляет собой эту конфигурацию плюс некоторое количество API, чего уже вполне достаточно для создания мидлетов. MIDP версии 1.0 основывается на CLDC 1.0, MIDP 2.0 - на CLDC 1.0 в случаях устройств, оснащенных от 128 до 512 килобайт встроенной памяти, или же на CLDC 1.1, если в аппарате больше 160 килобайт памяти, к тому же здесь добавлена поддержка операций с плавающей точкой. В связке CLDC+MIDP (в принципе, сегодня она и обозначает поддержку Java 2ME мобильными устройствами) обязанности распределяются следующим образом: CLDC отвечает за математические вычисления (работу с целыми и псевдослучайными числами, функциями, операциями с плавающей точкой), за подключения и сети (будь то Bluetooth-, USB-, COM- или инфракрасное подключение, а также http или TCP), за обработку массивов и векторов и за работу со строками - словом, за то, чего пользователь, загрузивший и запустивший новое Java-приложение, своими глазами не увидит. Другое дело - MIDP: профиль специализируется на обработке графических оболочек приложений, отображении элементов меню и картинок, выводе на экран текста и линий. Что касается версий, то все современные мобильные телефоны поддерживают MIDP 2.0, что обуславливает, например, поддержку технологии Push Registry, полноценную реализацию работы со звуком и доступ к вибромотору аппарата, усовершенствованные игровой и мультимедийный API и возможность использования более гибкого и приятного пользовательского интерфейса. В сравнении с MIDP 1.0, MIDP 2.0 может похвастать гораздо лучшей совместимостью с различными устройствами - теперь не приходится писать мидлеты чуть ли не под каждую конкретную модель мобильника. Отметим также, что MIDP 1.0 обратно совместим с 2.0.
Надеюсь, когда-нибудь Java-приложения догонят по функциональности софт для открытых операционных систем: хотелось бы рано или поздно увидеть мидлет, который мог бы сохранять SMS в текстовый файл, или, скажем, мидлет, который бы заменял собой интерфейс камеры… Думается, в ближайшем будущем нас ждет много чего интересного - мегапикселы мегапикселами, музыка музыкой, а возможность самостоятельно улучшить программную функциональность своего мобильного любимца должна стоять на первом месте. К счастью, производители устройств и разработчики ПО в этом случае находятся с нами по одну сторону баррикад. В то же время аппаратные характеристики гаджетов постоянно совершенствуются - если необходимым условием для реализации в устройстве CLDC является 16- или 32-разрядный процессор с тактовой частотой 8–32 МГЦ, то частота "камушка" современного мобильника нередко превышает 200 МГц.