Мобильное приложение для оценки эффективности мерчендайзинга торговой компании

Системное и функциональное проектирование. Описание взаимодействия с сервером, классов системных компонентов. Обзор функциональных классов из пакетов helpers, dialogs и networking. Разработка программных модулей. Технико-экономическое обоснование проекта.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 15.06.2014
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

- boolean on Editor Action (Text View text View, int i, Key Event key Event) - метод интерфейса Text Watcher. Данный метод обрабатывает нажатия специальных кнопок клавиатуры, например, кнопки «Далее».

- void report Error (int message Id) - метод, осуществляющий отображения диалога с информационным сообщением. Сообщение хранится в ресурсах приложения, в то время как метод принимает идентификатор ресурса - message Id.

- void show Redirect Dialog () - метод, осуществляющий отображения диалога для перенаправления на страницу настроек.

- void restore Properties () - метод, осуществляющий восстановление ранее введённых данных.

- void save Preferences () - метод, осуществляющий сохранение текущего состояния активити.

- void on Click (Dialog Interface dialog Interface, int i) - метод интерфейса Dialog Interface. On Click Listener, вызываемый при нажатии на кнопку диалогового окна.

Класс SettingsActivity

Данный класс ассоциирован с активити настроек и служит для отображения и работы с опциями приложения. Класс содержит единственный метод void on Create (Bundle saved Instance State), описанный выше. В данном методе создаётся фрагмент Settings Fragment, который заполняет всю полезную площадь активити.

Фрагмент Settings Fragment, в свою очередь, является наследником специального класса Preference Fragment, предоставляющего удобные средства для работы с настройками приложения. Класс Settings Fragment также содержит единственный метод void on Create (Bundle saved Instance State), сходный по назначению с вышеописанным методом активити. В данном методе фрагмент создаёт и размещает элементы управления на основе специального XML-файла, описывающего разметку. Помимо этого, здесь же инициализируются обработчики событий для визуальных элементов, представляющих ту или иную опцию.

Класс Camera Activity

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

Константы:

- PROPERTY_SIZE_INDEX - константа-ключ для доступа к опции размера изображения.

- PROPERTY_FLASH - константа-ключ для доступа к опции вспышки.

Поля:

- camera - поле типа Camera, содержащее ссылку на объект-камеру.

- cameraId - поле типа Camera, содержащее идентификатор камеры.

- Bottom Panel - поле типа Linear Layout, содержащее ссылку на панель с кнопками выбора снимка.

- Bottom Panel Hidden use Auto Focus - флаг типа boolean, показывающий состояние панели bottom Panel.

- Camera Button Layout - поле типа Relative Layout, содержащее ссылку на панель-контейнер для кнопки снимка.

- Camera Button - поле типа Button, содержащее ссылку на кнопку снимка.

- Camera IconImage - поле типа Image View, содержащее ссылку на иконку кнопки снимка.

- Orientation Observer - поле типа Orientation Event Listener, содержащее ссылку на обозреватель смены ориентации дисплея.

- Icon Orientation - поле типа int, содержащее текущую ориентацию дисплея.

- Picture Sizes - поле, содержащее массив элементов типа Camera. Size, соответствующих трём (или менее) минимальным разрешениям камеры телефона.

- Picture Size Index - поле типа int, содержащее позицию текущего разрешения снимка в списке pictureSizes.

- preferences - поле типа Shared Preferences, содержащее ссылку на модуль настроек.

- Use Auto Focus - флаг типа boolean, указывающий на возможность использования автофокуса при съёмке.

- Use Flash - флаг типа boolean, указывающий на необходимость использования вспышки при съёмке.

- Has Flash - флаг типа boolean, указывающий на наличие вспышки у телефона.

- Action Bar - поле типа ActionBar, содержащее ссылку на панель меню.

- Settings Button - поле типа Button, содержащее ссылку на кнопку настройки разрешения снимка.

- Settings Image View - поле типа Image View, содержащее ссылку на иконку кнопки настройки разрешения снимка.

- Log Out Button - поле типа Button, содержащее ссылку на кнопку выхода из аккаунта.

- Log OutImage View - поле типа Image View, содержащее ссылку на иконку кнопки выхода из аккаунта.

- Flash Button - поле типа Button, содержащее ссылку на кнопку настройки вспышки.

- Flash Image View - поле типа Image View, содержащее ссылку на иконку кнопки настройки вспышки.

- Popup Window - поле типа Popup Window, содержащее ссылку на всплывающее окно со списком доступных разрешений снимка.

- Popup Window Center - поле типа int, содержащее горизонтальную координату центра всплывающего окна popupWindow.

- Surface Holder - поле типа Surface Holder, содержащее ссылку на специальный объект для взаимодействия с визуальным компонентом для отображения потокового видео.

Методы:

- int find Back Facing Camera () - метод, осуществляющий поиск идентификатора основной камеры телефона.

- Camera try Get Back Camera () - метод, возвращающий объект-камеру, при условии её наличия.

- void close Camera () - метод, высвобождающий объект-камеру.

- int get Rotation Value () - метод, осуществляющий

- boolean get Flash Availability () - метод, вычисляющий угол поворота камеры.

- Camera. Size[] get Picture Sizes (Camera camera) - метод, возвращающий список из трёх или менее минимальных разрешений камеры.

- void set Picture Size (int index) - метод, устанавливающий одно из разрешений из списка picture Sizes.

- void set Flash Mode(boolean use Flash) - метод, включающий и выключающий вспышку.

- void set Up Camera Parameters () - метод, осуществляющий установку необходимых для съёмки параметров камеры.

- void reset Camera Preview (Surface Holder holder) - метод, осуществляющий переинициализацию визуального компонента для вывода видеопотока с камеры.

- void onItem Click (Adapter View<?> adapter View, View view, int i, long l) - метод интерфейса List View. On Item Click Listener, осуществляющий обработку кликов по элементам списка List View.

- void navigate To Login Activity () - метод, осуществляющий переход к активити авторизации.

- void navigate To Data Activity () - метод, осуществляющий переход к активити метаданных.

- void surface Created (Surface Holder surface Holder) - метод интерфейса Surface Holder. Callback, вызываемый при изменении размеров элемента управления Surface View.

