Я использую Eclipse в качестве своего основного редактора (для Python), но я всегда сохраняю SubEthaEdit удобным как свой дополнительный текстовый редактор (бесплатная демонстрационная версия, 30 евро для лицензирования). Это не суперсложно, но это делает то, в чем я нуждаюсь.
Это означает, что если детали меняются, они не должны влиять на абстракцию. Абстракция - это то, как клиенты видят объект. Неважно, что именно происходит внутри объекта. Возьмем, к примеру, машину, педали, руль и рычаг переключения передач - это абстракции того, что происходит внутри двигателя. Они не зависят от деталей, потому что, если кто-то заменит мой старый двигатель на новый, я все равно смогу водить машину, не зная, что двигатель изменился.
Детали, с другой стороны, ДОЛЖНЫ соответствовать тому, что говорит абстракция. Я бы не хотел внедрять двигатель, который внезапно заставляет тормоза вдвое увеличивать скорость автомобиля. Я могу использовать тормоза как угодно, лишь бы внешне они работали одинаково.
Пример абстракции и подробностей: поток предоставляет интерфейс для чтения токена. Это абстракция.
Потоковая реализация потока связана с реализацией интерфейса, определенного абстракцией: вот почему она зависит от нее. Если он предоставляет другой интерфейс (один для чтения 100 символов за раз), он не может утверждать, что реализует ту же абстракцию.
Подумайте о работе, которую вам нужно вызвать, и о том, как далеко она находится от того места, где вы сейчас кодируете. Там есть спектр; ваша позиция на нем представляет собой объем работы, который вам нужно сделать, чтобы вызвать эту функциональность.
Абстракции перемещают эту позицию ближе к коду, который вы пишете. Например, если вам нужно вызвать веб-службу, вы можете либо 1) написать вызывающий код непосредственно там, где вам нужно его использовать, или 2) поместить эти детали в абстракцию (например, интерфейс).
В этом случае № 1 приближает вас к веб-сервису в спектре, а № 2 приближает вас к работе. Можно сказать, что абстракция - это мера того, насколько далеко вам нужно растянуть свой разум, чтобы понять работу, которую вам нужно сделать.
Это означает, что каждая часть работы может быть абстрагирована, так что она «ближе» к коду, использующему его. Поскольку обе стороны операции зависят от абстракций, они становятся более понятными, и ни одна из сторон не должна знать о разрыве между ними - это работа абстракции.
Вау, это было абстрактно.