Подтвердить что ты не робот

Инкапсуляция против абстракции?

Вот краткие определения инкапсуляции и абстракции.

Абстракт:

Процесс абстракции в Java используется для скрытия определенных деталей и только показать существенные особенности объекта. Другими словами,              он имеет дело с внешним видом объекта (интерфейса). Единственный хороший пример, который я вижу для этого на разных сайтах, - это интерфейс.

Инкапсуляция:

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

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

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

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

Обновление:. Через 5 лет я придумал свой собственный ответ, который является основанием на основе ответов в этом сообщении и ниже

4b9b3361

Ответ 1

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

Абстракция является более общим термином, она также может быть достигнута путем (в том числе) подклассификации. Например, интерфейс List в стандартной библиотеке является абстракцией для последовательности элементов, индексированных по их положению, конкретными примерами List являются ArrayList или LinkedList. Код, который взаимодействует с рефератами List по деталям того типа списка, который он использует.

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

Ответ 2

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

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

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

Ответ 3

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

Это разные понятия.

  • Абстракция - это процесс очистки всех ненужные/несущественные атрибуты объекта и сохраняют только характеристики, наиболее подходящие для вашего домена.

    например. для человека: вы решаете сохранить имя и фамилию и SSN. Возраст, высота, вес и т.д. Игнорируются как несущественные.

    Абстракция начинается там, где начинается ваш дизайн.

  • Инкапсуляция - это следующий шаг, когда он распознает операции, подходящие для атрибуты, которые вы приняли во время процесса абстракции. это объединение данных с операцией, которая действует на них.
    То есть данные и методы объединяются вместе.

Ответ 4

Инкапсуляция скрывает ненужные данные в капсуле или блоке

Абстракция показывает существенную функцию объекта

Инкапсуляция используется, чтобы скрыть свой член из внешнего класса и интерфейса. Использование модификаторов доступа, предоставленных в С#.like public, private, protected и т.д. Пример:

Class Learn
{
  private int a;         // by making it private we are hiding it from other
  private void show()   //class to access it
  {
   console.writeline(a);
  }
}

Здесь мы переносим данные в единицу или капсулу i.e Class.

Абстракция просто противоположна Инкапсуляции.

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

 abstract class MobilePhone
    {
        public void Calling();       //put necessary or essential data
        public void SendSMS();       //calling n sms are main in mobile
    }

    public class BlackBerry : MobilePhone   // inherited main feature
    {
        public void FMRadio();            //added new
        public void MP3();
        public void Camera();
        public void Recording();

    }

Ответ 5

Абстракция - очень общий термин, а абстракция в программном обеспечении не ограничивается объектно-ориентированными языками. Определение словаря: "акт рассмотрения чего-то как общего качества или характеристики, помимо конкретных реалий, конкретных объектов или фактических экземпляров".

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

API вашей операционной системы - это абстракция базовой машины. Ваш компилятор предоставляет слой абстракции, который защищает вас от деталей языка ассемблера. Стек TCP/IP, встроенный в вашу операционную систему, абстрагирует детали передачи битов по сети. Если вы дойдете до необработанного кремния, люди, которые разработали ваш процессор, сделали это, используя схемы, написанные в терминах "диодов" и "транзисторов", которые являются абстракциями того, как электроны проходят через полупроводниковые кристаллы.

В программном обеспечении все является абстракцией. Мы создаем программы, которые имитируют или моделируют некоторый аспект реальности, но по необходимости наши модели всегда абстрагируют некоторые детали "реальной вещи". Мы строим слой на слое на слое абстракций, потому что это единственный способ добиться чего-либо. (Представьте, что вы пытались сделать, скажем, решатель sudoku, и вам пришлось проектировать его с использованием только полупроводниковых кристаллов. "Хорошо, мне нужна часть кремния N-типа здесь..." )

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

Ответ 6

Отвечая на мой собственный вопрос через 5 лет, я чувствую, что ему все еще нужно больше деталей

Абстракция:

Техническое определение: - Абстракция - это концепция, позволяющая скрыть ненужные детали (сложные или простые) и показать только существенные особенности объекта. Нет реализации здесь его просто концепция

Что это означает практически: - Когда я говорю, что моей компании нужен какой-то средний/устройство, чтобы сотрудники могли подключиться к клиенту. Это самая чистая форма абстакции (например, интерфейс в java), так как это устройство/среда может быть телефоном или интернетом или скайпом или лично или электронной почтой и т.д. Я не собираюсь входить в nitty gritty устройства/среды

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

Теперь, когда я говорю, что моей компании нужен какой-то телефон, чтобы сотрудники могли подключиться к клиенту с помощью голосового вызова. Тогда также я говорю абстрактно, но на более низком уровне, поскольку телефон может быть любая компания, такая как iphone или samsung или nokia и т.д.

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

