Вопрос

Каковы различные типы инкапсуляции?

Прав ли я, полагая, что это в основном относится к центральным понятиям OO, таким как абстракция, полиморфизм и наследование?

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

Итак, можете ли вы сказать, что на этом все, или я упускаю какие-то основные понятия?

Редактировать Я только что заметил в комментариях, что кто-то упомянул, что это может относиться к частным / общедоступным методам, возможно, я слишком много думаю над вопросом и ожидаю более сложного ответа, чем он есть на самом деле?

Это было полезно?

Решение

По-моему, ты слишком много думаешь.

http://en.wikipedia.org/wiki/Information_hiding

Выдержка из этой статьи:

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

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

Другие советы

На мой взгляд и в моем понимании термин "инкапсуляция" (инкапсулировать) - это искусство / наука улавливания сути чего-либо с целью отображения.Фактически, по определению, инкапсулировать - это упаковать что-то или заключить это в другой контейнер.Следовательно, термин "инкапсуляция" означал бы взять суть того, чего вы пытаетесь достичь, и упаковать это в полезную форму, чтобы его можно было повторно использовать по мере необходимости.

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

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

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

Различные формы инкапсуляции будут означать модификаторы свойств, методов, полей и классов - общедоступные, частные, статические, виртуальные (в C #).Все остальное (т.е.перегружает, переопределяет, затеняет) - это модификация или расширение этой инкапсуляции.

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

Инкапсуляция определяется Международным стандартом Международной организации по стандартизации:"Информационная технология – открытая распределенная обработка", ISO/IEC 10746, 1998.

Это определяется в терминах более примитивных определений:

Сущность:Любая конкретная или абстрактная вещь, представляющая интерес.

Объект:Модель объекта.Объект характеризуется его поведением и, в двойственном смысле, его состоянием.

Поведение (объекта):Набор действий с набором ограничений на когда они могут произойти.

Интерфейс:Абстракция поведения объекта, которая состоит из подмножества взаимодействий этого объекта вместе с набором ограничений на то, когда они могут произойти.

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

ISO не определяет различные типы инкапсуляции.

В других сообщениях упоминалось сокрытие информации.ISO не определяет инкапсуляцию явно в терминах сокрытия информации, хотя это кажется неявным, см. "Основы теории инкапсуляции" на http://www.edmundkirwan.com/pub/

Эд.

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

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

и

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

(Оба определения из Использование UML автор: Пердита Стивенс)

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

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

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

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

Пол.

"Определения кандидатов для инкапсуляции:

  • Физическая группировка связанных операций или вещей.
  • Привратник состояния или данных.
  • Скрытие реализации ".

Получено из: Определение инкапсуляции

Существует две части / способа достижения Инкапсуляции:

  • Во-первых, инкапсуляция - это метод, который объединяет связанные данные и поведение в единое целое, то есть физическую группировку операций (поведений)

Например.:-

class Person {
    String name;
    int age;

    void talk() {
    }

    void think() {
    }

    void work() {
    }

    void play() {
    }
}
  • Во-вторых, инкапсуляция - это метод защиты данных от неправильного использования внешним миром, который называется ‘сокрытием информации’ или ‘сокрытием данных’.

Например.:-

class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }
}

Получено из: Что такое инкапсуляция в Java - ЧТО, ПОЧЕМУ и КАК, автор спойлера приводит Интерфейс в качестве примера, что не соответствует действительности.Интерфейс предназначен для абстракции

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top