Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций?

Я использую Eclipse в качестве своего основного редактора (для Python), но я всегда сохраняю SubEthaEdit удобным как свой дополнительный текстовый редактор (бесплатная демонстрационная версия, 30 евро для лицензирования). Это не суперсложно, но это делает то, в чем я нуждаюсь.

24
задан Sandbox 10 November 2009 в 18:09
поделиться

3 ответа

Это означает, что если детали меняются, они не должны влиять на абстракцию. Абстракция - это то, как клиенты видят объект. Неважно, что именно происходит внутри объекта. Возьмем, к примеру, машину, педали, руль и рычаг переключения передач - это абстракции того, что происходит внутри двигателя. Они не зависят от деталей, потому что, если кто-то заменит мой старый двигатель на новый, я все равно смогу водить машину, не зная, что двигатель изменился.

Детали, с другой стороны, ДОЛЖНЫ соответствовать тому, что говорит абстракция. Я бы не хотел внедрять двигатель, который внезапно заставляет тормоза вдвое увеличивать скорость автомобиля. Я могу использовать тормоза как угодно, лишь бы внешне они работали одинаково.

41
ответ дан 28 November 2019 в 23:23
поделиться

Пример абстракции и подробностей: поток предоставляет интерфейс для чтения токена. Это абстракция.

Потоковая реализация потока связана с реализацией интерфейса, определенного абстракцией: вот почему она зависит от нее. Если он предоставляет другой интерфейс (один для чтения 100 символов за раз), он не может утверждать, что реализует ту же абстракцию.

1
ответ дан 28 November 2019 в 23:23
поделиться

Подумайте о работе, которую вам нужно вызвать, и о том, как далеко она находится от того места, где вы сейчас кодируете. Там есть спектр; ваша позиция на нем представляет собой объем работы, который вам нужно сделать, чтобы вызвать эту функциональность.

Абстракции перемещают эту позицию ближе к коду, который вы пишете. Например, если вам нужно вызвать веб-службу, вы можете либо 1) написать вызывающий код непосредственно там, где вам нужно его использовать, или 2) поместить эти детали в абстракцию (например, интерфейс).

В этом случае № 1 приближает вас к веб-сервису в спектре, а № 2 приближает вас к работе. Можно сказать, что абстракция - это мера того, насколько далеко вам нужно растянуть свой разум, чтобы понять работу, которую вам нужно сделать.

Это означает, что каждая часть работы может быть абстрагирована, так что она «ближе» к коду, использующему его. Поскольку обе стороны операции зависят от абстракций, они становятся более понятными, и ни одна из сторон не должна знать о разрыве между ними - это работа абстракции.

Вау, это было абстрактно.

1
ответ дан 28 November 2019 в 23:23
поделиться