Как абстракция и инкапсуляция отличаются?

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

абстракция "в процесс выявления общих закономерностей, которые вариации; абстракция представляет собой общий шаблон > и обеспечивает средство для определения, какой вариант использовать и" (Ричард Габриэль).

и достигается через абстрактные классы.

Некоторые другие говорит

абстрагирование значит показать только необходимую информацию клиенту объект

и

скажем, у вас есть метод "и CalculateSalary" в вашем классе employee, который принимает employeeid в качестве параметра и возвращает зарплату У работника за текущий месяц как целое число. Теперь, если кто-то хочет использовать этот метод. Ему не нужно заботиться о том, как сотрудник объект вычисляет зарплату? Единственное, что он должен быть беспокойство название методики, ее входные параметры и формат результирующего член

Я погуглил снова и снова и ни один из результатов, кажется, чтобы дать мне правильный ответ. Теперь, причем тут инкапсуляция вяжется все это? Я искал и нашел переполнение стека Вопрос. Даже ответы на эти вопросы были путаешь Здесь, он говорит

и GT; инкапсуляция-это стратегия, используемая как часть забора. Инкапсуляция

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

И здесь Еще один известный член говорит:

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

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

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

Пожалуйста, не'т пометить его как дубликат. Я знаю, что есть несколько подобных вопросов. Но я хочу, чтобы избежать путаницы среди противоречивых объяснений. Может кто-нибудь подсказать надежную ссылку? Ссылка на сайте StackOverflow вопрос тоже приветствуется, если она снова создает путаницу. :)

Редактировать: мне нужны ответы, немного на C#, ориентированного

Комментарии к вопросу (11)

Заключение: сокрытие данных, используя геттеры и сеттеры и т. д.

Абстракция: сокрытие реализации с помощью абстрактных классов и интерфейсов и т. д.

Комментарии (5)
Решение

абстрагирование означает показать только необходимую информацию для клиента объекта

На самом деле это инкапсуляция. Также см. Первую часть статьи в Википедии, чтобы не путать, скрывая заключения и данных. http://en.wikipedia.org/wiki/Encapsulation_(объект-oriented_programming)

имейте в виду, что просто спрятав все члены класса 1:1 за свойства инкапсуляции на всех. инкапсуляция-это защита инвариантов и сокрытие деталей реализации.

вот хорошая статья об этом. http://blog.ploeh.dk/2012/11/27/Encapsulationofproperties/ также взгляните на статьи, связанные в этой статье.

классы, свойства и модификаторы доступа-это инструменты для обеспечения инкапсуляции в C#.

вы делаете заключение для того чтобы уменьшить сложность.

абстракция "в процесс выявления общих закономерностей, которые имеют систематических изменений; абстракция представляет собой общий шаблон и предоставляет средства для определения, какой вариант использовать и" (Ричард Габриэль).

Да, это хорошее определение для забора.

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

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

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

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

Интерфейсы, абстрактные классы и наследование и полиморфизм являются инструментами обеспечения абстракции в C#.

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

Комментарии (5)

<суб>Источник Изображения</суб>

Абстракция: очерчен верхнем левом и правом изображениях кошки. Хирург и старушка разработаны (или визуализировать) животное по-разному. Таким же образом, вы бы поставили разные функции в классе Cat, в зависимости от потребности приложения. Каждая кошка имеет печени, мочевого пузыря, сердца и легких, но если вам нужен ваш кот 'мурлыкать' только, вы аннотация приложение'ы кот дизайн на верхнем левом, а не правом верхнем углу.

Заключение: очерчен кот стоял на столе. Что'ов то, что все за пределами кот должен увидеть кошку в качестве. Они не должны беспокоиться о том, что фактическая реализация кошка сверху-слева или сверху-правая или даже комбинация обоих.


<суб>ЗЫ: иди здесь на этот же вопрос, чтобы услышать полный рассказ.</суб>

Комментарии (1)

Я постараюсь продемонстрировать инкапсуляции и абстракции в простой способ.. посмотрим..

  • Упаковка данных и функций в единое целое (так называемый классе) называется инкапсуляцией. Заключения, содержащие и прячется сведения об объекте, такие как внутренние структуры данных и код.

Заключение -

  • Сокрытие Сложности,
  • Привязка и функцию сведения вместе,
  • Делая сложный метод'ы частная,
  • Оформление экземпляр переменной'ы частная,
  • Сокрытие ненужных данных и функций от конечного пользователя.

Инкапсуляция реализует абстракцию.

И абстракция -

  • Показывая, Что Надо,
  • Данные должны абстрагироваться от конечного пользователя,

