Какие существуют виды инкапсуляции? - PullRequest
5 голосов
/ 22 декабря 2008

Какие бывают типы инкапсуляции?

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

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

Итак, вы бы сказали, что по этому поводу, или я упускаю некоторые основные понятия?

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

Ответы [ 7 ]

3 голосов
/ 22 декабря 2008

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

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

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

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

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

1 голос
/ 30 декабря 2008

Инкапсуляция определяется международным стандартом Международной организации по стандартизации: «Информационные технологии - открытая распределенная обработка», ИСО / МЭК 10746, 1998.

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

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

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

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

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

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

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

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

Ed.

1 голос
/ 22 декабря 2008

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

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

и

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

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

1 голос
/ 22 декабря 2008

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

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

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

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

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

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

0 голосов
/ 26 июня 2016

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

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

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

Есть две части / способы достижения инкапсуляции:

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

например: -.

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 - ЧТО, ПОЧЕМУ и КАК , Автор спойлера приводит в качестве примера интерфейс, что не соответствует действительности. Интерфейс для абстракции

0 голосов
/ 22 декабря 2008

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

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

Paul.

0 голосов
/ 22 декабря 2008

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

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

...