- void surface Changed (Surface Holder surface Holder, int i, int i2, int i3) - метод интерфейса Surface Holder. Callback, вызываемый при уничтожении элемента управления Surface View.

- void surface Destroyed (Surface Holder surface Holder) - метод интерфейса Surface Holder. Callback, вызываемый при создании элемента управления Surface View.

- void on Picture Taken (byte[] bytes, Camera camera) - метод интерфейса Camera. Picture Callback, вызываемый при получении снимка.

- void on Auto Focus (boolean b, Camera camera) - метод интерфейса Camera. Auto Focus Callback, вызываемый при срабатывании автофокуса.

- byte[] correctImage(byte[] data) - метод, преобразующий полученный с камеры снимок к формату JPEG.

- Bitmap rotate Image (Bitmap bitmap, int degree) - метод, осуществляющий поворот фотографии в соответствии с ориентацией дисплея.

- void swap Elements Visibility() - метод, осуществляющий смену элементов управления между режимами съёмки и сохранения снимка.

- void rotate Popup (int to Orientation) - метод, осуществляющий поворот всплывающего окна po pupWindow.

- void try Start Rotation (View view, int toOrientation) - метод, осуществляющий поворот одной иконки.

- void rotateImages (int to Orientation) - метод, осуществляющий поворот всех иконок.

- Rotate Animation get Animation (int to Orientation) - метод, возвращающий объект-анимацию для поворота иконок.

- void update Flash Icon() - метод, осуществляющий отображение корректной иконки, отображающей режим вспышки.

- void set Up Orientation Event Listener() - метод, возвращающий объект-слушатель orientation Observer.

- Popup Window set Up Popup Window() - метод, создающий дочерние элементы управления для всплывающего окна popup Window.

- Array List<String> get Human Readable Headers() - метод, преобразующий набор разрешений камеры к понятному для человека виду.

- void set Popup List Content (List View list, final Array List <String> human Readable Headers) - метод, заполняющий значениями всплывающее окно popup Window.

- Popup Window get Popup Window (View view, int width, int height) - метод, создающий всплывающее окно popup Window.

Класс Data Activity

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

Константы:

- ACTION_CODE_UPLOAD - идентификатор интента, ассоциированного с действием загрузки фото.

- ACTION_CODE_SAVE - идентификатор интента, ассоциированного с действием отправки метаданных и сохранения фото.

- ACTION_CODE_LOCATION - идентификатор интента, ассоциированного с действием получения координат.

- CITIES_LOADER - идентификатор загрузчика списка городов.

- STREETS_LOADER - идентификатор загрузчика списка улиц.

- STORES_LOADER - идентификатор загрузчика списка магазинов.

- CATEGORIES_LOADER - идентификатор загрузчика списка категорий.

- REPORT_DIALOG_TAG - тег диалогового фрагмента, используемого для отображения информации об ошибках.

- PROGRESS_DIALOG_TAG - тег диалогового фрагмента, используемого для предоставления шанса повторного сохранения при ошибке.

- TRY_AGAIN_DIALOG_TAG - тег диалогового фрагмента, используемого для отображения информации об ошибках.

- SKIP_LOCATION_DIALOG_TAG - тег диалогового фрагмента, используемого для предоставления возможности пропустить этап получения координат.

Поля:

- Loader Manager - поле типа Loader Manager, содержащее ссылку на менеджер загрузчиков.

- View Mapping - поле, содержащее массив идентификаторов типа int, задающих объекты для отображения данных в списке.

- sendItem - поле типа Menu Item, содержащее ссылку на пункт меню для отправки снимка.

- Send Button - поле типа Button, содержащее ссылку на кнопку отправки снимка.

- Progress Dialog - поле типа Progress Dialog Fragment, содержащее ссылку на диалоговый фрагмент, используемый для отображения прогресса выполнения задачи.

- Report Dialog - поле типа Report Dialog Fragment, содержащее ссылку на диалоговый фрагмент, используемый для отображения информации об ошибках.

- Try Again Dialog - поле типа Two Option Dialog Fragment, содержащее ссылку на диалоговый фрагмент, используемый для предоставления возможности пропустить этап получения координат.

- Skip Location Dialog - поле типа Two Option Dialog Fragment, содержащее ссылку на диалоговый фрагмент, используемый для предоставления возможности пропустить этап получения координат.

- Has Problem Check Box - поле типа Check Box, содержащее ссылку на флажо, показывающий наличие проблем.

- Comments Edit Text - поле типа Edit Text, содержащее ссылку на тестовое поле для ввода комментария.

- Last FileId - поле типа String, содержащее идентификатор последнего загруженного снимка.

- Successfully Saved - флаг типа boolean, указывающий на успешное сохранение снимка.

- preferences - поле типа Shared Preferences, содержащее ссылку на модуль настроек.

Методы:

- void try Begin Upload() - метод, осуществляющий валидацию пользовательского ввода перед операцией авторизации, а также отображающий результаты валидации.

- void begin Upload() - метод, запускающий процесс асинхронной загрузки фото. В качестве завершающего метода используется on Activity Result.

- void begin Get Location() - метод, запускающий процесс асинхронного получения координат. В качестве завершающего метода используется on Activity Result.

- void begin Save (Location location) - метод, запускающий процесс асинхронного сохранения фото.

- void end Save()- метод, вызываемый при окончании сохранения.

- void setup Spinners() - метод, инициализацию выпадающих списков.

- String get Spinner Value (String valueName) - метод, позволяющий получить текущее значение из выпадающего списка по имени колонки из таблицы БД, которая ассоциирована с определённым списком.

- int getSpinner ValueId (Spinner spinner) - метод, позволяющий получить первичный ключ записи БД, значение которой выбрано в выпадающем списке.

- void update Store Adapter() - метод, осуществляющий инициализацию выпадающего списка магазинов.

- void update Street Adapter() - метод, осуществляющий инициализацию выпадающего списка улиц.

- void update City Adapter() - метод, осуществляющий инициализацию выпадающего списка городов.

- void update Categories Adapter() - метод, осуществляющий инициализацию выпадающего списка категорий.

