Objektorienterad programmering, eller OOPs, är ett programmeringsparadigm som implementerar konceptet föremål i programmet. Det syftar till att tillhandahålla en enklare lösning på verkliga problem genom att implementera verkliga enheter som arv, abstraktion, polymorfism, etc. i programmering. OOPs koncept används ofta i många populära språk som Java, Python, C++, etc.

OOPs är också ett av de viktigaste ämnena för programmeringsintervjuer. Den här artikeln innehåller några topp intervjufrågor om OOPs koncept.
OOPs intervjufrågor
1. Vad är objektorienterad programmering (OOP)?
O bject O riented P rogrammering (även känd som OOPs) är ett programmeringsparadigm där hela programvaran fungerar som ett gäng objekt som pratar med varandra. Ett objekt är en samling av data och de metoder som fungerar på dessa data.
2. Varför OOPs?
Den största fördelen med OOP är bättre hanterbar kod som täcker följande:
- Den övergripande förståelsen av programvaran ökar när avståndet mellan språket som talas av utvecklare och det som talas av användare.
- Objektorientering underlättar underhållet genom användning av inkapsling. Man kan enkelt ändra den underliggande representationen genom att hålla metoderna oförändrade.
- OOPs paradigm är främst användbart för relativt stora program.
3. Vad är en klass?
A klass är en byggsten av objektorienterade program. Det är en användardefinierad datatyp som innehåller datamedlemmarna och medlemsfunktionerna som verkar på datamedlemmarna. Det är som en ritning eller mall av objekt som har gemensamma egenskaper och metoder.
4. Vad är ett objekt?
En objekt är en instans av en klass. Datamedlemmar och metoder för en klass kan inte användas direkt. Vi måste skapa ett objekt (eller instans) av klassen för att kunna använda dem. Enkelt uttryckt är de de faktiska världsenheterna som har ett tillstånd och beteende.
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); } }> Pytonorm # 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. Vilka är huvuddragen i OOP?
Huvuddragen för OOPs, även känd som 4 pelare eller grundläggande principer för OOPs är följande:
- Inkapsling
- Dataabstraktion
- Polymorfism
- Arv

OOPs huvudfunktioner
6. Vad är inkapsling?
Inkapsling är bindning av data och metoder som manipulerar dem till en enda enhet så att den känsliga informationen döljs för användarna
Det implementeras som de processer som nämns nedan:
- Data döljer: En språkfunktion för att begränsa åtkomst till medlemmar av ett objekt. Till exempel privata och skyddade medlemmar i C++.
- Kombination av data och metoder tillsammans: Data och metoder som fungerar på dessa data buntas ihop. Till exempel är datamedlemmarna och medlemsmetoderna som fungerar på dem inlindade i en enda enhet som kallas en klass.

7. Vad är abstraktion?
Abstraktion liknar datainkapsling och är mycket viktig i OOP. Det innebär att endast visa den nödvändiga informationen och dölja annan irrelevant information från användaren. Abstraktion implementeras med hjälp av klasser och gränssnitt.

