logo

Otázky a odpovědi 30 OOPs rozhovoru (2024)

Objektově orientované programování neboli OOPs je programovací paradigma, které implementuje koncept objektů v programu. Jeho cílem je poskytnout snazší řešení problémů reálného světa implementací entit reálného světa, jako je dědičnost, abstrakce, polymorfismus atd. do programování. Koncept OOPs je široce používán v mnoha populárních jazycích, jako je Java, Python, C++ atd.

Otázky a odpovědi na rozhovor OOPs

OOPs je také jedním z nejdůležitějších témat pro programátorské rozhovory. Tento článek některé obsahuje hlavní otázky rozhovoru o konceptu OOPs.



Otázky k pohovoru OOPs

1. Co je objektově orientované programování (OOP)?

Ó bject Ó riented P programování (také známé jako OOPs) je programovací paradigma, kde kompletní software funguje jako skupina objektů, které spolu mluví. Objekt je soubor dat a metod, které s těmito daty pracují.

2. Proč OOP?

Hlavní výhodou OOP je lépe spravovatelný kód, který pokrývá následující:

  1. Celkové porozumění softwaru se zvyšuje se vzdáleností mezi jazykem, kterým mluví vývojáři, a jazykem, kterým mluví uživatelé.
  2. Orientace objektu usnadňuje údržbu použitím zapouzdření. Základní reprezentaci lze snadno změnit zachováním stejných metod.
  3. Paradigma OOPs je užitečné hlavně pro relativně velký software.

3. Co je třída?

A třída je stavebním kamenem objektově orientovaných programů. Je to uživatelsky definovaný datový typ, který obsahuje datové členy a členské funkce, které pracují s datovými členy. Je to jako plán nebo šablona objektů, které mají společné vlastnosti a metody.



4. Co je to objekt?

An objekt je instancí třídy. Datové členy a metody třídy nelze použít přímo. Abychom je mohli používat, musíme vytvořit objekt (nebo instanci) třídy. Jednoduše řečeno, jsou to skutečné světové entity, které mají stav a chování.

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; }>
Jáva
// 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);  } }>
Krajta
# 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);  } }>

Výstup
student1.name: Rahul>

5. Jaké jsou hlavní rysy OOP?

Hlavní rys OOP, také známý jako 4 pilíře nebo základní principy OOP, jsou následující:

  1. Zapouzdření
  2. Abstrakce dat
  3. Polymorfismus
  4. Dědictví
sloupy oops

Hlavní vlastnosti OOPs



6. Co je zapouzdření?

Zapouzdření je spojení dat a metod, které s nimi manipulují, do jediné jednotky tak, aby citlivá data byla před uživateli skryta.
Je implementován jako procesy uvedené níže:

řetězcové metody v jazyce Java
  1. Skrytí dat: Jazyková funkce pro omezení přístupu na členy objektu. Například soukromé a chráněné členy v C++.
  2. Sdružování dat a metod dohromady: Data a metody, které s těmito daty pracují, jsou spojeny dohromady. Například datové členy a členské metody, které s nimi pracují, jsou zabaleny do jediné jednotky známé jako třída.
zapouzdření

7. Co je abstrakce?

Abstrakce je podobná zapouzdření dat a je v OOP velmi důležitá. Znamená to zobrazit pouze nezbytné informace a ostatní nepodstatné informace před uživatelem skrýt. Abstrakce je implementována pomocí tříd a rozhraní.

abstrakce v OOP

8. Co je to polymorfismus?

Slovo Polymorfismus znamená mít mnoho podob. Je vlastností některého kódu chovat se v různých kontextech odlišně. Například v jazyce C++ můžeme definovat více funkcí se stejným názvem, ale odlišnou funkcí v závislosti na kontextu.

Polymorfismus lze rozdělit do dvou typů na základě času, kdy je vyřešeno volání objektu nebo funkce. Jsou následující:

  • Polymorfismus času kompilace
  • Polymorfismus za běhu

