logo

30 OOPs-interviewvragen en antwoorden (2024)

Object-Oriented Programming, of OOPs, is een programmeerparadigma dat het concept van implementeert voorwerpen in het programma. Het heeft tot doel een eenvoudiger oplossing te bieden voor problemen uit de echte wereld door real-world entiteiten zoals overerving, abstractie, polymorfisme, enz. In de programmering te implementeren. Het OOPs-concept wordt veel gebruikt in veel populaire talen zoals Java, Python, C++, enz.

OOPs-interviewvragen en -antwoorden

OOPs is ook een van de belangrijkste onderwerpen voor het programmeren van interviews. Dit artikel bevat er enkele belangrijkste interviewvragen over het OOPs-concept.



OOPs-interviewvragen

1. Wat is Object Oriented Programming (OOP's)?

O bject O gericht P programmeren (ook bekend als OOPs) is een programmeerparadigma waarbij de volledige software werkt als een stel objecten die met elkaar praten. Een object is een verzameling gegevens en de methoden die op die gegevens werken.

2. Waarom OOP's?

Het belangrijkste voordeel van OOP is een beter beheerbare code die het volgende omvat:

  1. Het algemene begrip van de software neemt toe naarmate de afstand tussen de taal die door ontwikkelaars wordt gesproken en de taal die door gebruikers wordt gesproken, groter wordt.
  2. Objectoriëntatie vergemakkelijkt het onderhoud door het gebruik van inkapseling. Je kunt de onderliggende representatie gemakkelijk veranderen door de methoden hetzelfde te houden.
  3. Het OOPs-paradigma is vooral nuttig voor relatief grote software.

3. Wat is een klasse?

A klas is een bouwsteen van objectgeoriënteerde programma's. Het is een door de gebruiker gedefinieerd gegevenstype dat de gegevensleden en lidfuncties bevat die op de gegevensleden werken. Het is als een blauwdruk of sjabloon van objecten met gemeenschappelijke eigenschappen en methoden.



4. Wat is een voorwerp?

Een voorwerp is een instantie van een klasse. Gegevensleden en methoden van een klasse kunnen niet rechtstreeks worden gebruikt. We moeten een object (of instantie) van de klasse maken om ze te kunnen gebruiken. In eenvoudige bewoordingen zijn het de werkelijke wereldentiteiten die een toestand en gedrag vertonen.

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);  } }>

Uitvoer
student1.name: Rahul>

5. Wat zijn de belangrijkste kenmerken van OOP's?

Het belangrijkste kenmerk van de OOP’s, ook wel bekend als de 4 pijlers of basisprincipes van OOP’s, is als volgt:

  1. Inkapseling
  2. Data abstractie
  3. Polymorfisme
  4. Erfenis
pijlers van oeps

OOP's Belangrijkste kenmerken



6. Wat is inkapseling?

Inkapseling is het binden van gegevens en methoden die deze manipuleren in één enkele eenheid, zodat de gevoelige gegevens voor de gebruikers verborgen blijven.
Het wordt geïmplementeerd zoals de onderstaande processen:

  1. Gegevens verbergen: Een taalfunctie om de toegang tot leden van een object te beperken. Bijvoorbeeld privé- en beschermde leden in C++.
  2. Bundeling van data en methoden: Data en methoden die op die data werken, worden gebundeld. De gegevensleden en lidmethoden die erop werken, zijn bijvoorbeeld verpakt in een enkele eenheid die bekend staat als een klasse.
inkapseling

7. Wat is abstractie?

Abstractie is vergelijkbaar met gegevensinkapseling en is erg belangrijk in OOP. Het betekent dat alleen de noodzakelijke informatie wordt getoond en de andere irrelevante informatie voor de gebruiker wordt verborgen. Abstractie wordt geïmplementeerd met behulp van klassen en interfaces.

abstractie in OOP's

8. Wat is polymorfisme?

Het woord Polymorfisme betekent dat je vele vormen hebt. Het is de eigenschap van sommige code om zich in verschillende contexten anders te gedragen. In de C++-taal kunnen we bijvoorbeeld meerdere functies definiëren met dezelfde naam, maar met een verschillende werking, afhankelijk van de context.

Polymorfisme kan in twee typen worden ingedeeld op basis van het tijdstip waarop de oproep naar het object of de functie is opgelost. Ze zijn als volgt:

  • Compileer tijdpolymorfisme
  • Runtime-polymorfisme

