logo

30 pytań i odpowiedzi do wywiadu OOP (2024)

Programowanie obiektowe, w skrócie OOP, to paradygmat programowania, który implementuje koncepcję obiekty w programie. Ma na celu zapewnienie łatwiejszego rozwiązania problemów świata rzeczywistego poprzez wdrożenie w programowaniu jednostek ze świata rzeczywistego, takich jak dziedziczenie, abstrakcja, polimorfizm itp. Koncepcja OOP jest szeroko stosowana w wielu popularnych językach, takich jak Java, Python, C++ itp.

Pytania i odpowiedzi dotyczące wywiadu OOPs

OOP to także jeden z najważniejszych tematów rozmów kwalifikacyjnych. Ten artykuł zawiera kilka najpopularniejsze pytania na rozmowie kwalifikacyjnej dotyczące koncepcji OOPs.



Pytania do rozmowy kwalifikacyjnej OOP

1. Co to jest programowanie obiektowe (OOP)?

O obiekt O zorientowany P programowanie (znany również jako OOP) to paradygmat programowania, w którym kompletne oprogramowanie działa jako zbiór rozmawiających ze sobą obiektów. Obiekt to zbiór danych i metody operujące na tych danych.

2. Dlaczego OOP?

Główną zaletą OOP jest lepiej zarządzalny kod, który obejmuje:

  1. Ogólne zrozumienie oprogramowania zwiększa się wraz z odległością między językiem używanym przez programistów a językiem używanym przez użytkowników.
  2. Orientacja obiektowa ułatwia konserwację dzięki zastosowaniu enkapsulacji. Można łatwo zmienić podstawową reprezentację, zachowując te same metody.
  3. Paradygmat OOPs jest przydatny głównie w przypadku stosunkowo dużego oprogramowania.

3. Co to jest klasa?

A klasa jest elementem składowym programów obiektowych. Jest to typ danych zdefiniowany przez użytkownika, który zawiera elementy danych i funkcje członkowskie działające na elementach danych. Przypomina plan lub szablon obiektów mających wspólne właściwości i metody.



4. Co to jest przedmiot?

Jakiś obiekt jest instancją klasy. Składowych danych i metod klasy nie można używać bezpośrednio. Aby z nich skorzystać, musimy utworzyć obiekt (lub instancję) klasy. Mówiąc najprościej, są to rzeczywiste byty świata, które mają stan i zachowanie.

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; }>
Jawa
// 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);  } }>
Pyton
# 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);  } }>

Wyjście
student1.name: Rahul>

5. Jakie są główne cechy OOP?

Główna cecha OOP, znana również jako 4 filary lub podstawowe zasady OOP, jest następująca:

  1. Kapsułkowanie
  2. Abstrakcja danych
  3. Wielopostaciowość
  4. Dziedzictwo
filary oops

Główne cechy OOP



6. Co to jest enkapsulacja?

Hermetyzacja to łączenie danych i metod manipulujących nimi w jedną całość w taki sposób, że wrażliwe dane są ukryte przed użytkownikami
Jest on realizowany jako procesy wymienione poniżej:

  1. Ukrywanie danych: Funkcja językowa ograniczająca dostęp do elementów obiektu. Na przykład członkowie prywatni i chronieni w C++.
  2. Łączenie danych i metod w jedną całość: Dane i metody działające na tych danych są łączone w całość. Na przykład elementy danych i metody składowe, które na nich operują, są opakowane w pojedynczą jednostkę znaną jako klasa.
kapsułkowanie

7. Czym jest abstrakcja?

Abstrakcja jest podobna do enkapsulacji danych i jest bardzo ważna w OOP. Oznacza to pokazanie użytkownikowi tylko niezbędnych informacji i ukrycie innych, nieistotnych informacji. Abstrakcja jest realizowana przy użyciu klas i interfejsów.

abstrakcja w OOP

8. Co to jest polimorfizm?

