Эту книгу я посвящаю своим учителям, как формальным, так и неформальным, но в первую очередь — родителям, Эйр (Aire) и Уильяму Салмре (William Salmre). Если мне и удалось взглянуть на кое-что по-новому и изложить свои мысли с пользой для дела, так это только благодаря доброте и терпению тех, кто не пожалел времени на то, чтобы провести меня вверх по склону горы и указать правильное направление. Спасибо вам всем.
Благодарности издательства
Издательский дом "Вильямс" благодарит Ерофеева Сергея и Кущенко Сергея за большой вклад в подготовку издания книги.
Об авторе
Иво Салмре (Ivo Salmre) более десяти лет работал в компании Microsoft, занимаясь в основном проектированием и выпуском инструментальных средств разработки программного обеспечения для настольных компьютеров и серверов, но впоследствии сосредоточившись на мобильных устройствах. Иво был ведущим программистом проекта .NET Compact Framework. Он получил степень бакалавра в области электротехники в университете штата Коннектикут, и его доклады можно часто услышать на отраслевых конференциях. Прожив десять лет в Сиэтле и немногим более года в Лондоне, в настоящее время Иво работает в Европейском Инновационном Центре компании Microsoft (Microsoft European Innovation Center — EMIC) в городе Аахене, Германия, где занимается исследованиями в области разработки программных моделей для современных мобильных устройств. Иво — уроженец города Норфолка, штат Коннектикут.
Предисловие
Мобильные устройства на наших глазах претерпевают революционные изменения
Мобильные вычислительные устройства лишь совсем недавно вышли за рамки техники сугубо связного назначения и превратились в гибкие расширяемые компьютерные платформы, завоевывающие массовый рынок. На протяжении ближайшего десятилетия мы станем свидетелями взрывного развития коммуникационных и вычислительных устройств, способных предоставить еще более богатый спектр информационных и прочих услуг, облегчающих людям условия труда и повседневной жизни. Влияние истинно мобильных вычислительных устройств, всегда находящихся под рукой, на характер нашей производственной деятельности, а также образ жизни, общения и взаимодействия с окружающим миром переоценить довольно-таки трудно. Ключевая роль в происходящих преобразованиях мобильных устройств принадлежит их интеллектуальному программному обеспечению.
Эта книга учит тому, как создавать великолепные приложения для мобильных устройств. С этой целью изложение важных концептуальных сведений сопровождается конкретными практическими примерами. Примеры разработаны на языках программирования С# и Visual Basic .NET для выполнения в среде Microsoft .NET Compact Network, хотя лежащие в их основе идеи в равной степени применимы ко всем мобильным компьютерным программным технологиям и платформам. Наибольшую пользу эта книга принесет тем, кто использует в своей работе Visual Basic и С#, поскольку они получат возможность расширить свои познания в этой области. В общем, книга адресована всем, кто заинтересован в создании высококачественного программного обеспечения для мобильных устройств, вне зависимости от того, приверженцами какой технологии программирования они являются.
Если бы мне позволили помечтать о рецензии, то хотелось бы, чтобы она была примерно такой:
"Несмотря на сугубо практическую направленность этой книги, она не только помогает вам повысить свой профессиональный уровень как программиста, но и стимулирует творческое воображение и пробуждает желание сразу же взяться за создание нового, доселе неизвестного программного обеспечения для мобильных устройств."
Когда эта книга появится перед читателями, они смогут сами оценить, насколько мне удалось приблизиться к реализации этой дерзкой мечты.
Приступая к написанию книги, я поставил перед собой задачу "написать техническую книгу, не похожую на все остальные". При обсуждении идеи проекта с издателями и другими заинтересованными сторонами мне всегда задавали один и тот же вопрос: "Чего, по вашему мнению, в наши дни не хватает большинству технических книг, и что нового сможет предложить ваша книга?"
Чего в наши дни не хватает большинству технических книг?
В наши дни выходит в свет очень много технической литературы, посвященной разработке программного обеспечения. На полках книжных магазинов и в Web в изобилии представлены описания всевозможных программ и масса справочного материала. Мы живем в мире, в котором на нас обрушиваются мощные информационные потоки, но, несмотря на это или, возможно, именно по этой причине, приблизиться к реальным знаниям очень трудно. Тому, кто к этому стремится, приходится переворачивать тонны породы, чтобы докопаться до скрытых где-то в их недрах драгоценных алмазов сути. Будучи, как и порода, чрезвычайно полезными сами по себе, сырые факты — это все же далеко не те драгоценные камни, которые мы хотим отыскать. Чего не хватает — и это особенно касается имеющейся литературы по разработке программного обеспечения для мобильных устройств — так это доступной книги прикладного характера, в которой принципы и методы эффективного проектирования мобильных программ излагались бы с использованием конкретных примеров, иллюстрирующих теорию. Автор надеется передать читателям книги те драгоценные крупицы знаний, которые обогатят их и подтолкнут к открытию замечательных возможностей, таящихся в программном обеспечении для мобильных устройств. В этой книге изложение основного материала сопровождается практическими примерами, которые должны вдохновить читателей на проведение собственных экспериментов и наблюдений в процессе изучения ключевых элементов, лежащих в основе создания мобильных приложений.
Что нового в этой книге?
Настоящая книга посвящена теме разработки программного обеспечения для мобильных устройств и написана с намерением не привязываться к какой-то одной определенной технологии. Хотя в многочисленных примерах, предлагаемых в книге, используется платформа .NET Compact Framework, общие принципы, которые мы будем обсуждать, справедливы для всех технологий, относящихся к интересующей нас области. Несмотря на стремительную поступь технологий, надежные методы прикладного программирования и искусство проектирования развиваются медленно, проходя болезненный путь обучения на пробах и ошибках. Излагаемые в этой книге принципы проектирования и разработки программ не должны потерять своей актуальности даже в условиях дальнейшего технологического прогресса.
Цель данной книги состоит не в том, чтобы предоставить читателю множество деталей, излишних в контексте более высокого порядка, а в том, чтобы помочь ему выработать правильную оценку философии и методов проектирования мобильного программного обеспечения. Необходимую фактическую информацию и численные данные вам предоставят подробные примеры, но основная задача книги — развить в читателе понимание глубинных принципов, позволяющих разрабатывать замечательные приложения для мобильных устройств. Появление нового фактического материала, требующего изучения, никогда не прекратится, а новые технологии всегда будут эволюционировать, чтобы, в конечном счете, уступить место более совершенным, но в данной книге внимание сосредоточено на объяснении всех тех уникальных и наиболее интересных элементов технологий разработки, знание которых необходимо для создания успешных мобильных приложений.
На кого рассчитана эта книга?
■
■
■
■
■
■
Благодарности
Эта книга не только посвящена всему, что связано с мобильными устройствами, но и сама является продуктом компьютеризации мобильных устройств. Мне пришлось потратить много времени на поездки в разные регионы с рюкзаком и карманами, до отказа набитыми всевозможными мобильными устройствами, составлявшими мне компанию в дороге. Книга была написана на протяжении года, проведенного в поездках, которыми были охвачены, по крайней мере, шесть стран на территории двух континентов, что не обошлось без невероятного количества кофе, выпитого в вечерние часы. Кстати, хочу заметить, что кофе в Европе по своему вкусу, как правило, значительно превосходит сорта, доступные в Северной Америке, так что проблемой "кофейного отставания" американцам следовало бы заняться более основательно.
Ниже перечислены те люди, без которых эта книга не стала бы такой, какая она есть, а возможно, и вообще не вышла бы в свет.
■ Сотрудники издательств Addison-Wesley и Pearson, которые вдохновляли меня и поддерживали мои намерения. Особую благодарность хочу выразить Карен Гетман (Karen Gettman), с которой я обсуждал первоначальное предложение о написании "технической книги, не похожей на все остальные", Элизабет Здунич (Elizabeth Zdunich), терпеливо работавшей со мной на протяжении всего процесса написания книги, а также Лори Лайенс (Lori Lyons) и Кейт Клайн (Keith Cline) за их титанический труд по редактированию книги.
■ Замечательные люди, которые просмотрели первоначальный черновой вариант книги. Если задача рецензента состоит в том, чтобы избавить будущего читателя книги от любых ошибок, неточностей и некорректности в авторских суждениях, то эти люди великолепно справились со своей работой. Мне очень повезло с получением от этих замечательных людей как вдохновляющих, так и "любовно укоризненных" отзывов. Если наши усилия увенчались успехом, то значительная доля возможных похвал по праву должна принадлежать рецензентам. В частности, хочу поблагодарить Крэйга Нибла (Craig Neable), Билла Дрэйпера (Bill Draiper), Джона Скита (Jon Skeet), Майкла Мэйтланда (Michael Maitland), Дуга Холланда (Doug Holland) и Алекса Фейнмана (Alex Feinman) за предоставление подробных отзывов на рукопись, сопровождаемых несметным количеством полезных советов и исправлений.
■ Мое руководство в компании Microsoft, поддержку которого я ощущал на протяжении всего времени. Это просто замечательно, когда тебе предоставляют полную свободу действий и дают возможность заняться собственным проектом, за что я им очень благодарен.
От издательства
Вы, читатель этой книги, и есть главный ее критик и комментатор. Мы ценим ваше мнение и хотим знать, что было сделано нами правильно, что можно было сделать лучше и что еще вы хотели бы увидеть изданным нами. Нам интересно услышать и любые другие замечания, которые вам хотелось бы высказать в наш адрес.
Мы ждем ваших комментариев и надеемся на них. Вы можете прислать нам бумажное или электронное письмо, либо просто посетить наш Web-сервер и оставить свои замечания там. Одним словом, любым удобным для вас способом дайте нам знать, нравится или нет вам эта книга, а также выскажите свое мнение о том, как сделать наши книги более интересными для вас.
Посылая письмо или сообщение, не забудьте указать название книги и ее авторов, а также ваш обратный адрес. Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию последующих книг.
Наши координаты:
E-mainame = "note" info@williamspublishing.com
WWW: http://www.williamspublishing.com
Информация для писем из:
России: 115419, Москва, а/я 783
Украины: 03150, Киев, а/я 152
ГЛАВА 1
Введение
"Скажите, пожалуйста, как мне выйти отсюда?"
"Все зависит от того, куда тебе надо выйти ", — ответил Кот.
Добро пожаловать в мир разработки мобильного программного обеспечения
С каждым днем программное обеспечение играет в жизни людей все более заметную роль, давая нам возможность получать информацию, принимать решения "в режиме реального времени" и вообще вести более продуктивную и интересную жизнь. Вначале, когда количество доступных компьютеров было весьма невелико, каждый из них использовался в режиме коллективного доступа. Сегодня триумфальное шествие закона Мура подарило нам более демократичный и распределенный вид вычислительной техники — настольные и переносные (лэптопы, ноутбуки) "персональные компьютеры". В настоящее время мы являемся свидетелями еще более глубокого эволюционного процесса. Персональные компьютеры и централизованные серверы ни куда не делись, но их постепенно начинают окружать мириады мобильных устройств, обеспечивающих дальнейшую децентрализацию вычислительных мощностей. Это расширяет сферу применения программных приложений на доселе неведомые области. Те самые люди, которые просматривают Web-страницы, обмениваются сообщениями электронной почты, проводят время за электронными играми, совершают электронные покупки или каким-то иным образом интерактивно взаимодействуют с миром сетевой информации при помощи настольных компьютеров, все чаще предпочитают захватывать с собой "в дорогу" ту или иную отдельную частичку этих возможностей. Несколько лет тому назад компания Microsoft, в которой я работаю уже длительное время, сформулировала свои рыночные цели таким образом: "Компьютер на каждом столе и в каждом доме!" Сейчас становится очевидным, что эта формулировка должна быть дополнена словами о "программном обеспечении, которое может выполняться в любое время, в любом месте и на любом устройстве". Тем самым мы вплотную подходим к вопросу о мобильных устройствах.
Что такое, собственно говоря, мобильные устройства и в чем состоит специфика разработки программного обеспечения для них?
Что такое мобильные устройства? С вычислительной точки зрения мобильные устройства представляют собой некое компромиссное решение. Мы жертвуем невероятной вычислительной мощью, огромной емкостью памяти и графическими возможностями современных настольных компьютеров в пользу мобильных устройств в основном ради небольших размеров самих устройств, возможности использовать устройства сразу же, как только в этом возникает необходимость, а также их способности работать в течение длительного времени без перезарядки батарей. Этот компромисс вовсе не так уж плох, как могло бы показаться на первый взгляд. Принимая во внимание непрерывный экспоненциальный рост мощности процессоров и снижение цен, мы находимся на том этапе, когда, например, мое самое заурядное устройство Pocket PC (процессор XScale с тактовой частотой 400 МГц, ОЗУ объемом 64 Мбайт) по своим возможностям во многих отношениях оказывается мощнее настольных компьютеров, работавших под управлением Windows 95 всего лишь несколько лет тому назад. Но наряду с этим мобильные устройства являются также
В наши дни мобильные устройства предлагают разработчикам и конечным пользователям такие уникальные возможности для получения информации, обогащения знаниями и развлечения, которые еще несколько лет тому назад трудно было даже себе представить. Каждый, кто в течение более или менее длительного времени пользовался современными смартфонами или устройствами с возможностями Wi-Fi, мог сам убедиться в том, какие фантастические вещи сейчас становятся доступными. Ничто не отражает смысл выражения "информация на кончиках пальцев" так буквально, как вычислительное устройство, которое можно в любой момент достать из кармана и сразу же начать работать с интересующей вас информацией.
Установившиеся принципы разработки программного обеспечения остаются в силе и по отношению к мобильным устройствам. Выбрасывать имеющиеся у вас книги, посвященные методам успешного программирования или обеспечению безопасности, нет никакой необходимости. В действительности, при разработке программ для мобильных устройств следование принципам создания программного обеспечения, проверенным на практике, приобретает еще большую актуальность. Предлагаемая настольными компьютерами среда разработки приложений настолько богата различными возможностями и терпима к произволу пользователей, что разработчики могут решать многие из возникающих перед ними проблем "силовыми методами", не заботясь о применении рекомендованных методик программирования. Недостаточно серьезное отношение некоторых программистов к необходимости строго соблюдать базовые принципы проектирования и создания программ можно отчасти объяснить тем обилием ресурсов, которые находятся в их распоряжении.
Как правило, такой подход к делу приводит к ухудшению условий работы пользователя из-за снижения быстродействия приложения, которого можно было бы избежать, или непродуманности пользовательского интерфейса;
Данная книга является руководством по разработке программного обеспечения, предназначенного для использования на мобильных устройствах, поскольку при создании мобильных приложений приобретение навыков использования систематического подхода к проектированию и созданию программ становится особенно актуальным. Эта тема пока еще плохо освещена в литературе, а недостаток руководств, написанных доступным языком, и описаний соответствующих методик вызывает чувство неудовлетворенности как у разработчиков, пытающихся перенести свои профессиональные интересы в область мобильных устройств, так и у конечных пользователей, которые реально испытывают на себе отрицательные последствия любых просчетов, допущенных проектировщиками программного обеспечения. Несмотря на то что при написании примеров, приведенных в данной книге, использовалась платформа NET Compact Framework, лежащие в их основе идеи имеют общий характер и представляют интерес для всех разработчиков приложений, какую бы из мобильных сред они для себя ни выбрали. Независимо от того, используются ли собственные коды C/C++, платформы .NET Compact Framework или Java/J2ME, либо любая другая технология, ориентированная на мобильные устройства, хорошее знание устоявшихся методов разработки мобильных приложений играет весьма существенную роль. Читатель научится ясно понимать и со знанием дела анализировать проблемы, с которыми приходится сталкиваться при разработке мобильных приложений, что позволит ему при любых обстоятельствах доводить процесс разработки до успешного завершения. Хочу надеяться, что эта попытка облегчить читателям вхождение в данную область и поделиться с ними знаниями, приобретенными моими коллегами и мною в нелегких условиях, когда нам приходилось пробираться по узким лабиринтам, а на всем пути нас подстерегали многочисленные невидимые ловушки, окажется удачной. Эта книга задумана как руководство, в котором вы найдете необходимые практические рекомендации относительно того, как пройти все этапы разработки мобильного программного обеспечения, чтобы ваши усилия увенчались успехом, и вы смогли извлечь из мобильных вычислительных устройств все то, на что они способны.
Успех определяется несколькими ключевыми факторами
Успешность технического решения зависит от того, насколько удачными были проектные решения. Главную роль в этом играет умение выделить самое главное, отделить зерна от плевел и обозначить ключевые моменты, на продумывание которых стоит затратить свое драгоценное время. В любом деле можно легко отличить специалиста, который делает все "легко и непринужденно", от пыхтящего от натуги новичка. Причина этого очень проста: специалист способен делать все с изящной легкостью потому, что ему это дается действительно легко! Он сразу же интуитивно понимает, на чем необходимо сосредоточить свои усилия, а на что можно просто не обращать внимания. В то же время не обладающий достаточным опытом новичок изводит себя, пытаясь сосредоточиться одновременно на всем, что и заканчивается результатом, предсказать который не представляет особой сложности. Каждый, кому довелось пройти путь от начинающего лыжника или виндсерфера (два вида спорта, для которых характерна очень крутая кривая обучения) до уровня специалиста, сможет по достоинству оценить справедливость этого утверждения. Иногда даже сами специалисты не могут сказать, что именно делает их специалистами, а просто знают, как правильно сделать то-то и то-то (временами такая их позиция буквально бесит новичков, ожидающих от них хоть каких-то объяснений). Обучение тому, как выделить главное, на чем следует сконцентрироваться, является ключевым аспектом становления специалиста. Можно воспользоваться близкой аналогией из области математики, приведя в качестве примера "эффекты первого порядка" в их противопоставлении эффектам "второго, третьего и более высоких порядков", где идея состоит в том, что в любом конкретном уравнении с множеством отдельных членов имеются малозначительные факторы и факторы, с которыми "действительно следует считаться" Общее поведение системы определяется эффектами нижайших порядков. Точно так же обстоит дело и с разработкой мобильного программного обеспечения: здесь все имеет значение, но одни факторы играют гораздо более важную роль, чем другие.
Ниже перечислены ключевые факторы, от которых зависит успешность разработки программного обеспечения для мобильных устройств. Важно учитывать все эти факторы, но первыми указаны самые значимые из них. В порядке уменьшения степени важности таковыми являются следующие факторы:
1
2.
3.
4.
5.
Соответствующие технические методы, обеспечивающие удовлетворение описанных выше требований, обсуждаются в последующих главах.
Как читать эту книгу
Те знания, которыми автор делится с читателями в этой книге, были приобретены им на протяжении многих лет напряженной работы и являются результатом его личного опыта, а также подробных обсуждений с друзьями и партнерами по сети их собственного опыта, накопленного в процессе разработки мобильных приложений. Разработка мобильных программ — это работа, которая одновременно доставляет огромное удовольствие. Всякий раз, когда видишь, как на экране мобильного устройства, без труда умещающегося в кармане, вдруг появляется и начинает выполняться созданное тобой приложение, испытываешь чувство удовлетворения. При наличии таких технологий, как .NET Compact Network и Visual Studio .NET компании Microsoft, a также других конкурентоспособных инструментов и сред выполнения, предлагаемых различными поставщиками, разработка приложений для мобильных устройств становится вполне доступным занятием. Наилучший способ ознакомления с соответствующими методиками и их изучения — это их применение на практике и реализация наряду с собственными идеями.
Я советую вам хорошенько запомнить перечисленные выше факторы успеха и приступить к чтению этой книги в том порядке, который вам кажется наиболее подходящим. Если вас особенно интересуют некоторые конкретные вопросы разработки программного обеспечения, можете сразу же приступить к чтению соответствующих разделов. Книга изобилует множеством полезных примеров; вы можете совершенно свободно переходить к любому интересующему вас месту книги и "пощупать" все собственными руками.
И самое главное — смело экспериментируйте!
Способы разработки программ для мобильных устройств
Существует немало технологий, позволяющих создавать приложения для мобильных устройств. Во многом подобно разработке приложений для настольных компьютеров, двумя основными моделями являются модель серверного Web-приложения и модель интеллектуального клиента. Данная книга в основном посвящена клиентским приложениям для мобильных устройств, но в целях сравнения имеет смысл вкратце проанализировать модели приложений обоих типов.
Серверные приложения для мобильных устройств
Серверные приложения принято называть "приложениями браузера". Приложения этого типа обладают значительной гибкостью. Их привлекательной чертой является то, что они не требуют присутствия на мобильном устройстве никаких других программных компонентов, кроме типового мобильного браузера. Недостаток такого подхода состоит в том, что, как и в случае любых других Web-приложений, мобильные Web-приложения требуют постоянной связи с сервером и не могут предложить того разнообразия возможностей и столь же быстрой ответной реакции, что и решения, обеспечиваемые установкой всех нужных программных компонентов на мобильном устройстве. Необходимость поддержания постоянного соединения с сервером требует особого внимания, поскольку в случае мобильных устройств, в отличие от настольных компьютеров, возможны нерегулярные нарушения связи, обусловленные передвижением пользователя, мобильное устройство которого не имеет никаких проводных подключений. В то же время, если ваше приложение должно выполняться лишь после того, как пользователь установит соединение с сервером, и вы желаете расширить круг целевых устройств, вариант мобильного Web-решения несомненно заслуживает внимания.
НА ЗАМЕТКУ
Существует множество технологий, которые могут быть использованы при разработке Web-приложений, ориентированных на мобильные устройства. Кроме элементов управления технологии Microsoft ASP.NET для мобильных устройств, существуют и другие Web-технологии, поддерживающие разработку мобильных приложений. Для этих технологий существуют свои стратегии создания мобильных Web-приложений. Если вы уже привыкли работать с какой-то определенной Web-технологией, то вполне вероятно, что доступно и соответствующее расширение этой технологии, ориентированное на мобильные устройства.
Технология компании Microsoft, предназначенная для разработки Web-приложений, носит название ASP.NET (Active Server Pages .NET). ASP.NET предлагает "мобильные элементы управления" ASP.NET, предназначенные для мобильных устройств. Visual Studio .NET 2003 предоставляет пользователям возможность создавать мобильные ASP.NET-приложения. На рис. 1.1 показано диалоговое окно Visual Studio для создания нового проекта ASP.NET Mobile Web Application.
Процесс проектирования и создания мобильных Web-приложений в целом выглядит так же, как и в случае Web-приложений, ориентированных на настольные варианты Web-браузеров, за исключением перечисленных ниже основных отличий:
Исходя из информации, полученной вместе с запросом от мобильного Web-браузера, среда выполнения на стороне сервера принимает решение относительно того, какой набор параметров будет наиболее оптимальным для дисплея мобильного устройства, с которым она взаимодействует. Новые варианты технологии ASP.NET Mobile Web поддерживают широкий спектр устройств. Поддержку устройств нового типа можно дополнительно получить от компании Microsoft, изготовителей устройств, а также конечных разработчиков, желающих использовать в качестве целевых устройств такие, которые в настоящее время средой выполнения не поддерживаются.
Для доступа к мобильным Web-приложениям на устройстве должен быть установлен мобильный браузер, располагающий соответствующими возможностями. Существует множество разновидностей мобильных браузеров, но наиболее распространенными являются уже упоминавшиеся ранее WML-, cHTML- и HTML-браузеры. Большинство современных мобильных телефонов поставляются с предварительно установленным Web-браузером того или иного типа
Значительно больше информации относительно разработки мобильных ASP.NET- приложений вы найдете в оперативной справочной документации. (Великолепной отправной точкой для этого может служить раздел "Mobile" на Web- сайте http://www.asp.net.)
Рис. 1.1.
Мобильные приложения на основе модели интеллектуального клиента
В этой книге основное внимание уделено разработке клиентских приложений для мобильных устройств. Если вы решаете, что ваше мобильное приложение будет лучше всего работать в качестве "толстого" клиента, то вам придется принять еще одно важное решение. Вы должны решить, какую именно технологию следует использовать на стороне клиента. Будете ли вы создавать приложение с использованием собственного или управляемого кода? У каждого из этих двух вариантов имеются свои преимущества и недостатки.
Приложения на основе собственного кода (native code) обычно разрабатываются с использованием языков С или С++. Собственные коды полезны в тех случаях, когда вы хотите добиться от системы максимальной производительности или же вам требуется низкоуровневый доступ к оборудованию. В то же время, собственным кодам свойствен ряд серьезных недостатков, перечень которых приводится ниже.
Во время написания данной книги компания Microsoft предлагала свободно распространяемый инструментальный набор средств для разработчиков устройств на языках C/C++ под названием eVC++. eVC++ — это аббревиатура от Embedded Visual С++. Этот продукт, который можно бесплатно загрузить с Web-сайта Microsoft, позволяет разработчикам создавать собственный код на языках C/C++ для устройств, работающих под управлением операционных систем Windows СЕ, Pocket PC и Microsoft Windows Mobile 2003 Software for Smartphone (ради краткости при дальнейших ссылках на последний из названных программных продуктов я буду использовать его сокращенное название — Microsoft Smartphone). В основу этой среды разработки была положена среда Visual Studio 6.0 С++, являющаяся предшественницей Visual Studio .NET. Согласно планам Microsoft последующие версии Visual Studio .NET (начиная с выпуска "Whidbey" в 2005 году) будут обеспечивать поддержку разработки собственных кодов C/C++ для устройств, в результате произойдет слияние обеих указанных сред в одну среду.
При разработке приложений для Windows ХР Embedded можно использовать ту же среду Visual Studio .NET, что и для настольных компьютеров и серверов.
Созданием сред для разработки приложений в собственных кодах занимаются и другие компании, в том числе MetroWorks и WindRiver. Существует также множество инструментальных средств командной строки, часть которых является бесплатной, тогда как за остальные надо платить. Типичные продукты поставляются в виде отдельных пакетов, предназначенных для различных целевых сред. Так, существуют отдельные среды разработки для Windows СЕ, Symbian Operating System, а также для LINUX, FreeBSD, Palm OS и так далее.
Инструменты разработки приложений для мобильных устройств характеризуются различными уровнями поддержки стандартов ANSI C/C++. Если вы хотите обеспечить переносимость кода или библиотек, придерживайтесь следующих рекомендаций:
Разработка приложений для мобильных устройств с использованием собственных кодов не является чем-то необычным и вполне может соответствовать вашим потребностям, но решение об этом вы должны принимать осознанно, понимая причины, побуждающие вас к такому выбору. Если при создании мобильного приложения вы решаете прибегнуть к написанию собственных кодов, убедитесь в том, что для этого имеются веские причины, и не пожалейте времени на то, чтобы заранее продумать, какие возможности компиляторов C/C++ вам могут для этого понадобиться и какие усилия вам придется приложить для преодоления возникающих при этом проблем разработки и отладки. Разрабатывать мобильные приложения на основе собственного кода намного сложнее, чем для настольных компьютеров или серверов. Чтобы добиться в этом успеха, вы должны быть вооружены ясным пониманием целей и знаниями инструментальных средств, которые собираетесь для этого использовать.
Управляемый код
Термин
Двумя наиболее распространенными средами выполнения управляемого кода на мобильных устройствах являются J2ME (Java Mobile Edition) и .NET Compact Framework. В данной книге для иллюстрации принципов разработки программного обеспечения для мобильных устройств используется платформа .NET Compact Framework, хотя большинство обсуждаемых положений справедливы по отношению к любым разновидностям методов разработки мобильных программ, включая разработку программ с использованием собственных кодов
Преимущества управляемого кода трудно переоценить. Руководствуйтесь следующим общим правилом: если имеется хоть малейшая возможность использовать для разработки проекта управляемый код, воспользуйтесь ею. Благодаря этому значительно сократятся сроки разработки кода и количество ошибок в нем, облегчится перенос кода на новые устройства, повысятся его безопасность и устойчивость, а сопровождать его будет гораздо легче, чем аналогичный собственный код. Разрабатывать приложения с использованием собственных кодов имеет смысл лишь тогда, когда это диктуется соображениями производительности или необходимостью получения низкоуровневого доступа к устройствам. Но и в этих случаях лучше всего написать на собственном коде лишь небольшие критические участки программы, а во всей остальной ее части использовать высокоуровневый управляемый код. Как будет показано далее в этой книге, использование проверенных методов проектирования мобильного программного обеспечения в сочетании с управляемой средой времени выполнения, поддерживающей JIT-компиляцию, приводит к тому, что необходимость в привлечении собственных кодов возникает лишь в редких случаях. Возможностей управляемого кода чаще всего будет вполне достаточно даже для создания динамичных игр с высокой долей анимации. Преимущества высокоуровневых абстракций управляемого кода невозможно оспаривать. Пару десятков лет тому назад программисты переходили при разработке программ от языка ассемблера к языку С, оставляя ассемблерный код лишь для решения узкоспециальных или критических задач. Такой переход на более высокий уровень абстракции позволил разрабатывать намного более сложные приложения, отличающиеся повышенной надежностью, в гораздо более короткие сроки. В настоящее время совершается аналогичный переход от собственных кодов C/C++ к средам с управляемым кодом.
.NET Compact Framework — среда выполнения управляемого кода для устройств
Поскольку для иллюстрации рекомендуемых методов разработки программного обеспечения для мобильных устройств в этой книге используется платформа .NET Compact Framework, целесообразно привести в данной вводной главе высокоуровневый обзор этой платформы. Подробному описанию того, как работает .NET Compact Framework и какие методы управления памятью, компиляции кодов и сборки мусора она обеспечивает, посвящена следующая глава. Разработчики, остановившие свой выбор на других моделях программирования для мобильных устройств, обнаружат, что многие понятия имеют одинаковый смысл во всех моделях.
Платформа .NET Compact Framework состоит из двух основных частей:
1) основного исполнительного механизма;