A) Polymorfismus v době kompilace

Polymorfismus doby kompilace, také známý jako statický polymorfismus nebo časná vazba, je typ polymorfismu, kdy se vazba volání na jeho kód provádí v době kompilace. Přetěžování metod nebo přetěžování operátorů jsou příklady polymorfismu v době kompilace.

B) Polymorfismus za běhu

Také známý jako dynamický polymorfismus nebo pozdní vazba, běhový polymorfismus je typ polymorfismu, kdy se skutečná implementace funkce určuje během běhu nebo provádění. Přepsání metody je příkladem této metody.

9. Co je to dědičnost? Jaký je jeho účel?

Myšlenka dědičnosti je jednoduchá, třída je odvozena od jiné třídy a používá data a implementaci této jiné třídy. Třída, která je odvozena, se nazývá podřízená nebo odvozená nebo podtřída a třída, ze které je podřízená třída odvozena, se nazývá nadřazená nebo základní nebo nadtřída.

Hlavním účelem dědičnosti je zvýšit znovupoužitelnost kódu. Používá se také k dosažení Runtime Polymorphism.

10. Co jsou specifikátory přístupu? Jaký je jejich význam v OOP?

Specifikátory přístupu jsou speciální typy klíčových slov, které se používají k určení nebo řízení přístupnosti entit, jako jsou třídy, metody a tak dále. Soukromé , Veřejnost , a Chráněný jsou příklady specifikátorů přístupu nebo modifikátorů přístupu.
Klíčové komponenty OOP, zapouzdření a skrytí dat, jsou z velké části dosaženy díky těmto specifikátorům přístupu.

11. Jaké jsou výhody a nevýhody OOP?

Výhody OOP

Nevýhody OOP

OOPs poskytuje vylepšenou znovupoužitelnost kódu.Programátor by měl být dobře zručný a měl by mít vynikající myšlení, pokud jde o objekty, protože vše je v OOP považováno za objekt.
Kód se snadněji udržuje a aktualizuje.Je vyžadováno správné plánování, protože OOP je trochu složitější.
Poskytuje lepší zabezpečení dat tím, že omezuje přístup k datům a zabraňuje zbytečnému vystavení.Koncept OOPs není vhodný pro všechny druhy problémů.
Rychlá implementace a snadné přepracování, což vede k minimalizaci složitosti celého programu.Délka programů je mnohem větší ve srovnání s procedurálním přístupem.

12. Jaká další paradigmata programování existují kromě OOP?

Programovací paradigma se odkazuje na techniku ​​nebo přístup psaní programu. Programovací paradigmata lze rozdělit do následujících typů:

typy programovacích paradigmat

1. Paradigma imperativního programování

Je to programovací paradigma, které funguje tak, že mění stav programu pomocí příkazů přiřazení. Hlavní důraz v tomto paradigmatu spočívá v tom, jak dosáhnout cíle. Do této kategorie spadají následující programovací paradigmata:

  1. Paradigma procedurálního programování : Toto programovací paradigma je založeno na konceptu volání procedury. Procedury, známé také jako rutiny nebo funkce, jsou základními stavebními kameny programu v tomto paradigmatu.
  2. Objektově orientované programování nebo OOP : V tomto paradigmatu vizualizujeme každou entitu jako objekt a snažíme se strukturovat program na základě stavu a chování tohoto objektu.
  3. Paralelní programování : Paradigma paralelního programování je zpracování instrukcí jejich rozdělením na více menších částí a jejich souběžným prováděním.

2. Paradigma deklarativního programování

Deklarativní programování se zaměřuje na to, co má být provedeno, spíše než na to, jak by to mělo být provedeno. V tomto paradigmatu vyjadřujeme logiku výpočtu, aniž bychom uvažovali jeho řídicí tok. Deklarativní paradigma lze dále rozdělit na:

  1. Paradigma logického programování : Je založen na formální logice, kde programové příkazy vyjadřují fakta a pravidla o problému v logické formě.
  2. Paradigma funkcionálního programování : Programy jsou vytvářeny aplikací a skládáním funkcí v tomto paradigmatu.
  3. Paradigma databázového programování : Ke správě dat a informací organizovaných jako pole, záznamy a soubory se používají databázové programovací modely.