Słowo Wielopostaciowość oznacza posiadanie wielu form. Właściwością pewnego kodu jest to, że zachowuje się inaczej w różnych kontekstach. Na przykład w języku C++ możemy zdefiniować wiele funkcji o tej samej nazwie, ale różniących się działaniem w zależności od kontekstu.

Polimorfizm można podzielić na dwa typy w zależności od czasu rozwiązania wywołania obiektu lub funkcji. Są one następujące:

  • Polimorfizm czasu kompilacji
  • Polimorfizm środowiska wykonawczego

A) Polimorfizm w czasie kompilacji

Polimorfizm czasu kompilacji, znany również jako polimorfizm statyczny lub wczesne wiązanie, to typ polimorfizmu, w którym wiązanie wywołania z jego kodem odbywa się w czasie kompilacji. Przeciążanie metod lub przeciążenie operatora to przykłady polimorfizmu w czasie kompilacji.

B) Polimorfizm środowiska wykonawczego

Znany również jako polimorfizm dynamiczny lub późne wiązanie, polimorfizm w czasie wykonywania to rodzaj polimorfizmu, w którym faktyczna implementacja funkcji jest określana w czasie wykonywania lub wykonywania. Przykładem tej metody jest przesłonięcie metody.

9. Czym jest dziedziczenie? Jaki jest jego cel?

Idea dziedziczenia jest prosta, klasa wywodzi się z innej klasy i wykorzystuje dane oraz implementację tej innej klasy. Klasa pochodna nazywana jest klasą podrzędną, pochodną lub podklasą, a klasa, z której wywodzi się klasa potomna, nazywana jest klasą nadrzędną, bazową lub nadklasą.

Głównym celem dziedziczenia jest zwiększenie możliwości ponownego wykorzystania kodu. Służy również do osiągnięcia polimorfizmu w czasie wykonywania.

10. Czym są specyfikatory dostępu? Jakie jest ich znaczenie w OOP?

Specyfikatory dostępu to specjalne typy słów kluczowych używane do określania lub kontrolowania dostępności jednostek, takich jak klasy, metody i tak dalej. Prywatny , Publiczny , I Chroniony są przykładami specyfikatorów dostępu lub modyfikatorów dostępu.
Kluczowe elementy OOP, czyli enkapsulacja i ukrywanie danych, są w dużej mierze osiągane dzięki tym specyfikatorom dostępu.

11. Jakie są zalety i wady OOP?

Zalety OOP

konwersja ciągu znaków na liczbę całkowitą

Wady OOP

OOPs zapewnia lepszą możliwość ponownego wykorzystania kodu.Programista powinien być dobrze wykwalifikowany i doskonale myśleć obiektowo, ponieważ w OOP-ach wszystko jest traktowane jako obiekt.
Kod jest łatwiejszy w utrzymaniu i aktualizacji.Wymagane jest właściwe planowanie, ponieważ OOP jest trochę trudne.
Zapewnia większe bezpieczeństwo danych, ograniczając dostęp do danych i unikając niepotrzebnego narażenia.Koncepcja OOP nie jest odpowiednia dla wszystkich rodzajów problemów.
Szybkie wdrożenie i łatwe przeprojektowanie, co pozwala zminimalizować złożoność całego programu.Długość programów jest znacznie większa w porównaniu z podejściem proceduralnym.

12. Jakie inne paradygmaty programowania istnieją poza OOP?

Paradygmat programowania odnosi się do techniki lub podejścia do pisania programu. Paradygmaty programowania można podzielić na następujące typy:

rodzaje paradygmatów programowania

1. Paradygmat programowania imperatywnego

Jest to paradygmat programowania, który działa poprzez zmianę stanu programu za pomocą instrukcji przypisania. W tym paradygmacie główny nacisk położony jest na sposób osiągnięcia celu. Do tej kategorii zaliczają się następujące paradygmaty programowania:

  1. Paradygmat programowania proceduralnego : Ten paradygmat programowania opiera się na koncepcji wywołania procedury. Procedury, znane również jako procedury lub funkcje, są podstawowymi elementami składowymi programu w tym paradygmacie.
  2. Programowanie obiektowe lub OOP : W tym paradygmacie wizualizujemy każdy byt jako obiekt i staramy się ustrukturyzować program w oparciu o stan i zachowanie tego obiektu.
  3. Programowanie równoległe : Paradygmat programowania równoległego polega na przetwarzaniu instrukcji poprzez podzielenie ich na wiele mniejszych części i jednoczesne wykonywanie.