- void restore Spinner (Spinner spinner, Cursor cursor) - метод, разблокирующий выпадающий список для ввода.

- void restore Selection (String field Name) - метод, восстанавливающий последнее выбранное значение для выпадающего списка.

- Loader <Cursor> on Create Loader (int i, Bundle bundle) - метод интерфейса Loader Manager. Loader Callbacks <Cursor>, осуществляющий инициализацию загрузчков.

- void on Load Finished (Loader<Cursor> cursor Loader, Cursor cursor) - метод интерфейса Loader Manager. Loader Callbacks<Cursor>, вызываемый при готовности загрузчика отдать данных.

- void on Loader Reset (Loader<Cursor> cursor Loader) - метод интерфейса Loader Manager. Loader Callbacks <Cursor>, вызываемый при сбросе загрузчика.

- Progress Dialog Fragment get Pro gress Dialog() - метод, возвращающий диалоговый фрагмент, используемый для отображения прогресса выполнения задачи.

- Report Dialog Fragment set Report Dialog (int title Id) - метод, возвращающий диалоговый фрагмент, используемый для отображения информации об ошибках с заданным заголовком.

- Report Dialog Fragment set Report Dialog (int titleId, int messageId) - метод, возвращающий диалоговый фрагмент, используемый для отображения информации об ошибках с заданным заголовком и телом сообщения.

- Two Option Dialog Fragment get Try Again Dialog()- метод, возвращающий диалоговый фрагмент, используемый для предоставления возможности пропустить этап получения координат.

- Two Option Dialog Fragment get Skip Location Dialog()- метод, возвращающий диалоговый фрагмент, используемый для предоставления возможности пропустить этап получения координат.

Класс WorkerService

Данный класс является наследником класса Inent Service и представляет собой сервис фоновой обработки операций со встроенной очередью обработки сообщений. Класс содержит набор строковых констант вида «ACTION _XXX», используемых со схожей целью, что и аналогичные целочисленные константы в классах-активити. Однако, если целочисленные константы используются для идентификации необходимого результата, то строковые константы используются для идентификации вызываемого метода.

Константы:

- ACTION_LOGIN - идентификатор интента, запускающего операцию авторизации.

- ACTION_UPLOAD_PICTURE - идентификатор интента, запускающего операцию загрузки фото.

- ACTION_SAVE_PICTURE - идентификатор интента, запускающего операцию сохранения фото.

- PENDING_INTENT_FIELD - ключ по которому доступен ожидающий интент для обратной связи с активити-инициатором.

- SERVICE_ERROR - код ошибки, означающий ошибку сервиса. Может быть передан в вызывающую активити в метод on Activity Result в качестве параметра result Code.

- UNKNOWN_HOST - код ошибки, означающий неверный адрес сервера. Может быть передан в вызывающую активити в качестве данных внутри интента.

- HOST_NOT_SPECIFIED - код ошибки, означающий отсутствие связи. Может быть передан в вызывающую активити в качестве данных внутри интента.

- IO_ERROR - код ошибки, означающий ошибку ввода/вывода. Может быть передан в вызывающую активити в качестве данных внутри интента.

- SERVICE_UPLOADING - идентификатор нотификации в строке состояния при переходе сервиса в привилегированный режим.

Поля:

- Pending Intent - поле типа IWeb Client, содержащее ссылку на ожидающий интент для обратной связи с активити-инициатором.

- Web Client - поле типа Pending Intent, содержащее ссылку на веб-клиент.

- Host Name - поле типа String, содержащее имя сервера.

Методы:

- void on Create() - метод вызываемый после создание сервиса. Аналогичен конструктору, однако в отличие от него может общаться ко всем системным компонентам.

- void on Handle Intent (Intent intent) - основной метод сервиса. Извлекает очередной интент из очереди сообщений и передаёт его на обработку сервису. В зависимости от идентификатора интента будет вызван один из описанных далее методов.

- void logIn (Intent intent) - метод, осуществляющий операцию авторизации, а также, в случае успеха, запускающий обновление кэша.

- void upload Picture() - метод, осуществляющий загрузку фото.

- void savePicture (Intent intent) - метод, осуществляющий сохранение фото.

- void send Pending (Intent intent) - метод, осуществляющий отправку ожидающего интента для обратной связи с активити-инициатором.

- void repor tError(String message) - метод, осуществляющий отправку ожидающего интента с заданным сообщением об ошибке.

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

3.3 Описание классов взаимодействия с данными

Одним из требований к реализуемому клиенту была минимизация используемого траффика. Для выполнения этого требования было решено реализовать кеширование данных на стороне клиента. Android SDK предоставляет возможность упрощённого создания и сопровождения базы данных, поэтому довольно удобно использовать простые реляционные структуры для сохранения информации на клиенте. В реализуемом дипломном проекте за кэширование данных отвечают классы из пакета data.

Класс Db Helper

Данный класс унаследован от абстрактного класса SQ Lite Open Helper, который предоставляет простой и удобный интерфейс для создания баз даны в ОС Android.

Константы:

- DB_NAME - константа, содержащая имя файла базы данных.

- STORES_TABLE - константа, содержащая имя таблицы магазинов.

- CATEGORIES_TABLE - константа, содержащая имя таблицы категорий.

- DB_ID_FIELD - константа, содержащая имя служебного столбца с первичными ключами.

Статические поля:

- instance - поле типа, Db Helper содержащее синглтон-объект данного класса.

Методы:

- Db Helper getInstance (Context context) - статический метод доступа к синглтон-объекту.

- void on Create (SQ Lite Database sq Lite Database) - метод базового класса SQLite Open Helper, вызываемый при создании базы данных. Объект sq Lite Database представляет собой абстракцию БД, и позволяет выполнять инициализирующие SQL-запросы.

- void on Upgrade (SQ Lite Database db, int i, int i2) - метод базового класса SQ Lite Open Helper, вызываемый при увеличении версии БД. В данном проекте не используется.

- void recreate Tables() - метод, позволяющий удалить текущие таблицы и создать новые. Используется для очистки кэша.

Класс Data Provider

Данный класс представляет собой локальную альтернативу полноценного поставщика данных. Класс предоставляет доступ к записям из таблиц БД в виде специальных объектов типа Cursor, позволяющих осуществлять итерацию по некоторому набору данных, являющимся результатом ассоциированного с курсором SQL-запроса.

