Я готовлюсь к собеседованию и решил освежить мои концепции ООП. Есть сотни доступных статей, но, похоже, каждый описывает их по-разному. Некоторые говорят
Абстракция - это "процесс идентификации общих паттернов, которые систематические вариации; абстракция представляет собой общую картину и предоставляет средства для определения того, какую вариацию использовать" (Ричард Габриэль).
и достигается посредством абстрактных классов.
Некоторые другие говорят
Абстракция означает отображение клиенту только необходимых деталей объект
и
Допустим, у вас есть метод "CalculateSalary" в вашем классе Employee, который принимает EmployeeId как параметр и возвращает зарплату для текущего месяца в качестве целочисленного значения. Теперь, если кто-то хочет использовать этот метод. Ему не нужно заботиться о том, как Employee объект рассчитывает зарплату? Единственное, что ему нужно заботиться, это имя метода, его входные параметры и формат член,
Я googled снова и снова, и ни один из результатов, похоже, не дает мне правильного ответа. Теперь, где инкапсуляция подходит ко всем этим? Я искал и нашел вопрос о переполнении стека. Даже ответы на эти вопросы сбивали с толку Здесь, говорится
Инкапсуляция - это стратегия, используемая как часть абстракции. Инкапсуляция относится к состоянию объектов - объекты инкапсулируют их состояние и скрыть его снаружи; внешние пользователи класса взаимодействуют с ним используя его методы, но не может напрямую обращаться к состояниям классов. Так класс абстрагирует детали реализации, связанные с его состояние.
И здесь другой известный член говорит:
Это разные понятия.
Абстракция - это процесс очистки всех ненужные/несущественные атрибуты объекта и сохраняют только характеристики, наиболее подходящие для вашего домена.
Теперь я перепутал всю концепцию. Я знаю об абстрактном классе, наследовании, спецификаторах доступа и всех. Я просто хочу знать , как мне ответить, когда меня спрашивают об абстракции и/или инкапсуляции в интервью.
Не помещайте его как дубликат. Я знаю, что есть несколько подобных вопросов. Но я хочу избежать путаницы между противоречивыми объяснениями. Может ли кто-нибудь предложить надежную ссылку? Ссылка на вопрос stackoverflow также приветствуется, если это не создает путаницу снова.:)
EDIT: мне нужны ответы, немного ориентированные на С#