2. Paradygmat programowania deklaratywnego

Programowanie deklaratywne koncentruje się na tym, co ma zostać wykonane, a nie na tym, jak powinno to zostać wykonane. W tym paradygmacie wyrażamy logikę obliczeń bez uwzględnienia ich przepływu sterowania. Paradygmat deklaratywny można dalej podzielić na:

  1. Paradygmat programowania logicznego : Opiera się na logice formalnej, w której instrukcje programu wyrażają fakty i reguły dotyczące problemu w formie logicznej.
  2. Paradygmat programowania funkcjonalnego : Programy są tworzone poprzez zastosowanie i komponowanie funkcji w tym paradygmacie.
  3. Paradygmat programowania baz danych : Do zarządzania danymi i informacjami zorganizowanymi w postaci pól, rekordów i plików wykorzystywane są modele programowania baz danych.

13. Jaka jest różnica pomiędzy programowaniem strukturalnym a programowaniem obiektowym?

Programowanie strukturalne to technika uważana za prekursora OOP i zwykle składa się z dobrze ustrukturyzowanych i oddzielnych modułów. Jest to podzbiór programowania proceduralnego. Różnica między OOP a programowaniem strukturalnym jest następująca:

Programowanie obiektowe

Programowanie strukturalne

Programowanie obiektowe opiera się na obiektach posiadających stan i zachowanie.Logiczną strukturę programu zapewnia programowanie strukturalne, które dzieli programy na odpowiadające im funkcje.
Opiera się na podejściu od dołu do góry.Działa w oparciu o podejście „od góry do dołu”.
Ogranicza otwarty przepływ danych do autoryzowanych części, zapewniając jedynie większe bezpieczeństwo danych.Brak ograniczeń w przepływie danych. Każdy może uzyskać dostęp do danych.
Zwiększona możliwość ponownego użycia kodu dzięki koncepcjom polimorfizmu i dziedziczenia.Możliwość ponownego użycia kodu osiąga się za pomocą funkcji i pętli.
W tym przypadku metody są zapisywane globalnie, a linie kodu są przetwarzane jedna po drugiej, tj. Uruchamiane sekwencyjnie.W tym przypadku metoda działa dynamicznie, wykonując wywołania w zależności od zapotrzebowania na kod przez określony czas.
Modyfikowanie i aktualizacja kodu jest łatwiejsza.Modyfikowanie kodu jest trudne w porównaniu do OOP.
Dane mają większe znaczenie w OOP.Kod ma większe znaczenie.

14. Jakie są powszechnie używane języki programowania obiektowego?

Paradygmat OOPs jest jednym z najpopularniejszych paradygmatów programowania. Jest szeroko stosowany w wielu popularnych językach programowania, takich jak:

15. Jakie są różne typy polimorfizmu?

Polimorfizm można podzielić na dwa typy w zależności od czasu rozwiązania wywołania obiektu lub funkcji. Są one następujące:

  1. Polimorfizm czasu kompilacji
  2. Polimorfizm środowiska wykonawczego
rodzaje polimorfizmu

Rodzaje polimorfizmu

A) Polimorfizm w czasie kompilacji

Polimorfizm czasu kompilacji, znany również jako polimorfizm statyczny lub wczesne wiązanie, to typ polimorfizmu, w którym wiązanie wywołania z jego kodem odbywa się w czasie kompilacji. Przeciążanie metody Lub przeciążenie operatora są przykładami polimorfizmu w czasie kompilacji.

B) Polimorfizm środowiska wykonawczego

