Объектные переменные, объекты, ссылки и указатели

ВВЕДЕНИЕ

В данной курсовой работе рассмотрена тема “Создание приложения под ОС Android”.

В теоретической части подробно описан язык программирования JAVA и ОС Android.

В практической части будет размещаться приложение с исходным кодом.

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

ТЕОРИТИЧЕСКАЯ ЧАСТЬ

Java

Java— объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года.

В русском языке распространены два варианта написания: «Джава» и «Ява». Правообладатели торговой марки Java считают, что правильное написание — транслитерация «Джава», и не признают слово «Ява», соответствующее традиционному произношению названия острова Ява. Компания Sun (ныне принадлежащая Oracle) придерживается англоязычного произношения во всех странах мира.

Иногда в обиходе используют также жаргонное слово «Жаба» (например, изображение жабы есть на календариках группы российских пользователей Джавы (Java Users Group).

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

Изначально язык назывался «Дубом» (Oak) и разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в «Джаву» и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе «Ява» (по имени одноименного острова, где производится этот сорт), поэтому на официальной эмблеме языка изображена чашка с дымящимся кофе. Существует и другая версия происхождения названия языка, связанная саллюзией на кофе-машину как пример бытового устройства, для программирования которого изначально язык создавался.

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

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

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

· применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,

· широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,

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

По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и бо́льшее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++.

Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft.

История версий Java;

Java 1.0

Разработка Java началась в 1990 году, первая официальная версия — Java 1.0, — была выпущена только в 1996 году.

Java 1.2

К 1998 году была разработана обновлённая спецификация JDK 1.2, вышедшая под наименованием Java 2. Язык практически не изменился — было добавлено одно ключевое словоstrictfp. Платформа получила следующие дополнения:

· Библиотека Swing для создания графического интерфейса пользователя .

· Коллекции (JSR 166).

· Поддержка файлов Policy и цифровых сертификатов пользователя.

· Библиотека Accessibility.

· Java 2D.

· Поддержка технологии drag-and-drop.

· Полная поддержка Unicode, включая поддержку ввода на японском, китайском и корейском языках.

· Поддержка воспроизведения аудиофайлов нескольких популярных форматов.

· Полная поддержка технологии CORBA.

· JIT-компилятор, улучшенная производительность.

· Усовершенствования инструментальных средств JDK, в том числе поддержка профилирования Java-программ

Java 2

В данном случае встречается путаница. Выпускались книги, например, Beginning Java 2 by Ivor Horton (Mar 1999), фактически по JDK 1.2 (бывшее название — Java 2). Вместе с тем, по сей день такие книги публикуются, например: Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри. Технологии программирования на Java 2. Распределенные приложения (2011).

В то время, когда, как известно, Java 2 была исторически заменена следующими релизами, подобные названия книг дезориентируют в понимании, о какой же версии Java они написаны на самом деле. Если JDK 1.2 принято считать за Java 2, а авторы книг за Java 2 принимают JDK 7, это приводит к полной путанице.

Java 5.0

Спецификация Java 5.0 была выпущена в сентябре 2004 года. C этой версии изменена официальная индексация, вместо Java 1.5 правильнее называть Java 5.0. Внутренняя же индексация Sun осталась прежней — 1.x. Минорные изменения теперь включаются без изменения индексации, для этого используется слово «Update» или буква «u», например Java Development Kit 5.0 Update 22. Предполагается, что в обновления могут входить как исправления ошибок так и небольшие добавления в API, JVM.

В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:

· Перечислимые типы (англ. enum). Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей.

· Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные.

· Перечисление может реализовывать интерфейсы.

· Для перечислений имеются встроенные методы, дающие возможность получения значений типа по имени, символьных значений, соответствующих именам, преобразования между номером и значением, проверки типа на то, что он является перечислимым.

· Аннотации — возможность добавления в текст программы метаданных, не влияющих на выполнение кода, но допускающих использование для получения различных сведений о коде и его исполнении. Одновременно выпущен инструментарий для использования аннотированного кода. Одно из применений аннотаций — упрощение создания тестовых модулей для Java-кода.

· Средства обобщённого программирования — механизм, аналогичный Eiffel (позже также появились и в C#, принципиально отличаются от шаблонов C++), дающий возможность создавать классы и методы с полями и параметрами произвольного объектного типа. С использованием данного механизма реализованы новые версии коллекций стандартной библиотеки Java.

· Методы с неопределённым числом параметров.

· Autoboxing/Unboxing — автоматическое преобразование между скалярными типами Java и соответствующими типами-врапперами (например, между int — Integer). Наличие такой возможности сокращает код, поскольку исключает необходимость выполнения явных преобразований типов в очевидных случаях.

· Разрешён импорт статических полей и методов.

· В язык введён цикл по коллекции объектов. Было введено использование Javadoc-комментариев, которые используются для автоматического оформления документации по комментариям в исходном коде.

Java 6

Релиз версии состоялся 11 декабря 2006 года. Изменена официальная индексация — вместо ожидаемой 6.0 версия значится как 6. Минорные изменения как и в Java 5.0 вносятся в обычные обновления версии, например Java Standard Edition Development Kit 6 Update 27. Внесены следующие изменения:

· Коллекции — добавлены интерфейсы для организации очереди, работающей с двух сторон коллекции; организовывающие поиск по ближайшему соответствию; блокирующие себя во время ожидания элемента. Организованы новые классы, реализующие перечисленные интерфейсы.

· Добавлена поддержка японского императорского календаря (наряду с уже существующими григорианским и буддийским календарями).

· Доступны классы-потоки для чтения и передачи сжатых данных, с возможностью передачи их по сети. Сняты ограничения на количество файлов в архиве (ранее 64Кб), длину названия файла (ранее 256 символов) и количество одновременно открытых файлов (ранее 2000 шт).

· Организована система управления кешэм и добавлена поддержка параметра «no-cache» в HTTP-запросе.

· JConsole, графический мониторинг JVM, стала официально поддерживаемой утилитой.

· Java HTTP Server, позволяет создать полноценный HTTP сервер, с минимально необходимыми функциональными свойствами.

· Повысилась скорость вычислений на 70 %, скорость операций ввода/вывода возросла в два раза.

· Swing — улучшена работоспособность OpenGL и DirectX; обработка текста на LCD; добавлен GifWriter, для работы с файлами .gif.

· Исправлено большое количество ошибок.

Java 7

Релиз версии состоялся 28 июля 2011 года. В финальную версию Java Standard Edition 7 не были включены все ранее запланированные изменения. Согласно плану развития (план «Б»), включение нововведений будет разбито на две части: Java Standard Edition 7 (без лямбд, проекта Jigsaw, и части улучшений Coin) и Java Standard Edition 8 (все остальное), намеченный на конец 2012 года.

В новой версии, получившей название Java Standard Edition 7 (Java Platform, Standard Edition 7), помимо исправления большого количества ошибок было представлено несколько новшеств. Так, например, в качестве эталонной реализации Java Standard Edition 7 использован не проприетарный пакет JDK, а его открытая реализация OpenJDK, а сам релиз новой версии платформы готовился при тесном сотрудничестве инженеров Oracle с участниками мировой экосистемы Java, комитетом JCP (Java Community Process) и сообществом OpenJDK. Все поставляемые Oracle бинарные файлы эталонной реализации Java Standard Edition 7 собраны на основе кодовой базы OpenJDK, сама эталонная реализация полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с проприетарными продуктами. К другим нововведениям относится интеграция набора небольших языковых улучшений Java, развиваемых в рамках проекта Coin, добавлена поддержка языков программирования с динамической типизацией, таких как Ruby, Python иJavaScript, поддержка загрузки классов по URL, обновленный XML-стек, включающий JAXP 1.4, JAXB 2.2a и JAX-WS 2.2 и другие.

За 5 дней до выхода релиза Java Standard Edition 7 было обнаружено несколько серьёзных ошибок в горячей оптимизации циклов, которая включена по умолчанию и приводит виртуальную машину Java к краху. Специалисты Oracle найденные ошибки за столь короткий срок исправить не могли, но пообещали, что они будут исправлены во втором обновлении (Java 7 Update 2) и частично в первом.

Список нововведений

· Поддержка динамически-типизированных языков (InvokeDynamic) — расширение JVM (семантики байт-кода), языка Java для поддержки динамически-типизированных языков.

· Строгая проверка class-файлов — class-файлы версии 51 (Java Standard Edition 7) или более поздней версии должны быть проверены typechecking верификатором; JVM не должна переключаться на старый верификатор.

· Изменение синтаксиса языка Java (Project Coin) — частичные изменения в языке Java, предназначенные для упрощения общих задач программирования:

· Использование класса String в блоке switch.

· Закрытие используемых ресурсов в блоке try (try-with-resources) — работает при использовании интерфейса AutoCloseable.

· Объединённая обработка исключений в блоке catch (multi-catch exceptions) — перечисление обрабатываемых исключений в catch .

· Повторное выбрасывание исключений (rethrowing exceptions) — передача возникшего исключения «вверх» по стеку вызовов.

· Подчёркивания в числовых литералах для лучшего восприятия больших чисел.

· Изменение вывода типа в Java generic при создании объекта.

· Использование двоичных чисел (binary literals) — префикс «0b» укажет, что используется двоичное число.

· Упрощение вызова методов varargs — уменьшение предупреждений при вызове метода с переменным числом входящих переменных.

· Модификация загрузчика классов (class-loader) — избежание тупиковых ситуаций в неиерархической топологии загрузки классов.

· Закрытие ресурсов, открытых URLClassLoader.

· Обновление коллекций (JSR 166y).

· Поддержка Unicode 6.0.

· Отделение языка пользователя и языка пользовательского интерфейса — обновление обработки языков для отделения локали от языка пользовательского интерфейса.

· Новые интерфейсы I/O для платформы Java (nio.2).

· Использование JDBC 4.1 и Rowset 1.1.

Java 8

Список нововведений

· Полноценная поддержка лямбда-выражений.

· Дополнительные функции обхода коллекций.

· Ключевое слово default в интерфейсах для поддержки функциональности по умолчанию.

· Динамическая подгрузка методов.

(не закончено)

Java 9

Список нововведений

интеграция jigsaw

Классификация платформ Java

Внутри Java существуют несколько основных семейств технологий:

· Java SE — Java Standard Edition, основное издание Java, содержит компиляторы, API, Java Runtime Environment; подходит для создания пользовательских приложений, в первую очередь — для настольных систем.

· Java EE — Java Enterprise Edition, представляет собой набор спецификаций для создания программного обеспечения уровня предприятия.

· Java ME — Java Micro Edition, создана для использования в устройствах, ограниченных по вычислительной мощности, например в мобильных телефонах, КПК, встроенных системах;

· JavaFX — технология, являющаяся следующим шагом в эволюции Java как Rich Client Platform; предназначена для создания графических интерфейсов корпоративных приложений и бизнеса.

· Java Card — технология предоставляет безопасную среду для приложений, работающих на смарт-картах и ​​других устройствах с очень ограниченным объёмом памяти и возможностями обработки.

1.2Java и Microsoft

Компанией Microsoft была разработана собственная реализация JVM (MSJVM), включавшаяся в состав различных операционных систем, начиная с Windows 98 (также входила в Internet Explorer от версии 3 и выше, что позволяло использовать MSJVM в ОС Windows 95 и Windows NT 4 после установки IE3+ на данные ОС).

MSJVM имела cущественные отличия от Sun Java, во многом ломающие основополагающую концепцию переносимости программ между разными платформами:

· отсутствие поддержки программного интерфейса вызова удаленных методов (RMI);

· отсутствие поддержки технологии JNI;

· наличие нестандартных расширений, таких как средства интеграции Java и DCOM, работающих только на платформе Windows.

Тесная интеграция Java с DCOM и Win32 ломала многоплатформенную суть языка. Впоследствии это явилось поводом для судебных исков со стороны Sun Microsystems к Microsoft. Суд принял сторону компании Sun Microsystems. В конечном счёте между двумя компаниями была достигнута договорённость о возможности продления срока официальной поддержки пользователей нестандартной Microsoft JVM до конца 2007 года, но не более.

В 2005 году компанией Microsoft для платформы .NET был представлен Java-подобный язык J#, не соответствующий официальной спецификации языка Java и исключённый впоследствии из стандартного инструментария разработчика Microsoft Visual Studio, начиная с Visual Studio 2008.

Java и Android

Язык Java активно используется для создания мобильных приложений под операционную систему Android. При этом программы компилируются в нестандартный байт-код, для использования их виртуальной машиной Dalvik. Для такой компиляции используется дополнительный инструмент, а именно Software Development Kit, который предназначен для x86-машины под операционной системой Linux. Его разработали представители компании Google.

Разработку приложений можно вести в среде Eclipse, используя при этом плагин — Android Development Tools (ADT) или в IntelliJ IDEA. Версия JDK при этом должна быть 5.0 или выше.

Следующие успешные проекты реализованы с привлечением Java (J2EE) технологий: Amazon, eBay, Yandex (неоднозначная информация в отношении Java), LinkedIn, Yahoo!.

1.4 Применение платформы java

Следующие компании в основном фокусируются на Java (J2EE) технологиях: SAP, IBM, Oracle. В частности, СУБД Oracle включает JVM как свою составную часть, обеспечивающую возможность непосредственного программирования СУБД на языке Java, включая, например, хранимые процедуры.

Производительность:

Программы, написанные на Java, имеют репутацию более медленных и занимающих больше оперативной памяти, чем написанные на языке Си. Тем не менее, скорость выполнения программ, написанных на языке Java, была существенно улучшена с выпуском в 1997—1998 годах так называемого JIT-компилятора в версии 1.1 в дополнение к другим особенностям языка для поддержки лучшего анализа кода (такие как внутренние классы, класс StringBuffer, упрощенные логические вычисления и т. д.). Кроме того была произведена оптимизация виртуальной машины Java — с 2000 года для этого используется виртуальная машина HotSpot. По состоянию на февраль 2012 года, код Java 7 приблизительно лишь в 1.8 раза медленнее кода, написанного на языке Cи.

Некоторые платформы предлагают аппаратную поддержку выполнения для Java. К примеру, микроконтроллеры выполняющие код Java на аппаратном обеспечении вместо программной JVM, а также основанные на ARM процессоры, которые поддерживают выполнение байткода Java через опцию Jazelle.

Основные возможности

· автоматическое управление памятью;

· расширенные возможности обработки исключительных ситуаций

· богатый набор средств фильтрации ввода/вывода;

· набор стандартных коллекций: массив, список, стек и т. п.;

· наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI);

· наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;

· встроенные в язык средства создания многопоточных приложений;

· унифицированный доступ к базам данных:

· на уровне отдельных SQL-запросов — на основе JDBC, SQLJ;

· на уровне концепции объектов, обладающих способностью к хранению в базе данных — на основе Java Data Objects и Java Persistence API;

· поддержка обобщений (начиная с версии 1.5);

· параллельное выполнение программ.

Пространство имён

Основная статья: Пространство имён (программирование)

Идея пространств имён воплощена в Java-пакетах.

Основные идеи

Примитивные типы

В языке Java только 8 примитивных (скалярных, простых) типов: boolean, byte, char, short, int, long, float, double. Существует также вспомогательный девятый примитивный тип — void, однако переменные и поля такого типа не могут быть объявлены в коде, а сам тип используется только для описания соответствующего ему класса, для использовании при рефлексии. Кроме того, с помощью класса Void можно узнать, является ли определённый метод типа

Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte, причем в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения Объектные переменные, объекты, ссылки и указатели - student2.ru , Объектные переменные, объекты, ссылки и указатели - student2.ru и «не число» (NaN). Для типа double они обозначаются Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; для типа float — так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже стандартизованы.

Тип Длина (в байтах) Диапазон или набор значений
boolean 1 в массивах, 4 в переменных[36] true, false
byte −128..127
char 0..216−1, или 0..65535
short −215..215−1, или −32768..32767
int −231..231−1, или −2147483648..2147483647
long −263..263−1, или примерно −9.2·1018..9.2·1018
float -(2-2−23)·2127..(2-2−23)·2127, или примерно −3.4·1038..3.4·1038, а также Объектные переменные, объекты, ссылки и указатели - student2.ru , Объектные переменные, объекты, ссылки и указатели - student2.ru , NaN
double -(2-2−52)·21023..(2-2−52)·21023, или примерно −1.8·10308..1.8·10308, а также Объектные переменные, объекты, ссылки и указатели - student2.ru , Объектные переменные, объекты, ссылки и указатели - student2.ru , NaN

Такая жёсткая стандартизация была необходима, чтобы сделать язык платформенно-независимым, что является одним из идеологических требований к Java. Тем не менее одна небольшая проблема с платформенной независимостью всё же осталась. Некоторые процессоры используют для промежуточного хранения результатов 10-байтовые регистры или другими способами улучшают точность вычислений. Для того, чтобы сделать Java максимально совместимой между разными системами, в ранних версиях любые способы повышения точности вычислений были запрещены. Однако это приводило к снижению быстродействия. Выяснилось, что ухудшение точности ради платформенной независимости мало кому нужно, тем более если за это приходится платить замедлением работы программ. После многочисленных протестов этот запрет отменили, но добавили ключевое слово strictfp, запрещающее повышение точности.

Преобразования при математических операциях

В языке Java действуют следующие правила:

1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.

2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.

3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.

4. Иначе оба операнда преобразуются к типу int.

Данный способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в C++.

Сборка мусора

В языке Java невозможно явное удаление объекта из памяти — вместо этого реализована сборка мусора. Традиционным приёмом, дающим сборщику мусора «намёк» на освобождение памяти, является присваивание переменной пустого значения null. Это, однако, не значит, что объект, заменённый значением null, будет непременно и немедленно удалён, но есть гарантия, что этот объект будет удалён именно в будущем. Данный приём всего лишь устраняет ссылку на объект, то есть отвязывает указатель от объекта в памяти. При этом следует учитывать, что объект не будет удален сборщиком мусора, пока на него указывает хотя бы одна ссылка из используемых переменных или объектов. Существуют также методы для инициации принудительной сборки мусора, но не гарантируется, что они будут вызваны исполняющей средой, и их не рекомендуется использовать для обычной работы.

Классы и функции

Java не является процедурным языком: любая функция может существовать только внутри класса. Это подчёркивает терминология языка Java, где нет понятий «функция» или «функция-член» (англ. member function), а только метод. В методы превратились и стандартные функции. Например, в Java нет функции sin(), а есть метод Math.sin() класса Math(содержащего, кроме sin(), методы cos(), exp(), sqrt(), abs() и многие другие). Конструкторы в Java не считаются методами. Деструкторов в Java не существует, а метод finalize() ни в коем случае нельзя считать аналогом деструктора.

Статические методы и поля

В Java (как и в C++) используются статические методы (англ. static method — в теории программирования их также называют методами класса), которые задаются при помощи ключевого слова static. Статические поля (переменные класса) имеют тот же смысл, что и в C++: каждое такое поле является собственностью класса, поэтому для доступа к статическим полям не требуется создавать экземпляры соответствующего класса.

Например, математические функции, реализованные в классе Math, представляют собой как раз статические методы данного класса. Поэтому можно писать

double x =Math.sin(1);

вместо

Math m =newMath();double x = m.sin(1);

Поскольку статические методы существуют независимо от объектов (экземпляров класса), они не имеют доступа к обычным (нестатическим) полям и методам данного класса. В частности, при реализации статического метода недопустимо использовать идентификатор this.

Завершённость (final)

Ключевое слово final (финальный) означает разные вещи при описании поля, метода или класса. Финальное поле класса инициализируется при описании, или в конструкторе класса (а статическое поле — в статическом блоке инициализации) и дальше его значение не может быть изменено. Значения локальных переменных, а также параметров метода, помеченных ключевым словом final, не могут быть изменены после присвоения. Но при этом, их значения могут использоваться внутри анонимных классов. Если статичное поле класса, или переменная проинициализированны константным выражением, они рассматриваются компилятором, как именованная константа; в таком случае их значение может быть использовано воператорах switch (для констант типа int), а также для условной компиляции (для констант типа boolean) при использовании с оператором if.

Метод класса, отмеченный словом final, не может быть переопределён при наследовании. Финальный класс не может иметь наследников вообще.

Абстрактность

В Java методы, не объявленные явно как static, final или private, являются виртуальными в терминологии C++: при вызове метода, по-разному определённого в базовом и наследующем классах, всегда производится проверка времени выполнения.

Абстрактным методом (модификатор abstract) в Java называется метод, для которого заданы параметры и тип возвращаемого значения, но не тело. Абстрактный метод определяется в классах-наследниках. В C++ то же самое называется чистой виртуальной функцией (pure). Для того чтобы в классе можно было описывать абстрактные методы, сам класс тоже должен быть описан как абстрактный. Объекты абстрактного класса создавать нельзя.

Интерфейсы

Высшей степенью абстрактности в Java является интерфейс (interface). Все методы интерфейса абстрактны: описатель abstract даже не требуется. Интерфейс в Java не считается классом, хотя по сути является полностью абстрактным классом. Класс может наследовать/расширять (extends) другой класс или реализовывать (implements) интерфейс. Кроме того, интерфейс может наследовать/расширять другой интерфейс.

В Java класс не может наследовать более одного класса, зато может реализовывать сколько угодно интерфейсов. Множественное наследование интерфейсов не запрещено, то есть один интерфейс может наследоваться от нескольких.

Интерфейсы можно передавать методам как параметры, но нельзя создавать экземпляры интерфейсов.

Маркерные интерфейсы

В Java есть некоторые интерфейсы, которые не содержат методов для реализации, а специальным образом обрабатываются JVM. Это интерфейсы:

· java.lang.Cloneable

· java.io.Serializable

· java.rmi.Remote

Шаблоны в Java (generics)

Начиная с версии Java 5 в языке появился механизм обобщённого программирования — шаблоны, внешне близкие к шаблонам C++. С помощью специального синтаксиса в описании классов и методов можно указать параметры-типы, которые внутри описания могут использоваться в качестве типов полей, параметров и возвращаемых значений методов.

// Объявление обобщённого классаclass GenericClass<E>{ E getFirst(){ ... }voidadd(Eobj){ ... }} // Использование обобщённого класса в кодеGenericClass<String> var =new GenericClass<String>();var.add("qwerty");String p =var.getFirst();

Допускается обобщённое объявление классов, интерфейсов и методов. Кроме того, синтаксис поддерживает ограниченные объявления типов-параметров: указание в объявлении конструкции вида <T extends A & B & C...> требует, чтобы тип-параметр T реализовывал интерфейсы A, B, C и так далее, а конструкция <T super C> требует, чтобы тип-параметр T был типом C или одним из его предков.

В отличие от шаблонов C#, шаблоны Java не поддерживаются средой исполнения — компилятор просто создаёт байт-код, в котором никаких шаблонов уже нет. Реализация шаблонов в Java принципиально отличается от реализации аналогичных механизмов в C++: компилятор не порождает для каждого случая использования шаблона отдельный вариант класса или метода-шаблона, а просто создаёт одну реализацию байт-кода, содержащую необходимые проверки и преобразования типов. Это приводит к ряду ограничений использования шаблонов в программах на Java.

ANDROID

Android (Андро́ид) — операционная система для коммуникаторов, планшетных компьютеров, электронных книг, цифровых проигрывателей, наручных часов, нетбуков и смартбуков, очков Google и других устройств, основанная на ядре Linux и собственной реализации Java от Google. Изначально разрабатывалась компанией Android Inc., которую затем купила Google. Впоследствии Google инициировала создание альянса Open Handset Alliance (OHA), который сейчас занимается поддержкой и дальнейшим развитием платформы. Android позволяет создавать Java-приложения, управляющие устройством через разработанные Google библиотеки. Android Native Development Kit позволяет портировать (но не отлаживать) библиотеки и компоненты приложений, написанные на Си и других языках.

В 70,1 % смартфонов, проданных в четвёртом квартале 2012 года, была установлена операционная система Android

История

В июле 2005 года корпорация Google купила компанию Android Inc. 5 ноября 2007 года компания официально объявила о созданииOpen Handset Alliance (OHA) и анонсировала открытую мобильную платформу Android, а 12 ноября 2007 года альянс представил первую версию пакета для разработчиков Android «Early Look» SDK и эмулятор Android.

23 сентября 2008 года официально вышла первая версия операционной системы, а также первый полноценный пакет разработчика SDK 1.0, Release 1. С момента выхода первой версии платформы произошло несколько обновлений системы. Эти обновления, как правило, касаются исправления обнаруженных ошибок и добавления новой функциональности в систему.

В 2009 году было представлено целых четыре обновления платформы. Так, в феврале вышла версия 1.1 с исправлением различных ошибок. В апреле и сентябре вышли ещё два обновления — 1.5 «Cupcake» и 1.6 «Donut» соответственно. Обновление «Cupcake» привнесло существенные изменения: виртуальная клавиатура, воспроизведение и запись видео, браузер и другие. В «Donut» впервые появились поддержка различных разрешений и плотности экрана и сетей CDMA. В октябре того же года вышла версия операционной системы Android 2.0 «Eclair» с поддержкой нескольких аккаунтов Google, поддержкой браузером языкаHTML5 и других нововведений, а также после небольшого обновления в пределах версии «Eclair» (2.1) появились «живые обои», видоизменён экран блокировки.

В середине 2010 года Google представила Android версии 2.2 под наименованием «Froyo», а в конце 2010 года — Android 2.3 «Gingerbread». После обновления «Froyo» стало возможно использовать смартфон в качестве точки доступа, использовать традиционную блокировку смартфона цифровым или буквенно-цифровым паролем и другие изменения, а обновление «Gingerbread» привносит более детальный контроль над функциями «Вставка и Копирование», улучшение управления питанием и контроля за приложениями, поддержка нескольких камер на устройстве и т. д.

22 февраля 2011 года была официально представлена платформа Android 3.0 «Honeycomb», главная особенность которой — её планшетоориентированность.

Android 4.0 «Ice Cream Sandwich», вышедшая 19 октября 2011 года, — первая универсальная платформа, которая предназначена как для планшетов, так и для смартфонов.

2012 год принёс обновление операционной системы до версии под названием «Jelly Bean». Она была представлена в июне с порядковым номером 4.1, сменившая свой номер на 4.2 после небольшого обновления в конце октября.

1.8.2 Применение

Первым устройством, работающим под управлением Android, стал разработанный компанией HTC смартфон HTC Dream (официально выпущен сотовым оператором T-Mobile под названием T-Mobile G1), презентация которого состоялась 23 сентября 2008 года. Вскоре последовали многочисленные заявления других производителей смартфонов о намерении выпустить устройства на базе Android. В России первым Android-смартфоном поступившим в продажу (июль 2009 года) стал Highscreen PP5420. С выходом Android третьей версии (Honeycomb), ориентированной на планшеты, всё больше производителей стали объявлять и о выпуске планшетов на этой платформе. Также компания Google в сотрудничестве с разными гигантами мобильной индустрии выпускает собственные устройства в серии «Google Nexus». Именно эти устройства первыми получают обновления до новых версий.

Кроме смартфонов и планшетов, операционную систему Android устанавливают и на другие устройства. Так, в конце 2009 года появилась в продаже первая фоторамка, работающая на Android. В июне 2011 года итальянская компания Blue Sky анонсировала выпуск интеллектуальных наручных часов i’mWatch под управлением ОС Android. В августе 2012 года Nikon представила первую в мире фотокамеру, которая также работает на Android. В серии «Google Nexus» присутствуют не только смартфоны и планшеты, но и медиаплеерNexus Q, работающий на Android.

Кроме того, энтузиасты портировали Android на ряд известных устройств, среди которых, например, смартфоны на платформе Windows MobileHTC Touch Dual и HTC TyTN II, на которых Android был запущен в режиме эмуляции. Также было осуществлено полноценное портирование на такие устройства, как интернет-планшеты, работающие на Maemo — Nokia N810 и Nokia N900 (порт под названием Nitdroid) на смартфоны Nokia N9, работающий на платформе MeeGo, и HTC HD2, работающий на операционной системе Windows Mobile, на котором ОС Android можно запускать как с microSD-карты, так и с внутренней NAND-памяти. При этом установленная система имеет полную, ничем особо не ограниченную функциональность. Помимо этого есть удачный опыт установки Android на некоторые устройства Apple — iPhone, iPod Touch и iPad с помощью специальной программы под названием Openiboot, которая предназначена для запуска на данных устройствах разнообразных ОС, в том числе и Android. Появляются предварительные прошивки с ограниченной функциональностью на устройствах на операционной системе Bada. Компания Koolu не только занялась портированием Android на Neo FreeRunner, но и строила свой бизнес на продаже этих смартфонов с предустановленной мобильной платформой от Google. Первый официальный и общедоступный бета-релиз порта Android на Neo FreeRunner от Koolu состоялся в декабре 2008 года. Также Android портирован на архитектуру x86.

В октябре 2012 года исполнительный директор компании Ларри Пейдж сообщил о более 500 миллионов активированных смартфонов и планшетов на базе операционной системы Android и о ежедневной активации 1,3 миллиона устройств

Программное обеспечение:

Приложения под операционную систему Android являются программами в нестандартном байт-коде для виртуальной машины Dalvik, для которых был разработан формат установочных пакетов .apk. Для работы над приложениями доступно множество библиотек: Bionic (библиотека стандартных функций, несовместимая с libc); libc (стандартная системная библиотека языка Си); мультимедийные библиотеки на базе PacketVideo OpenCORE (поддерживают такие форматы, как MPEG4, H.264, MP3, AAC, AMR, JPG и PNG); SGL (движок д

Наши рекомендации