# ЛАБОРАТОРНАЯ РАБОТА ## Разработка кроссплатформенного мобильного приложения «Телефонный справочник» с использованием .NET MAUI и C# --- ## СОДЕРЖАНИЕ 1. [Введение](#1-введение) 2. [Теоретическая часть](#2-теоретическая-часть) 3. [Практическая часть](#3-практическая-часть) 4. [Заключение](#4-заключение) 5. [Список использованных источников](#5-список-использованных-источников) --- ## 1. ВВЕДЕНИЕ ### 1.1 Актуальность темы В современном мире мобильные приложения стали неотъемлемой частью повседневной жизни. Смартфоны используются для хранения контактной информации, что делает приложения-справочники одними из наиболее востребованных утилит. Традиционные телефонные справочники, встроенные в операционные системы, зачастую не满足ают потребностям пользователей в части гибкости, кастомизации интерфейса и дополнительной функциональности. Создание собственного приложения «Телефонный справочник» является актуальной задачей по следующим причинам: - **Персонализация** — возможность адаптировать приложение под конкретные нужды пользователя - **Офлайн-доступ** — данные хранятся локально и доступны без интернет-соединения - **Кроссплатформенность** — охват максимальной аудитории при минимальных затратах на разработку - **Практическое применение** — разработка реального приложения с CRUD-операциями, базой данных и графическим интерфейсом ### 1.2 Почему .NET MAUI и C#? **.NET MAUI** (Multi-platform App UI) — это современный фреймворк от Microsoft для создания кроссплатформенных приложений с единой кодовой базой. Выбор данной технологии обусловлен рядом преимуществ: | Критерий | Описание | |----------|----------| | **Единая кодовая база** | Один проект для iOS, Android, Windows, macOS | | **Нативная производительность** | Компиляция в нативный код для каждой платформы | | **C# как язык разработки** | Современный, типобезопасный объектно-ориентированный язык | | **Прямой доступ к API платформ** | Возможность использовать платформо-специфичный код | | **Встроенные контролы** | Богатая библиотека кроссплатформенных UI-компонентов | | **Интеграция с экосистемой .NET** | Доступ к NuGet-пакетам и инструментам | **C#** является оптимальным выбором благодаря: - Строгой типизации и безопасности памяти - Мощной стандартной библиотеке -LINQ для работы с коллекциями - Асинхронному программированию (async/await) - Активной поддержке и развитию языка ### 1.3 Цель и задачи лабораторной работы **Цель:** разработать кроссплатформенное мобильное приложение «Телефонный справочник» с использованием .NET MAUI и языка программирования C#. **Задачи:** 1. Изучить теоретические основы .NET MAUI 2. Спроектировать архитектуру приложения 3. Реализовать CRUD-операции для контактов 4. Настроить хранение данных с использованием SQLite 5. Реализовать систему смены тем оформления 6. Добавить функционал импорта/экспорта контактов 7. Провести тестирование приложения --- ## 2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ ### 2.1 Обзор технологического стека #### 2.1.1 .NET 9.0 **.NET 9** — latest stable release платформы .NET, обеспечивающий высокую производительность и широкие возможности для разработки приложений. В данном проекте используется как рантайм для MAUI-приложений. **Ключевые особенности .NET 9:** - Улучшенная производительность JIT-компилятора (Just-In-Time) - **Native AOT компиляция** — компиляция Ahead-of-Time для быстрого запуска - Обновлённые библиотеки Base Class Library (BCL) - Улучшенная работа с JSON (System.Text.Json) - Новые функции в LINQ - Поддержка регулярных выражений нового поколения **.NET Runtime** обеспечивает: - Управление памятью через сборщик мусора (GC) - JIT/AOT компиляцию IL-кода в нативный - Common Type System (CTS) для единообразия типов данных - Безопасность и управление доступом кода #### 2.1.2 .NET MAUI **.NET MAUI** (Multi-platform App UI) — эволюция Xamarin.Forms, предоставляющая единый фреймворк для создания нативных приложений для всех поддерживаемых платформ. Релиз состоялся в 2022 году как часть .NET 7. **История развития:** ``` Xamarin.Forms (2014) → Xamarin.Forms 5.0 → .NET MAUI (.NET 7, 2022) → .NET MAUI (.NET 9, 2024) ``` **Архитектура MAUI:** ``` ┌─────────────────────────────────────────────────────────────────┐ │ Код приложения (C#) │ ├─────────────────────────────────────────────────────────────────┤ │ UI-слой (XAML/C#) │ │ ┌──────────────────────────────────────────┐ │ │ │ Pages │ Layouts │ Controls │ Converters │ │ │ └──────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ Platform Features │ │ Geolocation │ Contacts │ Media │ Sensors │ Sharing │ ├─────────────────────────────────────────────────────────────────┤ │ Graphics (Сжатые графики) │ ├─────────────────────────────────────────────────────────────────┤ │ Android │ iOS │ Windows │ Mac │ Linux │ Tizen │ │ (Skia) │(CoreG)│ (WinUI) │(CoreG) │ (GTK) │ (Tizen) │ └─────────────────────────────────────────────────────────────────┘ ``` **Жизненный цикл приложения MAUI:** | Метод | Описание | |-------|---------| | `OnStart()` | Вызывается при первом запуске приложения | | `OnResume()` | Вызывается при возобновлении из фона | | `OnSleep()` | Вызывается при переходе в фоновый режим | **Целевые платформы проекта:** - `net9.0-android` — Android 5.0+ (API 21+) - `net9.0-ios` — iOS 11.0+ - `net9.0-maccatalyst` — macOS 10.15+ - `net9.0-windows10.0.19041.0` — Windows 10+ **Ключевые преимущества MAUI:** 1. **Hot Reload** — мгновенное обновление UI без перезапуска 2. **Handlers Architecture** — настраиваемая система обработчиков для платформо-специфичных элементов 3. **Graphics API** — новый единый API для рисования через `Microsoft.Maui.Graphics` 4. **Shell** — навигация на основе оболочки с поддержкой меню и вкладок #### 2.1.3 Язык C# 12 **C# 12** — современный объектно-ориентированный язык программирования с поддержкой: - Nullable reference types - Pattern matching - Record types - Init-only properties - Async/await - LINQ - Primary constructors - Collection expressions - Alias any type **Ключевые концепции C# в контексте MAUI:** **Асинхронное программирование (async/await):** ```csharp // Паттерн асинхронного программирования public async Task> GetContactsAsync() { var contacts = await _database.Table().ToListAsync(); return contacts.OrderBy(c => c.Name).ToList(); } ``` **LINQ (Language Integrated Query):** ```csharp // Запросы к коллекциям на уровне языка var results = contacts .Where(c => c.Name.Contains(searchTerm)) .OrderBy(c => c.Name) .Select(c => new { c.Name, c.PhoneNumber }); ``` **Обнуляемые ссылочные типы:** ```csharp // ? делает тип обнуляемым private Contact? _contact; private string? _photoBase64; // ! оператор подавления null-предупреждения _contactService.OnContactsUpdated += LoadContacts; ``` #### 2.1.4 XAML **XAML** (Extensible Application Markup Language) — декларативный язык разметки для определения пользовательского интерфейса в .NET-приложениях. **Синтаксис XAML:** ```xml ``` **Основные элементы MAUI:** | Категория | Элементы | |-----------|----------| | **Pages** | ContentPage, NavigationPage, TabbedPage, Shell | | **Layouts** | StackLayout, Grid, FlexLayout, AbsoluteLayout | | **Controls** | Label, Button, Entry, Image, ListView, CollectionView | | **Views** | Frame, Border, ScrollView | **Привязка данных (Data Binding):** ```xml