Znany również jako dynamiczny polimorfizm lub późne wiązanie, polimorfizm czasu wykonywania to typ polimorfizmu, w którym rzeczywista implementacja funkcji jest określana w czasie wykonywania lub wykonywania. Zastąpienie metody jest przykładem tej metody.

16. Jaka jest różnica między przeciążeniem a nadpisaniem?

Funkcja polimorfizmu w czasie kompilacji o nazwie przeciążanie pozwala jednostce mieć wiele implementacji o tej samej nazwie. Przeciążanie metod i przeciążanie operatora to dwa przykłady.

Nadrzędny jest formą polimorfizmu w czasie wykonywania, w której wykonywana jest jednostka o tej samej nazwie, ale z inną implementacją. Realizuje się to za pomocą funkcji wirtualnych.

17. Czy są jakieś ograniczenia w dziedziczeniu?

Tak, gdy masz większą władzę, pojawia się więcej wyzwań. Chociaż dziedziczenie jest bardzo silną cechą OOP, ma również istotne wady.

  • Ponieważ do zaimplementowania musi przejść przez kilka klas, przetwarzanie dziedziczenia trwa dłużej.
  • Klasa bazowa i klasa podrzędna, które są zaangażowane w dziedziczenie, są również ze sobą ściśle powiązane (tzw. Ściśle powiązane). Dlatego też, jeśli zajdzie potrzeba wprowadzenia zmian, może zaistnieć potrzeba ich wprowadzenia w obu klasach jednocześnie.
  • Implementacja dziedziczenia również może być trudna. Dlatego też, jeśli nie zostanie prawidłowo wdrożone, może to skutkować nieprzewidzianymi błędami lub niedokładnymi wynikami.

18. Jakie istnieją różne rodzaje dziedziczenia?

Dziedziczenie można podzielić na 5 typów:

rodzaje dziedziczenia
  1. Pojedyncze dziedziczenie: Klasa podrzędna wywodząca się bezpośrednio z klasy bazowej
  2. Dziedziczenie wielokrotne: Klasa podrzędna wywodząca się z wielu klas bazowych.
  3. Dziedziczenie wielopoziomowe: Klasa potomna wywodząca się z klasy, która również wywodzi się z innej klasy bazowej.
  4. Dziedziczenie hierarchiczne: Wiele klas podrzędnych pochodzących z jednej klasy bazowej.
  5. Dziedziczenie hybrydowe: Dziedziczenie składające się z wielu typów dziedziczenia określonych powyżej.

Notatka: Rodzaj obsługiwanego dziedziczenia zależy od języka. Na przykład Java nie obsługuje dziedziczenia wielokrotnego.

19. Co to jest interfejs?

Unikalny typ klasy, znany jako interfejs, zawiera metody, ale nie ich definicje. Wewnątrz interfejsu dozwolona jest tylko deklaracja metody. Nie można tworzyć obiektów za pomocą interfejsu. Zamiast tego należy uruchomić ten interfejs i określić odpowiednie procedury.

20. Czym różni się klasa abstrakcyjna od interfejsu?

Zarówno klasy abstrakcyjne, jak i interfejsy są specjalnymi typami klas, które zawierają jedynie deklarację metod, a nie ich implementację. Klasa abstrakcyjna różni się jednak całkowicie od interfejsu. Poniżej przedstawiono kilka głównych różnic między klasą abstrakcyjną a interfejsem.

Klasa abstrakcyjna

Interfejs

Kiedy jednak dziedziczona jest klasa abstrakcyjna, podklasa nie musi podawać definicji metody abstrakcyjnej, dopóki podklasa faktycznie jej nie użyje.Kiedy interfejs jest zaimplementowany, podklasa musi określać wszystkie metody interfejsu oraz ich implementację.
Klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nieabstrakcyjne.Interfejs może mieć tylko metody abstrakcyjne.
Klasa abstrakcyjna może mieć zmienne końcowe, niekońcowe, statyczne i niestatyczne.Interfejs zawiera tylko zmienne statyczne i końcowe.
Klasa abstrakcyjna nie obsługuje dziedziczenia wielokrotnego.Interfejs obsługuje wielokrotne dziedziczenie.

