Программа курса “Основы языка программирования Java и Java Enterprise” школа программирования Eltex (100 часов) Темы лекций (20 часов): Глава 1. Основы программирования на Java. Создание простейших приложений. - Введение. Платформа Java и основные принципы. Эволюция. JRE и JDK и их настройки. Архитектура JVM. Дополнительные библиотеки, стек технологий J2EE и J2ME. - Базовые средства программирования Java, типы и операторы, структурные средства. - Основы объектного подхода - Абстракция, Инкапсуляция, Типизация. Объекты и классы, взаимоотношения, статический контекст. Класс Object. Основные слои (уровни) приложения. - Иерархии классов и объектов. Многоуровневое моделирование и метамодель. Отношения между объектами, отношения между классами. - Принципы ООП: Подстановки Лисков, Инверсии зависимостей, Деметера, принцип разделения интерфейса. Базисы для выделения абстракций. Суперклассы и подклассы, наследование. Виртуальный полиморфизм. Перечисления. - Внутренние классы: Назначение, исключения, принцип Модульности в ООП, пакеты Java. Многоуровневая архитектура приложений. Разбиение на подсистемы. Глава 2. Классы-коллекции. Коллекции, ассоциативные контейнеры и итераторы. Иерархия коллекций. Иерархия интерфейсов. Реализация коллекций. Коэффициент загруженности. Ёмкость класса-коллекции. Глава 3. Generic-классы в Java. Средства обобщённого программирования. Стандартная библиотека Java. Пакет java.lang. Пакет java.util. Generics. Методы и конструкторы generic. Ограниченные параметры типа. Wildcards. Глава 4. Многопоточные приложения. Процессы, потоки и приоритеты. Принцип Параллелизма в ООП. Архитектура многопоточных приложений. Основные проблемы и пути их решения. Синхронизация потоков. Управление потоками. Пул потоков и его реализация. Средства java.util.concurrent. Атомарные операции. Синхронные очереди и замки. ThreadPoolExecutor. Глава 5. Потоки данных. Работа с локальными файлами. Классы потоков ввода-вывода. Иерархия классов потоков ввода-вывода. Стандартные потоки ввода-вывода. Консольный ввод/вывод. Файловый ввод/вывод. Получение свойств файла. Буферизованный ввод/вывод. Сброс буферов. Прямой доступ к файлу. Сериализация объектов. Глава 6. Сетевые приложения «клент-сервер». Работа с IP-адресами. Типы сокетов. Работа по протоколу TCP. Работа по протоколу UDP. Broadcast. Реализация параллельного TCP сервера. Глава 7. Java EE. Spring Framework. Современные технологии Java Enterprise. Системы сборки и связывания многомодульных Java систем. Основы Spring Framework, платформа Spring IO & Spring Boot. Обработка XML средствами Java. Работа с базами данных в Java & Spring. Spring security. Log4J. Глава 8. Java EE. Hibernate Framework. OR Mapping - JPA & Hibernate. REST & WebServices. Средства интеграции с внешними системами (ESB - Enterprise Service Bus). Мониторинг и контроль Java приложений. Темы для самостоятельного изучения: Глава 9. Основы объектно-ориентированного дизайна. Доменная модель приложения. Выделение концептуальных классов. Дизайн-модель приложения. Дизайн на основе ответственности абстракций. Принципы GRASP. Назначение ответственности. Информационный эксперт, создатель, зацепление, сплоченность. Контроллеры. Принципы дизайна пакетов: REP, CRP, CCP, ADP, SDP, SAP. Метрики пакетов. "Главная последовательность". Глава 10. Паттерны объектно-ориентированного проектирования. Паттерны создания. Структурные и поведенческие паттерны. MVC. Лабораторные работы. (80 часов = 20 в лаборатории + 60 самостоятельно дома) ТЕМЫ: --------------------------------------------------------------------- 1. Основы программирования на Java. Создание простейших приложений. --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Разработать простое консольное приложение. 2. Сформировать иерархии классов и интерфейсов, сделать реализацию методов. 3. Сделать начальный ввод данных при запуске приложения через параметры командной строки: количество вводимых объектов; вид представления. 4. После запуска приложения с клавиатуры вводятся данные объекта и выводятся на консоль. 5. При запуске приложения в зависимости от вида представления создается класс потомка. 6. Объекты реализуются через наследование: интерфейс → абстрактный класс → наследники. Создать интерфейс ICrudAction, задающий действия над объектом (create, read, update, delete): create – заполнение объекта случайными значениями и инкремент счётчика. read – вывод данных на экран. update – ввод данных с клавиатуры. delete – принудительное зануление данных в объекте и декремент счетчика. Создать иерархию классов, определяющих объекты по варианту и реализующих интерфейс IcrudAction. 7. Сделать счётчик объектов в базовом абстрактном классе. 8. Сделать ID объекта в базовом абстрактном классе. ID инициализируется в конструкторе объекта. Используйте класс UUID. 9. Сделать перегрузку конструкторов в классах-наследниках. ДЛЯ РЕШЕНИЯ: - Установить ОС Linux Ubuntu 16 LTS или версией выше (http://ubuntu.ru/get). - Установить Oracle Java SE 8, следуя инструкциям (http://help.ubuntu.ru/wiki/java). НЕ УСТАНАВЛИВАЙТЕ OpenJDK. Сразу переходите к разделу «Установка Oracle Java сторонним скриптом от проекта webupd8.org (JRE и JDK)». - Скачать среду разработки IntelliJ IDEA (https://www.jetbrains.com/idea/) ВАРИАНТЫ: Вариант 1 Список объектов продажи состоит из двух видов напитков: чай и кофе. Поля базового класса: ID товара Название Цена Счётчик товаров Фирма поставщик Страна производитель Поля для чая: Вид упаковки Поля для кофе: вид кофейных зёрен (арабика, робуста) Вариант 2 Список объектов продажи элетроники 3-х видов: телефоны, сматфоны и планшеты. Поля базового класса: ID товара Название Цена Счётчик товаров Фирма Модель ОС Поля для телефонов: Тип корпуса (классический, раскладушка) Поля для сматфонов: Тип SIM-карты (micro-SIM, обычная) Количество SIM-карт Поля для планшетов: Видеопроцессор Разрешение экрана Вариант 3 Список объектов продажи состоит из двух типов спортивной одежды: футболки и кепки. Поля базового класса: ID товара Название Цена Счётчик товаров Фирма-производитель Вариант 4 Список объектов продажи состоит из трёх типов техники: телевизоры, телеприставки, игровые консоли. Вся техника может быть разных моделей. Поля базового класса: ID товара Название Цена Счётчик товаров Фирма Модель Вариант 5 Список объектов продажи состоит из трёх типов: краски, инструменты, стройматериалы. Поля базового класса: ID товара Название Артикул Цена Счётчик товаров Фирма-производитель --------------------------------------------------------------------- 2. Классы-коллекции. --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Изучить особенности реализации классов-коллекций в Java. 2. Доработать программу, разработанную ранее. 3. Разработать класс для хранения и обработки персональных данных пользователей Credentials (Поля: ID, Фамилия, Имя, Отчество, e-mail). 4. Разработать класс-коллекцию «корзину» (ShoppingCart) для сгенерированных объектов по варианту. При операции add происходит добавление объекта в «корзину». При операции delеte происходит удаление объекта из «корзины». 5. Разработать класс «заказ» (Order). 6. Добавить для класса «заказ» поле «статус заказа» (в ожидании, обработан). 7. Добавить для класса «заказ» поля «время создания» и «время ожидания». Время создания устанавливается в момент оформления покупки. Время ожидания – время, через которое заказ должен исчезнуть (должен быть обработан), считая от времени создания. 8. Разработать класс-коллекцию «заказы» (Orders) для объединения списка заказов. 9. Для класса «заказы» разработайте функцию «оформить покупку». При выполнении данной функции «корзина» с товарами объединяется в объект «заказ» вместе с данными пользователя и добавляется в класс-коллекцию «заказы». Реализовать отношение - агрегация. Агрегация (агрегирование по ссылке) — отношение «часть-целое» между двумя равноправными объектами, когда один объект (контейнер) имеет ссылку на другой объект. 10. Добавить функцию проверки заказов - обход коллекции и удаление всех объектов, время ожидания которых истекло и статус «обработан». 11. Для хранения сгенерированных идентификаторов товаров используйте коллекцию, удобную для поиска в соответствии с вашим вариантом. 12. Добавьте функцию поиска объекта в коллекции «корзина» по идентификатору. 13. Добавьте в класс-коллекцию «корзина» функцию «показать все объекты». 14. Добавьте в класс-коллекцию «заказы» функцию «показать все заказы». 15. Продемонстрировать в программе все новые функции. ВАРИАНТЫ: Вариант 1 Коллекция для хранения объектов в классе «корзина»: ArrayList Коллекция для хранения объектов в классе «заказы»: LinkedList Коллекция для хранения и поиска уникальных идентификаторов: HashSet Коллекция для хранения объектов по времени создания: HashMap Вариант 2 Коллекция для хранения объектов в классе «корзина»: LinkedList Коллекция для хранения объектов в классе «заказы»: ArrayList Коллекция для хранения и поиска уникальных идентификаторов: HashSet Коллекция для хранения объектов по времени создания: TreeMap Вариант 3 Коллекция для хранения объектов в классе «корзина»: ArrayList Коллекция для хранения объектов в классе «заказы»: LinkedList Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени создания: HashMap Вариант 4 Коллекция для хранения объектов в классе «корзина»: LinkedList Коллекция для хранения объектов в классе «заказы»: PriorityQueue Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени создания: HashMap Вариант 5 Коллекция для хранения объектов в классе «корзина»: ArrayList Коллекция для хранения объектов в классе «заказы»: LinkedList Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени создания: LinkedHashMap --------------------------------------------------------------------- 3. Generic-классы в Java. --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Изучить принципы построения классов и методов generic в Java. 2. Доработать программу, разработанную ранее. 3. Сделать из класса «корзина» Generic-класс, позволяющий работать с объектами (добавлять, удалять и т.д.). В качестве параметра класс должен принимать различные объекты (использовать ограничения на тип). 4. Сделать из класса «заказы» Generic-класс, позволяющий работать с заказами (добавлять, удалять и т.д.). 5. Протестируйте на коллекциях разных видов и посмотрите за ошибками компиляции, которые возникают при неправильном использовании generics. --------------------------------------------------------------------- 4. Многопотоковые приложения. --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Изучить особенности реализации и работы потоков в Java. 2. Доработать программу, разработанную ранее. 3. Создать абстрактный класс ACheck, описывающий проверку заказов по статусу. 4. Реализовать класс ACheck для каждого статуса заказа. Оба класса должны быть выполнены в виде отдельных потоков и работать с коллекцией объектов. Один поток с определенным интервалом или по команде с консоли делает проверку коллекции и проверяет заказы по статусу «в ожидании». Если заказ обнаружен в этом состоянии, то меняется статус заказа на состояние «обработан». Другой поток проверяет заказы по статусу «обработан». Если заказ обнаружен в этом состоянии, заказ удаляется из списка. 5. Сделать класс автоматической генерации заказов в виде отдельного потока. Спроектируйте класс таким образом, чтобы можно было запустить одновременно несколько экземпляров класса с разным интервалом времени. 6. Продемонстрировать работу классов-потоков. --------------------------------------------------------------------- 5. Потоки данных. Работа с локальными файлами. --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Изучить особенности реализации потоков ввода-вывода в Java. 2. Доработать программу, разработанную ранее. 3. Разработать интерфейс IOrder (readById, saveById, readAll, saveAll) и абстрактный базовый класс AManageOrder для хранения заказов. 4. Реализовать класс ManagerOrderFile для хранения заказов в виде двоичного файла. 5. Реализовать класс ManagerOrderJSON для хранения заказов в виде текстового файла в формате JSON. --------------------------------------------------------------------- 6. Сетевые приложения «клиент-сервер». --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Изучить особенности реализации сетевых приложений в Java. 2. Используя программу, разработанную ранее, разработать клиент-серверное приложение. 3. Сервер по UDP делает оповещение в локальную сеть, высылая внутри пакета порт на соединение. 4. Клиент слушает UDP-порт и ждет оповещения. Получив оповещение, клиент извлекает порт и IP сервера из пакета и устанавливает соединение по TCP. Оправляет заказ. Отсоединяется от сервера. Ждет оповещения о статусе заказа по UDP и генерирует новые заказы при условии получения оповещения. 5. Сервер, получив заказ, складывает его в очередь заказов. 6. Организовать на сервере автоматическую обработку заказов, используя наработки из предыдущих лабораторных работ. При изменении на статус «обработан» клиенту по UDP высылается оповещение. 7. Клиент, получив оповещение о изменении статуса заказа, выводит на консоль время обработки заказа и информацию о заказе. 8. Сделать возможность одновременной работы нескольких клиентов. Оповещения можно делать на несколько UDP портов. --------------------------------------------------------------------- 7. Java EE. Spring Framework. --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Используя Spring Boot, разработать простое MVC веб-приложение. 2. Для сборки проекта использовать сборщик maven. 3. Для логирования операций использовать Log4j. 4. Сделать обработку команды (readAll). При запросе в строке браузера http://localhost:[port]/?command=readall возвращаются все заказы в виде JSON. 5. Сделать обработку команды (readById). При запросе в строке браузера http://localhost:[port]/?command=readById&order_id=[id] возвращается обратно заказ с идентификатором [id] в виде JSON. 6. Сделать обработку команды (addToCard). При запросе в строке браузера http://localhost:[port]/?command=addToCard&card_id=[id] генерируется товар и добавляется в корзину с идентификатором [id]. Пользователю возвращается id нового товара. 7. Сделать обработку команды (delById). При запросе в строке браузера http://localhost:[port]/?command=delById&order_id=[id] удаляется заказ с идентификатором [id]. Пользователю возвращается 0 в случае успешного удаления и >1 если была ошибка. 8. Написать свой класс-обработчик ошибок при удалении. (код 1 - нет такого заказа, код 2 - файл поврежден, 3 - неправильная команда). --------------------------------------------------------------------- 8. Java EE. Hibernate Framework. --------------------------------------------------------------------- ОСНОВНЫЕ ЗАДАЧИ: 1. Изучить Hibernate Framework. 2. Установить БД mysql. 3. Создать таблицы в БД согласно своему варианту. 4. Реализовать команды из предыдущей лабораторной работы, используя Hibernate Framework 5. Настройки к БД хранить в Properties File проекта. 6. Для сборки проекта использовать сборщик gradle. --------------------------------------------------------------------- Составитель, преподаватель курса Чистяков Н.А.