Константы:

- STORES_URI - константа типа Uri, содержащая URI таблицы магазинов.

- CATEGORIES_URI - константа типа Uri, содержащая URI таблицы категорий.

Поля:

- instance - поле типа, Data Provider содержащее синглтон-объект данного класса.

- context - поле типа, Context содержащее ссылку на контекст приложения, необходимы для операций с БД.

Методы:

- Cursor get Categories() - метод, возвращающий объект типа Cursor для итерации по категориям.

- Cursor get Streets (String city) - метод, возвращающий объект типа Cursor для итерации по всем улицам выбранного в параметре city города.

- Cursor getStores (String city, String street) - метод, возвращающий объект типа Cursor для итерации по всем магазинам, выбранных в параметре city и street города и улицы.

- void update Stores (List <StoreEntity> new Stores) - метод, осуществляющий обновление информации в таблице магазинов данными из списка newStores.

- void update Categories (List <DbEntity> new Categories) - метод, осуществляющий обновление информации в таблице категорий данными из списка new Categories.

- int get Last Version (String table Name) - метод, позволяющий получить последнюю версию указанной в параметре table Name таблицы.

- int get Last Stores Version() - метод, позволяющий получить последнюю версию таблицы магазинов.

- int get Last Categories Version() - метод, позволяющий получить последнюю версию таблицы категорий.

Описание вложенного пакета loaders

Данный пакет содержит в себе реализации классов-загрузчиков. Наиболее сложным элементом пакета является абстрактный класс Simple Cursor Loader, от которого унаследованы все используемые в проекте загрузчики. Он представляет собой типовую реализацию класса-загрузчика, предназначенного для работы с локальными объектами доступа к данным, наподобие класса Data Provider. Simple Cursor Loader по своей сути является слегка модифицированной версией класса Cursor Loader, являющегося частью Android SDK и ориентированного на работу с поставщиками данных. Поскольку задача реализации загрузчика, ориентированного на работу с локальной заменой поставщиков данных, является весьма распространённой, используемую в данном проекте реализацию Simple Cursor Loader можно считать типовой. Её описание можно найти, например, в литературном источнике [8].

Остальные классы-загрузчики являются наследниками класса Simple Cursor Loader и переопределяют метод Cursor get Cursor(), возвращающий курсор с актуальным содержимым, который, в свою очередь, возвращает один из методов класса доступа к данным - Data Provider. Помимо этого, некоторые классы-загрузчики содержат набор методов-установщиков для задания дополнительных данных ассоциированных с курсорами SQL-запросов, например, названия городов и/или улиц.

2.4 Описание классов пакета dialogs

Данный пакет содержит определения классов, так или иначе наследуемых от класса Dialog Fragment и служащих для создания диалоговых окон. Как и в случае с пакетом loaders, данный пакет содержит базовый абстрактный класс Base Dialog Fragment, непосредственно унаследованный от класса Dialog Fragment, в то время как конкретные реализации диалоговых фрагментов унаследованы от класса Base Dialog Fragment.

Описание класса Base Dialog Fragment

Данный класс является базовым для всех остальных классов диалоговых фрагментов. Он унаследован от класса Dialog Fragment, оставляя метод on Create Dialog, непосредственно создающий диалоговое окно, для переопределения в классах потомках.

Поля:

- titleId - пол типа int, содержащее идентификатор строкового ресурса, используемого в качестве заголовка диалогового окна.

Методы:

- int get TitleId() - метод возвращающий текущее значение поля titleId.

- void set TitleId (int titleId) - метод позволяющий установить новое значения для поля titleId.

- void on Destroy View() - метод, определённый в базовом классе DialogFragment. Здесь переопределяется для обхода ошибки в Android SDK.

- Dialog on Create Dialog (Bundle saved Instance State) - метод, определённый в базовом классе Dialog Fragment и являющийся в данном классе абстрактным, однако переопределённый во всех классах-потомках. Используется для создания диалогового окна, представленного наследником класса Dialog.

Описание класса Progress Dialog Fragment

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

Поля:

- messageId - пол типа int, содержащее идентификатор строкового ресурса, используемого в качестве текста сообщения.

Методы:

- int get MessageId () - метод возвращающий текущее значение поля messageId.

- void set MessageId (int messageId) - метод позволяющий установить новое значения для поля messageId.

Описание класса Redirect To Settings Dialog Fragment

Наиболее простой класс диалогового фрагмента. Схож с описанным ниже классом Report Dialog Fragment, однако использует строго определённые тексты заголовка и тела сообщения, а также не может быть закрыт с помощью кнопки «Назад».

Описание класса Report Dialog Fragment

Данный класс представляет собой диалоговое окно сообщения об ошибке с произвольным текстом заголовка и тела сообщения, а также единственной кнопкой «ОК». Важным моментом является то, что активити, использующая данный фрагмент должна реализовывать интерфейс Dialog Interface. On Click Listener для обработки нажатий по единственной кнопке диалога.

Поля:

- messageId - пол типа int, содержащее идентификатор строкового ресурса, используемого в качестве текста сообщения.

Методы:

- int get MessageId () - метод возвращающий текущее значение поля messageId.

- void set MessageId (int messageId) - метод позволяющий установить новое значения для поля messageId.

- void on Attach(Activity activity) - метод, определённый в базовом классе Dialog Fragment. Вызывается в момент ассоциации фрагмента с определённой активити, но до создания визуальных элементов. Используется для проверки реализации активити интерфейса Dialog Interface. On Click Listener.

Описание класса Report Dialog Fragment

Данный класс представляет собой диалоговое окно сообщения об ошибке с неизменяемым текстом заголовка и тела сообщения, а также двумя кнопками, содержащими произвольный, однако неизменяемый после создания диалога, текст. Все параметры задаются в конструкторе при создании фрагмента. Активити, использующая данный фрагмент, также, как и в случае с классом Report Dialog Fragment, должна реализовывать интерфейс Dialog Interface. On Click Listener для обработки нажатий кнопок диалога.

Поля:

