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


Думаю, ты слишком много думаешь.
http://en.wikipedia.org/wiki/Information_hiding
Выдержка из этой статьи:
Скрытие информации в информатике - это принцип сокрытия проектных решений в компьютерной программе, которые, скорее всего, изменятся, таким образом защищая другие части программы от изменений, если проектное решение будет изменено. Защита включает обеспечение стабильного интерфейса, который защищает оставшуюся часть программы от реализации (детали, которые, скорее всего, изменятся).
Одна из распространенных форм инкапсуляции - использование свойств для скрытия полей личных данных. Еще более распространенной формой является использование объектно-ориентированного программирования для инкапсуляции сложности программного обеспечения в хорошо разделенные классы с ролями и обязанностями. Это ключевой принцип объектно-ориентированного проектирования, поскольку он переходит от монолитного процедурного стиля дизайна к более структурированному стилю, который стремится скрыть всю не относящуюся к делу информацию, кроме той, которая относится к конкретной задаче, над которой вы работаете.
Поскольку инкапсуляция просто означает «сокрытие информации», я могу представить, что многие вещи можно отнести к категории инкапсуляции. Однако я склонен думать об инкапсуляции как о «сокрытии реализации», другими словами, это инструмент, который я использую для создания слабой связи между всем, что я пишу, и всем, что является клиентом того, что я написал.
Поэтому я склонен прагматично полагать, что инкапсуляция - это любая парадигма или передовая практика, которые позволяют мне предоставить чистый и надежный интерфейс любому клиенту.
Я считаю и понимаю, что термин инкапсуляция (инкапсуляция) - это искусство / наука улавливания сущности чего-либо с целью отображения. Фактически, по определению - инкапсулировать - значит что-то упаковать или заключить в другой контейнер. Следовательно, термин инкапсуляция будет означать взять суть того, чего вы пытаетесь достичь, и упаковать ее в полезной форме, чтобы ее можно было повторно использовать по мере необходимости.
Так что интерпретировать это означало бы упаковать материал в форму, которая сделает его более полезным в дальнейшем.
Так что на самом деле ... интерпретируйте это так, как считаете нужным. Я рассматриваю это как использование набора алгоритмов и утилит и создание структуры классов, которые можно использовать в качестве API в других проектах. Этот инкапсулированный код может быть унаследован и / или расширен, чтобы сделать его полезным для модифицированных целей без изменения основной сущности API.
Следовательно, абстракция, полиморфизм и наследование - это не формы инкапсуляции, а формы расширения и изменения инкапсулированного кода.
Различные формы инкапсуляции будут означать модификаторы свойств, методов, полей и классов - общедоступные, частные, статические, виртуальные (в C#). Все остальное (например, перегрузки, переопределения, тени) является модификацией или расширением этой инкапсуляции.
Вы можете рассматривать модифицированный код как инкапсуляцию, которая затем может быть унаследована / абстрагирована / расширена, но упаковка, который должен быть расширен, является инкапсулированным продуктом.
Инкапсуляция - это больше, чем просто сокрытие информации. Это один из аспектов. Это связано с интерфейсом модуля. Интерфейс предоставляет две очень важные функции: инкапсуляцию и абстракцию.
Abstraction is when a client of a module does not need to know more than what is in the interface.
а также
Encapsulation is when a client of a module isn't able to know more than what is in the interface.
(Оба определения из Использование UML Пердиты Стивенс)
Цитированные утверждения являются формами сокрытия информации (в последнем случае уже скрытой информации).
Обычно использование этого слова довольно близко к тому, что оно говорит. Вы инкапсулируете что-то, когда вы это держите, и не позволяете ни одной из сделок. Лучше всего думать об этом так, будто вы берете что-то и кладете это в черный ящик, где никто больше не может видеть детали. Поле скрывает все, предоставляя вместо него какой-то другой диссоциированный интерфейс.
Скрытие информации - это лишь один из аспектов инкапсуляции, поскольку наряду с данными вы также можете скрыть любые детали самого кода. Цель инкапсуляции части вашей системы - убрать эту сложность из целого, тем самым облегчая понимание отдельных деталей (с обеих сторон). Более?
Павел.
Инкапсуляция определяется международным стандартом Международной организации по стандартизации: «Информационные технологии - открытая распределенная обработка», ISO / IEC 10746, 1998.
Это определяется в терминах более примитивных определений:
Сущность: Любая конкретная или абстрактная вещь, представляющая интерес.
Объект: модель объекта. Объект характеризуется своим поведением и, вдвойне, по своему состоянию.
Поведение (объекта): набор действий с набором ограничений на когда они могут произойти.
Интерфейс: абстракция поведения объекта, состоящего из подмножество взаимодействий этого объекта вместе с набором ограничений о том, когда они могут произойти.
Инкапсуляция: свойство информации, содержащейся в объекте. доступны только через взаимодействия на интерфейсах, поддерживаемых объект.
ISO не определяет различные типы инкапсуляции.
В других сообщениях упоминается сокрытие информации. ISO не определяет инкапсуляцию явно с точки зрения сокрытия информации, хотя это кажется неявным, см. «Основы теории инкапсуляции» на http://www.edmundkirwan.com/pub/
Эд.
«Возможные определения для инкапсуляции:
Источник: Определение инкапсуляции
Есть две части / способы достижения инкапсуляции:
First, encapsulation is a technique that packages related data and behaviors into a single unit, i.e, Physical grouping of operations(behaviors)
Например.:-
class Person {
String name;
int age;
void talk() {
}
void think() {
}
void work() {
}
void play() {
}
}
Second, encapsulation is a technique for protecting data from misuse by the outside world, which is referred as ‘information hiding’ or ‘data hiding’.
Например.:-
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
Источник: Что такое инкапсуляция в Java - ЧТО, ПОЧЕМУ и КАК, Автор спойлера приводит в качестве примера интерфейс, что не соответствует действительности. Интерфейс для абстракции