13. Jaký je rozdíl mezi strukturovaným programováním a objektově orientovaným programováním?

Strukturované programování je technika, která je považována za předchůdce OOP a obvykle sestává z dobře strukturovaných a oddělených modulů. Je to podmnožina procedurálního programování. Rozdíl mezi OOP a strukturovaným programováním je následující:

Objektově orientované programování

Strukturální programování

Objektově orientované programování je postaveno na objektech, které mají stav a chování.Logickou strukturu programu poskytuje strukturální programování, které rozděluje programy do odpovídajících funkcí.
Dodržuje přístup zdola nahoru.Dodržuje přístup shora dolů.
Omezuje otevřený tok dat na autorizované části, které poskytují pouze lepší zabezpečení dat.Žádné omezení toku dat. K datům má přístup kdokoli.
Vylepšená opětovná použitelnost kódu díky konceptům polymorfismu a dědičnosti.Znovupoužitelnosti kódu je dosaženo pomocí funkcí a smyček.
V tomto jsou metody psány globálně a řádky kódu jsou zpracovávány jeden po druhém, tj. Spouštějí se sekvenčně.V tomto metoda funguje dynamicky a volá podle potřeby kódu po určitou dobu.
Úprava a aktualizace kódu je jednodušší.Úprava kódu je ve srovnání s OOP obtížná.
V OOP je datům přikládán větší význam.Kódu je přikládán větší význam.

14. Jaké jsou některé běžně používané objektově orientované programovací jazyky?

Paradigma OOPs je jedním z nejpopulárnějších paradigmat programování. Je široce používán v mnoha populárních programovacích jazycích, jako jsou:

15. Jaké jsou různé typy polymorfismu?

Polymorfismus lze rozdělit do dvou typů na základě času, kdy je vyřešeno volání objektu nebo funkce. Jsou následující:

  1. Polymorfismus času kompilace
  2. Polymorfismus za běhu
typy polymorfismu

Typy polymorfismu

A) Polymorfismus v době kompilace

Polymorfismus doby kompilace, také známý jako statický polymorfismus nebo časná vazba, je typ polymorfismu, kdy se vazba volání na jeho kód provádí v době kompilace. Přetížení metody nebo přetížení operátora jsou příklady polymorfismu v době kompilace.

java pgm

B) Polymorfismus za běhu

Také známý jako dynamický polymorfismus nebo pozdní vazba, běhový polymorfismus je typ polymorfismu, kde se skutečná implementace funkce určuje během běhu nebo provádění. Přepsání metody je příkladem této metody.

16. Jaký je rozdíl mezi přetížením a přepsáním?

Funkce polymorfismu v době kompilace se nazývá přetěžování umožňuje entitě mít mnoho implementací stejného jména. Dva příklady jsou přetížení metody a přetížení operátora.

Přepisování je forma runtime polymorfismu, kde se provádí entita se stejným názvem, ale odlišnou implementací. Je implementován pomocí virtuálních funkcí.

17. Existují nějaká omezení dědičnosti?

Ano, existuje více problémů, když máte větší autoritu. Ačkoli je dědičnost velmi silnou funkcí OOP, má také významné nevýhody.

  • Protože k implementaci musí projít několika třídami, zpracování dědičnosti trvá déle.
  • Základní třída a podřízená třída, které jsou obě zapojeny do dědičnosti, spolu také úzce souvisejí (tzv. pevně spojené). Pokud je tedy třeba provést změny, může být nutné je provést v obou třídách současně.
  • Zavedení dědičnosti může být také obtížné. Pokud tedy není implementována správně, může to vést k nepředvídaným chybám nebo nepřesným výstupům.

18. Jaké různé typy dědictví existují?

