Logo    
Деловая газета CitCity.ru CITKIT.ru - все об Open Source Форумы Все публикации Учебный центр Курилка
CitForum    CITForum на CD    Подписка на новости портала Море(!) аналитической информации! :: CITFORUM.RU
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

18.01.2017

Google
WWW CITForum.ru
С Новым годом!
2005 г.

Java наконец-то стала Mobile

Олег Ремизов, "Комиздат"

Язык Java, как известно, изначально создавался для мобильных клиентов, работающих в гетерогенной среде. Проблема была в самой среде, точнее в ее отсутствии... но ситуация наконец-то изменилась.

В последнее время появилось огромное количество моделей мобильных телефонов, оснащаемых новыми модными возможностями. Если рассмотреть хронологию появления этих функций, можно отметить, что первым (ну, первым вряд ли, но главным — это точно. Прим. ред.) стало то, что практически все телефоны, стали оснащаться JVM, точнее сказать ее урезанной версией (J2ME). Таким образом производители этих устройств заявили, что телефон перестал быть ограниченным в своих возможностях устройством с жестко заданной функциональностью — пользователь может самостоятельно добавить то программное обеспечение, которое сочтет необходимым.

На практике это было больше похоже на PR-акцию. Мало кому приходило в голову искать дополнительные игры для своего мобильного устройства — слишком уж некрасивой и угловатой была графика на черно-белом экране телефона.

Вторым шагом в этом направлении было добавление GPRS-модема и широкое распространение этого стандарта в мире. Таким образом мобильные телефоны получили возможность выхода во всемирную паутину по сравнительно дешевым тарифам.

Последним — и, пожалуй, самым желанным для потребителей — стало появление моделей с цветными экранами с разрешением 128х128 пикселей и улучшенным звуком (так называемой полифонией). Несмотря на внушительные цены этих устройств, они пользуются фантастической популярностью у потребителей. Для них появилось великое множество новых java-игр и полезных программ.

Словом, с появлением такого рода устройств с уверенностью можно говорить о рождении нового рынка для программного обеспечения.

Последним шагом стало скрещивание классического PDA с мобильным телефоном. То есть теперь внутри мобилки находится полноценная операционная система Symbian — и программисты, естественно, не ограничены больше java-«песочницей», а могут писать для этих устройств C++ приложения. Эта ОС так же пришла из мира PDA.

Инициатором рождения смартфонов (так окрестили новые устройства), как и внедрения Symbian в свои мобильные устройства, стала компания Nokia. Сейчас еще несколько производителей лицензировали это новшество. Не остается в стороне и Microsoft — инженеры этой фирмы, хоть и с некоторым запозданием, предложили собственную платформу для мобильных устройств. Однако, несмотря на все усилия гиганта софтверной индустрии, инициатива была потеряна — доминирующие производители уже выбрали Symbian в качестве стандарта де-факто.

Несмотря на появление возможности написания C++ приложений для отдельных hi-end моделей, Java остается и останется основной платформой. Для такого положения вещей существует несколько причин.

  1. Java-приложения являются более переносимыми с устройства на устройство, чем приложения, реализованные с помощью С++. Если вы не будете использовать специальные расширения Java API, выходящие за стандарт, и будете так кодировать ваши приложения, чтобы они были независимы от разрешения экрана, то переносить их не потребуется вообще. Что касается практики создания коммерческих приложений, то такие условия невыполнимы. Так что при переносе с платформы на платформу, как правило, придется потрудится.
  2. Устройства с отсутствием встроенных операционных систем будут существовать, поскольку большинству потребителей вполне достаточно уже реализованных возможностей, и они не собираются переплачивать за ненужную функциональность. То есть Java-приложения остаются единственным способом расширить функциональность таких телефонов.
  3. Последний стандарт MIDP2.0 значительно расширяет возможности Java-приложений, и практически возможности при написании таких приложений ничем не отличаются от возможностей для написания приложений с помощью C++. К сожалению, устройств, которые поддерживают этот стандарт, пока еще очень мало. Мне известно всего две модели: Nokia 6600 (последняя из 60-й серии) и Ericsson P800/P900. Кстати, на форумах было много нареканий относительно качества реализации стандарта MIDP2.0 в этих устройствах. Цены на такие телефоны просто фантастические. Но постепенно парк таких устройств будет расширяться, все дефекты будут устранены, а цены упадут до приемлемого уровня.
  4. Вследствие специфики мобильных устройств нет значительной разницы в скорости выполнения java- и native-приложений. Не зря большинство игр для мобильных устройств hi-end класса (где возможно использование C++ приложений) все же выполнены в виде java-приложений.