A) Compile-time polymorfisme

Compileertijdpolymorfisme, ook bekend als statisch polymorfisme of vroege binding, is het type polymorfisme waarbij de binding van de aanroep aan de code plaatsvindt tijdens het compileren. Overbelasting van methoden of overbelasting van operators zijn voorbeelden van polymorfisme tijdens het compileren.

B) Runtime-polymorfisme

Runtime-polymorfisme, ook bekend als dynamisch polymorfisme of late binding, is het type polymorfisme waarbij de daadwerkelijke implementatie van de functie wordt bepaald tijdens de runtime of uitvoering. Methode overschrijven is een voorbeeld van deze methode.

9. Wat is erfenis? Wat is de bedoeling?

Het idee van overerving is eenvoudig: een klasse is afgeleid van een andere klasse en gebruikt gegevens en implementatie van die andere klasse. De klasse die is afgeleid, wordt kind, afgeleid of subklasse genoemd en de klasse waarvan de kindklasse is afgeleid, wordt ouder, basis of superklasse genoemd.

Het belangrijkste doel van Overerving is het vergroten van de herbruikbaarheid van code. Het wordt ook gebruikt om Runtime Polymorphism te bereiken.

10. Wat zijn toegangsspecificaties? Wat is hun betekenis in OOP's?

Toegangsspecificaties zijn speciale typen trefwoorden die worden gebruikt om de toegankelijkheid van entiteiten zoals klassen, methoden, enzovoort, te specificeren of te controleren. Privaat , Openbaar , En Beschermd zijn voorbeelden van toegangsspecificaties of toegangsmodificatoren.
De belangrijkste componenten van OOP's, inkapseling en gegevensverberging, worden grotendeels bereikt dankzij deze toegangsspecificaties.

in volgorde

11. Wat zijn de voor- en nadelen van OOP's?

Voordelen van OOP's

Nadelen van OOP's

OOP's bieden verbeterde herbruikbaarheid van code.De programmeur moet goed bekwaam zijn en uitstekend kunnen nadenken in termen van objecten, aangezien alles in OOP's als een object wordt behandeld.
De code is gemakkelijker te onderhouden en bij te werken.Een goede planning is vereist omdat OOP's een beetje lastig zijn.
Het biedt een betere gegevensbeveiliging door de toegang tot gegevens te beperken en onnodige blootstelling te voorkomen.Het OOPs-concept is niet geschikt voor alle soorten problemen.
Snel te implementeren en eenvoudig opnieuw te ontwerpen, waardoor de complexiteit van een totaalprogramma wordt geminimaliseerd.De lengte van de programma's is veel groter in vergelijking met de procedurele aanpak.

12. Welke andere paradigma's van programmeren bestaan ​​er naast OOP's?

Met het programmeerparadigma wordt verwezen naar de techniek of aanpak van het schrijven van een programma. De programmeerparadigma's kunnen in de volgende typen worden ingedeeld:

soorten programmeerparadigma’s

1. Imperatief programmeerparadigma

Het is een programmeerparadigma dat werkt door de programmastatus te veranderen via toewijzingsinstructies. De belangrijkste focus in dit paradigma ligt op de manier waarop het doel kan worden bereikt. De volgende programmeerparadigma's vallen onder deze categorie:

  1. Procedureel programmeerparadigma : Dit programmeerparadigma is gebaseerd op het procedureaanroepconcept. Procedures, ook wel routines of functies genoemd, zijn in dit paradigma de basisbouwstenen van een programma.
  2. Objectgeoriënteerd programmeren of OOP : In dit paradigma visualiseren we elke entiteit als een object en proberen we het programma te structureren op basis van de toestand en het gedrag van dat object.
  3. Parallelle programmering : Het parallelle programmeerparadigma is de verwerking van instructies door ze in meerdere kleinere delen te verdelen en ze gelijktijdig uit te voeren.

2. Declaratief programmeerparadigma