Dědičnost lze rozdělit do 5 typů, které jsou následující:

typy dědictví
  1. Jediné dědictví: Podřízená třída odvozená přímo od základní třídy
  2. Vícenásobná dědičnost: Podřízená třída odvozená z více základních tříd.
  3. Víceúrovňová dědičnost: Podřízená třída odvozená od třídy, která je také odvozena od jiné základní třídy.
  4. Hierarchická dědičnost: Více podřízených tříd odvozených z jedné základní třídy.
  5. Hybridní dědičnost: Dědičnost skládající se z více typů dědičnosti výše uvedených.

Poznámka: Typ podporované dědičnosti závisí na jazyku. Java například nepodporuje vícenásobnou dědičnost.

19. Co je rozhraní?

Jedinečný typ třídy známý jako rozhraní obsahuje metody, ale ne jejich definice. Uvnitř rozhraní je povolena pouze deklarace metody. Nemůžete vytvářet objekty pomocí rozhraní. Místo toho musíte toto rozhraní uvést do provozu a specifikovat postupy, jak toho dosáhnout.

20. Jak se abstraktní třída liší od rozhraní?

Abstraktní třídy i rozhraní jsou speciální typy tříd, které obsahují pouze deklaraci metod, nikoli jejich implementaci. Abstraktní třída je však zcela odlišná od rozhraní. Následuje několik hlavních rozdílů mezi abstraktní třídou a rozhraním.

Abstraktní třída

Rozhraní

Když je však abstraktní třída zděděna, podtřída nemusí poskytovat definici abstraktní metody, dokud a pokud ji podtřída skutečně nepoužívá.Když je implementováno rozhraní, podtřída musí specifikovat všechny metody rozhraní a také jejich implementaci.
Třída, která je abstraktní, může mít jak abstraktní, tak neabstraktní metody.Rozhraní může mít pouze abstraktní metody.
Abstraktní třída může mít konečné, nefinální, statické a nestatické proměnné.Rozhraní má pouze statické a konečné proměnné.
Abstraktní třída nepodporuje vícenásobnou dědičnost.Rozhraní podporuje vícenásobnou dědičnost.

21. Kolik paměti zabírá třída?

Třídy nepoužívají paměť. Slouží pouze jako šablona, ​​ze které se vyrábí předměty. Nyní objekty ve skutečnosti inicializují členy třídy a metody, když jsou vytvořeny, pomocí paměti v procesu.

22. Je vždy nutné vytvářet objekty ze třídy?

Ne. Pokud základní třída obsahuje nestatické metody, musí být vytvořen objekt. Pokud však třída obsahuje statické metody, není třeba generovat žádné objekty. V tomto případě můžete použít název třídy k přímému volání těchto statických metod.

23. Jaký je rozdíl mezi strukturou a třídou v C++?

Struktura je také uživatelsky definovaný datový typ v C++ podobný třídě s následujícími rozdíly:

  • Hlavní rozdíl mezi strukturou a třídou je v tom, že ve struktuře jsou členové standardně nastaveni na veřejné, zatímco ve třídě jsou členové ve výchozím nastavení soukromí.
  • Další rozdíl je v tom, že používáme strukturovat pro deklarování struktury a třída pro deklaraci třídy v C++.

24. Co je konstruktor?

Konstruktor je blok kódu, který inicializuje nově vytvořený objekt. Konstruktor se podobá metodě instance, ale není to metoda, protože nemá návratový typ. Obecně se jedná o metodu se stejným názvem jako třída, ale v některých jazycích se může lišit. Například:

V pythonu je pojmenován konstruktor __horký__.

V C++ a Java se konstruktor jmenuje stejně jako název třídy.

Příklad:

Logika 1. řádu
C++
class base {  public:  base() { cout << 'This is a constructor'; } }>
Jáva
class base {  base() { System.out.printIn('This is a constructor'); } }>
Krajta
class base: def __init__(self): print('This is a constructor')>

