Информация с сайта
факультета вычислительной математики и кибернетики ННГУ.
Особенности программирования портативных устройств
В настоящее время все большую популярность приобретают различного вида
мобильные и портативные устройства, включая сотовые телефоны и коммуникаторы,
карманные персональные компьютеры (КПК) и системы навигации. Хотя все они
содержат в себе в том или ином виде универсальное вычислительное устройство,
архитектура их может существенно отличаться от архитектуры персональных
компьютеров (ПК).
Рассмотрим основные особенности программирования, оборудования и пользовательского
интерфейса портативных устройств.
Размер экрана
Для портативных устройств существенной характеристикой являются физические размеры
и разрешение экрана. Из соображений эргономики физические размеры экрана ограничены
диагональю 3,5-4 дюйма, а типичное разрешение составляет 160*160, 320*240 или
320*320 пиксель. Для сотовых телефонов эти величины еще меньше и составляют порядка
1-2 дюймов и 96*60, 128*128 соответственно.
Такие ограничения естественным образом сказываются на проектировании пользовательского
интерфейса, который приобретает другие свойства и приоритеты. Необходимо обеспечивать
баланс между информационной насыщенностью и уровнем заполнения экрана, но при
этом в большинстве случаев разрешение экрана может зависеть от конкретной модели
и не известно заранее.
Быстрый отклик
На ПК пользователи, как правило, работают с приложением достаточно длительный
период времени и время отклика, составляющее несколько секунд, является приемлемым.
На мобильных устройствах, таких как КПК, приложение может использоваться 15-20
раз по несколько секунд в течение дня. Таким образом, скорость приложений становится
критическим приоритетом при разработке.
При этом существенное влияние на общую эффективность оказывает не только скорость
выполнения кода, но и удобство взаимодействия пользователя с интерфейсом приложения.
Для увеличения производительности следует минимизировать количество перемещений
между окнами, обрабатываемых диалогов и т.п. Раскладка экрана приложения должна
быть настолько простой, чтобы пользователь выполнил свою задачу за минимальное
время. Очень полезно разработать пользовательский интерфейс в соответствии с интерфейсом
других приложений.
Взаимодействие с ПК
Многие мобильные устройства обеспечивают средства взаимодействия с внешним миром
(через кабель, инфракрасные или беспроводные интерфейсы) и для многих приложений
важной является задача обеспечения взаимодействия, передачи и синхронизации данных
с соответствующими приложениями на ПК.
В некоторых случаях это требует разработки программных средств не только для мобильного
устройства, но и для ПК, например, для упрощения, сжатия или предварительной ресурсоемкой
обработки данных перед передачей.
Ввод данных
Портативные устройства в силу своих габаритов не могут обеспечить пользователя
полноразмерными устройствами ввода — клавиатурой и мышью. Как правило, устройство
оснащается упрощенной или виртуальной клавиатурой и/или сенсорным экраном.
Учитывая, что эти средства не обеспечивают достаточного удобства, следует минимизировать
объем вводимой пользователем информации.
Питание
Портативные устройства обеспечиваются, как правило, источником энергии существенно
ограниченной емкости. Соответственно, ресурсоемкие задачи, требующие большого
объема вычислений, следует по возможности выносить для решения сопутствующим ПО
на стационарных ПК.
Память
Портативные устройства являются ограниченными по объему доступной памяти, как
для времени исполнения, так и для хранения данных. Типичное значение доступной
памяти для мобильных телефонов составляет от 128 Кб до 2 Мб, для КПК — от 512
Кб до 128 Мб. Некоторые устройства поддерживают дополнительные карты памяти объемом
32-512 Мб, но только для хранения приложений и данных.
По этой причине существенной является оптимизация применяемых алгоритмов и программ
по следующим приоритетным направлениям (в порядке убывания важности):
объем памяти, используемый при работе;
скорость;
объем кода.
Файловая система
По причине ограниченного объема памяти для хранения данных и для более эффективной
синхронизации с ПК, портативные устройства редко используют традиционные файловые
системы.
Типичные свойства, обеспечиваемые ОС — доступ и установка атрибутов отдельных
записей, а не всех файлов для обеспечения частичная синхронизация и работа с записями
по месту, без предварительной загрузки и последующей записи.
Сетевые средства
Для большинства мобильных устройств сетевое соединение если и доступно, то является
“дорогостоящим” ресурсом. Причины этого могут быть различны:
непостоянное соединение;
возможность соединения ограничена географически;
ограниченная полоса пропускания;
применение энергоемких беспроводных технологий;
высокая стоимость трафика;
все вышеперечисленное в любых комбинациях.
Подобные условия выдвигают естественные ограничения на сетевые взаимодействия
— требуется по возможности минимизировать необходимость присутствия в сети, количество
соединений, объем сетевого трафика.
Общие характеристики Java.
История создания Java
В 1991 году в Калифорнии компанией Sun Microsystems была организована небольшая
группа исследователей и разработчиков, перед которыми стояла задача создания программной
среды для управления бытовыми устройствами. Ввиду неопределенности платформ, на
которых должна была использоваться данная среда программирования, разработчикам
также было необходимо обеспечить поддержку платформонезависимости среды. Руководителем
проекта был назначен Джеймс Гостлинг, а сам проект получил название “Зеленый”
(Green).
Итак, первоначально разработчиками были определены основные критерии, которым
должна удовлетворять создаваемая среда. На этот процесс повлияло отношение рядовых
потребителей к бытовой электронике, что, в свою очередь, предопределило иной подход,
чем у пользователей компьютеров. Обычный потребитель определяет следующие критерии
к работоспособности бытовой техники:
экономия затрат времени на изучение технологии;
экономия денежных затрат на приобретение технологии;
стабильность и надежность;
удобство использования.
Одним из основных критериев рядовых потребителей бытовой электроники было также
их нежелание знать, какой именно процессор и операционная система используются
в бытовых устройствах. При этом также нельзя гарантировать повсеместное использование
одних и тех же платформ различными производителями бытовой электроники. Данные
подходы и потребовали от создаваемой программной среды платформонезависимости.
На первом этапе разработчики группы “Зеленых” попытались расширить популярный
язык программирования C++, однако это направление оказалось тупиковым. В связи
с этим Джеймсом Гостлингом была определена основная концепция — разработка нового
языка программирования. Новое решение получило название Oak (дуб), на основе которого
в конце 1992 года было создано подобие PDA.
Однако это направление не принесло ожидаемого результата, в связи с чем команда
разработчиков быстро переориентировалась на другой продукт — специальные телевизионные
приставки. Но и на рынке телевизионных приставок команда “Зеленых” потерпела неудачу.
В связи с этим Джеймс Гостлинг в 1994 году занялся поисками новых путей использования
своих разработок.
В середине 1994 World Wide Web уже закрепилась на рынке информационных технологий,
в связи с чем именно сеть Internet была выбрана новым направлением использования
Oak. Так, один из разработчиков группы “Зеленых” Патрик Нотон разработал прототип
нового броузера, который был назван WebRunner (впоследствии его переименовали
в HotJava). В его основе находился Oak, что позволило определить созданный продукт
как броузер второго поколения. Свое развитие в Internet также получил и сам язык
Oak, впоследствии названный Java (название Java было предложено Джеймсом Гостлингом
после посещения одного из кофейных магазинов).
Итак, 23 мая 1995 года на выставке Sun World 95 компанией Sun Microsystems были
представлены язык программирования Java и броузер HotJava. За этим последовал
всплеск заинтересованности к новой технологии, что и привело к повсеместному использованию
Java.
Что такое Java
В современном компьютерном сообществе идет много разговоров о Java. И хотя идеи,
положенные в ее основу — переносимость, масштабируемость и модульность — были
отнюдь не революционны — решение Java на сегодня является одним из наиболее целостных,
полных я перспективных.
Сегодня Java — это современный язык программирования высокого уровня. Он обладает
всеми соответствующими характеристиками — развитый синтаксис, поддержка простых
и сложных типов данных, полный набор встроенных операций и операторов. Язык Java
сам по себе не является чем-либо исключительным или хотя бы действительно новаторским,
он представляет собой обычный продукт эволюции языков программирования. В нем
прослеживается сильнейшее влияние C++, но несмотря на всю схожесть, нужно помнить,
что этот язык, с самого начала разрабатывался для другой области применения и
не является ни наследником C++, ни конкурентом — у этих языков различное предназначение.
Технология Java — это более чем язык программирования, это платформа. Платформа
— это аппаратное и (или) программное окружение, в котором работают приложения.
В большинстве языков программирования программа должна быть либо скомпилирована,
либо интерпретирована для того, чтобы компьютер мог ее выполнить. Язык Java необычен
тем, что программа одновременно и компилируется и интерпретируется.
Сначала исходный текст программы компилируется в промежуточный код — (байт-код),
который является платформонезависимым и выполняется интерпретатором платформы
Java. Компиляция выполняется один раз, при создании программы, а интерпретация
— каждый раз при ее выполнении. На первой стадии использование компилятора позволяет
выполнить проверку корректности и оптимизацию кода, на второй стадии использование
интерпретатора позволяет провести анализ безопасности и трансляцию операций, специфических
для конкретного окружения (различных аппаратных платформ и операционных систем).
Байт-код является аналогом машинных кодов реальных процессоров для стек-ориентированной
виртуальной машины Java. Все интерпретаторы Java являются реализацией этого абстрактного
процессора. Следует отметить, что сейчас разрабатываются реальные Java-процессоры,
создание которых откроет перед этой технологией новые горизонты.
Использование такой архитектуры позволяет реализовать принцип “написано однажды,
работает везде” — давнюю мечту программистов — очень близким к реальности. Возможно
создавать и компилировать программы на любой удобной платформе, для которой существует
компилятор Java, и они будут выполняться на всех платформах, для которых реализована
виртуальная машина Java
В настоящее время пакеты разработчика Java (Java Development Kit, JDK), включающие
в себя компилятор, виртуальную машину, прочий инструментарий и исчерпывающую документацию,
реализованы для всех основных платформ, включая Windows, Linux, Solaris, MacOS.
А клиентские виртуальные машины встраиваются даже в электронные органайзеры и
мобильные телефоны.
Как уже было сказано выше, платформа — это аппаратное и программное окружение,
в котором выполняются приложения. Большинство платформ — MacOS, Windows, Solaris
и т.д. — являются совокупностью и программного, и аппаратного обеспечения. В отличие
от них, платформа Java является чисто программной и состоит из двух частей:
виртуальной машины Java;
интерфейса прикладного программирования Java (Java API).
Выше говорилось именно о виртуальной машине Java, которая является аналогом аппаратного
обеспечения и основой платформы Java. Интерфейс прикладного программирования Java
(Java API) является набором готовых программных компонент, предоставляющих различные
функции, такие, например, как построение графического интерфейса пользователя
или работа с файлами.
Платформа и интерфейс прикладного программирования Java изолируют Java-программу
от аппаратного обеспечения, избавляя тем самым от проблем совместимости и предоставляя
исключительно богатые возможности.
Достоинства и недостатки Java.
Независимость от архитектуры ЭВМ
Самое большое преимущество Java — его “нейтральность” по отношению к любой архитектуре.
Программа, полностью написанная на Java, будет исполняться везде, где есть Виртуальная
Java-машина, JVM (Java Virtual Machine). Все оборудование и ОС спрятаны именно
там. Разработка системы может вестись на любой удобной платформе, а затем, в зависимости
от цены, производительности, имеющейся поддержки либо привязанностей продавца,
сгенерированный Java-код, может быть перенесен на любую другую платформу. Единственное,
что должны сделать программисты — это изучить язык Java и соответствующие библиотеки
классов Java.
Безопасность
В популярной литературе наших дней, особенно если речь заходит об Internet, стало
модной темой обсуждение вопросов безопасности. Один из ключевых принципов разработки
языка Java заключался в обеспечении защиты от несанкционированного доступа. Программы
на Java не могут вызывать глобальные функции и получать доступ к произвольным
системным ресурсам, что обеспечивает в Java уровень безопасности, недоступный
для других языков.
Система интерпретации и система исполнения Java функционируют таким образом, чтобы
Java-программа не смогла нанести какой-либо ущерб пользовательскому компьютеру.
Виртуальная Java-машина проверяет каждый байт кода на допустимость, а затем интерпретирует
его. И более того, нужно очень потрудиться, чтобы испортить загруженный Java-код.
Байтовый код создается таким образом, чтобы директивы типа “записать данные поверх
операционной системы” было невозможно выполнить, а те проблемы, которые байтовый
код всё же может создать, блокируются виртуальной машиной.
Надежность
Java ограничивает вас в нескольких ключевых областях и таким образом способствует
обнаружению ошибок на ранних стадиях разработки программы. В то же время в ней
отсутствуют многие источники ошибок, свойственных другим языкам программирования
(строгая типизация, например). Большинство используемых сегодня программ “отказывают”
в одной из двух ситуаций: при выделении памяти, либо при возникновении исключительных
ситуаций. В традиционных средах программирования распределение памяти является
довольно нудным занятием — программисту приходится самому следить за всей используемой
в программе памятью, не забывая освобождать ее по мере того, как потребность в
ней отпадает. Зачастую программисты забывают освобождать захваченную ими память
или, что еще хуже, освобождают ту память, которая все еще используется какой-либо
частью программы. Исключительные ситуации в традиционных средах программирования
часто возникают в таких, например, случаях, как деление на нуль или попытка открыть
несуществующий файл, и их приходится обрабатывать с помощью неуклюжих и нечитабельных
конструкций (кроме Delphi). Java фактически снимает обе эти проблемы, используя
сборщик мусора для освобождения незанятой памяти и встроенные объектно-ориентированные
средства для обработки исключительных ситуаций.
Объектная ориентированность
Поскольку при разработке языка отсутствовала тяжелая наследственность, для реализации
объектов был избран удобный прагматичный подход. Объектная модель в Java проста
и легко расширяется, в то же время, ради повышения производительности, числа и
другие простые типы данных Java не являются объектами.
Простота и мощь
После освоения основных понятий объектно-ориентированного программирования вы
быстро научитесь программировать на Java. В наши дни существует много систем программирования,
гордящихся тем, что в них одной и той же цели можно достичь десятком различных
способов. В языке Java изобилие решений отсутствует — для решения задачи у вас
будет совсем немного вариантов. Стремление к простоте зачастую приводило к созданию
неэффективных и невыразительных языков типа командных интерпретаторов. Java к
числу таких языков не относится — для Вас вся мощность ООП и библиотек классов.
Богатая объектная среда
Среда Java — это нечто гораздо большее, чем просто язык программирования. В нее
встроен набор ключевых классов, содержащих основные абстракции реального мира,
с которым придется иметь дело вашим программам. Основой популярности Java являются
встроенные классы-абстракции, сделавшие его языком, действительно независимым
от платформы.
Производительность и предсказуемость
Язык Java довольно медленный — в 40 раз медленнее C++. Java — язык медленный,
потому что это интерпретатор, потому что он является объектно-ориентированным
и потому что это язык с повышенным обеспечением безопасности. Его производительность
предсказать трудно, поскольку в нём используется чистка памяти (“сборка мусора”).
Размер кода
В целом Java-система очень велика. Создаваемый код довольно велик — Windows-станции
для хорошей работы должны иметь хотя бы 20 Мб памяти. Размер программы можно уменьшить,
используя динамическую компоновку и подключение классов только в необходимый момент.
Конечно, это не позволит исполнять на калькуляторе приложение, разработанное на
использование всех ресурсов рабочей станции, однако позволит разрабатывать приложения
для работы именно на калькуляторе. В некотором смысле это все-таки нарушает постулат
“аппаратной независимости” Java, но только в том, что позволяет Java-приложениям
работать там, где в противном случае речь о применении Java не шла бы вовсе.
Требования к памяти
Требования к памяти очень тесно связаны с процессом “сборки мусора”. Java нужно
очень много дополнительной памяти, чтобы чистка памяти не происходила в неподходящий
момент. Наиболее простой способ борьбы с издержками “сборки мусора” — включить
чистку памяти в механизм ее распределения. Тогда отпадает всякая необходимость
заботиться о выделении времени или асинхронном запуске “сборки мусора” либо выделении
дополнительной памяти для синхронного запуска этого процесса. Если память прикладной
системы не слишком велика, то это может быть не так плохо, как кажется. Затраты
на “сборку мусора” будут зависеть только от объема распределяемой памяти.
Java 2 Micro Edition (J2ME)
Фирма Sun Microsystems, создатель Java, определяет J2ME как “существенно оптимизированное
Java-окружение, предназначенное для широкого набора потребительских продуктов,
включая пейджеры, сотовые телефоны, телевизионные приставки и автомобильные навигационные
системы.” Также можно упомянуть и КПК. J2ME была представлена в июне 1999 года
на JavaOne Developer Conference.
J2ME предоставляет платформо-независимую функциональность языка Java для портативных
устройств, позволяя широкому классу мобильных беспроводных устройств использовать
одинаковые приложения. В рамках проекта J2ME, фирма Sun адаптировала платформу
Java для портативной и бытовой техники, не являющейся компьютерами в общепринятом
смысле этого слова, но имеющих универсальное вычислительное устройство в своем
составе.
Приложения J2ME, созданные с учетом конфигурации CLDC (Connected Limited Device
Configuration), ориентированы на устройства с довольно скромными характеристиками:
от 160 до 512 Кб ОЗУ, доступных для платформы Java в целом (включая приложения)
ограниченное энергообеспечение, как правило, батареи или аккумуляторы
сетевое соединение непостоянно и имеет ограниченную полосу пропускания, часто
применяются беспроводные технологии
интерфейс пользователя различного уровня, иногда может отсутствовать полностью
Такие требования покрывают большинство современных электронных устройств, включая
мобильные телефоны, пейджеры, карманные персональные компьютеры (КПК) и платежные
терминалы.
Для более мощных устройств Sun Microsystems предлагает J2ME в конфигурации CDC
(Connected Device Configuration). Она предусматривает больше возможностей для
приложений, но и более жесткие требования к аппаратуре:
32-разрядный процессор
не менее 2 Мб ОЗУ, доступной платформе Java
устройство должно обеспечивать полную функциональность виртуальной машины Java
2, описанную в “Blue Book”
сетевое соединение непостоянно и имеет ограниченную полосу пропускания, часто
применяются беспроводные технологии
интерфейс пользователя различного уровня, иногда может отсутствовать полностью
К устройствам, отвечающим этим требованиям, можно отнести стационарные мультимедийные
киоски, смартфоны и коммуникаторы, современные КПК, субноутбуки, бытовую технику,
торговые терминалы, автомобильные навигационные системы.
Литература
1. Вебер Д. Технология Java в подлиннике.: пер. с англ. — СПб.: БХВ-Петербург,
2001. — 1104 с.: ил.
2. Баженова И.Ю. Язык программирования Java — М.: Диалог-МИФИ, 1997. — 288 с.
3. Хабибуллин И.Ш. Самоучитель Java. — СПб.: БХВ-Петербург, 2001. — 464 с.: ил.
4. Бишоп Д. Эффективная работа: Java 2 — СПб.: Питер; К.: Издательская круппа
BHV, 2002 — 592 с.: ил., CD.
5. Глушаков С.В. Программирование на Java 2: Учебный курс — М.: АСТ
6. Материалы сайтов http://www.sun.com, http://www.microjava.com и http://www.sun.ru
7. Диббль П.С. Язык Java для встроенных систем реального времени — Microware Systems
Corporation, Des Moines, Iowa US
8. Forte for Java 4, Mobile Edition. Getting Started Guide — Sun Microsystems,
Inc.
9. J2ME: Step by step. — developerWorks, http://ibm.com/developerWorks
10. Gosling J., Joy B., Steele G., Bracha G. The Java Language Specification,
Second Edition. — Sun Microsystems, Inc., 2000.
11. The Java Virtual Machine Specification — Sun Microsystems, Inc., 1999.
12. Developer’s Notes MIDP for Palm OS, Version 1.0 FCS Java 2 Platform, Micro
Edition — Sun Microsystems, Inc.
13. Connected, Limited Device Configuration Specification, Version 1.0a, Java
2 Platform Micro Edition — Sun Microsystems, Inc.
Mobile Information Device Profile (JSR-37) JCP Specification, Java 2 Platform,
Micro Edition, 1.0a — Sun Microsystems, Inc.