- message Id - пол типа int, содержащее идентификатор строкового ресурса, используемого в качестве текста сообщения.

- Positive Text Id - пол типа int, содержащее идентификатор строкового ресурса, используемого в качестве текста на позитивной кнопке диалога.

- Negative Text Id - пол типа int, содержащее идентификатор строкового ресурса, используемого в качестве текста на негативной кнопке диалога.

Методы: void on Attach(Activity activity) - метод, определённый в базовом классе Dialog Fragment. Описан в классе Report Dialog Fragment и служащий для аналогичной цели.

3.5 Обзор функциональных классов из пакета helpers

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

Описание класса Accessibility Helper

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

- boolean is Networking Enabled (Context context) - метод, показывающий наличие интернет-соединения.

- boolean is Gps Enabled(Context context) - метод, показывающий доступность провайдеров GPS-координат.

- Alert Dialog get Dialog (final Context context, int message Id, final String action) - вспомогательный метод для создания диалога с произвольным сообщением, перенаправляющего на определённую страницу системных настроек.

- Alert Dialog get Gps Dialog (final Context context) - метод, возвращающий диалог, перенаправляющий на страницу настроек интернет-соединения.

- Alert Dialog get Network Dialog (final Context context) - метод, возвращающий диалог, перенаправляющий на страницу настроек GPS.

Описание класса Authorization Helper

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

Константы:

- USER_ROLE - строковая константа, содержащая значение роли «пользователь».

- MERCHANDISER_ROLE - строковая константа, содержащая значение роли «мерчендайзер».

- AUTHORIZATION_ERROR - строковая константа-идентификатор, указывающая на ошибку авторизации.

Методы:

- boolean isValidRole(String role) - метод, показывающий наличие доступа к приложением пользователю с указанной в параметре role ролью.

Описание класса Image Store

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

Статические поля:

- image - фото в виде массива байт.

Статические методы:

- byte[] get Image() - возвращает изображение, сохранённое в поле image.

- void store Image(byte[] image) - сохраняет изображение, в поле image.

- void clean() - очищает поле image.

Описание класса Json Helper

Данный класс служит для упрощённого создания JSON объектов и используется классами взаимодействия с сетью. В отличие от остальных классов-помощников, данный класс обладает набором не только статическими методами. Класс имеет набор методов add с различной сигнатурой, являющимися полными аналогами методов put класса JSON Object, однако маскирующих неактуальное в данном проекте исключение JSON Exception.

Поля:

- json - поле типа JSONO bject, представляющее собой редактируемый JSON-объект.

Методы:

- Json Reader get Reader For Response (Http Response response) - статический метод, позволяющий получить потоковый JSON парсер типа Json Reader, ассоциированный с сетевым потоком из HTTP-ответа, переданного в качестве параметра response.

- String Entity to String Entity() - метод, преобразующий получить редактируемый JSON-объект, хранящийся в поле json к объекту типа String Entity, который можно использовать в качестве тела HTTP-запроса.

Описание класса Location Helper

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

Константы:

- LATITUDE_FIELD - константа-ключ, по которому доступна широта в интенте с геоданными.

- LONGITUDE_FIELD - константа-ключ, по которому доступна долгота в интенте с геоданными.

- ACCURACY_FIELD - константа-ключ, по которому доступна точность в интенте с геоданными.

- TIMEOUT - таймаут в милисекундах, после которого выдаётся ошибка о невозможности получения координат.

Поля:

- Error Reported - флаг типа boolean, предотвращающий повторную отправку интента с сообщением об ошибке.

Методы:

- void report Error(Context context, Pending Intent pending Intent) - метод осуществляющий отправку интента с сообщением об ошибке.

- void get Location (final Context context, final Pending Intent pending Intent) - метод, позволяющий компоненту context асинхронно получить геоданные с помощью отложенного интента pending Intent.

3.6 Описание классов пакета networking

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

Классы, представляющие собой структуры данных реализуют ряд свойств в виде набора get- и set- методов для получения полей класса и установки их новых значений. Важной особенностью всех таких классов, является реализация интерфейса Parcelable, необходимого для пересылки экземпляров данных классов вместе с интентами.

Классы веб-клиенты реализуют интерфейс IWeb Client, описывающие программные эквиваленты веб-методов серверного API. При этом существует два класса веб-клиента: рабочий Web Client и тестовый Fаke Web Client, используемый для эмуляции работы сервера.

Описание класса Web Client

Данный класс представляет собой непосредственно клиент, реализующий методы веб-интерфейса, предоставляемого сервером и осуществляющий обмен данный по сети Интернет. Класс объявляет набор констант, названных по шаблону API_*, которые представляют собой названия веб-методов.

Поля:

- client - поле типа Default http Client, представляющее собой объект, занимающийся коммуникацией по протоколу HTTP.

- Auth Header - строковое поле, содержащее заголовок авторизации.

- Base Url - строковое поле, содержащее адрес сервера.

Методы:

- Http Response post (String method, Http Entity entity) - метод, отправляющий HTTP POST запрос по адресу веб-метода из параметра method с телом, заданным параметром entity.

- String login (String login, String password) - метод, осуществляющий авторизацию с указанными логином и паролем и возвращающий роль пользователя.

- List <Store Entity> update Stores (int version) - метод, позволяющий получить обновления таблицы магазинов выше версии переданной в параметре version в виде списка структур данных Store Entity.

- List <Db Entity> update Categories (int version) - метод, позволяющий получить обновления таблицы категорий выше версии переданной в параметре version в виде списка структур данных DbEntity.

- List <Store Entity> parse Stores List (Json Reader reader) - метод, позволяющий считать потоковым парсером reader массив элементов Store Entity.

- List <DbEntity> parse Categories List (Json Reader reader) - метод, позволяющий считать потоковым парсером reader массив элементов Db Entity.

- String parse Common Parameter (Db Entity entity, Json Reader reader) - метод, позволяющий извлечь из потока с данными в формате JSON, с помощью парсера reader, одно из полей объекта entity.

- String upload Picture(byte[] picture) - метод загружающий фото в бинарном виде на сервер, возвращая определённый сервером GUID.

- boolean send Metadata (Metadata data) - метод, позволяющий сохранить фото с указанными метаданными. Возвращаемое методом значение, показывает успешность выполнения операции.

4. Разработка программных модулей

Одной из важнейших частей приложения является класс Web Client, отвечающий за коммуникацию с сервером. Данный класс реализует интерфейс IWeb Client, описывающий серверное API в виде набора Java-методов. Особенностью этих методов является взаимодействие с сетью, поэтому они все они могут выбросить обязательное для обработки исключение IO Exception, а также не могу быть вызваны в основном потоке, поскольку это вызовет исключение Network On Main Thread Exception. Исходя из этого, методы, определённые в IWeb Client, должны вызываться в контексте, обеспечивающем выполнение в отличном от основного потоке и обрабатывающем исключения ввода/вывода. Таким контекстом является метод on Handle Intent класса Worker Service:

@Override

protected void on Handle Intent (Intent intent) {

try {

if (hostName != null && !hostName.isEmpty()) {

String action = intent.getAction();

if (intent.hasExtra(PENDING_INTENT_FIELD)) {

pendingIntent = intent.getParcelableExtra(

PENDING_INTENT_FIELD);

}

if (ACTION_LOGIN.equals(action)) {

logIn(intent);

} else if (ACTION_UPLOAD_PICTURE.

equals(action)) {

uploadPicture();

} else if (ACTION_SAVE_PICTURE.

equals(action)) {

savePicture(intent);

}

} else {

reportError(HOST_NOT_SPECIFIED);

}

} catch (UnknownHostException ex) {

reportError(UNKNOWN_HOST);

} catch (IOException ex) {

ex.printStackTrace();

reportError(IO_ERROR);

}}

Метод on Handle Intent определён в базовом классе Intent Service и работает следующим образом: когда какой-либо компонент посылает сервису запрос с помощью интента, передаваемого в метод start Service, данный интент оборачивается в объект Message и добавляется в очередь обработки сообщений, ассоциированную с экземпляром класса Handler. Каждая очередь также ассоциирована с определённым потоком, в котором будет производится обработка сообщений. Если объект Handler определяет, что поток обработки простаивает, то он извлекает очередное сообщение (объект класса Message) из очереди и передаёт его в метод handle Message. Этот метод класса Handler не производит никакой обработки сообщения, поэтому для создания работоспособной очереди обработки используются наследники класса Handler. Класс Intent Service содержит ссылку на потомок класса Handler, который в методе handle Message извлекает интент из объекта Message и передаёт в метод on Handle Intent. Сам Intent Service, аналогично классу Handler, не обеспечивает никакой обработки переданных в on Handle Intent интентов, для чего также используются классы-наследники, коим и является класс Worker Service. Таким образом, метод on Handle Intent гарантированно вызывается в отличном от главного потоке, а блок catch с типом IO Exception обеспечивает обработку ошибок ввода/вывода.

В методе on Handle Intent нет прямых вызовов методов интерфейса IWeb Client, однако они имеются внутри методов log In, upload Picture и save Picture. Листинг этих методов приведён ниже вместе с листингом метода report Error, обеспечивающего информирование об ошибках, а также аналогичного ему метода send Pending, информирующего об успешном окончании операции.

