undefined

Большая задача: Рефакторинг Java

Java Multithreading
5 уровень , 16 лекция
Доступна

— Привет, Амиго!

— Здравия желаю, Капитан Бобров!

— Ты чувствуешь этот запах, боец?

— Никак нет.

— Скорее всего, запах доносится из твоего терминала. Сейчас посмотрим, чем ты тут занят.

— Что? Как может пахнуть код?

— Да, пахнуть определенно не может… а вот пованивать — запросто.

— Капитан, я тут разрабатываю новую систему управления персоналом корабля. Вот, проект практически готов.

— Ну что же, пришло твое время постичь Дзэн в рефакторинге. Только так ты сможешь очистить свой код. Обратись за заданием к агенту Intellij IDEA, там получишь все инструкции.

— Есть, идти выполнять приказ.

Большая задача: Рефакторинг Java - 1
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (1)
Пришло время немного порефакторить. Википедия говорит: "Рефакторинг (англ. refactoring) или реорганизация кода - процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В основе рефакторинга лежит последовательность небо
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (2)
2.1. Извлечение подкласса. 2.1.1. Добавь класс Soldier в пакет human. 2.1.2. Избавься от поля isSoldier. 2.1.3. Обнови сигнатуру конструктора Human. 2.1.4. Перенеси в Soldier необходимые методы из Human. 2.2. Подъем тела конструктора. 2.2.1. Перенеси инициализацию полей name и age в подходящее место
undefined
7
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (3)
3.1. Спуск поля. Спусти поле course в соответствующий класс. Сделай его приватным. 3.2. Спуск метода. Спусти геттер для поля course в соответствующий класс. 3.3. Извлечение интерфейса. 3.3.1. Создай интерфейс Alive (живой) в пакете human. 3.3.2. Интерфейс должен содержать метод жить live(). 3.3.3. Д
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (4)
4.1. Замена наследования делегированием. 4.1.1. Класс University не должен наследоваться от Student. 4.1.2. Класс University должен содержать список students. Не забудь его инициализировать. 4.1.3. Добавь сеттер и геттер для students. 4.1.4. Университет имеет название (name) и возраст (age). Добавь
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (5)
5.1. Создание шаблонного метода. 5.1.1. Добавь в класс Human метод String getPosition(), который должен возвращать строку "Человек". 5.1.2. Переопредели этот метод в классе Student и Teacher. Метод должен возвращать "Студент" и "Преподаватель" соответственно. 5.1.3. Замени метод printData в подкласс
undefined
28
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (6)
6.1. Замена параметра набором специализированных методов. Замени метод setValue() класса Student специализированными методами setCourse и setAverageGrade. 6.2. Добавление параметра. Добавить параметр с типом double в метод getStudentWithAverageGrade(), чтобы было понятно с каким средним балом нужен
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (7)
7.1. Параметризация метода. Замени методы incAverageGradeBy01() и incAverageGradeBy02() одним методом incAverageGrade(double delta). 7.2. Передача всего объекта. Перепиши метод addInfoAboutStudent(), чтобы он в качестве параметра принимал объект типа Student. 7.3. Замена параметра вызовом метода. Пе
undefined
7
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (8)
8.1. Удаление сеттера. Удали метод setId(). Поле id должно устанавливаться только в момент создания объекта. 8.2. Сокрытие метода (поля). Изменить область видимости поля nextId в соответствии с областью его использования. 8.3. Замена исключения проверкой условия. Перепиши метод removeStudent(int ind
undefined
28
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (9)
9.1. Самоинкапсуляция поля. Перепиши метод incAverageGrade() используя сеттер и геттер для доступа к averageGrade. 9.2. Замена поля-массива объектом. Замени массив int[] size объектом нового типа Size, содержащим публичные поля: рост int height и вес int weight. Публичный класс Size объяви внутри кл
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (10)
Разберись с кодом в пакете car (машина). 10.1. Замена конструктора фабричным методом. 10.1.1. Объяви классы Truck (грузовик), Sedan (седан) и Cabriolet (кабриолет), унаследованные от Car. 10.1.2. Добавь в них конструкторы, принимающие int numberOfPassengers. 10.1.3. Добавь фабричный статический мето
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (11)
11.1. Замена кода ошибки исключением. Перепиши метод заправиться fill(double numberOfLiters), чтобы он в случае ошибки кидал исключение Exception. Исправленный метод должен возвращать void. 11.2. Разбиение условного оператора. 11.2.1. Добавь и реализуй метод в классе Car, определяющий относится ли переданная дата к лету: boolean isSummer(Dat
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (12)
12.1. Объединение условных операторов. 12.1.1. Добавь внутренний метод, сообщающий, могут ли быть перевезены пассажиры boolean canPassengersBeTransferred() в класс Car. Метод должен возвращать true, если водитель доступен isDriverAvailable и есть топливо fuel. 12.1.2. Перепиши метод getNumberOfPasse
undefined
28
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (13)
Разберись с кодом пакета user (пользователь). 13.1. Извлечение метода. Добавь метод printInfo(), который будет выводить имя и фамилию в консоль в формате Имя: Вася Фамилия: Пупкин Замени повторяющийся код метода printUsers() его вызовом. 13.2. Встраивание метода. Избавься от метода ageLessTh
undefined
14
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (14)
14.1. Перемещение поля. Замени поля isManAnya и isManRoma полем man в нужном классе. Добавь сеттер и геттер для нового поля (при выборе имен методов учти тип поля). 14.2. Извлечение класса. 14.2.1. Добавь класс Address в пакет user. 14.2.2. Перенеси поля country, city и house в новый класс. 14.2.3.
undefined
7
Задача
Java Multithreading, 5 уровень, 16 лекция
Недоступна
Рефакторинг (15)
Отлично. Ты освоил основные методы рефакторинга: Подъем поля, Подъем метода, Инкапсуляция коллекции, Извлечение подкласса, Подъем тела конструктора, Спуск метода, Спуск поля, Извлечение интерфейса, Свертывание иерархии, Замена наследования делегированием, Извлечение суперкласса, Замена простого поля
Комментарии (174)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Виталий Уровень 27 Санкт-Петербург Россия
30 мая 2021
Классная задача.
Евгений Уровень 37 Коряжма Россия
3 апреля 2021
А мне понравилось
Даниил Александрович Уровень 35 Тамбов Россия
16 марта 2021
ктото же такой быдло-код придумал. Такие программы часто приходилось переписывать за супер кодерами, язык у ребят подвешан хорошо наплету, что хочешь, а вот руки из другого места явно. По самому заданию: Не всегда была ясна логика происходящего, по большей части процесс ради процесса.
Ибрагим Шаипов Уровень 34 Москва
12 марта 2021
Рефакторинг(8) проверяй index на >= 0 в блоке try-catch в catch не выводи ничего )) иначе как я зафейлишь 11 попыток)
Булат Уровень 37 Москва
16 февраля 2021
Крутая задача, спасибо
halfear Уровень 34 Москва Россия
27 января 2021
Пока лучшая финальная задача! Чётко по главам книги "Мартин Фаулер - Рефакторинг. Улучшение существующего кода." Всё понятно, что и для чего делается.
Илья Уровень 30 Дзержинск
24 января 2021
"Отлично. Ты освоил основные методы рефакторинга: [+100500 "усвоенных" правил]" Эммм.. нну да...
Aleksandr Уровень 41
19 января 2021
у меня одного при открытии в идее каждой новой задачи всё время грузится класс UniversityPerson в активном окне ?
Andrei Po Уровень 32
13 января 2021
1.1. Подъем поля в базовый класс. 1.2. Подъем метода в базовый класс. В Intellij Idea - правый клик на поле / Refactor /Pull Members Up...
Agent Smith Уровень 37
4 декабря 2020
Хорошие, лёгкие задачки на повторение. Если вы дошли до этого уровня, то весь этот рефакторинг должен быть интуитивно понятным. Хотя некоторые решения можно назвать спорными, но в тренировочных целях вполне сойдёт.