Об’єктно-орієнтоване програмування, або ООП, є парадигмою програмування, яка реалізує концепцію об'єктів в програмі. Він спрямований на забезпечення більш легкого вирішення проблем реального світу шляхом реалізації реальних сутностей, таких як успадкування, абстракція, поліморфізм тощо в програмуванні. Концепція ООП широко використовується в багатьох популярних мовах, таких як Java, Python, C++ тощо.

ООП також є однією з найважливіших тем для співбесід з програмування. Ця стаття містить деякі найпопулярніші запитання для інтерв’ю щодо концепції ООП.
Питання для співбесіди OOPs
1. Що таке об’єктно-орієнтоване програмування (ООП)?
О предмет О орієнтований П програмування (також відомий як ООП) — це парадигма програмування, де повне програмне забезпечення працює як купа об’єктів, що спілкуються один з одним. Об’єкт – це сукупність даних і методів, які працюють з цими даними.
2. Чому ООП?
Головною перевагою ООП є кращий керований код, який охоплює наступне:
- Загальне розуміння програмного забезпечення збільшується, оскільки відстань між мовою, якою розмовляють розробники, і мовою, якою розмовляють користувачі.
- Об’єктна орієнтація полегшує обслуговування завдяки використанню інкапсуляції. Можна легко змінити базове представлення, зберігаючи методи тими самими.
- Парадигма ООП в основному корисна для відносно великого програмного забезпечення.
3. Що таке клас?
А клас є будівельним блоком об'єктно-орієнтованих програм. Це визначений користувачем тип даних, який містить елементи даних і функції-члени, які працюють з елементами даних. Це як план або шаблон об'єктів, що мають спільні властивості та методи.
4. Що таке об’єкт?
Ан об'єкт є екземпляром класу. Члени даних і методи класу не можна використовувати безпосередньо. Щоб використовувати їх, нам потрібно створити об’єкт (або екземпляр) класу. Простіше кажучи, вони є реальними світовими сутностями, які мають стан і поведінку.
C++ #include using namespace std; // defining class class Student { public: string name; }; int main() { // creating object Student student1; // assigning member some value student1.name = 'Rahul'; cout << 'student1.name: ' << student1.name; return 0; }> Java // class definition class Student { String name; } class GfG { public static void main(String args[]) { // creating an object Student student1 = new Student(); // assigning member some value student1.name = 'Rahul'; System.out.println('student1.name: ' + student1.name); } }> Python # class definition class Student: name = '' # creating object student1 = Student() student1.name = 'Rahul'; print('student1.name: ' + student1.name);> C# using System; // defining class public class Student { public string name; } public class GFG { static public void Main() { // creating object Student student1 = new Student(); student1.name = 'Rahul'; Console.WriteLine('student1.name: ' + student1.name); } }> Вихід
student1.name: Rahul>
5. Які основні особливості ООП?
Основна особливість ООП, також відома як 4 стовпи або основні принципи ООП, полягає в наступному:
- Інкапсуляція
- Абстракція даних
- Поліморфізм
- Спадщина

Основні функції ООП
6. Що таке інкапсуляція?
Інкапсуляція — це зв’язування даних і методів, які маніпулюють ними, в єдиний блок таким чином, щоб конфіденційні дані були приховані від користувачів
Він реалізується як описані нижче процеси:
- Приховування даних: Мовна функція для обмеження доступу до членів об’єкта. Наприклад, приватні та захищені члени в C++.
- Об’єднання даних і методів разом: Дані та методи, які працюють з цими даними, об’єднуються разом. Наприклад, члени даних і методи членів, які з ними працюють, загорнуті в єдиний блок, відомий як клас.

7. Що таке абстракція?
Абстракція схожа на інкапсуляцію даних і дуже важлива в ООП. Це означає показ лише необхідної інформації та приховування іншої несуттєвої інформації від користувача. Абстракція реалізована за допомогою класів та інтерфейсів.

