Версия без кода от поклонника Tesla для решения дилеммы абстракции и инкапсуляции в объектно-ориентированном дизайне программного обеспечения.

Почему так предпочтительнее объектно-ориентированное программирование? Помимо того, что он был широко принят и востребован на протяжении десятилетий, его предпочитают, потому что он имеет смысл для человеческого мозга! Это имеет смысл, потому что это ближе к реальной жизни.

Абстракция и инкапсуляция - основные инструменты в распоряжении любого, кто использует ООП в своих интересах. Будучи очень похожими, они оба настолько близки по идее, но настолько расходятся по намерениям, что часто возникает путаница. Проблема возникает только тогда, когда мы знаем, как их использовать, но не знаем, когда и зачем их использовать. На то, как отвечает код, мы будем использовать пример Tesla, чтобы увидеть, когда и почему абстракция и инкапсуляция делают вещи лучше.

Абстракция в действии

То, что вы только что видели, - это интерьер Tesla Model X, самого быстрого внедорожника на земле, который разгоняется от 0 до 100 км / ч за 2,8 секунды (уже умопомрачительно), никогда не требует топлива, беспроводных обновлений и дополнительных функций, Режим защиты от биологического оружия, в котором используется мощная система фильтрации для обеспечения качества воздуха внутри помещения уровня больницы, буксировка на 5000 фунтов, навигация с автопилотом, автоматическая смена полосы движения и маневры на рампе.



Лучшая часть; Единственная точка доступа ко всем этим необычным функциям - это 17-дюймовый сенсорный дисплей на приборной панели. Вы не узнаете, как все это работает, да и не нужно. У Tesla нет обычных громоздких панелей и раздражающих ручек, скорее минималистичный подход делает его уникальным.

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

Инкапсуляция в действии

Tesla поставляется с обновляемыми функциями с программной блокировкой. Наиболее заметными из них являются увеличение емкости аккумулятора и включение функции автопилота. Это означает, что Tesla продает базовую версию, скажем, Model S с аккумулятором на 75 кВтч, но с программной блокировкой на емкости 60 кВтч. Это позволяет компании снизить начальную цену на Model S, но также приводит к тому, что Tesla поставляет 15 кВтч неоплачиваемой емкости аккумулятора. Чтобы разблокировать дополнительную емкость аккумулятора с помощью беспроводного обновления, вам необходимо заплатить дополнительную сумму. Аналогично этому, функция автопилота доступна для бесплатной 30-дневной пробной версии, после чего она блокируется и может быть разблокирована только тогда, когда вы платите за подписку.

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

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

Почему они такие же и почему они разные

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

- Обеспокоенность -

В абстракции наша забота - это Пользователь. Мы скрываем детали, потому что цель состоит в том, чтобы упростить взаимодействие с пользователем.

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

- Мотив -

Абстракция следует мотиву «не нужно». Я скрываю информацию, потому что пользователь не должен ее видеть. Просто предоставляя то, что ему нужно, ни больше ни меньше.

Инкапсуляция следует мотиву «не следует». Я скрываю информацию, потому что вы не должны ее видеть, поскольку она жизненно важна для целостности / конфиденциальности моих данных, а также помогает мне выполнять проверки, прежде чем я предоставлю вам выборочный доступ.

- Границы решения -

Абстракция - это дизайнерское решение. Если бы я предпочел не использовать его, то больше всего пострадает дизайн моего продукта.

Инкапсуляция - это решение реализации. Отказ от инкапсуляции может привести к нарушению целостности данных и вызвать логические и функциональные ошибки.

- Триггеры -

Чтобы увидеть абстракцию в действии, мы должны увидеть, как кто-то использует ваш продукт или взаимодействует с ним.

Инкапсуляцию можно увидеть, когда происходит событие, например, при доступе к функциям или данным, требующим контролируемого доступа.

- Объем -

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

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

В заключение, абстракция и инкапсуляция очень разные, но тесно связанные концепции. Я бы рассматривал инкапсуляцию как подмножество абстракции. Меняется только намерение. Только когда мы умело их используем, мы действительно сможем извлечь выгоду из мощи парадигмы объектно-ориентированного программирования.

Получите доступ к экспертному обзору - Подпишитесь на DDI Intel