21. Ile pamięci zajmują zajęcia?

Zajęcia nie zużywają pamięci. Służą jedynie jako szablon, z którego powstają przedmioty. Teraz obiekty faktycznie inicjują elementy klasy i metody podczas ich tworzenia, wykorzystując w tym procesie pamięć.

22. Czy zawsze konieczne jest tworzenie obiektów z klasy?

NIE. Jeśli klasa bazowa zawiera metody niestatyczne, należy skonstruować obiekt. Ale nie trzeba generować żadnych obiektów, jeśli klasa zawiera metody statyczne. W tym przypadku możesz użyć nazwy klasy, aby bezpośrednio wywołać te metody statyczne.

sortowanie przez wybór Java

23. Jaka jest różnica pomiędzy strukturą a klasą w C++?

Struktura jest również typem danych zdefiniowanym przez użytkownika w C++, podobnym do klasy z następującymi różnicami:

  • Główna różnica między strukturą a klasą polega na tym, że w strukturze elementy są domyślnie ustawione jako publiczne, podczas gdy w klasie elementy są domyślnie prywatne.
  • Inną różnicą jest to, że używamy struktura do deklarowania struktury i klasa do deklarowania klasy w C++.

24. Co to jest Konstruktor?

Konstruktor to blok kodu, który inicjuje nowo utworzony obiekt. Konstruktor przypomina metodę instancji, ale nie jest metodą, ponieważ nie ma typu zwracanego. Zwykle jest to metoda o tej samej nazwie co klasa, ale w niektórych językach może się ona różnić. Na przykład:

W Pythonie nazywa się konstruktor __gorący__.

W C++ i Javie konstruktor ma taką samą nazwę jak nazwa klasy.

Przykład:

C++
class base {  public:  base() { cout << 'This is a constructor'; } }>
Jawa
class base {  base() { System.out.printIn('This is a constructor'); } }>
Pyton
class base: def __init__(self): print('This is a constructor')>

25. Jakie są różne typy konstruktorów w C++?

Najpopularniejsza klasyfikacja konstruktorów obejmuje:

  1. Domyślny konstruktor
  2. Konstruktor niesparametryzowany
  3. Konstruktor parametryczny
  4. Kopiuj konstruktor

1. Konstruktor domyślny

Konstruktor domyślny to konstruktor, który nie przyjmuje żadnych argumentów. Jest to konstruktor niesparametryzowany, który jest automatycznie definiowany przez kompilator, jeśli nie podano jawnej definicji konstruktora.

Inicjuje elementy danych do ich wartości domyślnych.

2. Konstruktor niesparametryzowany

Jest to konstruktor zdefiniowany przez użytkownika, nie posiadający argumentów ani parametrów.

Przykład:

C++
class base {  base()  {  cout << 'This is a non-parameterized contructor';  } }>
Jawa
class base {  base()  {  System.out.printIn(  'This is a non-parameterized constructor.');  } }>
Pyton
class base: def __init__(self): print('This is a non-parameterized constructor')>

3. Konstruktor parametryczny

Konstruktory pobierające pewne argumenty nazywane są konstruktorami sparametryzowanymi.

Przykład:


C++
class base { public:  int base;  base(int var)  {  cout << 'Constructor with argument: ' << var;  } };>
Jawa
class base {  int base;  base(int a)  {  System.out.println('Constructor with argument: '  + a);  } }>
Pyton
class base: def __init__(self, a): print('Constructor with argument: {}'.format(a))>

4. Kopiuj konstruktor

Konstruktor kopiujący to funkcja członkowska, która inicjuje obiekt przy użyciu innego obiektu tej samej klasy.

Przykład:

