Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Создание программного обеспечения для нательных компьютерных сетей и носимых систем. Учебное пособие.pdf
X
- •ЧАСТНОЕ УЧРЕЖДЕНИЕ
- •Медицинский университет «РЕАВИЗ»
- •ВВЕДЕНИЕ
- •1.2. Исторический обзор развития носимых систем
- •ГЛАВА 2. ТЕХНОЛОГИЧЕСКИЕ АСПЕКТЫ РАЗРАБОТКИ
- •2.1. Выбор технологического стека для носимых систем
- •2.2. Архитектурные решения при разработке программного обеспечения
- •2.3. Управление энергопотреблением и оптимизация производительности
- •2.5. Интеграция с облачными сервисами в носимых приложениях
- •2.4. Работа с датчиками и взаимодействие с окружающей средой
- •2.6. Аспекты безопасности в технологическом контексте
- •3.1. Языки программирования и их роль в разработке для носимых систем
- •3.2. Принципы объектно-ориентированного программирования в контексте носимых технологий
- •3.3. Обзор паттернов проектирования для эффективной разработки приложений
- •3.4. Многозадачность и управление потоками в носимых приложениях
- •3.5. Оптимизация алгоритмов под ограниченные ресурсы носимых устройств
- •3.6. Работа с сенсорами и вводом данных в носимых приложениях
- •3.7. Адаптация пользовательского интерфейса к маленьким экранам и управлению сенсорами
- •4.1. Особенности дизайна интерфейса для различных типов носимых устройств (часы, очки, фитнес-трекеры)
- •4.2. Адаптация пользовательского опыта к ограниченным размерам экрана
- •4.3. Взаимодействие с пользователем через жесты и голосовые команды
- •4.4. Работа с уведомлениями и многозадачность в носимых приложениях
- •4.5. Применение принципов доступности в дизайне интерфейса
- •ГЛАВА 5. РАЗРАБОТКА КЛИЕНТ-СЕРВИСНОЙ ОРГАНИЗАЦИИ НАТЕЛЬНОЙ КОМПЬЮТЕРНОЙ СЕТИ (НА ПРИМЕРЕ watchOS)
- •5.3. Работа с данными и обеспечение их конфиденциальности
- •5.4. Разработка клиентских приложений
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ПРИЛОЖЕНИЕ А
- •ПРИЛОЖЕНИЕ Б
- •ПРИЛОЖЕНИЕ В

speechRecognizer.setRecognitionListener
(recognitionListener)
speechRecognizer.startListening(speechIntent)
```
Применение этих принципов и использование соответствующих API помогут создать доступные и удобные интерфейсы для пользователей носимых
устройств, вне зависимости от их потребностей и ограничений (рис. 4.4).
Рис. 4.4. Реализация эмуляции интерфейса фреймворка Kivy для создания простого
мобильного приложения с графическим интерфейсом
Приведенный код на Python использует фреймворк Kivy для создания
простого мобильного приложения с графическим интерфейсом (рис. 4.4). Давайте разберем, что происходит в коде:
1. Импорт необходимых модулей:
```python
from kivy.app import App
from kivy.uix.button import Button
```
Здесь мы импортируем два класса из библиотеки Kivy. `App` – это базо-
вый класс для приложения Kivy, а `Button` – это виджет кнопки, который мы
будем использовать в нашем интерфейсе.
2. Определение класса приложения:
```python
class MyApp(App):
```
111

Мы создаем наш собственный класс `MyApp`, который является под-
классом `App` из Kivy. Этот класс будет представлять наше приложение.
3. Метод `build`:
```python
def build(self):
return Button(text='Hello, Kivy!')
```
Этот метод определяет, как будет выглядеть главное окно приложения.
Здесь мы возвращаем экземпляр кнопки (`Button`) с текстом «Hello, Kivy!».
4. Проверка и запуск приложения:
```python
if __name__ == '__main__':
MyApp().run()
```
В этом блоке кода проверяется, запускается ли файл напрямую (а не
импортируется как модуль). Если файл запускается напрямую, то создается экземпляр класса `MyApp` и вызывается его метод `run()`, который запускает
приложение.
Таким образом, весь код создает минимальное мобильное приложение с
одной кнопкой и текстом «Hello, Kivy!», используя фреймворк Kivy. При запуске этого кода, вы должны увидеть окно с кнопкой, которую вы можете
нажать.
Продолжим разработку простого приложения с использованием фреймворка Kivy. В этот раз мы добавим обработчик события нажатия кнопки для
вывода текста в консоль приложения. Также мы создадим еще один виджет,
чтобы продемонстрировать вложенность интерфейсных элементов.
```python
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
class MyApp(App):
def build(self):
112

