Скачиваний:
151
Добавлен:
08.07.2017
Размер:
4.08 Mб
Скачать

Возвратное проектирование (Round trip design)

Синхронизация рабочих продуктов и генерируемого исходного кода. Трационая схема:

Примеры программ CDPro и Borland Together.

Реинжиниринг

Реинжиниринг ПО – перепроектирование программных систем. Две фазы:

обратный

прямой

Обратный ​– процесс анализа существующей программы с целью редокументирования, описания функциональности и определения технических решений, которые были сделаны.

Прямой ​– создание нового ПО, с использованием части решений старого.

4. Рефакторинг, цели и правила применения. Каталог рефакторингов, классификация, примеры применения

Рефакторинг ​– процесс изменения внутренней структуры ПО без изменения функциональности. Метод улучшения программы.

Почему нужно?

рефакторинг улучшает процесс разработки ПО

рефакторинг делает ПО лучше познаваемым

позволяет находить ошибки

улучшает стиль программирования

снижает время разработки

Когда этим заниматься?

при добавлении новой функциональности

когда исправляется ошибка

при обзоре кода

Где?

дублирование кода

длинный метод

большой класс

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

комментарий

lazy class “ленивый” класс

“пулеметная хирургия” (?)

Большой хороший каталог рефакторинга:​https://refactoring.guru/ru/catalog

Классификация:

1.Составление методов

Извлечение метода

Встраивание метода

Извлечение переменной

Встраивание переменной

Замена переменной вызовом метода

Расщепление переменной

Удаление присваиваний параметрам

Замена метода объектом методов

Замена алгоритма

Пример: Извлечение метода

Проблема

У вас есть фрагмент кода, который можно сгруппировать.

void printOwing() {

printBanner();

System.out.println("name: "+ name);

System.out.println("amount: "+ getOutstanding());

}

Решение

Выделите участок кода в новый метод (или функцию) и вызовите этот метод вместо старого кода.

void printOwing() {

printBanner();

printDetails(getOutstanding());

}

void printDetails(double outstanding) {

System.out.println("name: "+ name);

System.out.println("amount: "+ outstanding);

}

2.Перемещение функций между объектами

Перемещение метода

Перемещение поля

Извлечение класса

Встраивание класса

Сокрытие делегирования

Удаление посредника

Введение внешнего метода

Введение локального расширения

Пример:

Извлечение класса

Проблема Один класс работает за двоих.

Решение Создайте новый класс, переместите в него поля и методы, отвечающие за определённую функциональность.

3.Организация данных

Самоинкапсуляция поля

Замена простого поля объектом

Замена значения ссылкой

Замена ссылки значением

Замена поля­массива объектом

Дублирование видимых данных

Замена однонаправленной связи двунаправленной

Замена двунаправленной связи однонаправленной

Замена магического числа символьной константой

Инкапсуляция поля

Инкапсуляция коллекции

Замена кодирования типа классом

Замена кодирования типа подклассами

Замена кодирования типа состоянием/стратегией

Замена подкласса полями

Пример:

Проблема

Есть много одинаковых экземпляров одного класса, которые можно заменить одним объектом.

Решение

Превратите одинаковые объекты в один объект­ссылку.

4.Упрощение условных выражений

Разбиение условного оператора

Объединение условных операторов

Объединение дублирующихся фрагментов в условных операторах

Удаление управляющего флага

Замена вложенных условных операторов граничным оператором

Замена условного оператора полиморфизмом

Введение Null­объекта

Введение проверки утверждения

Пример:

Разбиение условного оператора

Проблема

У вас есть сложный условный оператор (if­then/elseилиswitch). if (date.before(SUMMER_START) || date.after(SUMMER_END)) { charge = quantity * winterRate + winterServiceCharge;

}

else {

charge = quantity * summerRate;

}

Решение

Выделите в отдельные методы все сложные части оператора: условие, thenи else.

if (notSummer(date)) {

charge = winterCharge(quantity);

}

else {

charge = summerCharge(quantity);

}

5.Упрощение вызовов методов

Переименование метода

Добавление параметра

Удаление параметра

Разделение запроса и модификатора

Параметризация метода

Замена параметра набором специализированных методов

Передача всего объекта

Замена параметра вызовом метода

Замена параметров объектом

Удаление сеттера

Сокрытие метода

Замена конструктора фабричным методом

Замена кода ошибки исключением

Замена исключения проверкой условия

Пример:

Проблема

Методу не хватает данных для осуществления каких­то действий.

Решение

Создайте новый параметр, чтобы передать эти данные.

6.Решение задач обобщения

Подъём поля

Подъём метода

Подъём тела конструктора

пуск метода

Спуск поля

Извлечение подкласса

Извлечение суперкласса

Извлечение интерфейса

Свёртывание иерархии

Создание шаблонного метода

Замена наследования делегированием

Замена делегирования наследованием Пример:

Подъём поля Проблема

Два класса имеют одно и то же поле.

Решение

Переместите поле в суперкласс, убра​в его из подклассов.

5. Шаблоны проектирования, цели, правила применения Использовал:

https://ru.wikipedia.org/wiki/Шаблон_проектирования lektsii2.djvu

Страуструп (страница 377 ­ ...) http://www.williamspublishing.com/PDF/5­8459­0301­7/part3.pdf https://habrahabr.ru/post/210288/

Шаблон проектирования​— повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.

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

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

Типы шаблонов проектирования

1.Основные

2.Порождающие шаблоны​­ ​шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.

Абстрактная фабрика

Строитель

Фабричный метод

Прототип

Одиночка

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

Адаптер

Мост

Компоновщик

Декоратор

Фасад

Приспособленец

Заместитель