logo

30 OOPs interviewspørgsmål og svar (2024)

Objektorienteret programmering, eller OOP'er, er et programmeringsparadigme, der implementerer begrebet genstande i programmet. Det sigter mod at give en lettere løsning på problemer i den virkelige verden ved at implementere enheder i den virkelige verden såsom arv, abstraktion, polymorfi osv. i programmering. OOPs koncept er meget brugt i mange populære sprog som Java, Python, C++ osv.

OOPs interviewspørgsmål og svar

OOPs er også et af de vigtigste emner for programmeringsinterviews. Denne artikel indeholder nogle top interviewspørgsmål om OOPs-konceptet.



OOPs interviewspørgsmål

1. Hvad er objektorienteret programmering (OOP'er)?

O bject O riented P rogrammering (også kendt som OOPs) er et programmeringsparadigme, hvor den komplette software fungerer som en flok objekter, der taler med hinanden. Et objekt er en samling af data og de metoder, der opererer på disse data.

har næste java

2. Hvorfor OOPs?

Den største fordel ved OOP er bedre håndterbar kode, der dækker følgende:

  1. Den overordnede forståelse af softwaren øges i takt med afstanden mellem det sprog, der tales af udviklere, og det, der tales af brugere.
  2. Objektorientering letter vedligeholdelsen ved brug af indkapsling. Man kan nemt ændre den underliggende repræsentation ved at holde metoderne ens.
  3. OOPs paradigmet er hovedsageligt nyttigt til relativt stor software.

3. Hvad er en klasse?

EN klasse er en byggesten af ​​objektorienterede programmer. Det er en brugerdefineret datatype, der indeholder de datamedlemmer og medlemsfunktioner, der fungerer på datamedlemmerne. Det er som en plan eller skabelon af objekter med fælles egenskaber og metoder.



4. Hvad er et objekt?

An objekt er en forekomst af en klasse. Datamedlemmer og metoder i en klasse kan ikke bruges direkte. Vi skal oprette et objekt (eller en instans) af klassen for at bruge dem. Enkelt sagt er de de faktiske verdensenheder, der har en tilstand og adfærd.

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

Produktion
student1.name: Rahul>

5. Hvad er hovedtræk ved OOP'er?

Hovedtræk ved OOP'erne, også kendt som 4 søjler eller grundlæggende principper for OOP'er, er som følger:

  1. Indkapsling
  2. Dataabstraktion
  3. Polymorfi
  4. Arv
søjler af ups

OOPs hovedfunktioner



6. Hvad er indkapsling?

Indkapsling er binding af data og metoder, der manipulerer dem til en enkelt enhed, således at de følsomme data er skjult for brugerne
Det implementeres som de processer, der er nævnt nedenfor:

  1. Data skjuler: En sprogfunktion til at begrænse adgangen til medlemmer af et objekt. For eksempel private og beskyttede medlemmer i C++.
  2. Samling af data og metoder: Data og metoder, der opererer på disse data, er bundtet sammen. For eksempel er datamedlemmerne og medlemsmetoderne, der opererer på dem, pakket ind i en enkelt enhed kendt som en klasse.
indkapsling

7. Hvad er abstraktion?

Abstraktion ligner dataindkapsling og er meget vigtig i OOP. Det betyder kun at vise de nødvendige oplysninger og skjule andre irrelevante oplysninger for brugeren. Abstraktion implementeres ved hjælp af klasser og grænseflader.

abstraktion i OOP'er

8. Hvad er polymorfi?

Ordet Polymorfi betyder at have mange former. Det er en kodes egenskab at opføre sig forskelligt i forskellige sammenhænge. For eksempel kan vi i C++-sprog definere flere funktioner, der har samme navn, men fungerer forskelligt afhængigt af konteksten.

Polymorfi kan klassificeres i to typer baseret på det tidspunkt, hvor kaldet til objektet eller funktionen er løst. De er som følger:

  • Kompiler tidspolymorfi
  • Runtime polymorfisme

A) Kompileringstidspolymorfi

