Блестящий пример эффективной инкапсуляции посредством сокрытия информации?

Этот ответ вдохновил Даниэль М. Эта схема ниже, кажется, дает мне то, что я хочу. Остальное такое же, как у нее.

regex = r'(?<![a-zA-Z])\*{2,}(?![a-zA-Z])'
10
задан Roberto Russo 11 March 2009 в 18:15
поделиться

5 ответов

Пример дан в моем первом классе OO:

Вообразите медиаплеер. Это абстрагирует понятие проигрывания, приостановки, быстрой передачи, и т.д. Как пользователь, можно использовать это для работы устройством.

Ваш VCR реализовал этот интерфейс и скрыл или инкапсулировал детали механических дисков и лент.

Когда новая реализация медиаплеера прибывает (скажите, что DVD-плеер, который использует диски, а не ленты) она может заменить реализацию, инкапсулировавшую в медиаплеере, и пользователи могут продолжить использовать ее, как они сделали с их VCR (те же операции, такие как игра, пауза, и т.д....).

Это - понятие сокрытия информации посредством абстракции. Это позволяет, чтобы детали реализации изменились без пользователей, имеющих необходимость знать, и способствует слабой связи кода.

21
ответ дан 3 December 2019 в 14:35
поделиться

*отклоняют абстракцию символьных потоков (дисковые файлы, каналы, сокеты, ttys, и т.д.) в единственный объект ("все - файл"), модель позволяет широкому спектру инструментов быть примененным к широкому спектру источников данных / приемники способом, которые просто не были бы возможны без инкапсуляции.

Аналогично, понятие потоков на различных языках, абстрагирующих по спискам, массивам, файлам, и т.д.

Кроме того, понятия как числа (абстрагирующий по целым числам, полудюжине видов плаваний, rationals, и т.д.) воображают то, чем кошмаром это было бы то, если бы высокоуровневому коду дали формат мантиссы и т.д и уехал для отражения для себя.

10
ответ дан 3 December 2019 в 14:35
поделиться

Почти каждый Java, C# и кодовая база C++ в мире имеют сокрытие информации: это столь же просто как частное: разделы классов.

Внешний мир не видит членов парламента, не занимающих официального поста, таким образом, разработчик может изменить их, не будучи должен волноваться об остальной части кода, не компилирующего.

0
ответ дан 3 December 2019 в 14:35
поделиться

Что? Вы еще не убеждены?

Легче показать противоположное. Мы раньше писали код, который не имел никакого контроля над тем, кто мог получить доступ к деталям его реализации. Это делало почти невозможным время от времени определить, какой код изменил переменную.

Кроме того, Вы не можете действительно абстрагировать что-то, если каждая часть кода в мире, возможно, возможно зависела от реализации определенных реальных классов.

0
ответ дан 3 December 2019 в 14:35
поделиться

Я знаю, что ответ уже принят, но я хотел выкинуть еще один: OpenGL/DirectX

Ни один из этих API не является полной реализацией (хотя DirectX, конечно, немного более тяжёлый в этом отношении), но вместо этого используются общие методы передачи команд рендеринга на графическую карту.

Производители карт предоставляют реализацию (драйвер) для конкретной карты, которая во многих случаях очень специфична для аппаратного обеспечения, но вам как пользователю никогда не нужно беспокоиться о том, что один пользователь использует GeForce ABC, а другой - Radeon XYZ, потому что точная реализация скрыта за высокоуровневым API. В противном случае, вам понадобился бы путь к коду в ваших играх для каждой карты на рынке, которую вы хотели бы поддерживать, что было бы совершенно неуправляемо с первого дня. Еще одним большим плюсом такого подхода является то, что Nvidia/ATI может выпустить более новую, эффективную версию своих драйверов, и вы автоматически получаете выгоду, не прилагая усилий с вашей стороны.

Тот же принцип действует в отношении звука, сети, мыши, клавиатуры... практически любого компонента вашего компьютера. Независимо от того, происходит ли инкапсуляция на аппаратном уровне или в программном драйвере, в какой-то момент все особенности устройства скрыты, чтобы вы могли обращаться с любой клавиатурой, например, как с клавиатурой, а не как с Microsoft Ergonomic Media Explorer Deluxe Revision 2.

Когда вы смотрите на это так, быстро становится ясно, что без какой-либо формы инкапсуляции/абстракции компьютеров в том виде, в котором мы их знаем сегодня, просто не работал бы вообще. Это достаточно блестяще для вас?

2
ответ дан 3 December 2019 в 14:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: