Successfully reported this slideshow.
Your SlideShare is downloading. ×

Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг.

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 21 Ad

Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг.

Download to read offline

Третья лекция спецкурса по промышленной разработке ПО

Третья лекция спецкурса по промышленной разработке ПО

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг. (20)

Advertisement

More from Mikhail Payson (9)

Recently uploaded (20)

Advertisement

Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг.

  1. 1. ПРОМЫШЛЕННАЯ РАЗРАБОТКА ПО Лекция 3. Особенности работы п рограммиста. Часть 1. Проектирование. Рефакторинг.
  2. 2. О ЧЁМ БУДЕМ ГОВОРИТЬ СЕГОДНЯ? Основные задачи программиста Специфика крупного проекта Разработка Написание «правильной» Рефакторинг «правильного» кода архитектуры Наиболее ценные навыки программиста Три ступени роста программиста
  3. 3. ЗАДАЧИ ПРОГРАММИСТА (ОБЩИЕ) • Разработка архитектуры системы • Написание кода • Исправление дефектов
  4. 4. ЗАДАЧИ ПРОГРАММИСТА (С ТОЧКИ ЗРЕНИЯ ЖИЗНЕННОГО ЦИКЛА ПО) • Написание первой версии системы с нуля • Проектирование • Кодирование • Отладка • Поддержка текущей версии • Добавление новых функций • Проектирование • Кодирование • Отладка Диалог выбора шрифта в Windows Vista, сохранившийся со времѐн Windows 3.1
  5. 5. ЭТО НУЖНО ЗАПОМНИТЬ! Код, который пишет программист • Может использоваться через десятки лет • Может использоваться множеством других программистов • Может быть изменѐн до неузнаваемости в новой версии • Может быть выброшен уже в следующем релизе
  6. 6. ОСНОВНОЙ ПОДХОД ХОРОШЕГО ПРОГРАММИСТА Думать, прежде чем сделать! (но не впадать в бесконечные циклы)
  7. 7. ПРОЕКТИРОВАНИЕ Очевидно, что 30 минут мало, чтобы рассказать об архитектуре что-нибудь практически полезное
  8. 8. АРХИТЕКТУРА • Архитектура системы – это каркас, который обеспечивает еѐ прочность • Архитектуру необходимо продумывать заранее, до того, как писать код • Чем детальнее проработана архитектура, тем проще потом писать код • Архитектура не вечна, изменения неизбежны
  9. 9. КАК ПРОЕКТИРОВАТЬ СИСТЕМУ • Проектирование происходит «сверху вниз» – от крупных частей к мелким • Для многих задач существуют готовые решения в виде паттернов проектирования
  10. 10. ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ • Слабая связность (Low coupling) • Сильное зацепление (High cohesion) • KISS (keep it short & simple) • DRY (don’t repeat yourself) • Работа на уровне абстракций • Использование готовых решений
  11. 11. ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ. S.O.L.I.D. • Принцип единственной обязанности • Принцип открытости- закрытости • Принцип подстановки Барбары Лисков • Принцип разделения интерфейсов • Принцип инверсии зависимостей
  12. 12. НАИБОЛЕЕ ЧАСТЫЕ ЗАБЛУЖДЕНИЯ ПРИ ПРОЕКТИРОВАНИИ ПРОГРАММНЫХ СИСТЕМ • Проектировать надо только очень большие проекты • Система должна проектироваться так, чтобы предусматривать любое будущее изменение требований • Система проектируется один раз. Отдельно думать над архитектурой новых функций не имеет смысла
  13. 13. ЧТО ПОЧИТАТЬ? • Э. Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес: Приѐмы объектно- ориентированного проектирования. Паттерны проектирования • Г.Буч: Объектно-ориентированный анализ и проектирование (с примерами приложений на C++) • М. Фаулер: Архитектура корпоративных программных систем
  14. 14. РЕФАКТОРИНГ Очевидно, что 30 минут мало, чтобы рассказать о рефакторинге что-нибудь практически полезное
  15. 15. ОПРЕДЕЛЕНИЕ Рефакторинг: Процесс изменения внутренней структуры программы без изменения еѐ поведения. Это я обязательно спрошу на экзамене
  16. 16. ПРЕДПОСЫЛКИ РЕФАКТОРИНГА • Πάντα ῥεῖ καὶ οὐδὲν μένει • Изменения в функциональных или нефункциональных требованиях • «Потеря фокуса» в архитектуре со временем • Возникшие ошибки • Изначально низкое качество кода • Потеря «читабельности» кода Рефакторинг не устраняет эти причины, а «готовит почву» для их устранения!
  17. 17. ПРИМЕРЫ РЕФАКТОРИНГА • Переименование метода, класса, пакета • Выделение метода, класса, интерфейса • Замена конкретного класса абстракцией • Замена условного оператора полиморфизмом • Замена наследования делегированием • … Мартин Фаулер, Рефакторинг: улучшение существующего кода
  18. 18. РЕФАКТОРИНГ ЭТО НЕ… • …устранение ошибок • …добавление новых функций • …оптимизация производительности • …переписывание кода с нуля Необходимость рефакторинга должна быть чѐтко обоснована. Иначе это не рефакторинг, а перфекционизм. Рефакторинг – это не самоцель!
  19. 19. РЕФАКТОРИНГ И МОДУЛЬНОЕ ТЕСТИРОВАНИЕ • Необходимо убедиться, чтобы до и после всѐ было одинаково • Желательно автоматически • Желательно быстро Нормально осуществлять рефакторинг можно только в коде, покрытом Unit- тестами. Мартин Фаулер, Рефакторинг: улучшение существующего кода
  20. 20. ЧТО ПОЧИТАТЬ? • М. Фаулер: Рефакторинг. Улучшение существующего кода • http://www.refactoring.com/catalog/index.h tml
  21. 21. ВРЕМЯ ЗАДАВАТЬ ВОПРОСЫ

×