Kompileringstidspolymorfi, også kendt som statisk polymorfi eller tidlig binding, er den type polymorfi, hvor bindingen af ​​opkaldet til dets kode sker på kompileringstidspunktet. Metodeoverbelastning eller operatøroverbelastning er eksempler på kompileringstidspolymorfi.

B) Runtime polymorfi

Også kendt som dynamisk polymorfi eller sen binding, runtime polymorphism er den type polymorfi, hvor den faktiske implementering af funktionen bestemmes under kørselstiden eller udførelsen. Metodetilsidesættelse er et eksempel på denne metode.

9. Hvad er arv? Hvad er dens formål?

Ideen med arv er enkel, en klasse er afledt af en anden klasse og bruger data og implementering af den anden klasse. Klassen, der er afledt, kaldes underordnet eller afledt eller underklasse, og klassen, hvorfra den underordnede klasse er afledt, kaldes forælder eller basis eller superklasse.

Hovedformålet med arv er at øge kodegenanvendelighed. Det bruges også til at opnå Runtime Polymorphism.

10. Hvad er adgangsspecifikationer? Hvad er deres betydning i OOP'er?

Adgangsspecifikationer er specielle typer nøgleord, der bruges til at specificere eller kontrollere tilgængeligheden af ​​enheder som klasser, metoder og så videre. Privat , Offentlig , og Beskyttet er eksempler på adgangsspecifikationer eller adgangsmodifikatorer.
Nøglekomponenterne i OOP'er, indkapsling og dataskjul, opnås i vid udstrækning på grund af disse adgangsspecifikationer.

11. Hvad er fordelene og ulemperne ved OOP'er?

Fordele ved OOP'er

Ulemper ved OOP'er

OOP'er giver forbedret kodegenanvendelighed.Programmøren bør være veluddannet og bør have fremragende tænkning i forhold til objekter, da alt behandles som et objekt i OOPs.
Koden er nemmere at vedligeholde og opdatere.Korrekt planlægning er påkrævet, fordi OOPs er en lille smule vanskelig.
Det giver bedre datasikkerhed ved at begrænse dataadgangen og undgå unødig eksponering.OOPs koncept er ikke egnet til alle slags problemer.
Hurtig at implementere og nem at redesigne, hvilket resulterer i at minimere kompleksiteten af ​​et samlet program.Længden af ​​programmerne er meget længere i forhold til den proceduremæssige tilgang.

12. Hvilke andre programmeringsparadigmer findes udover OOP'er?

Programmeringsparadigmet henvises til teknikken eller tilgangen til at skrive et program. Programmeringsparadigmerne kan klassificeres i følgende typer:

typer af programmeringsparadigmer

1. Imperativt programmeringsparadigme

Det er et programmeringsparadigme, der virker ved at ændre programtilstanden gennem opgaveudsagn. Hovedfokus i dette paradigme er, hvordan man opnår målet. Følgende programmeringsparadigmer falder ind under denne kategori:

  1. Procedurelt programmeringsparadigme : Dette programmeringsparadigme er baseret på procedurekaldskonceptet. Procedurer, også kendt som rutiner eller funktioner, er de grundlæggende byggesten i et program i dette paradigme.
  2. Objektorienteret programmering eller OOP : I dette paradigme visualiserer vi enhver entitet som et objekt og forsøger at strukturere programmet baseret på det pågældende objekts tilstand og adfærd.
  3. Parallel programmering : Paradigmet for parallel programmering er behandlingen af ​​instruktioner ved at opdele dem i flere mindre dele og udføre dem samtidigt.

2. Deklarativt programmeringsparadigme

