Обоснование выбора средств разработки
Для реализации поставленных задач был выбран следующий язык программирования и среда разработки соответственно: Java, Android Studio.
Android Studio— это интегрированная среда разработки (IDE) для работы с платформой Android, анонсированная 16 мая 2013 года на конференции Google I/O.
Android Studio, основанная на программном обеспечении IntelliJ IDEA от компании JetBrains, официальное средство разработки Android приложений. Данная среда разработки доступна для Windows, OS X и Linux. 17 мая 2017 на ежегодной конференции Google I/O, Google анонсировал язык Kotlin используемый в Android Studio официальным языком программирования для платформы Android в добавление к Java и С++. Новые функции появляются с каждой новой версией Android Studio. На данный момент доступны следующие функции:
· расширенный редактор макетов: WYSIWYG, способность работать с UI компонентами при помощи Drag-and-Drop, функция предпросмотра макета на нескольких конфигурациях экрана;
· сборка приложений, основанная на Gradle;
· различные виды сборок и генерация нескольких .apk файлов;
· рефакторинг кода;
· статический анализатор кода (Lint), позволяющий находить проблемы производительности, несовместимости версий и другое;
· встроенный ProGuard и утилита для подписывания приложений;
· шаблоны основных макетов и компонентов Android;
· поддержка разработки приложений для Android Wear и Android TV;
· встроенная поддержка Google Cloud Platform, которая включает в себя интеграцию с сервисами Google Cloud Messaging и App Engine;
· Android Studio 2.1 поддерживает Android N Preview SDK, а это значит, что разработчики смогут начать работу по созданию приложения для новой программной платформы;
· новая версия Android Studio 2.1 способна работать с обновленным компилятором Jack, а также получила улучшенную поддержку Java 8 и усовершенствованную функцию Instant Run;
· platform-tools 23.1.0 для Linux без объявления стала исключительно 64-разрядной, даже при попытке установить 32-разрядную версию. Иными словами Android Studio больше НЕ работает (выдаёт неустранимые ошибки) в 32-разрядных версиях Linux;
· в Android Studio 3.0 будут по стандарту включены инструменты языка Kotlin основанные на JetBrains IDE;
Java — сильно типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, с помощью виртуальной Java-машины.
Программы на Java транслируются в байт-код Java, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.
Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание.
Основные модули программного средства
Основные классы программного средства:
· RealmHelper – класс, ответственный за работу с БД;
· RepositoryImpl – класс, реализующий паттерн «репозиторий», ответственнен за хранение и получение данных;
· SupportLangsGetter – класс, ответственный за получение списка поддерживаемых языков;
· TranslationGetter – класс, ответственный за получение перевода;
· DictionaryApi – интерфейс для работы с веб-сервером Яндекс Словаря;
· TranslateApi – интерфейс для работы с веб-сервером Яндекс Переводчика.
Класс RealmHelper
Этот класс отвечает за работу с базой данных Realm, а именно за запись и чтение истории и избранного и кэширование списка поддерживаемых языков.
В таблице 1 представлены основные методы класса RealmHelper.
Таблица 1 – «Методы класса RealmHelper»
Название | Входные параметры | Описание метода | Возвращаемое значение |
clearHistory | - | Очистка истории | Observable<Boolean> |
readAllSupportLanguages | - | Получение списка всех поддерживаемых языков | List<Language> |
readAllSupportLanguages | - | Получение списка всех поддерживаемых языков | List<Language> |
writeLanguageResponseToRealm | Language language | Запись языка в БД | Void |
writeTranslationToRealm | Translation translation | Запись перевода в БД | Observable<Boolean> |
clearFavorites | - | Очистка избранного | Observable<Boolean> |
getHistory | - | Получение списка истории | List<Translation> |
getFavorites | - | Получение списка избранного | List<Translation> |
Класс RepositoryImpl
Этот класс реализуюет паттерн «репозиторий», ответственнен за хранение и получение данных;
Методы класса RepositoryImpl представлены в таблице 2.
Таблица 2 – «Методы класса RepositoryImpl»
Название | Входные параметры | Описание метода | Возвращаемое значение |
saveTranslation | - | Сохранить перевод | Observable<Boolean> |
deleteFavorites | - | Удалить избранное | Observable<Boolean> |
deleteHistory | - | Удалить историю | Observable<Boolean> |
getFavorites | - | Получить избранное | List<Translation> |
getSupportLanguages | String ui | Возвращает наблюдателя, параметризированного списком поддерживаемых языков | Observable<List<Language>> |
translateWithoutDict | String text, String lang | Возвращает наблюдателя, параметризированного неподробным переводом | Observable<Translation> |
translate | String text, String ui | Возвращает наблюдателя, параметризированного подробным переводом | Observable<Translation> |
Класс SupportLangsGetter
Данный класс отвечает за получение поддерживаемых языков.
Методы класса SupportLangsGetter представлены в таблице 3.
Таблица 3 – «Методы класса SupportLangsGetter»
Название | Входные параметры | Описание метода | Возвращаемое значение |
getLanguages | - | Получение списка поддерживаемы языков | Observable<List<Language>> |
Класс TranslationGetter
Данный класс отвечает за получение перевода.
Методы класса TranslationGetter представлены в таблице 4.
Таблица 4 – «Методы класса TranslationGetter»
Название | Входные параметры | Описание метода | Возвращаемое значение |
translate | Translation translation | Получение перевода | Observable<Translation> |
getHistory | - | Получить историю | List<Translation> |
Продолжение таблицы 4
getFavorites | - | Получить избранное | List<Translation> |
deleteHistory | - | Удалить историю | void |
deleteFavorites | - | Удалить избранное | void |
saveTranslation | Translation translation | Сохранить перевод | void |
Класс DictionaryApi
Интерфейс для работы с веб-сервером Яндекс Словаря.
Методы класса DictionaryApi представлены в таблице 5.
Таблица 5 – «Методы класса DictionaryApi»
Название | Входные параметры | Описание метода | Возвращаемое значение |
getDictionary | String key, String lang, String text, String ui | Запрос на получение подробной словарной статьи | Observable<DictionaryResponse> |
Класс TranslateApi
Интерфейс для работы с веб-сервером Яндекс Переводчика
Методы класса TranslateApi представлены в таблице 5.
Таблица 6 – «Методы класса TrasnlateApi»
Название | Входные параметры | Описание метода | Возвращаемое значение |
getSupportLanguages | String key, String ui | Запрос на получение списка поддерживаемых языков | Observable<SupportLanguageResponse> |
translate | String key, String text, String lang | Запрос на получение перевода | Observable<TranslationResponse> |
UML-диаграмма классов
На рисунке 1 и 2 изображена UML-диаграмма классов, которая отображает структуру программного средства, методы основных классов, рабочие сигнатуры и связи между объектами классов.
Рисунок 1 – UML-диаграмма классов
Рисунок 2 – UML-диаграмма классов