Знаком (*) я буду обозначать темы со звездочкой — это не обязательно будет означать повышенную сложность, а, например, какие-то дополнения к текущим темам, чуть более глубокое их раскрытие итп.
Ок, допустим мы разработали, как мы считаем, универсальный алгоритм для покупок. Назвали его «купи» и описали какие действия нужно осуществить для того, чтобы купить «что купить» в магазине «где купить», имея на руках требуемую сумму.
При этом изначально мы отталкивались от алгоритма для покупки кефира для того, чтобы перейти к более абстрактной версии алгоритма.
Но что будет, если мы попросим купить тонну цемента? Справится ли человек с этой задачей, следуя нашему алгоритму? Или попросим купить автомобиль в автосалоне?
В первом случае окажется, что человек не может физически принести домой тонну цемента, а значит алгоритм для покупки кефира и хлеба не сработает. Это и есть протекающая абстракция. Разрабатывая алгоритм мы невольно оперировали определенным контекстом, даже не задумываясь о его существовании.
Чтобы забрать автомобиль из автосалона, заплатив за него деньги, надо иметь водительское удостоверение и уметь водить машину. И снова наша абстракция протекла.
Таких примеров можно придумать массу: все покупки по отдельности легкие, но в сумме человеку не хватит рук, чтобы их унести, или их суммарная масса превысит его возможности. Или покупка одна, легкая, но слишком габаритная и поэтому не влезет в лифт и человеку придется идти пешком, итд итп.
Словарь
-
универсальный алгоритм
-
абстракция / абстрактный
-
протекание абстракции
Полезные ссылки
- хорошая статья от Joel: The Law of Leaky Abstractions (или Закон дырявых абстракций)