Я готуюсь до співбесіди і вирішив розглянути свої концепції ООП. Доступні сотні статей, але, схоже, кожна з них описує їх по-різному. Хтось каже
Абстракція - це "процес ідентифікації загальних зразків, що мають систематичні варіації; абстракція представляє загальний зразок і забезпечує засіб для уточнення, який варіант використовувати" (Річард Габріель).
і досягається завдяки абстрактним заняттям.
Деякі інші кажуть
Абстракція означає показати клієнту об’єкта лише необхідні деталі
і
Скажімо, у вас є метод "CalculateSalary" у своєму класі Employee, який приймає EmployeeId як параметр і повертає зарплату працівника за поточний місяць як ціле число. Тепер, якщо хтось хоче застосувати цей метод. Йому не потрібно дбати про те, як об'єкт працівника обчислює зарплату? Єдине, що його повинно турбувати, це назва методу, його вхідні параметри та формат результуючого члена,
Я гуглив знову і знову, і, здається, жоден з результатів не дає мені правильної відповіді. Тепер, де інкапсуляція укладається у все це? Я шукав і знайшов запитання про переповнення стека . Тут сказано навіть, що відповіді на ці запитання бентежили
Інкапсуляція - це стратегія, яка використовується як частина абстракції. Інкапсуляція відноситься до стану об’єктів - об’єкти інкапсулюють свій стан і приховують його зовні; зовнішні користувачі класу взаємодіють з ним за допомогою його методів, але не можуть отримати безпосередній доступ до стану класів. Тож клас абстрагує деталі реалізації, пов’язані з його станом.
І тут інший відомий член каже:
Це різні поняття.
Абстракція - це процес доопрацювання всіх непотрібних / неважливих атрибутів об’єкта та збереження лише тих характеристик, які найкраще підходять для вашого домену.
Зараз я переплутав із цілою концепцією. Я знаю про абстрактний клас, успадкування, специфікатори доступу та все. Я просто хочу знати, як я повинен відповісти, коли мене запитують про абстракцію та / або інкапсуляцію в інтерв’ю.
Будь ласка, не позначайте це як дублікат . Я знаю, що є кілька подібних питань. Але я хочу уникнути плутанини між суперечливими поясненнями. Хтось може запропонувати надійне посилання? Посилання на запитання щодо stackoverflow також вітається, якщо воно знову не створює плутанини. :)
EDIT: Мені потрібні відповіді, трохи орієнтовані на c #