ООП важливий не через себе, а через те, що він бере з собою. Щось, що стосується можливості абстрагувати та виділяти, групувати речі разом, розкриває лише ті частини, які необхідні для взаємодії.
Це звичайна інженерна техніка, що називається "модуляризація", яка дозволяє створювати складні системи як агрегацію більш простих, не піклуючись про кожну деталь на високому рівні, і що вимагає заміни компонентів, навіть без них, щоб бути саме тим те саме.
Ці "інженерні концепції" намагалися втримати в розробці програмного забезпечення з того часу, коли сам програмний продукт став більшим, ніж "єдиний потенціал розробника", таким чином, потрібен спосіб змусити розробників працювати над незалежними фрагментами, і дозволити цим фрагментам взаємодіють разом.
Зважаючи на це, ці принципи не обов'язково є лише в ООП (якщо теорія обчислень справедлива, існує нескінченно можливих методів досягнення цих результатів).
OOP - це просто успішна спроба об'єднати ці речі, даючи цим загальним термінам (як модулі, інкапсуляція, підміна) більш точні визначення та детальну концептуалізацію тих визначень (шаблонів), які можуть вписатися в мови програмування.
Розгляньте спочатку OOP не як " мовну особливість ", а як " загальну лексику ", яка змушує інженерів-программістів підійти до розробки програмного забезпечення.
Те, що в даній мові є чи ні примітиви, які безпосередньо застосовують цю лексику, забезпечуючи, наприклад, що "капсула" не відкривається ненавмисно тим, хто цього не повинен робити, є вторинним аспектом розробки OOP. Ось чому навіть великий проект C часто "управляється" як "OOP", навіть якщо сама мова не пропонує прямої підтримки для цього.
Перевага всього того, що не впізнається, поки розмір проекту не перешкоджає єдиному розробнику в розумінні та відслідковуванні всього, що він робить (адже в таких ситуаціях це може бути сприйнято навіть як «накладні витрати») або в невелику групу, яка щось розвиває в короткий період. І це головна причина, коли юніори, які вивчали ООП у терміні "мовної особливості", часто неправильно трактують його, створюючи неправильно розроблений код.
Те, як OOP вписується в мови, залежить від того, як мовні дизайнери інтерпретують принцип ООП у власній конструкції.
Отже, "інкапсуляція" в C ++ стає "приватними членами" (а "капсула" стає класом), "підміна" стає віртуальними функціями, які замінюють параметризацію / спеціалізацію шаблону тощо, тоді як у D капсула - "модуль" (і заміна йде через класи тощо), роблячи таким чином певну парадигму чи візерунок безпосередньо доступною на даній мові, а не на іншій тощо.
Те, що рекрутери прагнуть задати питання щодо OOP, - це просто перевірити вашу здатність до абстрактного та придуманого дизайну програмного забезпечення для майбутніх великих проектів та розробок. OOP, для них це лише "словник", який вони, як ви думаєте, знаєте і ви, і вони знаєте, щоб ви могли поговорити про інші більш загальні речі або конкретизувати певну реалізацію.