Почнемо з успадкування. Цілком нормальне визначення дається на вікіпедії: дозволяє описати новий клас на основі вже існуючого (батьківського), при цьому властивості і функціональність батьківського класу запозичуються новим класом. Іншими словами, клас-спадкоємець реалізує специфікацію вже існуючого класу (базовий клас). Це дозволяє звертатися з об'єктами класу-спадкоємця точно так же, як з об'єктами базового класу. Як відомо в С # не підтримує множинне спадщина. На співбесіді, відразу ж після цієї фрази задають питання: "А чому не підтримує?". І відповідь, "тому що геморою менше" - не влаштовує. Я тоді завжди задумаюсь, а людина, який запитав, чи знає відповідь. Думаю, скоріше ні, ніж так. Просто в кінці відповіді потрібно запитати у нього правильну відповідь, і побачити що він сам не знає.
Поліморфізм - взаємозамінність об'єктів з однаковим інтерфейсом. Мова програмування підтримує поліморфізм, якщо класи з однаковою специфікацією можуть мати різну реалізацію. Приклади: це перезавантаження методів, і перевизначення методів (успадкування або різна реалізація інтерфейсів).
Інкапсуляція - це так званий ефект чорного ящика. Ти знаєш що потрібно подати на вхід, і знаєш що буде на виході, сам процес тебе не хвилює. Для мене це одне з найголовніших понять. Його сенс - не забивати голову лівої нісенітницею. Багато людей на співбесіді про це забувають, і з цього задають такі дурні питання: "Як працює збирач сміття?". А мені воно як веб-програмісту нада? Інкапсуляція! я знаю що збірка сміття не мої проблеми, і можу бути класним програмістом і не знати як там все працює. Приклад: приходить прибиральниця на роботу, а у неї починають питати, як працює пилосос, як там все крутиться і т.д. Якщо вона знає - це плюс, може підробити інженером, а так навіщо воно їй. Ще люблять питати: "Чим відрізняється приховування від інкапсуляції?" Я на нього відповіді не знав. Чув про "приховування", але що це, просто забув (ще раз кажу я не викладач). Після співбесіди пошукав в інтернеті, і зрозумів який це дурне питання (не факт що я знайшов правильну відповідь). Як для мене приховування - це частина інкапсуляції. Я навіть не знаю, яку відповідь від мене хотіли отримати. Я зрозумів, що людина під инкапсуляцией розумів - не відома того, що відбувається всередині методу. А ось приховування - рівні доступу, тобто private, internal, protected. Тут йде просто різні школи, для мене приховування і є інкапсуляція, і питання в чому різниця - просто дурний. Це все одно що питання: "Чим відрізняється інтерполяція від апроксимації?" Питання дурний, бо інтерполяція - це частина (один з видів) апроксимації. Ще б запитав: "Чим відрізняється яблуко від яблука". І спробуй здогадайся, що він хотів дізнатися: "Чим відрізняється яблуко (дерево) від яблука (плід)".
Абстракція. Питання: "Що таке абстракція?" для мене прирівнюється до питань: "Що таке ООП?", "Що таке любов?" і т.д. Навіщо таке питати? Визначення, яке на вікі, мене не влаштовує. І самому важко дати відповідь. Як для мене це уявлення реальних об'єктів, завдань. дій і т.д. в програмному вигляді.
На співбесіді потрібно давати тестове завдання, а потім питати за кодом. А чи не шукати ботаніків, з якими і працювати огидно.
Знайоме був на співбесіді так питали один в один цю дурницю. а згадати не можу взагалі, а коли запитав, що таке Абстракція, так мені нагородили такого, що чорт ногу зломить!