Declaratieve programmering richt zich op wat er moet worden uitgevoerd in plaats van hoe het moet worden uitgevoerd. In dit paradigma drukken we de logica van een berekening uit zonder rekening te houden met de controlestroom ervan. Het declaratieve paradigma kan verder worden ingedeeld in:

  1. Logisch programmeerparadigma : Het is gebaseerd op formele logica waarbij de programmaverklaringen de feiten en regels over het probleem in logische vorm uitdrukken.
  2. Functioneel programmeerparadigma : Programma's worden gemaakt door functies in dit paradigma toe te passen en samen te stellen.
  3. Databaseprogrammeringsparadigma : Om gegevens en informatie te beheren, georganiseerd als velden, records en bestanden, worden databaseprogrammeermodellen gebruikt.

13. Wat is het verschil tussen gestructureerd programmeren en objectgeoriënteerd programmeren?

Gestructureerd programmeren is een techniek die wordt beschouwd als een voorloper van OOP en bestaat meestal uit goed gestructureerde en gescheiden modules. Het is een subset van procedurele programmering. Het verschil tussen OOP's en gestructureerd programmeren is als volgt:

Object georiënteerd programmeren

'abc' is in cijfers'

Structurele programmering

Objectgeoriënteerd programmeren is gebaseerd op objecten met een status en gedrag.De logische structuur van een programma wordt bepaald door structurele programmering, die programma's in hun overeenkomstige functies verdeelt.
Het volgt een bottom-to-top-benadering.Het volgt een Top-to-Down-aanpak.
Beperkt de open gegevensstroom tot geautoriseerde delen, wat alleen maar een betere gegevensbeveiliging oplevert.Geen beperking van de gegevensstroom. Iedereen heeft toegang tot de gegevens.
Verbeterde herbruikbaarheid van code dankzij de concepten van polymorfisme en overerving.Herbruikbaarheid van code wordt bereikt door het gebruik van functies en lussen.
Hierin worden methoden globaal geschreven en worden coderegels één voor één verwerkt, dat wil zeggen opeenvolgend uitgevoerd.Hierin werkt de methode dynamisch, waarbij gedurende een bepaalde tijd oproepen worden gedaan volgens de behoefte aan code.
Het wijzigen en bijwerken van de code is eenvoudiger.Het wijzigen van de code is moeilijk in vergelijking met OOP's.
Gegevens krijgen meer belang in OOP's.Code krijgt meer belang.

14. Wat zijn enkele veelgebruikte objectgeoriënteerde programmeertalen?

OOPs-paradigma is een van de meest populaire programmeerparadigma's. Het wordt veel gebruikt in veel populaire programmeertalen, zoals:

15. Wat zijn de verschillende soorten polymorfisme?

Polymorfisme kan in twee typen worden ingedeeld op basis van het tijdstip waarop de oproep naar het object of de functie is opgelost. Ze zijn als volgt:

  1. Compileer tijdpolymorfisme
  2. Runtime-polymorfisme
soorten polymorfisme

Soorten polymorfisme

A) Compile-time polymorfisme

Compileertijdpolymorfisme, ook bekend als statisch polymorfisme of vroege binding, is het type polymorfisme waarbij de binding van de aanroep aan de code plaatsvindt tijdens het compileren. Methode overbelasting of overbelasting van de operator zijn voorbeelden van polymorfisme tijdens het compileren.

B) Runtime-polymorfisme

Ook gekend als dynamisch polymorfisme of late binding, runtime-polymorfisme is het type polymorfisme waarbij de daadwerkelijke implementatie van de functie wordt bepaald tijdens de runtime of uitvoering. Methode overschrijven is een voorbeeld van deze methode.

16. Wat is het verschil tussen overbelasten en overschrijven?

Een polymorfismefunctie tijdens het compileren genaamd overbelasting zorgt ervoor dat een entiteit meerdere implementaties met dezelfde naam kan hebben. Overbelasting van de methode en overbelasting van de operator zijn twee voorbeelden.

Overschrijven is een vorm van runtime-polymorfisme waarbij een entiteit met dezelfde naam maar een andere implementatie wordt uitgevoerd. Het wordt geïmplementeerd met behulp van virtuele functies.

17. Zijn er beperkingen op de erfenis?