25. Jaké jsou různé typy konstruktorů v C++?

Nejběžnější klasifikace konstruktorů zahrnuje:

  1. Výchozí konstruktor
  2. Neparametrizovaný konstruktor
  3. Parametrizovaný konstruktor
  4. Kopírovat konstruktor

1. Výchozí konstruktor

Výchozí konstruktor je konstruktor, který nebere žádné argumenty. Je to neparametrizovaný konstruktor, který je automaticky definován kompilátorem, když není poskytnuta žádná explicitní definice konstruktoru.

Inicializuje datové členy na jejich výchozí hodnoty.

2. Neparametrizovaný konstruktor

Je to uživatelsky definovaný konstruktor, který nemá žádné argumenty ani parametry.

Příklad:

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

3. Parametrizovaný konstruktor

Konstruktory, které přebírají některé argumenty, jsou známé jako parametrizované konstruktory.

Příklad:


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

4. Kopírovat konstruktor

Kopírovací konstruktor je členská funkce, která inicializuje objekt pomocí jiného objektu stejné třídy.

Příklad:

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


V Pythonu nemáme vestavěné konstruktory kopírování jako Java a C++, ale můžeme to obejít pomocí různých metod.

26. Co je to destruktor?

Destruktor je metoda, která se automaticky volá, když je objekt vytvořen z rozsahu nebo zničen.

V C++ je název destruktoru také stejný jako název třídy, ale s ( ~ ) symbol tildy jako předpona.

V Pythonu je destruktor pojmenován __z__ .

Příklad:

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


V Javě garbage collector automaticky maže nepotřebné objekty, takže v Javě neexistuje žádný koncept destruktoru. Jako řešení pro destruktor java jsme mohli použít metodu finalize(), ale od verze Java 9 je také zastaralá.

27. Můžeme přetížit konstruktor ve třídě?

Ano Můžeme přetížit konstruktor ve třídě v Javě. Přetížení konstruktoru se provádí, když chceme konstruktor s jiným konstruktorem s různými parametry (číslo a typ).

28. Můžeme přetížit destruktor ve třídě?

Ne. Destruktor nemůže být ve třídě přetížen. Ve třídě může být pouze jeden destruktor.

29. Co je to virtuální funkce?

Virtuální funkce je funkce, která se používá k přepsání metody nadřazené třídy v odvozené třídě. Používá se k poskytování abstrakce ve třídě.

V C++ je virtuální funkce deklarována pomocí klíčového slova virtual,

V Javě je každá veřejná, nestatická a nefinální metoda virtuální funkcí.

Metody Pythonu jsou vždy virtuální.

Příklad:

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

30. Co je to čistě virtuální funkce?

Čistá virtuální funkce, známá také jako abstraktní funkce, je členská funkce, která neobsahuje žádné příkazy. Tato funkce je v případě potřeby definována v odvozené třídě.

Příklad:

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


V Pythonu toho dosáhneme pomocí @abstractmethod z modulu ABC (Abstract Base Class).

Bonusová otázka

Co je abstraktní třída?

Obecně řečeno, abstraktní třída je třída, která je určena k použití pro dědění. Nelze vytvořit instanci. Abstraktní třída se může skládat z abstraktních i neabstraktních metod.

V C++ je abstraktní třída třída, která obsahuje alespoň jednu čistě virtuální funkci.

Fibonacciho kód java

V Javě je abstraktní třída deklarována pomocí a abstraktní klíčové slovo.

Příklad:

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


V Pythonu používáme modul ABC (Abstract Base Class) k vytvoření abstraktní třídy.

Musí odkazovat:

  1. OOP v C++
  2. OOP v Javě
  3. OOP v Pythonu
  4. Třídy a objekty v C++
  5. Třídy a objekty v Javě
  6. Třídy a objekty v Pythonu
  7. Úvod do programovacích paradigmat
  8. Rozhraní v Javě
  9. Abstraktní třída v Javě
  10. Otázky k pohovoru v C++