# Основной контейнер для размещения элементов интерфейса
layout = BoxLayout(orientation='vertical' , spacing=10, padding=10)
# Кнопка
button = Button(text='Нажми меня!')
# Привязываем обработчик события нажатия кнопки
button.bind(on_press=self.on_button_press)
# Метка для отображения текста
self.label = Label(text='Текст будет здесь')
# Добавляем элементы в основной контейнер
layout.add_widget(button)
layout.add_widget(self.label)
return layout
# Обработчик события нажатия кнопки
def on_button_press(self, instance):
print('Кнопка была нажата!')
self.label.text = 'Кнопка была нажата!'
if __name__ == '__main__':
MyApp().run()
```
В этом обновленном коде добавлены следующие изменения:
1. **Добавлен контейнер BoxLayout:**
```python
layout = BoxLayout(orientation='ve rt i cal', spacing=10, padding=10)
```
Мы создали `BoxLayout` (контейнер с вертикальной ориентацией) для
размещения элементов интерфейса. `spacing` и `padding` используются для добавления пространства между элементами и по краям контейнера соответственно.
113

2. **Обработчик события нажатия кнопки:**
```python
def on_button_press(self, instance):
print('Кнопка была нажата!')
self.label.text = 'Кнопка была нажата!'
```
Мы добавили метод `on_button_press`, который будет вызываться при
нажатии кнопки. В этом методе мы просто выводим сообщение в консоль и обновляем текст метки.
3. **Изменен код создания метки:**
```python
self.label = Label(text='Текст будет здесь')
```
Мы создали метку вне метода `build`, чтобы она была доступна в обра-
ботчике события нажатия кнопки. Теперь мы можем обновлять текст метки
внутри метода `on_button_press`.
После запуска этого кода, вы должны увидеть мобильное приложение с
кнопкой и меткой. При нажатии кнопки текст метки обновится, и сообщение
будет выведено в консоль приложения [46].
Продолжим развитие приложения, добавив возможность ввода текста
пользователем с использованием текстового поля (`TextInput`). Также мы добавим функцию, которая будет принимать введенный текст и отображать его в
метке при нажатии кнопки [45].
```python
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
class MyApp(App):
def build(self):
# Основной контейнер для размещения элементов интерфейса
layout = BoxLayout(orientation='vertical' , spacing=10, padding=10)
114

