logo

30 OOPs intervjuspørsmål og svar (2024)

Objektorientert programmering, eller OOPs, er et programmeringsparadigme som implementerer konseptet gjenstander i programmet. Den har som mål å gi en enklere løsning på virkelige problemer ved å implementere virkelige enheter som arv, abstraksjon, polymorfisme, etc. i programmering. OOPs konsept er mye brukt i mange populære språk som Java, Python, C++, etc.

OOPs intervjuspørsmål og svar

OOPs er også et av de viktigste temaene for programmeringsintervjuer. Denne artikkelen inneholder noen topp intervjuspørsmål om OOPs-konseptet.



OOPs intervjuspørsmål

1. Hva er objektorientert programmering (OOPs)?

O bject O riented P rogrammering (også kjent som OOPs) er et programmeringsparadigme der den komplette programvaren fungerer som en haug med objekter som snakker med hverandre. Et objekt er en samling av data og metodene som opererer på disse dataene.

har neste java

2. Hvorfor OOPs?

Hovedfordelen med OOP er bedre håndterbar kode som dekker følgende:

  1. Den generelle forståelsen av programvaren øker ettersom avstanden mellom språket som snakkes av utviklere og det som snakkes av brukere.
  2. Objektorientering letter vedlikeholdet ved bruk av innkapsling. Man kan enkelt endre den underliggende representasjonen ved å holde metodene ved like.
  3. OOPs-paradigmet er hovedsakelig nyttig for relativt stor programvare.

3. Hva er en klasse?

EN klasse er en byggestein av objektorienterte programmer. Det er en brukerdefinert datatype som inneholder datamedlemmene og medlemsfunksjonene som opererer på datamedlemmene. Det er som en blåkopi eller mal av objekter som har felles egenskaper og metoder.



4. Hva er et objekt?

An gjenstand er en forekomst av en klasse. Datamedlemmer og metoder for en klasse kan ikke brukes direkte. Vi må lage et objekt (eller forekomst) av klassen for å bruke dem. Enkelt sagt er de de faktiske verdensenhetene som har en tilstand og atferd.

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

Produksjon
student1.name: Rahul>

5. Hva er hovedtrekkene til OOPs?

Hovedtrekket til OOP-ene, også kjent som 4 pilarer eller grunnleggende prinsipper for OOP-er, er som følger:

  1. Innkapsling
  2. Dataabstraksjon
  3. Polymorfisme
  4. Arv
søyler av oops

OOPs hovedfunksjoner



6. Hva er innkapsling?

Innkapsling er binding av data og metoder som manipulerer dem til en enkelt enhet slik at de sensitive dataene er skjult for brukerne
Det implementeres som prosessene nevnt nedenfor:

  1. Skjul data: En språkfunksjon for å begrense tilgangen til medlemmer av et objekt. For eksempel private og beskyttede medlemmer i C++.
  2. Bunting av data og metoder sammen: Data og metoder som opererer på disse dataene er samlet sammen. For eksempel er datamedlemmene og medlemsmetodene som opererer på dem pakket inn i en enkelt enhet kjent som en klasse.
innkapsling

7. Hva er abstraksjon?

Abstraksjon ligner datainnkapsling og er veldig viktig i OOP. Det betyr kun å vise nødvendig informasjon og skjule den andre irrelevante informasjonen for brukeren. Abstraksjon implementeres ved hjelp av klasser og grensesnitt.

abstraksjon i OOPs

8. Hva er polymorfisme?

Ordet Polymorfisme betyr å ha mange former. Det er egenskapen til en eller annen kode å oppføre seg forskjellig i forskjellige sammenhenger. For eksempel, i C++-språk, kan vi definere flere funksjoner som har samme navn, men som fungerer forskjellig avhengig av konteksten.

Polymorfisme kan klassifiseres i to typer basert på tidspunktet når kallet til objektet eller funksjonen er løst. De er som følger:

  • Kompiler tidspolymorfisme
  • Runtime polymorfisme

A) Kompileringstidspolymorfisme

Kompileringstidspolymorfisme, også kjent som statisk polymorfisme eller tidlig binding, er typen polymorfisme der bindingen av anropet til koden gjøres på kompileringstidspunktet. Metodeoverbelastning eller operatøroverbelastning er eksempler på kompileringstidspolymorfisme.

B) Runtime polymorfisme

Også kjent som dynamisk polymorfisme eller sen binding, kjøretidspolymorfisme er typen polymorfisme der den faktiske implementeringen av funksjonen bestemmes under kjøretiden eller utførelsen. Metodeoverstyring er et eksempel på denne metoden.

9. Hva er arv? Hva er formålet?