Deklarativ programmering fokuserer på, hvad der skal udføres frem for hvordan det skal udføres. I dette paradigme udtrykker vi logikken i en beregning uden at overveje dens kontrolflow. Det deklarative paradigme kan yderligere klassificeres i:

  1. Logisk programmeringsparadigme : Det er baseret på formel logik, hvor programerklæringerne udtrykker fakta og regler om problemet i den logiske form.
  2. Funktionelt programmeringsparadigme : Programmer oprettes ved at anvende og sammensætte funktioner i dette paradigme.
  3. Databaseprogrammeringsparadigme : For at administrere data og information organiseret som felter, poster og filer, bruges databaseprogrammeringsmodeller.

13. Hvad er forskellen mellem struktureret programmering og objektorienteret programmering?

Struktureret programmering er en teknik, der betragtes som en forløber for OOP og består normalt af velstrukturerede og adskilte moduler. Det er en delmængde af proceduremæssig programmering. Forskellen mellem OOP'er og struktureret programmering er som følger:

Objektorienteret programmering

streng format java

Strukturel programmering

Programmering, der er objektorienteret, er bygget på objekter, der har en tilstand og adfærd.Et programs logiske struktur er tilvejebragt af strukturel programmering, som opdeler programmer i deres tilsvarende funktioner.
Det følger en bund-til-top tilgang.Det følger en top-til-ned tilgang.
Begrænser det åbne dataflow til autoriserede dele, hvilket kun giver bedre datasikkerhed.Ingen begrænsning for datastrømmen. Alle kan få adgang til dataene.
Forbedret kodegenanvendelighed på grund af begreberne polymorfi og arv.Kodegenanvendelighed opnås ved at bruge funktioner og loops.
I denne skrives metoder globalt, og kodelinjer behandles én efter én, dvs. Kør sekventielt.I dette fungerer metoden dynamisk og foretager opkald efter behov for kode i en vis tid.
Det er nemmere at ændre og opdatere koden.Det er svært at ændre koden sammenlignet med OOP'er.
Data tillægges større betydning i OOP'er.Kode tillægges større betydning.

14. Hvad er nogle almindeligt anvendte objektorienterede programmeringssprog?

OOPs paradigme er et af de mest populære programmeringsparadigmer. Det er meget udbredt i mange populære programmeringssprog såsom:

15. Hvad er de forskellige typer af polymorfi?

Polymorfi kan klassificeres i to typer baseret på det tidspunkt, hvor kaldet til objektet eller funktionen er løst. De er som følger:

  1. Kompiler tidspolymorfi
  2. Runtime polymorfisme
typer af polymorfi

Typer af polymorfi

A) Kompileringstidspolymorfi

Kompileringstidspolymorfi, også kendt som statisk polymorfi eller tidlig binding, er den type polymorfi, hvor bindingen af ​​opkaldet til dets kode sker på kompileringstidspunktet. Metode overbelastning eller operatør overbelastning er eksempler på kompileringstidspolymorfi.

B) Runtime polymorfi

Også kendt som dynamisk polymorfi eller sen binding, runtime polymorphism er den type polymorfi, hvor den faktiske implementering af funktionen bestemmes under runtime eller eksekvering. Metode tilsidesætter er et eksempel på denne metode.

16. Hvad er forskellen mellem overbelastning og tilsidesættelse?

En kompileringstids polymorfi-funktion kaldet overbelastning tillader en enhed at have adskillige implementeringer af samme navn. Metodeoverbelastning og operatøroverbelastning er to eksempler.

Tilsidesættende er en form for runtime polymorfi, hvor en enhed med samme navn, men en anden implementering, udføres. Det implementeres ved hjælp af virtuelle funktioner.

17. Er der nogen begrænsninger for arv?

Ja, der er flere udfordringer, når du har mere autoritet. Selvom arv er en meget stærk OOPs funktion, har den også betydelige ulemper.

  • Da det skal passere gennem flere klasser for at blive implementeret, tager arv længere tid at behandle.
  • Basisklassen og børneklassen, som begge beskæftiger sig med arv, er også tæt knyttet til hinanden (kaldet tæt koblet). Hvis der derfor skal laves ændringer, skal de muligvis laves i begge klasser på samme tid.
  • Det kan også være svært at implementere arv. Hvis det ikke implementeres korrekt, kan det derfor resultere i uforudsete fejl eller unøjagtige output.

