Основні поняття ООП (інкапсуляція, абстракція, поліморфізм і наслідування)

5

Програмування Asp.net
Попередній

Наступний

Є 4 механізми ООП: інкапсуляція, абстракція, поліморфізм і наслідування. Був на співбесіді і мене просили про них розповісти. Я програміст – не викладач, теорію я знаю тільки за потреби. Я знаю що всі подумали так: “це кульовий питання”. Я теж з цим згоден. Мені більше навело інше, що відповідь на це питання, не показує знання програміста взагалі – це може тільки показати, як добре він навчався в інституті. А в інституті мене вчили тільки трьом термінам, абстракцію – не згадували, як на мене, це правильно. Давайте згадаємо, що ці терміни означають, (я особисто не забуваю визначення, а самі терміни, от не можу запам’ятати слова інкапсуляція і поліморфізм і все, хоча знаю що вони означають).

Почнемо з спадкування. Цілком нормальне визначення дається на вікіпедії: дозволяє описати новий клас на основі вже існуючого (батьківського), при цьому властивості і функціональність батьківського класу запозичуються новим класом. Іншими словами, клас-спадкоємець реалізує специфікацію вже існуючого класу (базовий клас). Це дозволяє звертатися з об’єктами класу-спадкоємця точно так само, як з об’єктами базового класу. Як відомо в С# не підтримує множинне успадкування. На співбесіді, відразу ж після цієї фрази задають питання: “А чому не підтримує?”. І відповідь, “тому що геморою менше” – не влаштовує. Я тоді завжди задумаюся, а чоловік, який запитав, чи знає відповідь. Думаю, скоріше ні, ніж так. Просто в кінці відповіді потрібно спросись у нього правильну відповідь, і побачити що він сам не знає.

Поліморфізм – взаємозамінність об’єктів з однаковим інтерфейсом. Мова програмування підтримує поліморфізм, якщо класи з однаковою специфікацією можуть мати різну реалізацію. Приклади: це перезавантаження методів, і перевизначення методів (успадкування або різна реалізація інтерфейсів).

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

Абстракція. Питання: “Що таке абстракція?” для мене прирівнюється до питань: “Що таке ООП?”, “Що таке любов?” і т. д. Навіщо таке питати? Визначення, яке на віки, мене не влаштовує. І самому важко дати відповідь. Як для мене це уявлення реальних об’єктів, завдань. дій і т. д. в програмному вигляді.

На співбесіді потрібно давати тестове завдання, а потім питати з кодом. А не шукати ботаніків, з якими і працювати огидно.