Давайте посмотрим на примере-

На рисунке ниже показано, графический интерфейс и"Сведения о клиенте для быть добавлены в базы данных".

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

Шаг 1: Какие мои потребности класса клиента?

т. е.

  • 2 переменные, чтобы хранить код клиента и имя клиента.

  • 1 функция, чтобы добавить код клиента и имя клиента в базе данных.

  namespace CustomerContent
    {
       public class Customer
       {
           public string CustomerCode = "";
           public string CustomerName = "";
           public void ADD()
           {
              //my DB code will go here
           }

Теперь только добавить метод не будет работать здесь в одиночку.

Шаг -2: Как будет работать проверка, добавить функции?

Нам понадобится код подключения к базе данных и код проверки (дополнительные методы).

     public bool Validate()
     {
    //Granular Customer Code and Name
    return true;
     }

     public bool CreateDBObject()
     {
    //DB Connection Code
    return true;
     }

class Program
{
   static void main(String[] args)
   {
     CustomerComponent.Customer obj = new CustomerComponent.Customer;

     obj.CustomerCode = "s001";
     obj.CustomerName = "Mac";

     obj.Validate();
     obj.CreateDBObject();

     obj.ADD();
    }
}

Теперь нет необходимости показывать дополнительные методы(метод validate(); CreateDBObject() [сложный и дополнительный способ] ) для конечного пользователя.Конечный пользователь должен только видеть и знать о код клиента, имя клиента и добавить кнопку, которая будет добавлять записи.. конечный пользователь не'т волнует, как он будет добавлять данные в базу данных?.

Шаг -3: частная дополнительные и сложные методы, которые не'т включает в себя конечного пользователя'ы взаимодействия.

Так что все эти сложные и дополнительный метод, а не частный публичный(я.е скрывая этих методов) и удаление в obj.Проверка(); `в obj.CreateDBObject (); из главного класса программы мы добиваемся заключения.

Другими словами упрощение интерфейса для конечного пользователя является инкапсуляция.

Так что теперь полный код выглядит, как показано ниже -

 namespace CustomerContent
 {
     public class Customer
     {
        public string CustomerCode = "";
        public string CustomerName = "";

        public void ADD()
        {
           //my DB code will go here
        }

        private bool Validate()
        {
           //Granular Customer Code and Name
           return true;
        }

        private bool CreateDBObject()
        {
           //DB Connection Code
           return true;
        }

  class Program
  {
     static void main(String[] args)
     {
        CustomerComponent.Customer obj = new CustomerComponent.Customer;

        obj.CustomerCode = "s001";

        obj.CustomerName = "Mac";

        obj.ADD();
   }
}

Резюме :

Шаг 1: Какие мои потребности класса поддержки? это абстракция.

Шаг -3: шаг -3: частная дополнительные и сложные методы, которые не'т включает в себя конечного пользователя'взаимодействие S-это заключение.

С. П. - приведенный выше код-это жесткий и быстрый.

Обновление: Есть видео по данной ссылке, чтобы объяснить образец: [В чем разница между абстрагирование и инкапсуляция ][2]

Комментарии (4)

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

Например, примешь "окна" по. Они на самом деле не Windows в привычном понимании, они просто графический квадраты на экране. Но это's полезный, чтобы думать о них как Windows. Что'ы абстракция.

Если в "API-интерфейса Windows", которая скрывает детали, как текст или графика физически, оказываемые в пределах границ окна, что'ы заключения.

Комментарии (3)

Ниже находится семестр курс перегоняется в несколько абзацев.

Объектно-ориентированного анализа и дизайна (OOAD) на самом деле не две, а четыре принципа. Они являются:

  • Абстракция: означает, что вы включать только те характеристики объекта, которые необходимы в вашем приложении. Поэтому, если каждый банковский счет имеет дату открытия, но приложение не'т нужно знать учетную запись'с даты открытия, то вы просто не'т добавить OpeningDate области в объектно-ориентированное проектирование (в классе bankaccount). <суп></суп>Абстракция в OOAD не имеет ничего общего с абстрактными классами в ООП.

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

  • Наследование: больше кодирование-трюк, чем реальный принцип. Это избавит вас от повторного написания тех функций, которые вы написали где-то еще. Тем не менее, думаю, что должна быть связь между новый код и старый код, который вы хотите повторно использовать. В противном случае, никто не мешает вам писать класс Animal, который наследует от BankAccount, даже если это совершенно не бессмысленные.

Как вы можете наследовать ваши родители' богатство, вам могут наследовать поля и методы из родительского класса. Итак, принимая все, что родительского класса, а затем добавить что-то еще, если нужно, это наследство. Дон'т искать наследования в объектно-ориентированном проектировании. Наследство, естественно, будет представить себя.

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

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

  • ввод взаимосвязанных данных и методов; и,

  • выставляя только части данных и методов, соответствующих для функционирования с внешними организациями.


Другой упрощенный ответ здесь.


<суп><суп></суп> люди, которые утверждают, что "и абстракции OOAD результаты в абстрактных сайта ООП" и... хорошо, что это неправильно.</SUP и ГТ;

<суп>пример: при создании университета в приложения с использованием объектно-ориентированных принципов, вы только дизайн собой "абстракция" из Университета. Хотя там, как правило, одно получение наличных денег в банкомате почти в каждом вузе, вы не можете учесть этот факт, если он's не требуется для вашего приложения. И теперь, хотя у вас есть только абстракция университета, вы не обязаны ставить <и>реферат</КБД> В объявлении класса. Ваши абстрактные конструкции из университета будет нормальный класс в приложении&.ЛТ;/SUP и ГТ;

Комментарии (0)

мои 2С

цель инкапсуляции-скрыть детали реализации от пользователей вашего класса например, если вы внутренне держите СТД::список предметов в вашем классе, а затем решить, что СТД::вектор будет более эффективным, вы можете изменить это без ухода. Что сказал, Когда вы взаимодействуете с либо STL-контейнер благодаря абстракции, список и вектор может быть, например, проходится на одном пути с использованием аналогичных методов (итераторы).

Комментарии (9)

Один пример всегда был доведен до меня в контексте абстракции; автоматическая и механическая коробка передач на автомобилях. Механическая коробка передач скрывает некоторые действия переключение передач, но вам все равно придется сцепления и смену в качестве водителя. Автоматическая коробка передач включает в себя все детали переключение передач, т. е. скрывает его от вас, и поэтому это более высокий забор процесс смены передач.

Комментарии (4)

Заключение: скрытие деталей реализации (Примечание: данные и/или методы), такие, что только то, что здраво читаемый/записываемый/использовать внешние доступным для них, все остальное есть "неприкасаемых" и напрямую.

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

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

Комментарии (0)

Абстрагирование и инкапсуляция являются непонятными терминами и зависят друг от друга. Позвольте's сделать это на примере:

public class Person
    {
        private int Id { get; set; }
        private string Name { get; set; }
        private string CustomName()
        {
            return "Name:- " + Name + " and Id is:- " + Id;
        }
    }

Когда вы создали класс человек, вы сделали заключение, написав свойства и функции(ID, имя, CustomName). Вы выполняете абстракция, когда вы выставляете этот класс для клиента

Person p = new Person();
p.CustomName();

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

public class Person
        {
            private int Id { get; set; }
            private string Name { get; set; }
            private string LastName {get; set;}
            public string CustomName()
            {
                return "Name:- " + Name + " and Id is:- " + Id + "last name:- " + LastName;
            }
        }

Посмотрите, даже после addding дополнительную собственность в класс, ваш клиент не'т знаю, что вы делали в ваш код. Это где вы делали абстракции.

Комментарии (0)

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

Абстракция имеет отношение к "Почему" Я есмь помещая его на первое место.

Я в основном говорю клиенту "Вы не'т нужно много знать о том, как я обрабатываю оплаты и расчета доставки и т. д. Я просто хочу, чтобы вы сказать мне, что вы хотите 'оформить заказ' и я позабочусь о деталях.&и"

Таким образом я отразил детали путем обобщения (абстрагирования) на запрос проверки.

Я действительно думаю, что абстрагирование и инкапсуляция идти вместе.

Комментарии (0)

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

Абстракция дизайн класс для себя.

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

Абстракции более размещены в ОО-проектировании, а также заключения запишется в развитии фазы.

Комментарии (0)

Абстракция

В Java, абстракция означает сокрытие информации о реальном мире. Он устанавливает договор между лицом, рассказать о том, “что мы должны сделать, чтобы воспользоваться услугой”.

Например, в Разработка API, только реферировать информацию службы был явлен миру, а фактической реализации. Интерфейс в Java может помочь очень хорошо достижения этой концепции.

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

Заключение:

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

  1. Если у меня есть индивидуальный пакет для вина и еще один для шоколад, а если все классы, объявленные в пакете, как модификатор доступа по умолчанию, мы даем заключения на уровне пакета для всех классов.
  2. В пакете, если мы заявляем, что каждый класс подано (поля), как частная и имеющие общественный способ получить доступ к этим полям, таким образом давать заключения на уровне класса в этих областях
Комментарии (0)