18. Hvilke forskellige typer af arv findes der?

Arv kan klassificeres i 5 typer, som er som følger:

typer af arv
  1. Enkelt arv: Børneklasse afledt direkte fra basisklassen
  2. Multipel arv: Børneklasse afledt af flere basisklasser.
  3. Multilevel arv: Børneklasse afledt af klassen, som også er afledt af en anden basisklasse.
  4. Hierarkisk arv: Flere børneklasser afledt af en enkelt basisklasse.
  5. Hybrid arv: Arv bestående af flere arvetyper af ovennævnte.

Bemærk: Den understøttede arv afhænger af sproget. For eksempel understøtter Java ikke multipel nedarvning.

19. Hvad er en grænseflade?

En unik klassetype kendt som en grænseflade indeholder metoder, men ikke deres definitioner. Inde i en grænseflade er kun metodedeklaration tilladt. Du kan ikke lave objekter ved hjælp af en grænseflade. I stedet skal du tage denne grænseflade i brug og specificere procedurerne for at gøre det.

hvor mange taster har tastaturer

20. Hvordan adskiller en abstrakt klasse sig fra en grænseflade?

Både abstrakte klasser og grænseflader er specielle typer klasser, der blot inkluderer erklæringen af ​​metoderne, ikke deres implementering. En abstrakt klasse er dog fuldstændig adskilt fra en grænseflade. Følgende er nogle store forskelle mellem en abstrakt klasse og en grænseflade.

Abstrakt klasse

Interface

Når en abstrakt klasse er nedarvet, er underklassen dog ikke forpligtet til at levere definitionen af ​​den abstrakte metode, før og medmindre underklassen rent faktisk bruger den.Når en grænseflade er implementeret, skal underklassen specificere alle grænsefladens metoder såvel som deres implementering.
En klasse, der er abstrakt, kan have både abstrakte og ikke-abstrakte metoder.En grænseflade kan kun have abstrakte metoder.
En abstrakt klasse kan have endelige, ikke-endelige, statiske og ikke-statiske variabler.Grænsefladen har kun statiske og endelige variabler.
Abstrakt klasse understøtter ikke multipel nedarvning.En grænseflade understøtter multipel nedarvning.

21. Hvor meget hukommelse fylder en klasse?

Klasser bruger ikke hukommelse. De tjener blot som en skabelon, hvorfra genstande er lavet. Nu initialiserer objekter faktisk klassemedlemmerne og metoderne, når de oprettes, ved at bruge hukommelse i processen.

22. Er det altid nødvendigt at oprette objekter fra klassen?

Ingen. Hvis basisklassen inkluderer ikke-statiske metoder, skal et objekt konstrueres. Men der skal ikke genereres objekter, hvis klassen indeholder statiske metoder. I dette tilfælde kan du bruge klassenavnet til direkte at kalde disse statiske metoder.

23. Hvad er forskellen mellem en struktur og en klasse i C++?

Strukturen er også en brugerdefineret datatype i C++, der ligner klassen med følgende forskelle:

  • Den største forskel mellem en struktur og en klasse er, at i en struktur er medlemmerne som standard sat til offentlige, mens medlemmer i en klasse er private som standard.
  • Den anden forskel er, at vi bruger struktur for at deklarere struktur og klasse for at erklære en klasse i C++.

24. Hvad er konstruktør?

En konstruktør er en kodeblok, der initialiserer det nyoprettede objekt. En konstruktør ligner en instansmetode, men det er ikke en metode, da den ikke har en returtype. Det er generelt metoden, der har samme navn som klassen, men på nogle sprog kan den variere. For eksempel:

I python hedder en konstruktør __hed__.

I C++ og Java hedder konstruktøren det samme som klassenavnet.

Eksempel:

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. Hvad er de forskellige typer konstruktører i C++?