private void reportError(String message) {

try {

pendingIntent.send(this, SERVICE_ERROR, Intent().

putExtra(CommonConstants.ERROR_FIELD, message));

} catch (PendingIntent.CanceledException e) {

e.printStackTrace();

}

private void sendPending(Intent intent) {

try {

pendingIntent.send(this, Activity.RESULT_OK, intent);

} catch (PendingIntent.CanceledException e) {

e.printStackTrace();

}

Нетрудно заметить, что метод send Pending отличается от report Error тем, что использует код Activity.RESULT_OK и не передаёт никакой дополнительной информации об ошибках.

private void logIn(Intent intent) throws IOException {

String login = intent.getStringExtra(

CommonConstants.LOGIN_FIELD);

String password = intent.getStringExtra(

CommonConstants.PASSWORD_FIELD);

String role = webClient.logIn(login, password);

sendPending(new Intent().

putExtra(CommonConstants.ROLE_FIELD, role));

if (AuthorizationHelper.isValidRole(role)) {

DataProvider provider =

DataProvider.getInstance(this);

provider.updateStores(webClient.updateStores(

provider.getLastStoresVersion()));

provider.updateCategories(webClient.

updateCategories(provider.

getLastCategoriesVersion()));

}

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

private void uploadPicture() throws IOException {

startForeground(SERVICE_UPLOADING,

getUploadNotification());

byte[] picture = ImageStore.getImage();

String fileId = webClient.uploadPicture(picture);

stopForeground(true);

if (fileId != null) {

sendPending(new Intent().putExtra(

CommonConstants.FILE_ID_FIELD, fileId));

return;

}

reportError("Uploading error");

}

Метод upload Picture, осуществляющий загрузку фото на сервер, показывает сразу два характерных для Android-приложений решения. Во-первых, поскольку операция загрузки снимка занимает очень большое количество времени и при этом не должна прерываться, для её выполнения сервис входит в привилегированный режим с помощью вызова start Foreground. Это означает, что пользователь может спокойно свернуть приложение дожидаясь окончания загрузки, не опасаясь того, что ОС завершит приложение с целью экономии ресурсов. По завершению загрузки, сервис выходит из привилегированного режима используя метод stop Foreground. В качестве одного из параметров метод start Foreground принимает специальный объект-нотификацию, представляющую собой сообщение в строке состояния телефона, указывающее на то, что в данный момент происходит некоторая длительная высокоприоритетная операция. Метод stop Foreground, в свою очередь, принимает в качестве параметра флаг, указывающий на то, следует ли автоматически убрать нотификацию, созданную при входе в привилегированный режим или же пользователь должен будет сделать это сам.

Во-вторых, в метод upload Picture можно видеть, что изображение для загрузки передаётся не в качестве параметра интента, как это сделано с логином и паролем в методе logIn, а через статическое поле в классе Image Store. Это сделано для того, чтобы обойти ограничение, накладываемое интентом на размер своих параметров. Изображения зачастую превышают определённый для параметров лимит байт, что приводит к возникновению исключений во время выполнения программы.

private void savePicture(Intent intent) throws IOException {

Metadata metadata = intent.getParcelableExtra(

CommonConstants.METADATA_FIELD);

boolean result = webClient.sendMetadata(metadata);

if (!result) {

reportError("Save metadata error");

} else {

ImageStore.clean();

sendPending(new Intent());

}

Метод save Picture, аналогично методу logIn, инкапсулирует извлечение данных из интента, однако если логин и пароль передавались как простые строковые параметры, то здесь используется сложная структура Metadata. Для обеспечения пересылки сложных структур данных можно воспользоваться предоставляемой Java бинарной сериализацией объектов, однако это не является эффективным способом конверси данных. Вместо этого, Android SDK предоставляет куда более гибкий и быстрый способ основанный на интерфейсе Parcelable. Каждый Parcelable-объект должен реализовывать метод void write To Parcel (Parcel parcel, int i), который вызывается каждый раз при преобразовании данных для пересылки. Объект parcel представляет собой очередь, способную хранить строки, примитивные типы и их массивы. Помимо этого, реализующие Parcelable классы должны содержать статическое поле CREATOR с объектом класса наследника типа Parcelable. Creator<Т>, где Т - тип, который содержит поле CREATOR. Инетрфейс Parcelable. Creator<Т> определяет метод Т create From Parcel (Parcel in), который вызывается на принимающей стороне. Этот метод извлекает из очереди in данные и создаёт из них копию пересылаемого Parcelable-объекта. Пример реализации интерфейса Parcelable представлен ниже с помощью фрагментов класса Metadata:

public class Metadata implements Parcelable {

<Объявление свойств и констант>

@Override

public void writeToParcel(Parcel parcel, int i) {

parcel.writeInt(storeId)

< Запись остальных свойств в очередь parcel>

parcel.writeString(wasTaken);

}

public static final Parcelable.Creator<Metadata> CREATOR=

new Parcelable.Creator<Metadata>() {

public Metadata createFromParcel(Parcel in) {

Metadata metadata = new Metadata();

metadata.storeId = in.readInt();

< Извлечение остальных свойств из очереди in>

metadata.wasTaken = in.readString();

return metadata;

}

public Metadata[] newArray(int size) {

return new Metadata[size];

}

В данном случае, объект CREATOR представлен анонимны классом, что упрощает инициализацию создаваемого им объекта класса Metadata.

Реализацию методов интерфейса I Web Client рассмотрим на примере метода logIn класса Web Client, листинг которого приведён ниже:

@Override

public String logIn(String login, String password)

throws IOException {

authHeader = "Basic "+ Base64.encodeToString(

String.format("%s:%s", login, password).

getBytes(), Base64.NO_WRAP);

HttpResponse response =

post(API_LOGIN, new JsonHelper().toStringEntity());

if (response != null) {

int status = response.

getStatusLine().getStatusCode();

if (status == HttpStatus.SC_UNAUTHORIZED) {

return AuthorizationHelper.AUTHORIZATION_ERROR;

} else if (status == HttpStatus.SC_OK){

JsonReader reader =

JsonHelper.getReaderForResponse(response);

String role = null;

if (reader != null) {

try {

reader.beginObject();

reader.nextName();

role = reader.nextString();

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

return role;

}

return response.getStatusLine().toString();

}

return "Error: Unable to get response";

}

Метод log In хорошо показывает особенности реализации веб-клиента в данном проекте. В нём можно выделить несколько основных элементов, также присутствующих во всех остальных методах веб-клиента:

- Вызов метода post. Данный метод формирует HTTP POST запрос с телом, переданным во втором параметре, и отправляет его по адресу веб-метода, указанного первым параметром. Листинг этого метода будет приведён далее по тексту.

- Использование объекта Json Helper для формирования тела запроса. Остальные методы сначала использую несколько вызовов метода Json Helper.add для инициализации объекта, а затем приводят его к необходимому типу вызовом метода to String Entity, также приведённого ниже. Исключением является метод upload Picture, сразу использующий объект Byte Array Entity, поскольку телом запроса для этого метода не является JSON-объект.

- Получение из HTTP-ответа потокового JSON-парсера, с помощью статического метода Json Helper. Get Reader For Response.

- Последовательное извлечение данных из HTTP-потока с помощью ранее полученного JSON-парсера.

Листинг метода post:

private HttpResponse post(String method, HttpEntity entity)

throws IOException {

HttpPost request = new HttpPost(baseUrl + method);

request.setEntity(entity);

request.setHeader("Accept", "application/json");

if (entity instanceof StringEntity) {

request.setHeader("Content-type",

"application/json; charset=UTF-8");

}

request.setHeader("Authorization", authHeader);

return client.execute(request);

}

В методе осуществляется объединение базового адреса веб API с именем конкретного веб-метода, создание нового экземпляра HTTP POST запроса, установка его тела, а также HTTP-заголовков, содержащих тип содержимого, тип ответа и токен авторизации. В качестве возвращаемого значения выступает объект типа Http Response, представляющий собой HTTP-ответ на созданный HTTP POST запрос.

Логика методов to String Entity и get Reader For Response весьма прямолинейна, однако хорошо иллюстрирует типичные способы конвертации данных при взаимодействии с REST API в Android-приложениях:

public StringEntity toStringEntity() {

try {

return new StringEntity(

json.toString(), HTTP.UTF_8);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return null;

}

public static JsonReader getReaderForResponse(

HttpResponse response) {

if (response != null) {

try {

return new JsonReader(

new InputStreamReader(

response.getEntity().getContent()));

} catch (IOException e) {

e.printStackTrace();

}

}

return null;}

5. Программа и методика испытаний

Система тестирования Android предоставляет архитектуру и мощные инструменты для тестирования всех частей приложения на всех уровнях разработки (от отдельной части программы до приложения в целом). Система тестирования включает в себя следующие особенности:

1. Наборы тестов Android основаных на JUnit. Для тестирования класса, который не использует Android API, можно использовать обычные тесты из JUnit, или использовать расширения Android JUnit, для тестирования Android компонентов.

2. Android расширения JUnit предоставляют компоненто-ориентированные классы тестов. Эти классы предоставляют вспомогательные методы для создания mock-объектов и методов, которые помогают управлять жизненным циклом компонентов.

3. Наборы тестов содержатся в тестовых пакетах, которые похожи на основные пакеты программ

4. Инструменты SDK для создания и тестирования доступны в виде плагинов к IDE, а также в виде консольных приложений. Эти инструменты получают информацию из проекта тестируемого приложения и используют ее для автоматического создания build-файлов, файла манифеста и структуры каталогов для тестового пакета.

5. SDK также предоставляет monkeyrunner - API тестирования устройств с программами на Python, и UI/Application Exerciser Monkey (консольный инструмент для стресс-тестирования пользовательских интерфейсов путем отправки псевдослучайных событий на устройство.

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

В основном тестирование производилось на смартфоне Samsung Galaxy S II с операционной системой Android 4.1.2 и разрешением экрана в 800х480 точек. Смартфон обладает всеми особенностями, необходимыми для полноценной работы всех возможностей приложения, поэтому дополнительно проводились тесты на других устройствах. В некоторых тестах использовался смартфон Huawei U8230 с установленной на него модифицированной версией ОС Android - CyanogenMod 9, однако должной вариативности это не принесло, хотя и позволило проверить отличное от 800х480 разрешение на реальном устройстве.

Для того, чтобы проверить работу приложения в различных условиях, использовался встроенный в SDK эмулятор ОС Android. Эмулятор позволяет создавать виртуальные устройства с практически любыми конфигурациями оборудования, однако не может эмулировать некоторые функции камеры, например, такие как вспышка и автофокус. Исходя из этого, эмулятор использовался в первую очередь для тестирования пользовательского интерфейса на различных разрешениях экрана. Для этого был создан один экземпляр предустановленной виртуальной машины «Nexus 4», обладающей характеристиками одноимённого смартфона, для которой, в последствии, менялось разрешения экрана, не затрагивая остальных технических параметров. Поскольку эмулятор, входящий в Android SDK обладает очень плохим быстродействием, побочным положительным эффектом такого тестирования явилась проверка на работоспособность приложения на «слабых» устройствах, не обладающих достаточно мощными аппаратными характеристиками.

Для того, чтобы решить проблему с быстродействием стандартного эмулятора, использующего микроархитектуру ARM для виртуальных машин, для тестов критических состояний, таких как обрыв сети или недоступность GPS, использовался сторонний эмулятор Genymotion. В отличие от стандартного эмулятора, Genymotion использует х86 архитектуру, что позволяет использовать технологии аппаратной виртуализации и в десятки раз ускоряет работу эмулятора. Помимо этого, Genymotion обладает значительно более удобной системой эмуляции местоположения. К недостаткам данного эмулятора можно отнести крайне нестабильную работу: Genymotion работает в паре с системой виртуализацииVirtual Box и при этом довольно часто теряет с ней соединение, что приводит к рестарту эмулятора. Также не редки и «тихие» вылеты на рабочий стол без выдачи каких-либо сообщений об ошибках. Несмотря на это, Genymotion является гораздо более удобным в работе, в основном благодаря невероятно высокой скорости работы, по сравнению со стандартным эмулятором. Стоит отметить, что поскольку Genymotion базируется на микроархитектуре х86, он не всегда в полной мере позволяет протестировать приложения, использующие нативные библиотеки, написанные на С/С++ и собранные с помощью Android NDK, поскольку, в их случае, такие библиотеки собираются отдельно под каждый конкретный тип архитектуры. Так как данный проект не использует таких библиотек, то эта особенность несущественна.


Подобные документы

  • Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.

    курсовая работа [1,2 M], добавлен 13.01.2016

  • Системное, функциональное проектирование. Классы, реализующие действия и фабрики моделей. Разработка программных модулей. Функция получения глосаризованных заголовков таблиц. Вычисление суммарной наценки. Ручное тестирование. Развертывание приложения.

    дипломная работа [2,6 M], добавлен 23.11.2016

  • Обзор технологий и систем геоинформационных систем. Системное и функциональное проектирование программного модуля, его разработка с использованием сред программирования Visual C++ 6.0, Qt 3.3.3. Технико-экономическое обоснование данного процесса.

    дипломная работа [1,2 M], добавлен 13.03.2011

  • Требования к аппаратным и операционным ресурсам. Логическая и физическая организация. Состав основных классов проекта. Технико-экономическое обоснование разработки программного средства. Задержки при обработке данных. Разработка интерфейса приложения.

    дипломная работа [4,4 M], добавлен 16.06.2017

  • Создание Win-приложения для библиотеки, которое позволяло бы осуществлять операции выдачи и сдачи книг в соответствии со сроками. Выбор программных и технических средств реализации проекта. Разработка интерфейса системы, описание реализованных классов.

    курсовая работа [3,1 M], добавлен 14.08.2015

  • Назначение и цели создания системы. Разработка логической модели данных, выбор хранилища. Диаграмма классов для диспетчера и контент-менеджера, схема взаимодействия объектов системы. Описание программных модулей. Тестирование веб-базированной системы.

    курсовая работа [5,4 M], добавлен 17.09.2013

  • Ознакомление с программой проведения сборки компьютера из деталей, имеющихся в базе данных. Рассмотрение правил создания иерархии классов. Описание основных методов и пользовательского интерфейса. Изучение системных требований и текстов основных классов.

    курсовая работа [710,2 K], добавлен 26.07.2014

  • Структурные подразделения и отделы организации, ее технические программные средства. Разработка приложений обработки данных на ассемблере, языке программирования высокого уровня. Тестирование и оптимизация программных модулей. Разработка документации.

    отчет по практике [175,0 K], добавлен 30.09.2022

  • Программная и техническая характеристика информационных систем предприятия. Требования к информационной и программной совместимости. Проектирование программного обеспечения с использованием специализированных программных пакетов. Разработка базы данных.

    отчет по практике [1,3 M], добавлен 11.04.2019

  • Разработка приложения "Программа по приему платежей и расчету по газу", которая послужит для учета и статистики платежей в расчетно-кассовом центре. Системное, функциональное проектирование. Разработка программных модулей. Программа и методика испытаний.

    дипломная работа [806,2 K], добавлен 13.02.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.