Программа для выполнения под управлением JVM мобильного телефона или другого мобильного устройства, называется Midlet. Для разработки таких программ нам также потребуется специальный инструментарий. Следуя ссылкам на Java Developer Connection с адреса http://java.sun.com, вы можете скачать J2ME Wireless Toolkit, там же вы найдете полную API-документацию для CDC, профиля Foundation Profile и CLDC/MIDP. Это все что вам потребуется для разработки своих приложений.

Существует достаточно много SDK, ориентированных на разработку приложений конкретно для той или иной мобильной платформы. Отличаются они, главным образом, разрешением экрана эмулятора, а также поддержкой дополнительного Java API, характерного для той или иной платформы. Прежде чем скачивать инструментарий, проверьте, нет ли в вашей среде разработки предустановленного J2ME Wireless Toolkit. Кроме того, некоторые среды разработки имеют plug-ins для работы с J2ME Wireless Toolkit. К примеру, все последние версии JBuilder обладают такой функциональностью — и, следовательно, скачивать вам ничего не придется. Просто создайте новое приложение на базе заготовки, входящей в среду разработки, и приступайте к работе.

В поставке с J2ME Wireless Toolkit идет несколько демонстрационных приложений, что значительно упрощает ознакомление с принципами разработки подобных приложений. Мы рассмотрим создание собственного приложения классической игры «крестики-нолики». Вообще-то, реализация этой игры уже присутствует в Nokia SDK, но я решил сделать собственную, оригинальную версию. Тем более что и алгоритм несложен, и реализация его не займет много времени.

Минимальное Midlet-приложение состоит из двух классов. Первый — это класс, наследующий функциональность класса MIDlet. Главный класс, в котором присутствует точка входа в приложение. Второй — это экран приложения. Класс, поддерживающий интерфейс Displayable.

На практике в любом приложении существует несколько экранов. Например, в нашем случае — два: экран игры и экран about. Все, что необходимо сделать для реализации приложения, это рисовать на экране, реагировать на нажатия клавиш и меню, а также при необходимости переключать экраны.

Классы, реализующие интерфейс Displayable, могут быть двух типов:

  • форма — предназначена для расположения на ней немногочисленных, но, тем не менее, весьма полезных контролов;
  • Canvas.
    В этом примере мы используем два класса унаследованных от Canvas. Как следует из названия, этот класс предназначен для рисования на нем. Класс, наследующий свою функциональность от MIDlet, приведен ниже:

public class MIDletHello extends MIDlet {
  public void startApp() {
    // В момент старта приложения нужно произвести
    // определенные действия
  }

  public void pauseApp() {
    // Пользователь переключился на другое приложение и
    // работа временно приостановлена
  }

  public void destroyApp(boolean unconditional) {
    // Завершение работы приложения, в том числе
    // обусловленное каким-либо непредвиденным событием
  }

  public static void quitApp() {
    // Пользователь нажал команду Exit
  }
}

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

Типичный класс Canvas выглядит так:

  pr
public class MyCanvas extends Canvas implements CommandListener {
  public MyCanvas() {
    // Инициализация необходимых переменных происходит
    // здесь. Например, мы хотим создать еще одну команду
    // меню:
     addCommand(new Command("Exit", Command.EXIT, 1));

  }

  public void commandAction(Command command, Displayable displayable) {
    // Здесь происходит обработка команд меню.
  }

  protected synchronized void keyPressed(int keyCode) {
    // Здесь происходит перехват нажатий клавиш управления
    // телефона
  }

otected void paint(Graphics g) {
    // Рисуем здесь
  }
} // end of class

Для получения более детальной информации обратитесь к исходному коду приложения на компакт-диске. Для того чтобы помочь вам разобраться с исходным кодом, ниже мы разместили некоторые комментарии.

Логика игры реализована в классе Engine. Алгоритм игры достаточно прост, мы обходим все варианты комбинаций в двумерном массиве, отражающем текущее состояние игрового поля. При этом, анализируя массив из трех полей — сечение (две диагонали, три вертикали и три горизонтали), мы расставляем приоритеты. Если приоритет встретившейся комбинации выше приоритета текущей комбинации, то встретившаяся комбинация становится текущей.

