Скачиваний:
153
Добавлен:
08.07.2017
Размер:
4 Мб
Скачать
☆

Возвратное проектирование (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.Структурные шаблоны​определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.

●Адаптер

●Мост

●Компоновщик

●Декоратор

●Фасад

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

●Заместитель