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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. 10
    88003334434

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. 19
    Проблемы

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  38. 40
    Почитать


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



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

    View full-size slide

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

    View full-size slide