Ideen om arv er enkel, en klasse er avledet fra en annen klasse og bruker data og implementering av den andre klassen. Klassen som er avledet kalles barn eller avledet eller underklasse og klassen som barneklassen er avledet fra kalles overordnet eller base eller superklasse.

Hovedformålet med arv er å øke kodegjenbrukbarheten. Det brukes også for å oppnå Runtime Polymorphism.

10. Hva er tilgangsspesifikasjoner? Hva er deres betydning i OOPs?

Tilgangsspesifikasjoner er spesielle typer nøkkelord som brukes til å spesifisere eller kontrollere tilgjengeligheten til enheter som klasser, metoder og så videre. Privat , Offentlig , og Beskyttet er eksempler på tilgangspesifisatorer eller tilgangsmodifikatorer.
Nøkkelkomponentene i OOP-er, innkapsling og dataskjuling, oppnås i stor grad på grunn av disse tilgangsspesifikasjonene.

11. Hva er fordelene og ulempene med OOPs?

Fordeler med OOPs

Ulemper med OOPs

OOPs gir forbedret kodegjenbrukbarhet.Programmereren bør være godt dyktig og bør ha utmerket tenkning i form av objekter da alt behandles som et objekt i OOPs.
Koden er enklere å vedlikeholde og oppdatere.Riktig planlegging er nødvendig fordi OOPs er litt vanskelig.
Det gir bedre datasikkerhet ved å begrense datatilgang og unngå unødvendig eksponering.OOPs konsept er ikke egnet for alle typer problemer.
Rask å implementere og enkel å redesigne, noe som resulterer i å minimere kompleksiteten til et overordnet program.Lengden på programmene er mye større sammenlignet med den prosedyremessige tilnærmingen.

12. Hvilke andre programmeringsparadigmer finnes i tillegg til OOPs?

Programmeringsparadigmet er referert til teknikken eller tilnærmingen til å skrive et program. Programmeringsparadigmene kan klassifiseres i følgende typer:

typer programmeringsparadigmer

1. Imperativt programmeringsparadigme

Det er et programmeringsparadigme som fungerer ved å endre programtilstanden gjennom oppgavesetninger. Hovedfokuset i dette paradigmet er hvordan man skal nå målet. Følgende programmeringsparadigmer kommer under denne kategorien:

  1. Prosedyremessig programmeringsparadigme : Dette programmeringsparadigmet er basert på prosedyrekall-konseptet. Prosedyrer, også kjent som rutiner eller funksjoner, er de grunnleggende byggesteinene i et program i dette paradigmet.
  2. Objektorientert programmering eller OOP : I dette paradigmet visualiserer vi hver enhet som et objekt og prøver å strukturere programmet basert på tilstanden og oppførselen til det objektet.
  3. Parallell programmering : Paradigmet for parallell programmering er behandlingen av instruksjoner ved å dele dem inn i flere mindre deler og utføre dem samtidig.

2. Deklarativt programmeringsparadigme

Deklarativ programmering fokuserer på hva som skal utføres i stedet for hvordan det skal utføres. I dette paradigmet uttrykker vi logikken til en beregning uten å vurdere dens kontrollflyt. Det deklarative paradigmet kan videre klassifiseres i:

  1. Logisk programmeringsparadigme : Den er basert på formell logikk der programsetningene uttrykker fakta og regler om problemet i den logiske formen.
  2. Funksjonelt programmeringsparadigme : Programmer lages ved å bruke og komponere funksjoner i dette paradigmet.
  3. Databaseprogrammeringsparadigme : For å administrere data og informasjon organisert som felt, poster og filer, brukes databaseprogrammeringsmodeller.

13. Hva er forskjellen mellom strukturert programmering og objektorientert programmering?

Strukturert programmering er en teknikk som regnes som en forløper til OOP og består vanligvis av godt strukturerte og atskilte moduler. Det er en undergruppe av prosedyreprogrammering. Forskjellen mellom OOP-er og strukturert programmering er som følger:

Objektorientert programmering

strengformat java

Strukturell programmering

Programmering som er objektorientert er bygget på objekter som har en tilstand og atferd.Et programs logiske struktur er gitt av strukturell programmering, som deler programmer inn i deres tilsvarende funksjoner.
Den følger en bunn-til-topp-tilnærming.Den følger en topp-til-ned-tilnærming.
Begrenser den åpne strømmen av data til autoriserte deler, og gir kun bedre datasikkerhet.Ingen begrensning på dataflyten. Alle kan få tilgang til dataene.
Forbedret kodegjenbrukbarhet på grunn av begrepene polymorfisme og arv.Gjenbrukbarhet av kode oppnås ved å bruke funksjoner og looper.
I denne skrives metoder globalt og kodelinjer behandles én etter én, dvs. Kjør sekvensielt.I dette fungerer metoden dynamisk, og ringer etter behov for kode for en viss tid.
Det er enklere å endre og oppdatere koden.Det er vanskelig å endre koden sammenlignet med OOP-er.
Data tillegges større betydning i OOPs.Kode tillegges større betydning.