8. Що таке поліморфізм?
Слово Поліморфізм означає мати багато форм. Це властивість деякого коду поводитися по-різному для різних контекстів. Наприклад, у мові C++ ми можемо визначити кілька функцій, які мають однакову назву, але різну роботу залежно від контексту.
Поліморфізм можна класифікувати на два типи залежно від часу вирішення виклику об’єкта або функції. Вони такі:
- Поліморфізм часу компіляції
- Поліморфізм виконання
A) Поліморфізм під час компіляції
Поліморфізм під час компіляції, також відомий як статичний поліморфізм або раннє зв’язування, — це тип поліморфізму, коли зв’язування виклику з кодом виконується під час компіляції. Перевантаження методів або операторів є прикладами поліморфізму під час компіляції.
B) Поліморфізм виконання
абстрактний клас може мати конструктор
Також відомий як динамічний поліморфізм або пізнє зв’язування, поліморфізм часу виконання — це тип поліморфізму, де фактична реалізація функції визначається під час виконання або виконання. Перевизначення методу є прикладом цього методу.
9. Що таке спадкування? Яке його призначення?
Ідея успадкування проста: клас є похідним від іншого класу та використовує дані та реалізацію цього іншого класу. Клас, який є похідним, називається дочірнім, або похідним, або підкласом, а клас, від якого походить дочірній клас, називається батьківським, або базовим, або суперкласом.
Основна мета Inheritance — підвищити можливість повторного використання коду. Він також використовується для досягнення поліморфізму виконання.
10. Що таке специфікатори доступу? Яке їхнє значення в ООП?
Специфікатори доступу — це спеціальні типи ключових слів, які використовуються для визначення або керування доступністю сутностей, таких як класи, методи тощо. Приватний , Громадський , і Захищений є прикладами специфікаторів доступу або модифікаторів доступу.
Ключові компоненти ООП, інкапсуляція та приховування даних, значною мірою досягаються завдяки цим специфікаторам доступу.
11. Які переваги та недоліки ООП?
Переваги ООП | Недоліки ООП |
|---|---|
| ООП забезпечує розширену можливість повторного використання коду. | Програміст повинен мати хороші навички та відмінне мислення щодо об’єктів, оскільки в ООП все розглядається як об’єкт. |
| Код легше підтримувати та оновлювати. | Потрібне належне планування, оскільки ООП – це трохи складно. |
| Він забезпечує кращу безпеку даних, обмежуючи доступ до них і уникаючи непотрібного розкриття. | Концепція ООП підходить не для всіх видів проблем. |
| Швидке впровадження та легке перепроектування, що призводить до мінімізації складності загальної програми. | Довжина програм набагато більша в порівнянні з процедурним підходом. |
12. Які інші парадигми програмування існують крім ООП?
Парадигма програмування відноситься до техніки або підходу до написання програми. Парадигми програмування можна класифікувати на такі типи:

1. Парадигма імперативного програмування
Це парадигма програмування, яка працює шляхом зміни стану програми за допомогою операторів присвоєння. Основна увага в цій парадигмі зосереджена на тому, як досягти мети. До цієї категорії відносяться наступні парадигми програмування:
- Парадигма процедурного програмування : Ця парадигма програмування базується на концепції виклику процедури. Процедури, також відомі як підпрограми або функції, є основними будівельними блоками програми в цій парадигмі.
- Об'єктно-орієнтоване програмування або ООП : У цій парадигмі ми візуалізуємо кожну сутність як об’єкт і намагаємося структурувати програму на основі стану та поведінки цього об’єкта.
- Паралельне програмування : парадигма паралельного програмування — це обробка інструкцій шляхом поділу їх на кілька менших частин і їх одночасного виконання.
2. Парадигма декларативного програмування
Декларативне програмування зосереджується на тому, що має бути виконано, а не на тому, як це має бути виконано. У цій парадигмі ми висловлюємо логіку обчислення без урахування його потоку керування. Декларативну парадигму можна далі класифікувати на:
рядок a int
- Парадигма логічного програмування : ґрунтується на формальній логіці, де оператори програми виражають факти та правила про проблему в логічній формі.
- Парадигма функціонального програмування : Програми створюються шляхом застосування та компонування функцій у цій парадигмі.
- Парадигма програмування бази даних : Для керування даними та інформацією, організованою як поля, записи та файли, використовуються моделі програмування баз даних.
13. Яка різниця між структурним та об’єктно-орієнтованим програмуванням?
Структурне програмування — це техніка, яка вважається попередником ООП і зазвичай складається з добре структурованих і розділених модулів. Це підмножина процедурного програмування. Різниця між ООП і структурованим програмуванням полягає в наступному:
Об'єктно-орієнтоване програмування | Структурне програмування |
|---|---|
| Об’єктно-орієнтоване програмування побудоване на об’єктах, які мають стан і поведінку. | Логічна структура програми забезпечується структурним програмуванням, яке поділяє програми на відповідні функції. |
| Він дотримується підходу знизу до верху. | Він дотримується підходу зверху вниз. |
| Обмежує відкритий потік даних авторизованими частинами, лише забезпечуючи кращу безпеку даних. | Немає обмежень на потік даних. Будь-хто може отримати доступ до даних. |
| Розширена можливість повторного використання коду завдяки концепціям поліморфізму та успадкування. | Багаторазове використання коду досягається за допомогою функцій і циклів. |
| У цьому методі написані глобально, а рядки коду обробляються один за одним, тобто виконуються послідовно. | У цьому метод працює динамічно, здійснюючи виклики відповідно до потреби коду протягом певного часу. |
| Змінювати та оновлювати код легше. | Змінити код складніше порівняно з ООП. |
| Даним надається більше значення в ООП. | Коду надається більше значення. |
14. Які мови об’єктно-орієнтованого програмування використовуються найчастіше?
Парадигма ООП є однією з найпопулярніших парадигм програмування. Він широко використовується в багатьох популярних мовах програмування, таких як:
- C++
- Java
- Python
- Javascript
- C#
- рубін
15. Які різні типи поліморфізму?
Поліморфізм можна класифікувати на два типи залежно від часу вирішення виклику об’єкта або функції. Вони такі:
- Поліморфізм часу компіляції
- Поліморфізм виконання

Види поліморфізму
A) Поліморфізм під час компіляції
Поліморфізм під час компіляції, також відомий як статичний поліморфізм або раннє зв’язування, — це тип поліморфізму, коли зв’язування виклику з кодом виконується під час компіляції. Перевантаження методу або перевантаження оператора є прикладами поліморфізму під час компіляції.
Б) Поліморфізм виконання
Також відомий як динамічний поліморфізм або пізнє зв’язування, поліморфізм часу виконання — це тип поліморфізму, де фактична реалізація функції визначається під час виконання або виконання. Перевизначення методу є прикладом цього методу.
16. Яка різниця між перевантаженням і перевизначенням?
Функція поліморфізму під час компіляції називається перевантаження дозволяє об’єкту мати численні реалізації з однаковою назвою. Перевантаження методів і перевантаження операторів є двома прикладами.
Перевизначення це форма поліморфізму під час виконання, де виконується сутність з такою ж назвою, але з іншою реалізацією. Це реалізовано за допомогою віртуальних функцій.
Шрі Рамануджан
17. Чи існують якісь обмеження щодо спадкування?
так, є більше викликів, коли у вас більше повноважень. Хоча успадкування є дуже сильною властивістю ООП, воно також має значні недоліки.
- Оскільки для реалізації необхідно пройти через кілька класів, обробка успадкування займає більше часу.
- Базовий клас і дочірній клас, які обидва беруть участь у спадкуванні, також тісно пов’язані один з одним (так звані тісно пов’язані). Тому, якщо необхідно внести зміни, їх, можливо, доведеться внести в обидва класи одночасно.
- Реалізація успадкування також може бути складною. Тому, якщо це не реалізовано належним чином, це може призвести до непередбачених помилок або неточних результатів.
18. Які типи успадкування існують?
Спадковість можна розділити на 5 типів, які є такими:

- Одинарне успадкування: Дочірній клас, отриманий безпосередньо від базового класу
- Множинне успадкування: Дочірній клас, похідний від кількох базових класів.
- Багаторівневе успадкування: Дочірній клас, похідний від класу, який також є похідним від іншого базового класу.
- Ієрархічне успадкування: Кілька дочірніх класів, похідних від одного базового класу.
- Гібридне успадкування: Успадкування, що складається з кількох типів успадкування з перерахованих вище.
Примітка: Тип підтримуваного успадкування залежить від мови. Наприклад, Java не підтримує множинне успадкування.
19. Що таке інтерфейс?
Унікальний тип класу, відомий як інтерфейс, містить методи, але не їх визначення. Всередині інтерфейсу дозволено лише оголошення методів. Ви не можете створювати об’єкти за допомогою інтерфейсу. Натомість ви повинні запустити цей інтерфейс і вказати процедури для цього.
20. Чим абстрактний клас відрізняється від інтерфейсу?
І абстрактні класи, і інтерфейси є спеціальними типами класів, які містять лише оголошення методів, а не їхню реалізацію. Однак абстрактний клас повністю відрізняється від інтерфейсу. Нижче наведено деякі основні відмінності між абстрактним класом та інтерфейсом.
Абстрактний клас | Інтерфейс |
|---|---|
| Однак, коли абстрактний клас успадковується, підклас не зобов’язаний надавати визначення абстрактного методу до тих пір, поки підклас фактично не використовує його. | Коли інтерфейс реалізовано, підклас повинен визначати всі методи інтерфейсу, а також їх реалізацію. |
| Клас, який є абстрактним, може мати як абстрактні, так і неабстрактні методи. | Інтерфейс може мати лише абстрактні методи. |
| Абстрактний клас може мати кінцеві, нефінальні, статичні та нестатичні змінні. | Інтерфейс має лише статичні та кінцеві змінні. |
| Абстрактний клас не підтримує множинне успадкування. | Інтерфейс підтримує множинне успадкування. |
21. Скільки пам'яті займає клас?
Заняття не використовують пам'ять. Вони лише служать шаблоном, за яким виготовляються предмети. Тепер об’єкти фактично ініціалізують члени класу та методи, коли вони створюються, використовуючи пам’ять у процесі.
22. Чи завжди необхідно створювати об'єкти з класу?
Немає. Якщо базовий клас містить нестатичні методи, необхідно створити об’єкт. Але жодних об’єктів не потрібно генерувати, якщо клас містить статичні методи. У цьому випадку ви можете використовувати назву класу для прямого виклику цих статичних методів.
23. Яка різниця між структурою та класом у C++?
Структура також є визначеним користувачем типом даних у C++, подібним до класу з такими відмінностями:
- Основна відмінність між структурою та класом полягає в тому, що в структурі члени встановлені як публічні за замовчуванням, тоді як у класі члени є приватними за замовчуванням.
- Інша відмінність полягає в тому, що ми використовуємо структура для оголошення структури і клас для оголошення класу в C++.
24. Що таке конструктор?
Конструктор - це блок коду, який ініціалізує новостворений об'єкт. Конструктор нагадує метод екземпляра, але це не метод, оскільки він не має типу повернення. Зазвичай це метод, який має таку саму назву, що й клас, але в деяких мовах вона може відрізнятися. Наприклад:
У Python конструктор має назву __гарячий__.
У C++ і Java конструктор називається так само, як ім'я класу.
приклад:
C++ class base { public: base() { cout << 'This is a constructor'; } }> Java class base { base() { System.out.printIn('This is a constructor'); } }> Python class base: def __init__(self): print('This is a constructor')> 25. Які існують різні типи конструкторів у C++?
Найпоширеніша класифікація конструкторів включає:
- Конструктор за замовчуванням
- Непараметризований конструктор
- Параметризований конструктор
- Конструктор копіювання
1. Конструктор за замовчуванням
Конструктор за замовчуванням — це конструктор, який не приймає жодних аргументів. Це непараметризований конструктор, який автоматично визначається компілятором, якщо не надається явне визначення конструктора.
Він ініціалізує члени даних їхніми значеннями за замовчуванням.
2. Непараметризований конструктор
Це визначений користувачем конструктор, який не має аргументів чи параметрів.
приклад:
coutC++
class base { base() { cout << 'This is a non-parameterized contructor'; } }> Java class base { base() { System.out.printIn( 'This is a non-parameterized constructor.'); } }> Python class base: def __init__(self): print('This is a non-parameterized constructor')> 3. Параметризований конструктор
Конструктори, які приймають деякі аргументи, відомі як параметризовані конструктори.
приклад:
class base { public: int base; base(int var) { cout << 'Constructor with argument: ' << var; } };> Java class base { int base; base(int a) { System.out.println('Constructor with argument: ' + a); } }> Python class base: def __init__(self, a): print('Constructor with argument: {}'.format(a))> 4. Конструктор копіювання
Конструктор копіювання — це функція-член, яка ініціалізує об’єкт за допомогою іншого об’єкта того самого класу.
приклад:
C++ class base { int a, b; base(base& obj) // copy constructor { a = obj.a; b = obj.b; } }> Java class base { int a, b; base(base obj) // copy constructor { a = obj.a; b = obj.b; } }>
У Python ми не маємо вбудованих конструкторів копіювання, таких як Java і C++, але ми можемо вирішити проблему різними методами.
26. Що таке деструктор?
Деструктор — це метод, який автоматично викликається, коли об’єкт вичерпується або знищується.
У C++ назва деструктора також збігається з назвою класу, але з ( ~ ) символ тильди як префікс.
У Python деструктор має назву __з__ .
приклад:
C++ class base { public: ~base() { cout << 'This is a destructor'; } }> Python class base: def __del__(self): print('This is destructor')>
У Java збирач сміття автоматично видаляє непотрібні об’єкти, тому в Java немає концепції деструктора. Ми могли б використати метод finalize() як обхідний шлях для деструктора Java, але він також застарів з Java 9.
27. Чи можна перевантажувати конструктор у класі?
Так, ми можемо перевантажити конструктор у класі на Java. Перевантаження конструктора виконується, коли нам потрібен конструктор з іншим конструктором з іншим параметром (числом і типом).
28. Чи можемо ми перевантажити деструктор у класі?
Ні. Деструктор не можна перевантажувати в класі. У класі може бути лише один деструктор.
29. Що таке віртуальна функція?
Віртуальна функція — це функція, яка використовується для перевизначення методу батьківського класу в похідному класі. Він використовується для забезпечення абстракції в класі.
У C++ віртуальна функція оголошується за допомогою ключового слова virtual,
У Java кожен відкритий, нестатичний і нефінальний метод є віртуальною функцією.
Методи Python завжди віртуальні.
приклад:
C++ class base { virtual void print() { cout << 'This is a virtual function'; } }> Java class base { void func() { System.out.printIn('This is a virtual function') } }> Python class base: def func(self): print('This is a virtual function')> 30. Що таке чиста віртуальна функція?
Чиста віртуальна функція, також відома як абстрактна функція, є функцією-членом, яка не містить жодних операторів. Ця функція визначається в похідному класі, якщо це необхідно.
приклад:
k алгоритм найближчого сусідаC++
class base { virtual void pureVirFunc() = 0; }> Java abstract class base { abstract void prVirFunc(); }>
У Python ми досягаємо цього за допомогою @abstractmethod з модуля ABC (абстрактний базовий клас).
Бонусне питання
Що таке абстрактний клас?
Загалом, абстрактний клас — це клас, призначений для використання для успадкування. Його неможливо створити. Абстрактний клас може складатися як з абстрактних, так і з неабстрактних методів.
У C++ абстрактний клас - це клас, який містить принаймні одну чисту віртуальну функцію.
У Java абстрактний клас оголошується за допомогою анотація ключове слово.
приклад:
C++ class absClass { public: virtual void pvFunc() = 0; }> Java abstract class absClass { // body }>
У Python ми використовуємо модуль ABC (Abstract Base Class) для створення абстрактного класу.
Обов'язково звертатися:
- ООП в C++
- ООП в Java
- ООП на Python
- Класи та об’єкти в C++
- Класи та об'єкти в Java
- Класи та об’єкти в Python
- Введення в парадигми програмування
- Інтерфейс на Java
- Абстрактний клас на Java
- Питання для співбесіди C++