Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Абстракция vs простота. Александр Макаров

Абстракция vs простота. Александр Макаров

Deep Refactoring

May 05, 2017
Tweet

More Decks by Deep Refactoring

Other Decks in Programming

Transcript

  1. 1
    Абстракция и её
    проблемы
    Александр Макаров
    Yii core team, Stay.com
    http://slides.rmcreative.ru/2017/abstraction/

    View Slide

  2. 2
    — Что такое абстракция и абстрагирование
    — Зачем?
    — Проблемы
    — Выводы

    View Slide

  3. 3
    Что такое абстракция и
    абстрагирование

    View Slide

  4. 4
    Из философии: отвлечение в процессе познания от
    несущественных сторон, свойств, связей объекта (предмета
    или явления) с целью выделения их существенных,
    закономерных признаков; абстрагирование —
    теоретическое обобщение как результат такого отвлечения.

    View Slide

  5. 5
    Зачем?
    Впихнуть невпихуемое.

    View Slide

  6. 6
    Память
    — Кратковременная
    — Долговременная

    View Slide

  7. 7
    TTL объекта = ~20 сек.

    View Slide

  8. 8
    Оперативно (в кратковременной памяти) человек может
    оперировать малым числом объектов:
    — 7±2 объектами (George Miller, 1989)
    — 4±1 (Cowan, 2001)
    — Число зависит от объектов

    View Slide

  9. 9
    Группировка (Chunking)

    View Slide

  10. 10
    88003334434

    View Slide

  11. 11
    12
    8-800-333-44-34

    View Slide

  12. 13
    14
    Вернёмся к
    абстрагированию

    View Slide

  13. 15
    Абстрагировать можно алгоритмы и данные. Объект — их
    сочетание.

    View Slide

  14. 16
    Архитектуру изобретают для того, чтобы совладать с
    неподъёмно сложными системами.

    View Slide

  15. 17
    Обычно систему бьют на слои (группы, chunk-и). Каждый
    последующий более абстрактный слой базируется на
    предыдущем менее абстрактном.

    View Slide

  16. 18
    Так можно уместить в голове общую картину разом.

    View Slide

  17. 19
    Проблемы

    View Slide

  18. 20
    Барьер абстракции
    Два разных объекта могут при абстрагировании стать в
    определённом контексте неразличимы.

    View Slide

  19. 21
    "All non-trivial abstractions, to some degree, are leaky." Joel
    Spolski
    Практически все абстракции "дырявые". Через них
    просачиваются детали реализации.

    View Slide

  20. 22
    Чтобы полностью понять абстракцию приходится зарыться в
    детали реализации.

    View Slide

  21. 23
    Придётся вникнуть во всё. Начиная с совсем абстрактного и
    заканчивая почти конкретным.

    View Slide

  22. 24
    Проще вникать в простое и конкретное.

    View Slide

  23. 25
    Побочный эффект
    У абстракции есть свойства, которых нет в объекте.

    View Slide

  24. 26
    OOD, DDD и т.д.
    — Цель — подобрать подходящую абстракцию
    — Важен контекст

    View Slide

  25. 27
    Плохая абстракция хуже отсутствия абстракции.

    View Slide

  26. 28
    Абстракция (класс) зависит от того, кто абстрагирует. Для
    одной задачи два человека получат разный набор классов.

    View Slide

  27. 29
    Своя абстракция всегда более понятна. Отсюда желание всё
    переписать.

    View Slide

  28. 30
    Все хотят писать реюзабельный код, но никто не хочет
    реюзать чужой код.

    View Slide

  29. 31
    Смена контекста

    View Slide

  30. 32
    При изменении контекста абстракция может перестать
    работать.

    View Slide

  31. 33
    Практически невозможно оценить архитектуру, не развивая
    в течение существенного времени приложение, на ней
    построенное.

    View Slide

  32. 34
    Совсем сходу не
    оценить?

    View Slide

  33. 35
    Оценить техническое исполнение абстрагирования
    возможно:
    — Coupling
    — Cohesion
    — SOLID
    — и т.д.

    View Slide

  34. 36
    Одинаковая подготовка делает различия меньше, а
    понимание лучше.

    View Slide

  35. 37
    Именно поэтому надо читать и знать Буча, Фаулера и т.д.

    View Slide

  36. 38
    Абстракция — не цель, а инструмент.

    View Slide

  37. 39
    Абстракция — необходимое зло.

    View Slide

  38. 40
    Почитать


    — Barbara Oakley: A Mind For Numbers (Думай как
    математик)



    Wikipedia: Abstraction
    Wikipedia: Short-term memory
    Why Every Single Element of SOLID is Wrong!
    Сергей Тепляков
    Гради Буч, Объектно-ориентированный анализ и
    проектирование

    View Slide

  39. 41
    Время вопросов!
    — http://slides.rmcreative.ru/2017/abstraction/

    View Slide