14. Hva er noen vanlig brukte objektorienterte programmeringsspråk?

OOPs paradigme er et av de mest populære programmeringsparadigmene. Det er mye brukt i mange populære programmeringsspråk som:

15. Hva er de forskjellige typene polymorfisme?

Polymorfisme kan klassifiseres i to typer basert på tidspunktet når kallet til objektet eller funksjonen er løst. De er som følger:

  1. Kompiler tidspolymorfisme
  2. Runtime polymorfisme
typer polymorfisme

Typer polymorfisme

A) Kompileringstidspolymorfisme

Kompileringstidspolymorfisme, også kjent som statisk polymorfisme eller tidlig binding, er typen polymorfisme der bindingen av anropet til koden gjøres på kompileringstidspunktet. Metode overbelastning eller operatør overbelastning er eksempler på kompileringstidspolymorfisme.

B) Runtime polymorfisme

Også kjent som dynamisk polymorfisme eller sen binding, kjøretidspolymorfisme er typen polymorfisme der den faktiske implementeringen av funksjonen bestemmes under kjøretiden eller utførelsen. Metode overstyrer er et eksempel på denne metoden.

16. Hva er forskjellen mellom overbelastning og overstyring?

En kompileringstids polymorfisme-funksjon kalt overbelastning lar en enhet ha flere implementeringer med samme navn. Metodeoverbelastning og operatøroverbelastning er to eksempler.

Overstyrer er en form for kjøretidspolymorfisme der en enhet med samme navn, men en annen implementering, utføres. Det implementeres ved hjelp av virtuelle funksjoner.

17. Er det noen begrensninger på arv?

Ja, det er flere utfordringer når du har mer autoritet. Selv om arv er en veldig sterk OOP-funksjon, har den også betydelige ulemper.

  • Siden det må gå gjennom flere klasser for å bli implementert, tar arv lengre tid å behandle.
  • Basisklassen og barneklassen, som begge er engasjert i arv, er også nært beslektet med hverandre (kalt tett koblet). Derfor, hvis endringer må gjøres, kan det hende at de må gjøres i begge klassene samtidig.
  • Implementering av arv kan også være vanskelig. Derfor, hvis det ikke implementeres riktig, kan dette føre til uforutsette feil eller unøyaktige utdata.

18. Hvilke ulike typer arv finnes det?

Arv kan deles inn i 5 typer som er som følger:

typer arv
  1. Enkeltarv: Barneklasse avledet direkte fra basisklassen
  2. Multippel arv: Barneklasse avledet fra flere basisklasser.
  3. Flernivåarv: Barneklasse avledet fra klassen som også er avledet fra en annen grunnklasse.
  4. Hierarkisk arv: Flere barneklasser avledet fra en enkelt basisklasse.
  5. Hybrid arv: Arv som består av flere arvetyper av de ovenfor angitte.

Merk: Type arv som støttes er avhengig av språket. For eksempel støtter ikke Java multippel arv.

19. Hva er et grensesnitt?

En unik klassetype kjent som et grensesnitt inneholder metoder, men ikke definisjonene deres. Inne i et grensesnitt er kun metodedeklarasjon tillatt. Du kan ikke lage objekter ved hjelp av et grensesnitt. I stedet må du ta det grensesnittet i bruk og spesifisere prosedyrene for å gjøre det.

hvor mange taster har tastaturer

20. Hvordan er en abstrakt klasse forskjellig fra et grensesnitt?

Både abstrakte klasser og grensesnitt er spesielle typer klasser som bare inkluderer erklæringen om metodene, ikke implementeringen av dem. En abstrakt klasse er imidlertid helt forskjellig fra et grensesnitt. Følgende er noen store forskjeller mellom en abstrakt klasse og et grensesnitt.

Abstrakt klasse

Grensesnitt

Når en abstrakt klasse er arvet, er imidlertid ikke underklassen pålagt å gi definisjonen av den abstrakte metoden før og med mindre underklassen faktisk bruker den.Når et grensesnitt er implementert, må underklassen spesifisere alle grensesnittets metoder samt deres implementering.
En klasse som er abstrakt kan ha både abstrakte og ikke-abstrakte metoder.Et grensesnitt kan bare ha abstrakte metoder.
En abstrakt klasse kan ha endelige, ikke-finale, statiske og ikke-statiske variabler.Grensesnittet har kun statiske og endelige variabler.
Abstrakt klasse støtter ikke multippel arv.Et grensesnitt støtter multippel arv.

21. Hvor mye minne opptar en klasse?