Ja, er zijn meer uitdagingen als je meer autoriteit hebt. Hoewel overerving een zeer sterke OOP-functie is, heeft het ook aanzienlijke nadelen.

  • Omdat het door verschillende klassen moet gaan voordat het kan worden geïmplementeerd, duurt het langer om de overerving te verwerken.
  • De basisklasse en de kindklasse, die beide betrokken zijn bij overerving, zijn ook nauw verwant aan elkaar (sterk gekoppeld genoemd). Als er wijzigingen moeten worden aangebracht, moeten deze daarom mogelijk in beide klassen tegelijkertijd worden aangebracht.
  • Het implementeren van erfenis kan ook moeilijk zijn. Als dit niet correct wordt geïmplementeerd, kan dit resulteren in onvoorziene fouten of onnauwkeurige resultaten.

18. Welke verschillende soorten erfenissen zijn er?

Overerving kan worden onderverdeeld in 5 typen, namelijk:

soorten erfenis
  1. Enkele erfenis: Kindklasse rechtstreeks afgeleid van de basisklasse
  2. Meervoudige erfenis: Onderklasse afgeleid van meerdere basisklassen.
  3. Overerving op meerdere niveaus: Kindklasse afgeleid van de klasse die ook is afgeleid van een andere basisklasse.
  4. Hiërarchische erfenis: Meerdere onderliggende klassen afgeleid van één basisklasse.
  5. Hybride erfenis: Overerving bestaande uit meerdere overervingstypen van de hierboven gespecificeerde.

Opmerking: Het ondersteunde type overerving is afhankelijk van de taal. Java ondersteunt bijvoorbeeld geen meervoudige overerving.

19. Wat is een interface?

Een uniek klassetype dat bekend staat als een interface bevat methoden, maar niet hun definities. Binnen een interface is alleen methodedeclaratie toegestaan. U kunt geen objecten maken met behulp van een interface. In plaats daarvan moet u die interface in gebruik nemen en de procedures daarvoor specificeren.

20. Waarin verschilt een abstracte klasse van een interface?

Zowel abstracte klassen als interfaces zijn speciale soorten klassen die alleen de declaratie van de methoden bevatten, niet de implementatie ervan. Een abstracte klasse verschilt echter volledig van een interface. Hieronder volgen enkele belangrijke verschillen tussen een abstracte klasse en een interface.

Abstracte klasse

Koppel

Wanneer een abstracte klasse echter wordt geërfd, hoeft de subklasse de definitie van de abstracte methode niet te leveren totdat en tenzij de subklasse deze daadwerkelijk gebruikt.Wanneer een interface wordt geïmplementeerd, is de subklasse vereist om alle methoden van de interface en hun implementatie te specificeren.
Een klasse die abstract is, kan zowel abstracte als niet-abstracte methoden hebben.Een interface kan alleen abstracte methoden hebben.
Een abstracte klasse kan finale, niet-finale, statische en niet-statische variabelen hebben.De interface heeft alleen statische en definitieve variabelen.
De abstracte klasse ondersteunt geen meervoudige overerving.Een interface ondersteunt meervoudige overerving.

21. Hoeveel geheugen neemt een klas in beslag?

Klassen gebruiken geen geheugen. Ze dienen slechts als sjabloon waaruit items worden gemaakt. Nu initialiseren objecten feitelijk de klasseleden en methoden wanneer ze worden gemaakt, waarbij ze geheugen gebruiken.

22. Is het altijd nodig om objecten uit de klasse te maken?

Nee. Als de basisklasse niet-statische methoden bevat, moet er een object worden geconstrueerd. Maar er hoeven geen objecten te worden gegenereerd als de klasse statische methoden bevat. In dit geval kunt u de klassenaam gebruiken om deze statische methoden rechtstreeks aan te roepen.

23. Wat is het verschil tussen een structuur en een klasse in C++?

De structuur is ook een door de gebruiker gedefinieerd datatype in C++, vergelijkbaar met de klasse, met de volgende verschillen:

  • Het belangrijkste verschil tussen een structuur en een klasse is dat in een structuur de leden standaard op openbaar zijn ingesteld, terwijl in een klasse de leden standaard privé zijn.
  • Het andere verschil is dat we gebruiken structureren voor het verklaren van structuur en klas voor het declareren van een klasse in C++.

24. Wat is Constructor?

Een constructor is een codeblok dat het nieuw gemaakte object initialiseert. Een constructor lijkt op een instantiemethode, maar is geen methode omdat deze geen retourtype heeft. Over het algemeen heeft de methode dezelfde naam als de klasse, maar in sommige talen kan deze verschillen. Bijvoorbeeld:

In Python wordt een constructor genoemd __heet__.