Ниже, c краткими пояснениями, приведено тело функции, которая является сердцем алгоритма:

  protected boolean analaize()
  {
    // считаем,сколько в одном ряду крестиков, ноликов, пустых мест:
    int x_counter = 0;
    int o_counter = 0;
    int e_counter = 0;
    for (int i = 0; i < buffer.size(); i++)
    {
      Cell cell = (Cell)buffer.elementAt(i);
      if (cell.value == STATE.E)
      {
        e_counter++;
      }
      if (cell.value == STATE.O)
      {
        o_counter++;
      }
      if (cell.value == STATE.X)
      {
        x_counter++;
      }
    }
// В зависимости от количества крестиков, ноликов или пустых
// мест определяем комбинацию (тип состояния) — searchState
    int _searchState = SEARCH_STATE.ANY;
    // user win
    if (x_counter == 3)
    {
      _searchState = SEARCH_STATE.X_X_X;
      this.gameState = GAMESTATE.USERWIN;
      return true;
    }
    // engine can win :
    if ((o_counter == 2)&&(e_counter == 1))
    {
      _searchState = SEARCH_STATE.O_O_E;
    }
    // danger - user can win :
    if ((x_counter == 2)&&(e_counter == 1))
    {
      _searchState = SEARCH_STATE.X_X_E;
    }
    // good combination :
    if ((o_counter == 1)&&(e_counter == 2))
    {
      _searchState = SEARCH_STATE.O_E_E;
    }
    // also good combination :
    if (e_counter == 3)
    {
      _searchState = SEARCH_STATE.E_E_E;
    }
    // Если приоритет новой комбинации больше приоритета
    // текущей комбинации,определяем новую комбинацию как
    // текущую и запоминаем ее в переменных класса:
    if (this.searchState < _searchState)
    {
      this.searchState = _searchState;
      this.searchBuffer = new Vector();
      // copy vector:
      for (int i = 0; i < this.buffer.size(); i++)
      {
        this.searchBuffer.addElement(this.buffer.elementAt(i));
      }
    }
    return false;
  }

После завершения обхода ставим нолик в последней запомнившейся комбинации с наивысшим приоритетом. Логика сделана с тем расчетом, чтобы при желании ее можно было использовать в более сложной игре Go. Класс Fields отвечает за рисование игрового поля и содержит экземпляр класса Engine. Класс MyCanvas отвечает за перехват событий клавиатуры и меню, всю логику прорисовки экрана он делегирует экземпляру класса Fields. Вот так выглядит запущенное приложение на эмуляторе из состава J2ME Wireless Toolkit.


Работающее приложение, запущенное на эмуляторе из состава J2ME Wireless Toolkit

Размещение рекламы — тел. +7 495 4119920, ICQ 232284597

Подписка на новости IT-портала CITForum.ru
(библиотека, CITKIT.ru, CitCity)

Новые публикации:

24 декабря