# Текстовое поле для ввода
self.text_input = TextInput(multiline=False)
# Кнопка
button = Button(text='Показать текст')
# Привязываем обработчик события нажатия кнопки
button.bind(on_press=self.on_button_press)
# Метка для отображения текста
self.label = Label(text='Текст будет здесь')
# Добавляем элементы в основной контейнер
layout.add_widget(self.text_input)
layout.add_widget(button)
layout.add_widget(self.label)
return layout
# Обработчик события нажатия кнопки
def on_button_press(self, instance):
input_text = self.text_input.text
if input_text:
print(f'Введенный текст: {input_text}')
self.label.text = f'Введенный текст: {input_text}'
else:
print('Введите текст!')
if __name__ == '__main__':
MyApp().run()
```
Эти изменения включают:
1. **Добавлено текстовое поле (`TextInput`):**
```python
self.text_input = TextInput(multiline=False)
```
115

Мы создали `TextInput` для ввода текста пользователем.
`multiline=False` означает, что пользователь может вводить только одну строку
текста.
2. **Обновлен метод `build`:**
```python
layout.add_widget(self.text_input)
```
Мы добавили текстовое поле в основной контейнер `BoxLayout`.
3. **Обновлен обработчик события нажатия кнопки:**
```python
def on_button_press(self, instance):
input_text = self.text_input.text
if input_text:
print(f'Введенный текст: {input_text}')
self.label.text = f'Введенный текст: {input_text}'
else:
print('Введите текст!')
```
В этом методе мы получаем текст из текстового поля и, если он не пу-
стой, выводим его в консоль и обновляем текст метки. Если текстовое поле пусто, выводим сообщение «Введите текст!» в консоль.
Теперь приложение позволяет пользователю вводить текст и отображает
его при нажатии кнопки [4].
Рис. 4.5. Тестирование фреймворка Kivy эмулирующего работу аппаратной носимой системы
116

ГЛАВА 5. РАЗРАБОТКА КЛИЕНТ-СЕРВИСНОЙ ОРГАНИЗАЦИИ НАТЕЛЬНОЙ КОМПЬЮТЕРНОЙ СЕТИ (НА ПРИМЕРЕ watchOS)
5.1. Определение требований к клиент-сервисной архитектуре
Разработка клиент-сервисной архитектуры для носимых устройств, таких
как умные часы на платформе watchOS, требует внимательного анализа и учета
специфических требований. В данном разделе мы определим основные требования к архитектуре для обеспечения эффективного взаимодействия клиентских и сервисных компонентов.
5.1.1. Идентификация ключевых потребностей пользователей
Понимание ключевых потребностей пользователей носимых устройств,
особенно на платформе watchOS, играет решающую роль в разработке клиентсервисной архитектуры. Важно учесть уникальные аспекты взаимодействия
пользователей с умными часами. Вот некоторые из ключевых потребностей
пользователей:
Разработка интерфейса, который легко понимается и управляется на небольших экранах умных часов. Использование жестов и элементов управления,
специфичных для watchOS.
Обеспечение возможности быстрого получения важных данных, таких
как уведомления, без необходимости открытия приложения.
Предоставление возможности настройки и фильтрации уведомлений для
минимизации вмешательства и обеспечения персонального опыта.
Создание механизмов быстрого доступа к приложениям и функциям с
учетом ограниченных ресурсов устройства.
Обеспечение интеграции с другими устройствами в экосистеме Apple, такими как iPhone и iPad, для синхронизации данных и обмена информацией.
5.2. Проектирование пользовательского опыта
Проектирование пользовательского опыта (User Experience, UX) для носимых устройств, таких как умные часы на платформе watchOS, требует особого внимания к ограничениям по размеру экрана и контексту использования. В
данной главе рассматриваются ключевые аспекты, направленные на создание
интуитивно понятного и удобного интерфейса для пользователя.
117

Одним из важных факторов при проектировании пользовательского опыта для носимых устройств является упрощение взаимодействия. Умные часы
обладают ограниченным пространством на экране, поэтому интерфейс должен
быть минималистичным и легким для восприятия. Важно учесть, что пользовательский опыт на устройствах с такими размерами экрана должен быть максимально эффективным и интуитивным [43].
Еще одним аспектом является адаптация к уникальным возможностям
носимого устройства. Например, использование жестов и датчиков для ввода
данных, а также интеграция с голосовыми командами, позволяет расширить
возможности взаимодействия пользователя с устройством.
Проектирование пользовательского опыта на платформе watchOS также
включает в себя создание удобного доступа к функциональности приложений.
Использование «компактных карточек» и «Dock» для быстрого доступа к последним использованным приложениям поддерживает эффективное перемещение между задачами.
Важным аспектом UX на умных часах является также внимание к дизайну циферблатов. Пользователям предоставляется возможность выбора тем
оформления, а также настройка компонентов циферблата, чтобы максимально
соответствовать их предпочтениям и стилю.
Для достижения успешного пользовательского опыта также важно уделить внимание адаптации интерфейса к контексту использования. Носимые
устройства, такие как умные часы, часто используются в движении или в ситуациях, где доступ к традиционным устройствам ограничен. Следовательно, интерфейс должен быть спроектирован так, чтобы пользователь мог легко и быстро получить необходимую информацию или выполнить действие [24].
Важным аспектом в проектировании UX является тактильный отклик.
Умные часы обладают возможностью использовать тактильные сигналы, такие
как вибрация, для уведомлений. Проектирование таких сигналов с учетом их
четкости и информативности играет важную роль в обеспечении взаимодействия пользователя с устройством.
Работа с контентом также требует специального внимания. Учитывая
ограниченный объем отображаемой информации на экране умных часов, необходимо стремиться к предоставлению пользователю ключевой и релевантной
информации, избегая перегруженности экрана.
Интеграция с функциональностью здоровья и фитнеса требует четкости и
интуитивности. Графический дизайн и представление данных должны быть
легко воспринимаемыми, даже в условиях ограниченного пространства [20].
118

Проектирование UX на платформе watchOS также включает в себя создание единообразия между различными приложениями. Это помогает пользователям быстро освоиться с новыми приложениями, так как они могут использовать знания и навыки, полученные от опыта использования других приложений
на умных часах.
Использование компактных форматов отображения данных на умных часах с платформой watchOS важно для эффективного использования ограниченного пространства экрана. Давайте рассмотрим пример на Swift, демонстрирующий создание компактной карточки с использованием SwiftUI [21].
swift
import SwiftUI
struct CompactCardView: View {
var title: String
var description: String
var body: some View {
VStack(alignment: .leading, spacing: 4) {
Text(title)
.font(.headline)
.foregroundColor(.primary)
Text(description)
.font(.subheadline)
.foregroundColor(.secondary)
}
.padding(8)
.background(Color(.systemBackground))
.cornerRadius(8)
.shadow(radius: 4)
}
}
struct ContentView: View {
var body: some View {
VStack(alignment: .leading, spacing: 16) {
119

CompactCardView(title: «Название события», description: «Краткое
описание события.»)
CompactCardView(title: «Другое событие», description: «Дополни-
тельная информация.»)
// Добавьте другие компактные карточки или элементы интерфейса
по необходимости
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
В этом примере CompactCardView представляет собой компактную карточку с заголовком и описанием. ContentView затем содержит стек таких карточек, представляя собой вертикальный список. Это обеспечивает компактное и
информативное отображение данных без перегруженности интерфейса.
5.3. Работа с данными и обеспечение их конфиденциальности
Работа с данными и обеспечение их конфиденциальности – критически
важные аспекты в разработке приложений.
Давайте рассмотрим некоторые базовые примеры на Swift, связанные с
сохранением данных и обеспечением их конфиденциальности.
### Сохранение данных:
#### UserDefaults:
UserDefaults является простым способом сохранения небольших объемов
данных, таких как настройки приложения.
```swift
// Сохранение значения
UserDefaults.standard.set(«JohnDoe», forKey: «username»)
// Получение значения
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