Den mest almindelige klassificering af konstruktører inkluderer:

  1. Standard konstruktør
  2. Ikke-parameteriseret konstruktør
  3. Parametriseret konstruktør
  4. Kopi konstruktør

1. Standard konstruktør

Standardkonstruktøren er en konstruktør, der ikke tager nogen argumenter. Det er en ikke-parameteriseret konstruktør, der automatisk defineres af compileren, når der ikke er angivet nogen eksplicit konstruktørdefinition.

Det initialiserer datamedlemmerne til deres standardværdier.

2. Ikke-parameteriseret konstruktør

Det er en brugerdefineret konstruktør uden argumenter eller parametre.

Eksempel:

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. Parametriseret konstruktør

De konstruktører, der tager nogle argumenter, er kendt som parameteriserede konstruktører.

Eksempel:

hvad er f5 på tastaturet


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. Kopier Konstruktør

En kopikonstruktør er en medlemsfunktion, der initialiserer et objekt ved hjælp af et andet objekt af samme klasse.

Eksempel:

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


I Python har vi ikke indbyggede kopikonstruktører som Java og C++, men vi kan lave en løsning ved hjælp af forskellige metoder.

26. Hvad er en destruktor?

En destructor er en metode, der automatisk kaldes, når objektet er lavet af omfang eller ødelagt.

I C++ er destruktornavnet også det samme som klassenavnet, men med ( ~ ) tilde symbol som præfiks.

I Python hedder destruktoren __af__ .

Eksempel:

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


I Java sletter garbage collector automatisk de ubrugelige objekter, så der er intet begreb om destructor i Java. Vi kunne have brugt finalize()-metoden som en løsning til java-destruktoren, men den er også forældet siden Java 9.

27. Kan vi overbelaste konstruktøren i en klasse?

Ja Vi kan overbelaste konstruktøren i en klasse i Java. Konstruktør Overbelastning udføres, når vi ønsker konstruktør med forskellige konstruktører med forskellige parameter (antal og type).

28. Kan vi overbelaste destruktoren i en klasse?

Nej. En destruktor kan ikke overbelastes i en klasse. Der kan kun være én destruktor til stede i en klasse.

29. Hvad er den virtuelle funktion?

En virtuel funktion er en funktion, der bruges til at tilsidesætte en metode for den overordnede klasse i den afledte klasse. Det bruges til at give abstraktion i en klasse.

I C++ erklæres en virtuel funktion ved hjælp af det virtuelle nøgleord,

I Java er enhver offentlig, ikke-statisk og ikke-endelig metode en virtuel funktion.

Python-metoder er altid virtuelle.

Eksempel:

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. Hvad er ren virtuel funktion?

En ren virtuel funktion, også kendt som en abstrakt funktion, er en medlemsfunktion, der ikke indeholder nogen udsagn. Denne funktion er defineret i den afledte klasse, hvis det er nødvendigt.

Eksempel:

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


I Python opnår vi dette ved hjælp af @abstractmethod fra ABC (Abstract Base Class) modulet.

Bonus spørgsmål

Hvad er en abstrakt klasse?

Generelt er en abstrakt klasse en klasse, der er beregnet til at blive brugt til arv. Det kan ikke instantieres. En abstrakt klasse kan bestå af både abstrakte og ikke-abstrakte metoder.

mylivecricket ind

I C++ er en abstrakt klasse en klasse, der indeholder mindst én ren virtuel funktion.

I Java erklæres en abstrakt klasse med en abstrakt søgeord.

Eksempel:

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


I Python bruger vi ABC (Abstract Base Class) modul til at skabe en abstrakt klasse.

Skal henvise:

  1. OOPs i C++
  2. OOPs i Java
  3. OOPs i Python
  4. Klasser og objekter i C++
  5. Klasser og objekter i Java
  6. Klasser og objekter i Python
  7. Introduktion til programmeringsparadigmer
  8. Interface i Java
  9. Abstrakt klasse i Java
  10. C++ interviewspørgsmål