In C++ en Java heeft de constructor dezelfde naam als de klassenaam.

Voorbeeld:

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. Wat zijn de verschillende soorten constructors in C++?

De meest voorkomende classificatie van constructors omvat:

  1. Standaardconstructeur
  2. Niet-geparametriseerde constructor
  3. Geparametriseerde constructor
  4. Kopieer constructeur

1. Standaardconstructeur

De standaardconstructor is een constructor die geen argumenten accepteert. Het is een niet-geparametriseerde constructor die automatisch door de compiler wordt gedefinieerd als er geen expliciete constructordefinitie is opgegeven.

Het initialiseert de gegevensleden naar hun standaardwaarden.

2. Niet-geparametriseerde constructor

Het is een door de gebruiker gedefinieerde constructor zonder argumenten of parameters.

Voorbeeld:

C++
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. Geparametriseerde constructor

De constructors waaraan enkele argumenten moeten doorgegeven worden, worden geparametriseerde constructors genoemd.

Voorbeeld:


C++
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. Kopieer Constructor

Een kopieerconstructor is een lidfunctie die een object initialiseert met behulp van een ander object van dezelfde klasse.

Voorbeeld:

vikas divyakirti
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;  } }>


In Python hebben we geen ingebouwde kopieerconstructors zoals Java en C++, maar we kunnen er een oplossing voor vinden met behulp van verschillende methoden.

26. Wat is een vernietiger?

Een destructor is een methode die automatisch wordt aangeroepen wanneer het object van omvang wordt gemaakt of wordt vernietigd.

In C++ is de destructornaam ook hetzelfde als de klassenaam, maar met de ( ~ ) tilde-symbool als voorvoegsel.

In Python wordt de destructor genoemd __van de__ .

Voorbeeld:

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


In Java verwijdert de garbage collector automatisch de nutteloze objecten, dus er is geen concept van destructor in Java. We hadden de methode finalize() kunnen gebruiken als oplossing voor de Java-destructor, maar deze is ook verouderd sinds Java 9.

27. Kunnen we de constructor in een klasse overbelasten?

Ja We kunnen de constructor in een klasse in Java overbelasten. Constructoroverbelasting wordt gedaan wanneer we een constructor willen met een andere constructor met verschillende parameters (nummer en type).

28. Kunnen we de destructor in een klas overbelasten?

Nee. Een destructor kan niet overbelast worden in een klasse. Er kan slechts één destructor in een klas aanwezig zijn.

29. Wat is de virtuele functie?

Een virtuele functie is een functie die wordt gebruikt om een ​​methode van de bovenliggende klasse in de afgeleide klasse te overschrijven. Het wordt gebruikt om abstractie in een klas te bieden.

In C++ wordt een virtuele functie gedeclareerd met behulp van het virtuele sleutelwoord,

In Java is elke openbare, niet-statische en niet-definitieve methode een virtuele functie.

Python-methoden zijn altijd virtueel.

Voorbeeld:

sneltoets met alleen hoofdletters excel
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. Wat is pure virtuele functie?

Een puur virtuele functie, ook wel een abstracte functie genoemd, is een lidfunctie die geen instructies bevat. Deze functie wordt indien nodig gedefinieerd in de afgeleide klasse.

Voorbeeld:

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


In Python bereiken we dit met behulp van @abstractmethod uit de ABC-module (Abstract Base Class).

Bonusvraag

Wat is een abstracte klasse?

In algemene termen is een abstracte klasse een klasse die bedoeld is om te worden gebruikt voor overerving. Het kan niet worden geïnstantieerd. Een abstracte klasse kan uit zowel abstracte als niet-abstracte methoden bestaan.

In C++ is een abstracte klasse een klasse die ten minste één puur virtuele functie bevat.

In Java wordt een abstracte klasse gedeclareerd met een abstract trefwoord.

Voorbeeld:

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


In Python gebruiken we de ABC-module (Abstract Base Class) om een ​​abstracte klasse te maken.

Moet verwijzen:

  1. OOP's in C++
  2. OOP's in Java
  3. OOP's in Python
  4. Klassen en objecten in C++
  5. Klassen en objecten in Java
  6. Klassen en objecten in Python
  7. Inleiding tot programmeerparadigma's
  8. Interface in Java
  9. Abstracte klasse in Java
  10. C++ sollicitatievragen