отчет1 (2)
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
Кафедра «Программная инженерия»
Лабораторная работа №1
по дисциплине «Рефакторинг баз данных и приложений» на тему
«Рефакторинг приложений с использованием обратного проектирования»
Выполнил: Студент гр. БПИ 2304
Афанасьев
А.C.
Москва 2025
Цель работы
Ознакомиться с основными принципами рефакторинга и обратного проектирования.
Научиться анализировать существующий код, выявлять его слабые стороны и предлагать улучшения.
Применить на практике методы рефакторинга для улучшения читаемости, структуры и производительности кода.
Развить навыки документирования изменений в коде.
Задание
Ознакомьтесь с основными принципами рефакторинга, такими как принцип разделения ответственности, уровни абстракции и устранение дублирования. Выберите небольшой проект или модуль, который вы ранее разработали (можно взять проект с учебной практики про парсинг с hh.ru).
Проведите обратное проектирование выбранного кода. Для этого: постройте диаграмму классов или модулей, чтобы визуализировать структуру программы, определите основные зависимости между компонентами, найдите участки кода, которые сложно читать, поддерживать или тестировать.
Примените следующие техники рефакторинга: разделение больших функций на более мелкие, устранение дублирующегося кода, улучшение именования переменных, функций и классов, введение уровней абстракции для упрощения сложных участков кода, убедитесь, что после каждого изменения программа сохраняет своё поведение.
Опишите все изменения, которые вы внесли в код, и обоснуйте их необходимость. Подготовьте отчет, включающий исходное состояние кода (с примерами проблемных участков), внесенные изменения (с пояснениями), итоговое состояние кода.
Проверьте, что после рефакторинга программа работает корректно.
Ход выполнения
Я подготовил пример лабораторной работы с проектом около 50 строк кода на Java с использованием в Visual Studio Code. Этот проект представляет собой простое консольное приложение для управления студентами, написанное на Java.
Мы проведем рефакторинг и последовательно загрузим код на GitHub. Он будет состоять из двух основных классов и продемонстрирует базовые принципы ООП.
Рисунок 1. Исходный код Main.java
Рисунок 2. Исходный код StudentManager.java
Рисунок 3. Main.java после рефакторинга
Рисунок 4. StudentManager.java после рефакторинг
Рисунок 5. Добавление отдельного класса Student
Рисунок 6. Проверка кода на работоспособность
Рисунок 7. Загрузка на git
Рисунок 8. Коммиты
Подробное описание изменений
Выделение класса Student (основное изменение)
Раньше данные о студентах хранились в StudentManager в виде массива строк:
Рис 9.
Создан отдельный класс для принципа единственной ответственности (SRP):
-Student отвечает только за хранение данных о студенте.
-StudentManager — только за управление списком студентов.
Типизация данных:
Раньше возраст хранился как часть строки, теперь — как число (int age), что исключает ошибки парсинга.
Неизменяемость:
Поля name и age нельзя изменить после создания объекта, что защищает от случайных изменений.
Удобство расширения:
Добавить новые поля (например, email, id) теперь можно без изменения логики
StudentManager.
Замена массива на List<Student>
-ArrayList автоматически расширяется, нет риска переполнения.
-Не нужно вручную следить за индексом (count).
-Использование встроенных методов add(), remove(), contains() вместо ручной реализации.
Добавление final к полю students в StudentManager
Улучшение имен методов
Оптимизация метода find()
Итоговые преимущества рефакторинга
Чистый код: Классы и методы имеют четкие обязанности и имена переменных и методов стали понятнее.
Надежность: Неизменяемые поля (final) защищают от ошибок и типизация данных исключает парсинг строк.
Масштабируемость: Легко добавить новые поля или методы без переписывания логики.
Соответствие принципам ООП : Инкапсуляция, SRP, неизменяемость.
Вывод
В ходе выполнения данной лабораторной работы мы научились проводить рефакторинг кода, улучшая его структуру и читаемость. Освоили принципы неизменяемости (final) и разделения ответственности (SRP). Изучили работу с коллекциями (ArrayList) вместо массивов для гибкости. На практике применили инкапсуляцию и типизацию данных для безопасности. Убедились, как чистый код упрощает поддержку и расширение программ.
Ссылка на гит - https://github.com/andsee18/lab1refact