C++
class base {  int a, b;  base(base& obj) // copy constructor  {  a = obj.a;  b = obj.b;  } }>
Jawa
class base {  int a, b;  base(base obj) // copy constructor  {  a = obj.a;  b = obj.b;  } }>


W Pythonie nie mamy wbudowanych konstruktorów kopiujących, takich jak Java i C++, ale możemy obejść ten problem, korzystając z różnych metod.

enkapsulacja w Javie

26. Co to jest destruktor?

Destruktor to metoda wywoływana automatycznie, gdy obiekt zostanie usunięty z zakresu lub zniszczony.

W C++ nazwa destruktora jest również taka sama jak nazwa klasy, ale zawiera znak ( ~ ) symbol tyldy jako przedrostek.

W Pythonie destruktor ma nazwę __z__ .

Przykład:

C++
class base { public:  ~base() { cout << 'This is a destructor'; } }>
Pyton
class base: def __del__(self): print('This is destructor')>


W Javie moduł zbierający elementy bezużyteczne automatycznie usuwa bezużyteczne obiekty, więc w Javie nie ma pojęcia destruktora. Mogliśmy zastosować metodę finalize() jako obejście destruktora Java, ale jest ona również przestarzała od wersji Java 9.

27. Czy można przeciążać konstruktor w klasie?

Tak Możemy przeciążyć konstruktor w klasie w Javie. Konstruktor Przeciążanie ma miejsce, gdy chcemy mieć konstruktor z innym konstruktorem i innymi parametrami (liczba i typ).

28. Czy możemy przeciążać destruktor w klasie?

Nie. Destruktor nie może być przeciążany w klasie. Może to być tylko jeden destruktor obecny w klasie.

29. Co to jest funkcja wirtualna?

Funkcja wirtualna to funkcja używana do przesłaniania metody klasy nadrzędnej w klasie pochodnej. Służy do zapewnienia abstrakcji w klasie.

W C++ funkcja wirtualna jest deklarowana za pomocą słowa kluczowego virtual,

W Javie każda publiczna, niestatyczna i nieostateczna metoda jest funkcją wirtualną.

Metody Pythona są zawsze wirtualne.

Przykład:

C++
class base {  virtual void print()  {  cout << 'This is a virtual function';  } }>
Jawa
class base {  void func()  {  System.out.printIn('This is a virtual function')  } }>
Pyton
class base: def func(self): print('This is a virtual function')>

30. Co to jest funkcja czysto wirtualna?

Czysta funkcja wirtualna, znana również jako funkcja abstrakcyjna, jest funkcją składową, która nie zawiera żadnych instrukcji. W razie potrzeby funkcja ta jest zdefiniowana w klasie pochodnej.

Przykład:

C++
class base {  virtual void pureVirFunc() = 0; }>
Jawa
abstract class base {  abstract void prVirFunc(); }>


W Pythonie osiągamy to za pomocą @abstractmethod z modułu ABC (Abstract Base Class).

Pytanie bonusowe

Co to jest klasa abstrakcyjna?

Ogólnie rzecz biorąc, klasa abstrakcyjna to klasa przeznaczona do dziedziczenia. Nie można go utworzyć. Klasa abstrakcyjna może składać się zarówno z metod abstrakcyjnych, jak i nieabstrakcyjnych.

W C++ klasa abstrakcyjna to klasa zawierająca co najmniej jedną czystą funkcję wirtualną.

W Javie klasa abstrakcyjna jest deklarowana za pomocą an abstrakcyjny słowo kluczowe.

Przykład:

C++
class absClass { public:  virtual void pvFunc() = 0; }>
Jawa
abstract class absClass {  // body }>


W Pythonie do stworzenia klasy abstrakcyjnej używamy modułu ABC (Abstract Base Class).

Należy odnieść się:

  1. OOP w C++
  2. OOP w Javie
  3. OOP w Pythonie
  4. Klasy i obiekty w C++
  5. Klasy i obiekty w Javie
  6. Klasy i obiekty w Pythonie
  7. Wprowadzenie do paradygmatów programowania
  8. Interfejs w Javie
  9. Klasa abstrakcyjna w Javie
  10. Pytania do rozmowy kwalifikacyjnej w języku C++