Добавил:
МТУСИ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет1 (2)

.docx
Скачиваний:
0
Добавлен:
10.10.2025
Размер:
398.96 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Кафедра «Программная инженерия»

Лабораторная работа №1

по дисциплине «Рефакторинг баз данных и приложений» на тему

«Рефакторинг приложений с использованием обратного проектирования»

Выполнил: Студент гр. БПИ 2304

Афанасьев

А.C.

Москва 2025

Цель работы

  1. Ознакомиться с основными принципами рефакторинга и обратного проектирования.

  2. Научиться анализировать существующий код, выявлять его слабые стороны и предлагать улучшения.

  3. Применить на практике методы рефакторинга для улучшения читаемости, структуры и производительности кода.

  4. Развить навыки документирования изменений в коде.

Задание

    1. Ознакомьтесь с основными принципами рефакторинга, такими как принцип разделения ответственности, уровни абстракции и устранение дублирования. Выберите небольшой проект или модуль, который вы ранее разработали (можно взять проект с учебной практики про парсинг с hh.ru).

    2. Проведите обратное проектирование выбранного кода. Для этого: постройте диаграмму классов или модулей, чтобы визуализировать структуру программы, определите основные зависимости между компонентами, найдите участки кода, которые сложно читать, поддерживать или тестировать.

    3. Примените следующие техники рефакторинга: разделение больших функций на более мелкие, устранение дублирующегося кода, улучшение именования переменных, функций и классов, введение уровней абстракции для упрощения сложных участков кода, убедитесь, что после каждого изменения программа сохраняет своё поведение.

    4. Опишите все изменения, которые вы внесли в код, и обоснуйте их необходимость. Подготовьте отчет, включающий исходное состояние кода (с примерами проблемных участков), внесенные изменения (с пояснениями), итоговое состояние кода.

    5. Проверьте, что после рефакторинга программа работает корректно.

Ход выполнения

Я подготовил пример лабораторной работы с проектом около 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. Коммиты

Подробное описание изменений

  1. Выделение класса Student (основное изменение)

Раньше данные о студентах хранились в StudentManager в виде массива строк:

Рис 9.

Создан отдельный класс для принципа единственной ответственности (SRP):

-Student отвечает только за хранение данных о студенте.

-StudentManager — только за управление списком студентов.

Типизация данных:

Раньше возраст хранился как часть строки, теперь — как число (int age), что исключает ошибки парсинга.

Неизменяемость:

Поля name и age нельзя изменить после создания объекта, что защищает от случайных изменений.

Удобство расширения:

Добавить новые поля (например, email, id) теперь можно без изменения логики

StudentManager.

  1. Замена массива на List<Student>

-ArrayList автоматически расширяется, нет риска переполнения.

-Не нужно вручную следить за индексом (count).

-Использование встроенных методов add(), remove(), contains() вместо ручной реализации.

  1. Добавление final к полю students в StudentManager

  2. Улучшение имен методов

  3. Оптимизация метода find()

Итоговые преимущества рефакторинга

Чистый код: Классы и методы имеют четкие обязанности и имена переменных и методов стали понятнее.

Надежность: Неизменяемые поля (final) защищают от ошибок и типизация данных исключает парсинг строк.

Масштабируемость: Легко добавить новые поля или методы без переписывания логики.

Соответствие принципам ООП : Инкапсуляция, SRP, неизменяемость.

Вывод

В ходе выполнения данной лабораторной работы мы научились проводить рефакторинг кода, улучшая его структуру и читаемость. Освоили принципы неизменяемости (final) и разделения ответственности (SRP). Изучили работу с коллекциями (ArrayList) вместо массивов для гибкости. На практике применили инкапсуляцию и типизацию данных для безопасности. Убедились, как чистый код упрощает поддержку и расширение программ.

Ссылка на гит - https://github.com/andsee18/lab1refact

Соседние файлы в предмете Рефакторинг