8. Vad är polymorfism?
Ordet Polymorfism betyder att ha många former. Det är egenskapen hos viss kod att bete sig olika för olika sammanhang. Till exempel, i språket C++, kan vi definiera flera funktioner som har samma namn men fungerar olika beroende på sammanhanget.
Polymorfism kan klassificeras i två typer baserat på den tidpunkt då anropet till objektet eller funktionen är löst. De är följande:
- Kompilera tidspolymorfism
- Runtime polymorfism
A) Kompileringstidspolymorfism
Kompileringstidspolymorfism, även känd som statisk polymorfism eller tidig bindning är den typ av polymorfism där bindningen av anropet till dess kod görs vid kompileringstillfället. Metodöverbelastning eller operatörsöverbelastning är exempel på kompileringstidspolymorfism.
B) Runtime Polymorphism
Även känd som dynamisk polymorfism eller sen bindning, körtidspolymorfism är den typ av polymorfism där den faktiska implementeringen av funktionen bestäms under körningen eller körningen. Metodöverstyrning är ett exempel på denna metod.
9. Vad är arv? Vad är dess syfte?
Idén med arv är enkel, en klass härleds från en annan klass och använder data och implementering av den andra klassen. Klassen som härleds kallas barn eller härledd eller underklass och klassen från vilken barnklassen är härledd kallas förälder eller bas eller superklass.
Huvudsyftet med Arv är att öka kodåteranvändbarheten. Det används också för att uppnå Runtime Polymorphism.
10. Vad är åtkomstspecifikationer? Vad är deras betydelse i OOPs?
Åtkomstspecificerare är speciella typer av nyckelord som används för att specificera eller kontrollera åtkomsten av entiteter som klasser, metoder och så vidare. Privat , offentlig , och Skyddad är exempel på åtkomstspecificerare eller åtkomstmodifierare.
Nyckelkomponenterna i OOP, inkapsling och datadöljning, uppnås till stor del på grund av dessa åtkomstspecifikationer.
krom adressfält
11. Vilka är fördelarna och nackdelarna med OOP?
Fördelar med OOPs | Nackdelar med OOPs |
|---|---|
| OOPs ger förbättrad kodåteranvändbarhet. | Programmeraren bör vara välutbildad och bör ha utmärkt tänkande i termer av objekt eftersom allt behandlas som ett objekt i OOPs. |
| Koden är lättare att underhålla och uppdatera. | Rätt planering krävs eftersom OOPs är lite knepigt. |
| Det ger bättre datasäkerhet genom att begränsa dataåtkomst och undvika onödig exponering. | OOPs koncept är inte lämpligt för alla typer av problem. |
| Snabbt att implementera och lätt att designa om vilket resulterar i att komplexiteten i ett övergripande program minimeras. | Längden på programmen är mycket längre i jämförelse med det procedurmässiga tillvägagångssättet. |
12. Vilka andra paradigm för programmering finns förutom OOPs?
Programmeringsparadigmet hänvisar till tekniken eller tillvägagångssättet för att skriva ett program. Programmeringsparadigmen kan klassificeras i följande typer:

1. Imperativt programmeringsparadigm
Det är ett programmeringsparadigm som fungerar genom att ändra programtillståndet genom uppdragssatser. Huvudfokus i detta paradigm är hur man uppnår målet. Följande programmeringsparadigm faller under denna kategori:
- Procedurprogrammeringsparadigm : Detta programmeringsparadigm är baserat på proceduranropskonceptet. Procedurer, även kända som rutiner eller funktioner är de grundläggande byggstenarna i ett program i detta paradigm.
- Objektorienterad programmering eller OOP : I detta paradigm visualiserar vi varje entitet som ett objekt och försöker strukturera programmet baserat på objektets tillstånd och beteende.
- Parallell programmering : Paradigmet för parallellprogrammering är bearbetning av instruktioner genom att dela upp dem i flera mindre delar och exekvera dem samtidigt.
2. Deklarativt programmeringsparadigm
Deklarativ programmering fokuserar på vad som ska utföras snarare än hur det ska utföras. I detta paradigm uttrycker vi logiken i en beräkning utan att ta hänsyn till dess kontrollflöde. Det deklarativa paradigmet kan ytterligare klassificeras i:
- Logisk programmeringsparadigm : Den bygger på formell logik där programförklaringarna uttrycker fakta och regler om problemet i den logiska formen.
- Funktionell programmeringsparadigm : Program skapas genom att tillämpa och komponera funktioner i detta paradigm.
- Databasprogrammeringsparadigm : För att hantera data och information organiserad som fält, poster och filer, används databasprogrammeringsmodeller.
13. Vad är skillnaden mellan strukturerad programmering och objektorienterad programmering?
Strukturerad programmering är en teknik som anses vara en föregångare till OOP och som vanligtvis består av välstrukturerade och separerade moduler. Det är en delmängd av procedurprogrammering. Skillnaden mellan OOPs och Structured Programming är följande:
Objektorienterad programmering handledning för java | Strukturell programmering |
|---|---|
| Programmering som är objektorienterad bygger på objekt som har ett tillstånd och beteende. | Ett programs logiska struktur tillhandahålls av strukturell programmering, som delar in program i deras motsvarande funktioner. |
| Den följer en botten till topp-strategi. | Det följer ett uppifrån-till-ned-förhållningssätt. |
| Begränsar det öppna dataflödet till auktoriserade delar och ger bara bättre datasäkerhet. | Ingen begränsning av dataflödet. Vem som helst kan komma åt datan. |
| Förbättrad kodåteranvändbarhet på grund av begreppen polymorfism och arv. | Kodens återanvändbarhet uppnås genom att använda funktioner och loopar. |
| I detta skrivs metoder globalt och kodrader bearbetas en efter en, dvs körs sekventiellt. | I detta fungerar metoden dynamiskt och ringer efter behov av kod under en viss tid. |
| Det är lättare att ändra och uppdatera koden. | Det är svårt att ändra koden jämfört med OOPs. |
| Data ges större betydelse i OOPs. | Koden ges större vikt. |
14. Vilka är några vanliga objektorienterade programmeringsspråk?
OOPs paradigm är ett av de mest populära programmeringsparadigmen. Det används ofta i många populära programmeringsspråk som:
- C++
- Java
- Pytonorm
- Javascript
- C#
- Rubin
15. Vilka är de olika typerna av polymorfism?
Polymorfism kan klassificeras i två typer baserat på den tidpunkt då anropet till objektet eller funktionen är löst. De är följande:
- Kompilera tidspolymorfism
- Runtime polymorfism

Typer av polymorfism
A) Kompileringstidspolymorfism
Kompileringstidspolymorfism, även känd som statisk polymorfism eller tidig bindning är den typ av polymorfism där bindningen av anropet till dess kod görs vid kompileringstillfället. Metodöverbelastning eller operatörens överbelastning är exempel på kompileringstidspolymorfism.
B) Runtime Polymorphism
Också känd som dynamisk polymorfism eller sen bindning, körtidspolymorfism är den typ av polymorfism där den faktiska implementeringen av funktionen bestäms under körningen eller körningen. Metod åsidosättande är ett exempel på denna metod.
16. Vad är skillnaden mellan överbelastning och åsidosättande?
En kompileringstidspolymorfismfunktion som kallas överbelastning tillåter en enhet att ha flera implementeringar med samma namn. Metodöverbelastning och operatörsöverbelastning är två exempel.
Åsidosättande är en form av körtidspolymorfism där en entitet med samma namn men en annan implementering exekveras. Det implementeras med hjälp av virtuella funktioner.
17. Finns det några begränsningar för arv?
Ja, det finns fler utmaningar när du har mer auktoritet. Även om arv är en mycket stark OOP-funktion, har den också betydande nackdelar.
- Eftersom det måste gå igenom flera klasser för att kunna implementeras, tar arv längre tid att bearbeta.
- Basklassen och barnklassen, som båda är engagerade i arv, är också nära besläktade med varandra (kallas tätt kopplade). Därför, om ändringar behöver göras, kan de behöva göras i båda klasserna samtidigt.
- Att implementera arv kan också vara svårt. Därför, om det inte implementeras korrekt, kan detta resultera i oförutsedda misstag eller felaktiga utdata.
18. Vilka olika typer av arv finns det?
Arv kan delas in i 5 typer som är följande:

- Enstaka arv: Barnklass härledd direkt från basklassen
- Multipelt arv: Barnklass härledd från flera basklasser.
- Arv på flera nivåer: Barnklass härledd från klassen som också härrör från en annan basklass.
- Hierarkiskt arv: Flera barnklasser härledda från en enda basklass.
- Hybrid arv: Arv som består av flera arvstyper av ovan angivna.
Notera: Typ av arv som stöds beror på språket. Java stöder till exempel inte multipelt arv.
19. Vad är ett gränssnitt?
En unik klasstyp känd som ett gränssnitt innehåller metoder men inte deras definitioner. Inuti ett gränssnitt är endast metoddeklaration tillåten. Du kan inte skapa objekt med ett gränssnitt. Istället måste du använda det gränssnittet och specificera procedurerna för att göra det.
20. Hur skiljer sig en abstrakt klass från ett gränssnitt?
Både abstrakta klasser och gränssnitt är speciella typer av klasser som bara inkluderar deklarationen av metoderna, inte deras implementering. En abstrakt klass är dock helt skild från ett gränssnitt. Följande är några stora skillnader mellan en abstrakt klass och ett gränssnitt.
Abstrakt klass | Gränssnitt |
|---|---|
| När en abstrakt klass ärvs, krävs dock inte att underklassen tillhandahåller definitionen av den abstrakta metoden förrän och om inte underklassen faktiskt använder den. | När ett gränssnitt implementeras måste underklassen specificera alla gränssnittets metoder samt deras implementering. |
| En klass som är abstrakt kan ha både abstrakta och icke-abstrakta metoder. | Ett gränssnitt kan bara ha abstrakta metoder. |
| En abstrakt klass kan ha slutliga, icke-slutliga, statiska och icke-statiska variabler. | Gränssnittet har endast statiska och slutliga variabler. |
| Abstrakt klass stöder inte multipelt arv. | Ett gränssnitt stöder flera arv. |
21. Hur mycket minne upptar en klass?
Klasser använder inte minne. De fungerar bara som en mall från vilken föremål tillverkas. Nu initialiserar objekt faktiskt klassmedlemmarna och metoderna när de skapas, med hjälp av minne i processen.
22. Är det alltid nödvändigt att skapa objekt från klass?
Nej. Om basklassen innehåller icke-statiska metoder måste ett objekt konstrueras. Men inga objekt behöver genereras om klassen innehåller statiska metoder. I det här fallet kan du använda klassnamnet för att direkt anropa dessa statiska metoder.
23. Vad är skillnaden mellan en struktur och en klass i C++?
Strukturen är också en användardefinierad datatyp i C++ som liknar klassen med följande skillnader:
- Den stora skillnaden mellan en struktur och en klass är att i en struktur är medlemmarna inställda på offentliga som standard medan medlemmar i en klass är privata som standard.
- Den andra skillnaden är att vi använder struktur för att deklarera struktur och klass för att deklarera en klass i C++.
24. Vad är Constructor?
En konstruktor är ett kodblock som initierar det nyskapade objektet. En konstruktor liknar en instansmetod men det är inte en metod eftersom den inte har en returtyp. Det är vanligtvis metoden som har samma namn som klassen men på vissa språk kan den skilja sig åt. Till exempel:
I python heter en konstruktör __varm__.
I C++ och Java heter konstruktorn samma som klassnamnet.
Exempel:
C++ class base { public: base() { cout << 'This is a constructor'; } }> Java class base { base() { System.out.printIn('This is a constructor'); } }> Pytonorm class base: def __init__(self): print('This is a constructor')> 25. Vilka är de olika typerna av konstruktörer i C++?
Den vanligaste klassificeringen av konstruktörer inkluderar:
- Standardkonstruktör
- Icke-parameteriserad konstruktör
- Parameteriserad konstruktör
- Kopiera konstruktör
1. Standardkonstruktör
Standardkonstruktorn är en konstruktor som inte tar några argument. Det är en icke-parameteriserad konstruktor som automatiskt definieras av kompilatorn när ingen explicit konstruktordefinition tillhandahålls.
Den initierar datamedlemmarna till deras standardvärden.
2. Icke-parameteriserad konstruktör
Det är en användardefinierad konstruktor som inte har några argument eller parametrar.
Exempel:
C++ class base { base() { cout << 'This is a non-parameterized contructor'; } }> Java class base { base() { System.out.printIn( 'This is a non-parameterized constructor.'); } }> Pytonorm class base: def __init__(self): print('This is a non-parameterized constructor')> 3. Parametriserad konstruktör
Konstruktörerna som tar vissa argument kallas parametriserade konstruktorer.
Exempel:
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); } }> Pytonorm class base: def __init__(self, a): print('Constructor with argument: {}'.format(a))> 4. Kopiera Constructor
En kopieringskonstruktor är en medlemsfunktion som initierar ett objekt med ett annat objekt av samma klass.
Exempel:
avgränsare javaC++
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 inte inbyggda kopieringskonstruktörer som Java och C++ men vi kan göra en lösning med olika metoder.
26. Vad är en förstörare?
En destruktor är en metod som automatiskt anropas när objektet är gjort av omfattning eller förstört.
I C++ är destruktornamnet också detsamma som klassnamnet men med ( ~ ) tilde symbol som prefix.
I Python heter förstöraren __av__ .
Exempel:
C++ class base { public: ~base() { cout << 'This is a destructor'; } }> Pytonorm class base: def __del__(self): print('This is destructor')>
I Java tar sopsamlaren automatiskt bort de oanvändbara objekten så det finns inget koncept med destruktör i Java. Vi kunde ha använt finalize()-metoden som en lösning för java-förstöraren men den är också utfasad sedan Java 9.
27. Kan vi överbelasta konstruktorn i en klass?
Ja Vi kan överbelasta konstruktorn i en klass i Java. Konstruktör Överbelastning görs när vi vill ha konstruktör med olika konstruktorer med olika parameter (antal och typ).
28. Kan vi överbelasta destruktorn i en klass?
Nej. En destruktor kan inte överbelastas i en klass. Det kan bara vara en förstörare närvarande i en klass.
29. Vad är den virtuella funktionen?
En virtuell funktion är en funktion som används för att åsidosätta en metod för den överordnade klassen i den härledda klassen. Det används för att ge abstraktion i en klass.
I C++ deklareras en virtuell funktion med hjälp av det virtuella nyckelordet,
I Java är alla offentliga, icke-statiska och icke-slutliga metoder en virtuell funktion.
Python-metoder är alltid virtuella.
Exempel:
namngivning av javakonventionerC++
class base { virtual void print() { cout << 'This is a virtual function'; } }> Java class base { void func() { System.out.printIn('This is a virtual function') } }> Pytonorm class base: def func(self): print('This is a virtual function')> 30. Vad är ren virtuell funktion?
En ren virtuell funktion, även känd som en abstrakt funktion, är en medlemsfunktion som inte innehåller några uttalanden. Denna funktion definieras i den härledda klassen om det behövs.
Exempel:
C++ class base { virtual void pureVirFunc() = 0; }> Java abstract class base { abstract void prVirFunc(); }>
I Python uppnår vi detta med @abstractmethod från ABC-modulen (Abstract Base Class).
Bonusfråga
Vad är en abstrakt klass?
I allmänna termer är en abstrakt klass en klass som är avsedd att användas för arv. Det går inte att instansiera. En abstrakt klass kan bestå av både abstrakta och icke-abstrakta metoder.
I C++ är en abstrakt klass en klass som innehåller minst en ren virtuell funktion.
I Java deklareras en abstrakt klass med en abstrakt nyckelord.
Exempel:
C++ class absClass { public: virtual void pvFunc() = 0; }> Java abstract class absClass { // body }>
I Python använder vi modulen ABC (Abstract Base Class) för att skapa en abstrakt klass.
Måste referera:
- OOPs i C++
- OOPs i Java
- OOPs i Python
- Klasser och objekt i C++
- Klasser och objekt i Java
- Klasser och objekt i Python
- Introduktion till programmeringsparadigm
- Gränssnitt i Java
- Abstrakt klass i Java
- C++ intervjufrågor