Klassene bruker ikke minne. De fungerer bare som en mal som gjenstander lages fra. Nå initialiserer objekter faktisk klassemedlemmene og metodene når de opprettes, ved å bruke minne i prosessen.

22. Er det alltid nødvendig å lage objekter fra klassen?

Nei. Hvis basisklassen inkluderer ikke-statiske metoder, må et objekt konstrueres. Men ingen objekter trenger å genereres hvis klassen inkluderer statiske metoder. I dette tilfellet kan du bruke klassenavnet til å kalle disse statiske metodene direkte.

23. Hva er forskjellen mellom en struktur og en klasse i C++?

Strukturen er også en brukerdefinert datatype i C++ som ligner på klassen med følgende forskjeller:

  • Den største forskjellen mellom en struktur og en klasse er at i en struktur er medlemmene satt til offentlig som standard, mens medlemmene i en klasse er private som standard.
  • Den andre forskjellen er at vi bruker struktur for å deklarere struktur og klasse for å erklære en klasse i C++.

24. Hva er konstruktør?

En konstruktør er en kodeblokk som initialiserer det nyopprettede objektet. En konstruktør ligner en forekomstmetode, men det er ikke en metode da den ikke har en returtype. Det er vanligvis metoden som har samme navn som klassen, men på noen språk kan den variere. For eksempel:

I python heter en konstruktør __varmt__.

I C++ og Java heter 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. Hva er de ulike typene konstruktører i C++?

Den vanligste klassifiseringen av konstruktører inkluderer:

  1. Standard konstruktør
  2. Ikke-parameterisert konstruktør
  3. Parameterisert konstruktør
  4. Kopier Konstruktør

1. Standard konstruktør

Standardkonstruktøren er en konstruktør som ikke tar noen argumenter. Det er en ikke-parameterisert konstruktør som automatisk defineres av kompilatoren når ingen eksplisitt konstruktørdefinisjon er gitt.

Den initialiserer datamedlemmene til standardverdiene.

2. Ikke-parameterisert konstruktør

Det er en brukerdefinert konstruktør som ikke har noen argumenter eller parametere.

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

Konstruktørene som tar noen argumenter er kjent som parameteriserte konstruktører.

Eksempel:

c# eksempelkode


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 medlemsfunksjon som initialiserer et objekt ved å bruke et annet objekt av 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 innebygde kopikonstruktører som Java og C++, men vi kan gjøre en løsning ved å bruke forskjellige metoder.

26. Hva er en destruktor?

En destruktor er en metode som automatisk kalles når objektet er laget av omfang eller ødelagt.

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

I Python heter destruktoren __av__ .

Eksempel:

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


I Java sletter søppelsamleren automatisk de ubrukelige objektene, så det er ikke noe begrep om destruktor i Java. Vi kunne ha brukt finalize()-metoden som en løsning for java-destruktoren, men den er også utdatert 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 gjøres når vi ønsker konstruktør med annen konstruktør med annen parameter (antall og type).

28. Kan vi overbelaste destruktoren i en klasse?

Nei. En destruktor kan ikke overbelastes i en klasse. Det kan bare være én destruktor til stede i en klasse.

29. Hva er den virtuelle funksjonen?

En virtuell funksjon er en funksjon som brukes til å overstyre en metode for den overordnede klassen i den avledede klassen. Det brukes til å gi abstraksjon i en klasse.

I C++ erklæres en virtuell funksjon ved å bruke det virtuelle nøkkelordet,

I Java er alle offentlige, ikke-statiske og ikke-endelige metoder en virtuell funksjon.

Python-metoder er alltid 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. Hva er ren virtuell funksjon?

En ren virtuell funksjon, også kjent som en abstrakt funksjon, er en medlemsfunksjon som ikke inneholder noen utsagn. Denne funksjonen er definert i den avledede klassen om nødvendig.

Eksempel:

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


I Python oppnår vi dette ved å bruke @abstractmethod fra ABC (Abstract Base Class)-modulen.

Bonusspørsmål

Hva er en abstrakt klasse?

Generelt sett er en abstrakt klasse en klasse som er ment å brukes til arv. Det kan ikke instansieres. En abstrakt klasse kan bestå av både abstrakte og ikke-abstrakte metoder.

det vakreste smilet

I C++ er en abstrakt klasse en klasse som inneholder minst én ren virtuell funksjon.

I Java er en abstrakt klasse erklært med en abstrakt nøkkelord.

Eksempel:

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


I Python bruker vi ABC-modulen (Abstract Base Class) for å lage en abstrakt klasse.

Må referere:

  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. Introduksjon til programmeringsparadigmer
  8. Grensesnitt i Java
  9. Abstrakt klasse i Java
  10. C++ intervjuspørsmål