CITKIT.ru:

  • Новогодние поздравления
  • Сергей Кузнецов. Цикл Операционные системы: Ностальгия по будущему:

  • Алексей Федорчук. OpenSolaris 2008.11 Release

  • Сергей Голубев:

  • Евгений Чайкин aka StraNNik (Блогометки):

    17 декабря

  • С.Д.Кузнецов. Базы данных. Вводный курс

    10 декабря

    CITKIT.ru:

  • OpenSolaris 2008.11 Release

  • Альтернативные ОС: две грустные истории (С.Кузнецов)
  • Nokia N810 — доведение до ума
  • CitCity:

  • Платформа 2009: заоблачные перспективы Microsoft

    4 декабря

  • Лекция С.Д.Кузнецова Понятие модели данных. Обзор разновидностей моделей данных

    CITKIT.ru:

  • OpenSolaris 2008.11 Release. Первые впечатления

  • Linux vs FreeBSD: продолжим "Священные войны"?

  • Nokia N810 as is

  • Индульгенция для FOSS

  • Друзья СПО'2008

    26 ноября

  • Нечеткое сравнение коллекций: семантический и алгоритмический аспекты

    CitCity:

    CITKIT.ru:

  • Глава из книги А.Федорчука
    Сага о FreeBSD:
  • 19 ноября

  • Проблемы экономики производства крупных программных продуктов

  • Язык модификации данных формата XML функциональными методами

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

    Заметки к книге:

  • FreeBSD: монтирование сменных устройств и механизм HAL
  • Текстовый редактор ee

    12 ноября

  • Правило пяти минут двадцать лет спустя, и как флэш-память изменяет правила (Гоц Грейф, перевод: Сергей Кузнецов)

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:
  • OSS в России: взгляд правоведа (В.Житомирский)

  • Новая статья из цикла С.Голубева "Железный марш":

    29 октября

  • О некоторых задачах обратной инженерии

  • Веб-сервисы и Ruby

  • Тестирование web-приложений с помощью Ruby

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

  • PuppyRus Linux - беседа с разработчиком (С.Голубев)

  • Сергей Кузнецов. Заметка не про Linux

    22 октября

  • Обзор методов описания встраиваемой аппаратуры и построения инструментария кросс-разработки

    CITKIT.ru:

  • Сергей Кузнецов. Почему я равнодушен к Linux

  • Глава из книги А.Федорчука
    Сага о FreeBSD:
  • Что надо иметь
    3. Базовые познания

    CitCity:

  • Управление IT-инфраструктурой на основе продуктов Microsoft

    15 октября

  • Методы бикластеризации для анализа интернет-данных

    CitCity:

  • Разъемы на ноутбуках: что они дают и зачем их так много?
  • AMD Puma и Intel Centrino 2: кто лучше?

    CITKIT.ru:

  • Новый цикл статей С.Голубева
    Железный марш:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

    8 октября

  • Автоматизация тестирования web-приложений, основанных на скриптовых языках
  • Опыт применения технологии Azov для тестирования библиотеки Qt3

    Обзоры журнала Computer:

  • SOA с гарантией качества
  • Пикоджоуль ватт бережет
  • ICT и всемирное развитие

    CitCity:

  • Пиррова победа корпорации Microsoft

    CITKIT.ru:

  • Главы из книги А.Федорчука
    Сага о FreeBSD:

    Статья из архива:

  • Я живу в FreeBSD (Вадим Колонцов)

    Новые Блогометки:

  • Перекройка шаблона Blogger или N шагов к настоящему
  • Blogger. Comment style
  • Screenie или глянцевый снимок экрана

    2 октября

    CITKIT.ru:

  • Сага о FreeBSD (А. Федорчук)

    Zenwalk: пакет недели

  • Банинг — интеллектуальное развлечение (С.Голубев)

    CitCity:

    25 сентября

  • Клермонтский отчет об исследованиях в области баз данных

    CITKIT.ru:

  • Пользователям просьба не беспокоиться... (В.Попов)

  • Снова про ZFS: диск хорошо, а два лучше
  • Командная оболочка tcsh (А.Федорчук)

    Zenwalk: пакет недели

    17 сентября

  • T2C: технология автоматизированной разработки тестов базовой функциональности программных интерфейсов
  • Технология Azov автоматизации массового создания тестов работоспособности

    CITKIT.ru:

  • FreeBSD: ZFS vs UFS, и обе-две — против всех (А.Федорчук)

    Zenwalk: пакет недели

  • Дачнет — практика без теории (С.Голубев)

    10 сентября

  • За чем следить и чем управлять при работе приложений с Oracle
  • Планировщик заданий в Oracle
    (В.Пржиялковский)

    CITKIT.ru:

  • Microsoft: ответный "боян" (С.Голубев)

  • Причуды симбиоза, или снова "сделай сам" (В.Попов)

  • Файловые системы современного Linux'а: последнее тестирование
  • Zsh. Введение и обзор возможностей
    (А.Федорчук)

    Описания пакетов Zenwalk: Zsh, Thunar, Thunar-bulk-rename, Xfce4-places-plugin, Xfce4-fsguard-plugin

    Блогометки:

  • Google Chrome
  • Лончер для ASUS Eee PC 701

    3 сентября

    CITKIT.ru:

  • Заметки о ядре (А.Федорчук):

    Добавлены описания пакетов Zenwalk: Galculator, Screenshot, Gnumeric, Pidgin

    В дискуссинном клубе:

  • И еще о Википедии и Google Knol

  • Лекция для начинающего линуксоида (С.Голубев)

    26 августа

  • Транзакционная память (Пересказ: С. Кузнецов)

    CITKIT.ru:

  • Открыт новый проект Zenwalk: пакет недели

  • Статья Текстовые процессоры и их быстродействие: конец еще одной легенды?

    21 августа

    CITKIT.ru:

  • Почему школам следует использовать только свободные программы (Ричард Столлман)
  • Беседа Сергея Голубева с учителем В.В.Михайловым

  • Википедия или Гуглезнание? Приглашение к обсуждению (Алексей Федорчук)
  • Народная энциклопедия от Google (StraNNik)

  • Обзор Mandriva 2009.0 Beta 1 Thornicrofti
  • Новичок в Линукс: Оптимизируем Mandriva 2008.1

  • Книга Zenwalk. Приобщение к Linux:

    13 августа

    CitCity:

  • Мирный Atom на службе человеку. Обзор платы Intel D945GCLF с интегрированным процессором
  • Обзор процессоров Intel Atom 230 на ядре Diamondville

  • iPhone - год спустя. Скоро и в России?

    CITKIT.ru:

  • Интермедия 3.4. GRUB: установка и настройка (из книги Zenwalk. Приобщение к Linux)

    6 августа

  • СУБД с хранением данных по столбцами и по строкам: насколько они отличаются в действительности? (Пересказ: С. Кузнецов)

    CITKIT.ru:

  • Интермедия 2.2. Что неплохо знать для начала (из книги Zenwalk. Приобщение к Linux)

  • И снова про шрифты в Иксах (А.Федорчук)

  • 20 самых быстрых и простых оконных менеджеров для Linux

  • Дело о трех миллиардах (С.Голубев)

    30 июля

  • OLTP в Зазеркалье (Пересказ: С. Кузнецов)

    CitCity:

  • Будущее BI в облаках?
  • Тиражные приложения и заказная разработка. Преимущества для заказчика
  • Дискуссия со сторонниками заказной разработки

    CITKIT.ru:

  • Новые главы книги Zenwalk. Приобщение к Linux:
  • Глава 8. Пакеты: средства установки, системы управления, системы построения
  • Глава 9. Zenwalk: репозитории, пакеты, методы установки

    23 июля

    CITKIT.ru:

  • Все против всех. 64 vs 32, Intel vs AMD, tmpfs vs ext3
  • Две головы от Intel

  • Zenwalk: обзор штатных приложений (глава из книги "Zenwalk. Приобщение к Linux")

  • Нормально, Григорий...

    16 июля

    Обзоры журнала Computer:

  • Перспективы и проблемы программной инженерии в XXI веке
  • Большие хлопоты с большими объемами данных
  • Перспективы наноэлектроники

    CITKIT.ru:

  • Интермедия о лицензиях (А.Федорчук. "Zenwalk. Приобщение к Linux")

  • Есть ли будущее у KDE?

  • Linux в школе: альтернативный вариант в задачах

  • Шифр (приключения агента Никодима)

    10 июля

    CITKIT.ru:

  • Новые разделы книги А. Федорчука Zenwalk. Приобщение к Linux:
  • Интермедия вступительная. Linux или GNU/Linux? Как вас теперь называть?
  • Глава 5. Среда Xfce
  • Глава 6. Xfce: приложения и плагины

  • ZUR (Zenwalk User Repository) FAQ

    2 июля

  • Персистентность данных в объектно-ориентированных приложениях (С. Кузнецов)

    CITKIT.ru:

  • Новые разделы книги А. Федорчука Zenwalk. Приобщение к Linux:
  • Интермедия 1.2. Дорога к Zenwalk'у. Период бури и натиска
  • Интермедия 3.3. Немного о Linux'е и "железе"
  • Глава 4. Настройка: инструментами и руками
  • Интермедия 4.1. Zenpanel и конфиги: поиски корреляции

  • Интервью с Жан-Филиппом Гийоменом, создателем дистрибутива Zenwalk

  • Linux в школе: первые итоги (С. Голубев)

    25 июня

    CITKIT.ru:

  • Zenwalk. Приобщение к Linux (А. Федорчук)

  • Логика и риторика (С.Голубев)

  • Технология Tru64 AdvFS

  • Ханс Райзер предлагает отвести полицейских к телу Нины

    18 июня

  • Проекты по управлению данными в Google (Пересказ: С. Кузнецов)

    CITKIT.ru:

  • ОС и поддержка "железа": мифы и реальность (А. Федорчук)

  • Linux в школе: другие дистрибутивы

  • Пинок (С. Голубев)

    4 июня

  • Ландшафт области управления данными: аналитический обзор (С. Кузнецов)

    CITKIT.ru:

  • Linux в школе: слово заинтересованным лицам

  • SlackBuild: пакеты своими руками

  • Linux от компании Novell. Установка и обзор openSUSE Linux

    Все публикации >>>




  • IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы — тел. +7 495 4119920, ICQ 232284597 Пресс-релизы — pr@citcity.ru
    Послать комментарий
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2007 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...