Главная » Разработка для Android » ИДИОМЫ ПРОГРАММИРОВАНИЯ В JAVA ДЛЯ ANDROID

0

 

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

Безопасность типов в Java

Основной целью при проектировании Java было создание языка, который обеспечил бы безопасное программирование. «Пространность» и негибкость Java, которую не клеймил только самый ленивый и которая действительно отсутствует в таких языках, как Python, Ruby и Objective-C, нужна для того, чтобы компилятор мог гарантировать: во время исполнения не могут возникать целые классы ошибок.

Применяемая в Java статическая типизация оказалась очень полезной далеко за пределами собственного компилятора Java. Способность машины к синтаксическому разбору и пониманию семантики кода Java стала основной движущей силой при разработке таких мощных инструментов, как FindBugs и средства рефакторинга интегрированной среды разработки.

Многие разработчики отстаивают точку зрения, что, особенно при работе с современными инструментами программирования, эти ограничения – не слишком дорогая цена за возможность немедленного обнаружения проблем, которые в иных случаях могут проявиться лишь уже на этапе развертывания кода. Разумеется, не менее велика и когорта программистов, которые доказывают, что они экономят такую массу времени, работая с динамическими языками, что вполне успевают писать, кроме кода, и всеобъемлющие тесты компонентов, и интеграционные тесты, что тоже позволяет избежать массы проблем.

Независимо от того, какая из этих точек зрения вам ближе, совершенно очевидно, что доступные инструменты нужно использовать с максимальной эффективностью. Статическое связывание, применяемое в Java, вне всякого сомнения, ограничивает возможности разработчика. С другой стороны, Java – это очень хороший язык со статическим связыванием, хотя с динамикой у Java и правда неважно. На самом деле в Java можно выполнять и по-настоящему динамические операции, используя содержащиеся в этом языке API рефлексии и интроспекции, а также активно прибегая к приведению типов. Но если работать таким образом, то за исключением редчайших случаев язык и среда времени исполнения будут использоваться для достижения противоречащих друг другу целей. Ваша программа, вероятно, будет работать очень медленно, и тулчейн Android (набор инструментов для компиляции) может совершенно не разобраться в вашем коде. Самое важное замечание заключается, пожалуй, в том, что, если в этой редко используемой части платформы найдутся ошибки (баги), вы узнаете о них в числе первых. Советуем примириться со статической природой Java (по крайней мере, пока не появится хорошей динамической альтернативы) и в полной мере воспользоваться преимуществами этого языка.

Инкапсуляция

Разработчики часто ограничивают видимость членов объекта с целью создания инкапсуляции. Смысл инкапсуляции заключается в том, что объект ни в коем случае не должен сообщать о себе такие детали, поддержка которых в нем не предусмотрена. Возвращаясь к нашему примеру с мохито, напоминаем, что вас совершенно не волнует, как коллега достал нужную вам мяту. Но, предположим, вы ему говорите: «А не мог бы ты нарвать в саду еще мяты? И, раз уж ты там будешь, полей заодно розовый куст». Итак, мы уже не можем сказать, что вас не волнует, откуда коллега берет мяту. Теперь вас интересует, как именно он ее добывает.

Аналогично интерфейс объекта (коротко называемый API) состоит из методов и типов, доступных для вызывающего кода. Аккуратно применяя инкапсуляцию, разработчик скрывает детали реализации объекта от того кода, который использует этот объект. Такой контроль и защита позволяют создавать программы, которые отличаются значительной гибкостью и позволяют разработчику объекта со временем изменять реализацию объекта, не вызывая при этом «эффекта ряби» (как от камешка, брошенного в воду) в вызывающем коде.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии