Промышленная разработка ПО. Лекция 3. Особенности...
-
Upload
mikhail-payson -
Category
Education
-
view
149 -
download
2
description
Transcript of Промышленная разработка ПО. Лекция 3. Особенности...
Лекция 3. Особенности работы программиста.
Часть 1. Проектирование. Рефакторинг.
ПРОМЫШЛЕННАЯ РАЗРАБОТКА ПО
О ЧЁМ БУДЕМ ГОВОРИТЬ СЕГОДНЯ?
Основные задачи программиста Специфика крупного проекта
Разработка «правильной» архитектуры
Написание «правильного» кода Рефакторинг
Наиболее ценные навыки программиста
Три ступени роста программиста
ЗАДАЧИ ПРОГРАММИСТА (ОБЩИЕ)
• Разработка архитектуры системы
• Написание кода
• Исправление дефектов
ЗАДАЧИ ПРОГРАММИСТА (С ТОЧКИ ЗРЕНИЯ ЖИЗНЕННОГО ЦИКЛА ПО)
• Написание первой версии системы с нуля
• Проектирование
• Кодирование
• Отладка
• Поддержка текущей версии
• Добавление новых функций
• Проектирование
• Кодирование
• ОтладкаДиалог выбора шрифта в Windows Vista, сохранившийся со времён Windows 3.1
Код, который пишет программист
• Может использоваться через десятки лет
• Может использоваться множеством других программистов
• Может быть изменён до неузнаваемости в новой версии
• Может быть выброшен уже в следующем релизе
ЭТО НУЖНО ЗАПОМНИТЬ!
ОСНОВНОЙ ПОДХОД ХОРОШЕГО ПРОГРАММИСТА
Думать, прежде чем сделать!
(но не впадать в бесконечные циклы)
ПРОЕКТИРОВАНИЕ
Очевидно, что 30 минут мало, чтобы рассказать об архитектуре что-нибудь практически полезное
• Архитектура системы – это каркас, который обеспечивает её прочность
• Архитектуру необходимо продумывать заранее, до того, как писать код
• Чем детальнее проработана архитектура, тем проще потом писать код
• Архитектура не вечна, изменения неизбежны
АРХИТЕКТУРА
• Проектирование происходит «сверху вниз» – от крупных частей к мелким
• Для многих задач существуют готовые решения в виде паттернов проектирования
КАК ПРОЕКТИРОВАТЬ СИСТЕМУ
• Слабая связность (Low coupling)
• Сильное зацепление (High cohesion)
• KISS (keep it short & simple)
• DRY (don’t repeat yourself)
• Работа на уровне абстракций
• Использование готовых решений
ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ
• Принцип единственной обязанности
• Принцип открытости-закрытости
• Принцип подстановки Барбары Лисков
• Принцип разделения интерфейсов
• Принцип инверсии зависимостей
ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ. S.O.L.I.D.
• Проектировать надо только очень большие проекты
• Система должна проектироваться так, чтобы предусматривать любое будущее изменение требований
• Система проектируется один раз. Отдельно думать над архитектурой новых функций не имеет смысла
НАИБОЛЕЕ ЧАСТЫЕ ЗАБЛУЖДЕНИЯ ПРИ ПРОЕКТИРОВАНИИ ПРОГРАММНЫХ СИСТЕМ
• Э. Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес: Приёмы объектно-ориентированного проектирования. Паттерны проектирования
• Г.Буч: Объектно-ориентированный анализ и проектирование (с примерами приложений на C++)
• М. Фаулер: Архитектура корпоративных программных систем
ЧТО ПОЧИТАТЬ?
РЕФАКТОРИНГ
Очевидно, что 30 минут мало, чтобы рассказать о рефакторинге что-нибудь практически полезное
ОПРЕДЕЛЕНИЕ
Рефакторинг:
Процесс изменения внутренней структуры программы без изменения её поведения.
Это я обязательно спрошу на экзамене
• Πάντα ε κα ο δ ν μένειῥ ῖ ὶ ὐ ὲ
• Изменения в функциональных или нефункциональных требованиях
• «Потеря фокуса» в архитектуре со временем
• Возникшие ошибки
• Изначально низкое качество кода
• Потеря «читабельности» кода
ПРЕДПОСЫЛКИ РЕФАКТОРИНГА
Рефакторинг не устраняет эти причины, а «готовит почву» для их устранения!
• Переименование метода, класса, пакета
• Выделение метода, класса, интерфейса
• Замена конкретного класса абстракцией
• Замена условного оператора полиморфизмом
• Замена наследования делегированием
• …
ПРИМЕРЫ РЕФАКТОРИНГА
Мартин Фаулер, Рефакторинг: улучшение существующего кода
• …устранение ошибок
• …добавление новых функций
• …оптимизация производительности
• …переписывание кода с нуля
Необходимость рефакторинга должна быть чётко обоснована. Иначе это не рефакторинг, а перфекционизм.
РЕФАКТОРИНГ ЭТО НЕ…
Рефакторинг – это не самоцель!
• Необходимо убедиться, чтобы до и после всё было одинаково
• Желательно автоматически
• Желательно быстро
Нормально осуществлять рефакторинг можно только в коде, покрытом Unit-тестами.
РЕФАКТОРИНГ И МОДУЛЬНОЕ ТЕСТИРОВАНИЕ
Мартин Фаулер, Рефакторинг: улучшение существующего кода
• М. Фаулер: Рефакторинг. Улучшение существующего кода
• http://www.refactoring.com/catalog/index.html
ЧТО ПОЧИТАТЬ?
ВРЕМЯ ЗАДАВАТЬ ВОПРОСЫ