1. Настройка окружения и IntelliJ IDEA
Разработка системного программного обеспечения — это погружение в то, как компьютер управляет ресурсами, памятью и сетью. Создание консольного менеджера загрузок с параллельной скачкой файлов — идеальная курсовая работа. Она не только познакомит с основами сетевого взаимодействия, но и заставит столкнуться с главной сложностью современных программ: многопоточностью.
Чтобы реализовать проект, похожий по логике на ab-download-manager, но работающий исключительно через интерфейс командной строки (CLI), нам потребуется надежный фундамент. Этим фундаментом станет язык программирования Kotlin и интегрированная среда разработки IntelliJ IDEA.
Экосистема: Kotlin и JVM
Прежде чем устанавливать программы, необходимо понять, с чем именно мы будем работать. Kotlin — это современный, статически типизированный язык программирования, разработанный компанией JetBrains.
Главная особенность Kotlin заключается в том, что в своей классической и самой популярной форме он компилируется не напрямую в машинный код процессора (как C или C++), а в байт-код. Этот байт-код затем выполняется специальной программой — JVM (Java Virtual Machine), или виртуальной машиной Java.
> Виртуальная машина Java — это программная среда, которая переводит платформонезависимый байт-код в инструкции, понятные конкретной операционной системе (Windows, macOS или Linux). > > Oracle Java Documentation
Представьте, что вы написали книгу на эсперанто (байт-код). Чтобы жители разных стран (операционные системы) могли её прочитать, в каждой стране сидит переводчик-синхронист (JVM), который на лету переводит эсперанто на местный язык.
Для системного программирования это означает следующее:
!Схема компиляции и выполнения кода на Kotlin
Инструментарий: JDK и IntelliJ IDEA
Для того чтобы писать, компилировать и запускать код, нам понадобятся два основных компонента.
Первый — это JDK (Java Development Kit). Это набор инструментов для разработчика, который включает в себя саму JVM (чтобы запускать программы), компилятор (чтобы переводить код в байт-код) и стандартные библиотеки (готовые функции для работы с сетью, файлами и математикой).
Второй — это IDE (Integrated Development Environment), интегрированная среда разработки. Можно писать код в обычном блокноте и компилировать его через командную строку, но это сродни попытке построить дом с помощью одного лишь перочинного ножа. IDE — это ваш экскаватор, подъемный кран и лазерный уровень в одном флаконе.
Мы будем использовать IntelliJ IDEA от JetBrains. Она изначально создавалась с прицелом на Java и Kotlin, поэтому понимает этот код лучше любой другой среды. Она будет подсказывать названия функций, автоматически исправлять ошибки и помогать в отладке многопоточных процессов.
Установка через JetBrains Toolbox
Самый надежный способ установить IntelliJ IDEA — использовать утилиту JetBrains Toolbox App. Это менеджер версий, который позволяет легко обновлять среду разработки и управлять проектами.
Использование Toolbox избавляет от необходимости вручную настраивать переменные среды и пути к исполняемым файлам в операционной системе.
Создание первого проекта
Запустите IntelliJ IDEA. На стартовом экране нажмите кнопку New Project (Новый проект). Перед вами появится окно конфигурации. От того, как мы настроим проект сейчас, зависит удобство всей дальнейшей разработки.
Заполните поля следующим образом:
ConsoleDownloadManager (или любое другое имя вашей курсовой).После нажатия кнопки Create среда разработки начнет скачивать необходимые файлы и настраивать структуру папок. Этот процесс называется индексацией и синхронизацией. В первый раз он может занять несколько минут.
Почему именно Gradle?
В настройках мы выбрали Gradle в качестве системы сборки (Build system).
Современные программы редко пишутся с нуля. Для нашего менеджера загрузок нам понадобятся сторонние библиотеки: например, для красивого вывода прогресс-бара в консоль или для выполнения сложных HTTP-запросов.
Gradle — это автоматизированная система управления проектом. Вместо того чтобы вручную скачивать файлы библиотек из интернета и класть их в папку с проектом, мы просто пишем в специальном конфигурационном файле: «Мне нужна библиотека Ktor версии 3.2.0». Gradle сам пойдет в интернет, найдет эту библиотеку, скачает её, проверит совместимость и подключит к нашему коду.
Структура проекта
Когда проект загрузится, обратите внимание на панель слева — Project Tool Window. Там вы увидите древовидную структуру файлов. Для нас сейчас важны два элемента:
build.gradle.ktssrc/main/kotlinКонфигурация сборки: build.gradle.kts
Откройте файл build.gradle.kts. Расширение .kts означает Kotlin Script. Это значит, что инструкции для сборщика проектов мы пишем на том же языке, что и саму программу.
Внутри вы увидите блок dependencies (зависимости). Именно сюда мы будем добавлять сторонние библиотеки по мере усложнения курсовой работы. Например, когда мы дойдем до работы с сетью, мы добавим сюда клиент Ktor.
Пока что мы не будем ничего менять, но важно понимать, что любое изменение в этом файле требует нажатия иконки слона со стрелочками (Sync Project with Gradle Files), которая появится в правом верхнем углу редактора. Это команда для Gradle: «Я изменил список покупок, сходи в магазин и принеси новые библиотеки».
Исходный код: src/main/kotlin
Разверните папку src, затем main, затем kotlin. Это святая святых нашего проекта — место, где будет жить весь наш исходный код.
Щелкните правой кнопкой мыши по папке kotlin, выберите New -> Kotlin Class/File. Введите имя Main и выберите тип File.
В открывшемся пустом файле напишите следующий код:
```kotlin fun main(args: Array<String>) { println("Console Download Manager инициализирован!") if (args.isNotEmpty()) { println("Получены аргументы командной строки: TSVT = 1000 / 50 = 201000 / 10 = 100$ секунд, несмотря на то, что ваш домашний интернет способен на большее.
Здесь на сцену выходит параллельная загрузка. Если сервер поддерживает докачку файлов (запрос конкретных байтов), наш менеджер загрузок сможет открыть не одно, а, например, 5 одновременных подключений к серверу.
Каждое подключение (поток) будет скачивать свой кусок файла (по 200 МБ) со скоростью 10 МБ/с. В результате мы утилизируем всю ширину нашего домашнего канала (5 * 10 = 50 МБ/с) и скачаем файл за исходные 20 секунд.
Реализация этой логики — разделение файла на части, запуск независимых потоков, контроль их выполнения и финальная склейка кусков в единый файл — и станет ядром вашей курсовой работы. А настроенная сегодня IntelliJ IDEA и мощь языка Kotlin помогут сделать этот процесс максимально понятным и контролируемым.