Я отвечу на ваш вопрос вопросом; когда вы ехали на работу этим утром (я предполагаю, что вы действительно это сделали), вас не заботило, как именно двигатель открыл клапаны для впуска топливовоздушных смесей, а затем зажег их? Нет. Вам все равно, как работает двигатель вашего автомобиля, когда вы едете по дороге. Вы все равно , что она делает работу.
Предположим, однажды ваша машина не работает. Не запускается, бросает удочку, разрывает ремень, необъяснимым образом врезается в этот бетонный барьер не по своей вине, пока вы были заняты текстовыми сообщениями. Теперь вам нужна новая машина (хотя бы временно). Тебя не волнует, как именно работает эта новая машина? Нет. То, что вас волнует, во-первых, это то, что он работает, и, во-вторых, вы можете использовать те же знания и навыки, которые вы использовали для управления своей старой машиной, чтобы ездить на новой. В идеале вам должно показаться, что в автомобиле, который вы ведете, не произошло никаких изменений. Реально то, как работает этот новый автомобиль, должно преподнести вам как можно меньше «сюрпризов».
Эти основные принципы являются основным принципом инкапсуляции и абстракции. Знание того, как объект делает то, что он делает, не должно быть обязательным условием его использования, чтобы делать то, что он делает. Даже в компьютерном программировании детали электрических путей в процессоре, на котором выполняется ваша программа, абстрагированы как минимум за полдюжины слоев инструкций ввода-вывода, драйверов, программного обеспечения ОС и среды выполнения. Многие очень успешные разработчики программного обеспечения пишут совершенно хороший код, не беспокоясь о точной аппаратной архитектуре или даже сборке ОС, которая его запустит. Включая меня.
Инкапсуляция / сокрытие информации позволяет менталитету «не заботиться о том, как это происходит, просто заботиться о том, что он делает» Ваш объект должен раскрывать то, что полезно для потребителя, таким образом, чтобы потребитель мог легко потреблять. Теперь, возвращаясь в реальный мир, это не означает, что автомобиль не должен предоставлять пользователю никакой информации о внутренней работе, или что автомобиль должен предоставлять пользователю только самые базовые функции, такие как зажигание, рулевое колесо, и педали. Все автомобили имеют спидометры и указатели уровня топлива, тахометры, идиотские фонари и другие отзывы. Практически все автомобили также имеют переключатели для различных независимых подсистем, таких как фары, сигналы поворота, радио, регулировка сиденья и т. Д. Некоторые автомобили допускают довольно эзотерический ввод пользователя, например чувствительность межосевого дифференциала с ограниченным проскальзыванием. Во всех случаях, если вы знаете достаточно, Вы можете открыть его и изменить вещи, чтобы заставить его работать немного по-другому. Но в большинстве случаев, может быть, просто возможно, пользователь не должен иметь возможность напрямую и независимо управлять топливными насосами из салона? Может быть, просто может быть, пользователь не сможет активировать свои стоп-сигналы, не нажимая педаль тормоза?
Абстракция допускает менталитет «это не то же самое, но, поскольку они оба XI, я могу использовать их так же, как и любой другой X». Если ваш объект наследует или реализует абстракцию, ваши потребители должны ожидать, что ваша реализация даст тот же или аналогичный результат, что и другие известные реализации абстракции. Toyota Camry и Ford Fusion - оба "автомобили". Как таковые, они имеют общий набор ожидаемых функций, таких как рулевое колесо. Поверните его против часовой стрелки, машина едет налево. Поверните его по часовой стрелке, машина едет направо. Вы можете сесть в любой автомобиль в Соединенных Штатах и ожидать, что у автомобиля будет рулевое колесо и как минимум две педали, одна из которых справа - педаль «машина едет», а другая в центре - педаль «машина останавливается» ,
Следствием абстракции является «теория наименьшего удивления». Если вы садитесь за руль новой машины для тест-драйва, поворачиваете рулевое колесо по часовой стрелке и машина поворачивает влево, вы будете удивлены, если не сказать больше. Вы обвинили бы дилера в продаже POS и вряд ли выслушали бы его причины, почему новое поведение «лучше», чем вы привыкли, или насколько хорошо это поведение «задокументировано» или как » прозрачная »система управления. Несмотря на то, что этот новый автомобиль и все остальные, которыми вы управляли, по-прежнему являются «автомобилями», при управлении этим автомобилем вы должны изменить некоторые фундаментальные представления о том, как предполагается управлять автомобилем, чтобы успешно управлять новым автомобилем. Это обычно плохо, и это происходит только тогда, когда в новой парадигме есть интуитивное преимущество. Возможно, добавление ремней безопасности является хорошим примером; 50 лет назад вы только что вошли и ушли, но теперь вам нужно пристегнуться, интуитивное преимущество в том, что вы не проходите через ветровое стекло или пассажирское сиденье, если попадаете в аварию. Даже тогда водители сопротивлялись; многие автовладельцы вырезают ремни безопасности из машины, пока не будут приняты законы, обязывающие их использовать.