Что это означает практически: - Теперь, когда я говорю, что моей компании нужен какой-то iphone, чтобы сотрудники могли подключиться к клиенту с помощью голосового вызова. Теперь я говорю о каком-то конкретном объекте (например, iphone). Хотя Я не собираюсь входить в nitty gritty iphone здесь, но iphone имеет некоторую информацию о состоянии/конкретике/реализации, связанную с ним, где нет устройства/носителя. Когда я говорю конкретный объект, на самом деле это означает любой объект, у которого есть некоторая (не полная, как java abstract class) реализация/информация, связанная с ней.

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

Это суть основана на ответах в этом сообщении и ниже

Ответ 7

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

Абстракция. Принцип должен соблюдаться при написании программы ООП, в которой говорится: "вы должны включать в класс только те компоненты, которые интересны в задаче программы". Например: у студента объекта много персонажей: имя, возраст, вес, цвет волос, цвет глаз и т.д. Но, когда вы создаете класс в ООП для работы со студентами, вы должны включать только те персонажи, которые действительно вопрос для базы данных студентов: имя, возраст, специальность, уровень, отметки... и т.д. в С++ вы можете создать абстрактный класс, используя модификатор "virtual" с любыми методами в классе, и это сделает его непригодным в прямом, но вы можете извлечь из него другие классы и создать реализацию для своих членов с добавлением необходимых членов на основе задачи.

Ответ 8

Вот как я это понял:

В объектно-ориентированном программировании мы имеем что-то называемое классами. Для чего они? Они должны сохранять некоторое состояние и сохранять некоторые методы для изменения этого состояния, то есть они являются инкапсулирующими и его методами.

Это (класс) не заботится о видимости своего или его содержимого. Если мы решили скрыть состояние или некоторые методы, это скрытие информации.

Теперь возьмите сценарий наследования. У нас есть базовый класс и несколько производных (унаследованных) классов. Итак, что здесь делает базовый класс? Это абстрагирование из некоторых вещей из производных классов.

Все они разные, не так ли? Но мы смешиваем их, чтобы писать хорошие объектно-ориентированные программы. Надеюсь, это поможет:)

Ответ 9

Абстракция определяет контекстно-зависимое, упрощенное представление чего-либо; он игнорирует контекстно-нерелевантные детали и включает в себя контекстно-важные детали.

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


Возьмите людей, например. В контексте операции полезная абстракция игнорирует религиозные убеждения человека и включает в себя тело человека. Кроме того, люди инкапсулируют свои воспоминания мысленными процессами, которые используют эти воспоминания. Абстракция не должна иметь инкапсуляции; например, картина человека не скрывает его частей и не связывает процедуры с его состоянием. И, инкапсуляция не должна иметь связанной абстракции; например, реальные люди (а не абстрактные) инкапсулируют свои органы своим метаболизмом.

Ответ 10

ПРИМЕЧАНИЕ: Я делюсь этим. Это не значит, что здесь нет хорошего ответа, а потому, что я легко понял.

Ответ:

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

Аналогичным образом, каковы поведения, которые мы будем иметь в классе? Абстракция также применяется здесь. Что нужно иметь здесь и что будет передозировкой? Затем мы отсекаем некоторую информацию из класса. Этот процесс применяет абстракцию.

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

Перейти здесь для более подробного объяснения этой темы.

Ответ 11

Давайте попробуем понять по-другому.

Что может случиться, если абстракции там нет и что может случиться, если инкапсуляция там отсутствует.

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

Если инкапсуляция отсутствует или не выполняется должным образом, вы можете неправильно использовать объект. Там данные/компоненты могут быть использованы неправильно. Возьмите тот же пример телевизора. Если для громкости телевизора нет инкапсуляции, контроллер громкости может быть неправильно использован, если он окажется ниже или выходит за пределы его (0-40/50).

Ответ 12

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

Хороший пример: Divider - это класс, который имеет два делителя дивиденда и делитель и метод getDividedValue.

Как вы думаете, если делитель установлен в 0, то внутренняя система/поведение (getDivided) будет нарушена.

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

Ответ 13

Инкапсуляция (данные привязки и код)

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

  • На объектно-ориентированном языке код и данные могут объединяться таким образом, что создается автономный "черный ящик". Когда код и данные связаны таким образом, создается объект. Другими словами, объектом является устройство, поддерживающее инкапсуляцию.

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

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

Абстракция (скрытие того, как хранятся данные и скрытие реализации функции)

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

  • Абстракция - одна из самых мощных и важных функций, обеспечиваемых объектно-ориентированным программированием.

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

  • Абстракция отделяет логические свойства от деталей реализации. Например, вождение автомобиля является логическим свойством, а дизайн двигателя - деталь реализации.