21 Vanliga frågor och svar på OOP-intervjuer att veta idag

By rik

Frågor om objektorienterad programmering i en intervju kan ge programmerare och utvecklare möjligheten att fördjupa sina kunskaper om grundläggande begrepp inom programmeringsvärlden.

OOP, eller objektorienterad programmering, är ett av de mest väsentliga och frekvent använda programmeringsparadigmen, där fokus ligger på objekt och klasser snarare än på procedurer och funktioner.

Ett antal programmeringsspråk bygger på OOP, däribland Objective-C, Java, Ada, Perl, Python och C++.

Stora företag söker ofta efter utvecklare som behärskar både objektorienterade metoder och designmönster.

Om du planerar att delta i en anställningsintervju som fokuserar på dessa aspekter är det viktigt att du har en gedigen förståelse för OOP-koncept.

Låt oss utforska några av de vanligaste frågorna och svaren som kan dyka upp under en OOP-intervju, för att hjälpa dig att förbereda dig inför intervjuer och tester.

En översikt över objektorienterad programmering (OOP)

OOP är ett programmeringsparadigm som centrerar kring objekt. Här betraktas objekt som faktiska instanser av en klass, som innehåller specifika beteenden och egenskaper definierade i klassens mall.

Låt oss ta en bil som exempel. Enligt OOP-modellen:

  • Objekt: En bil. Det kan vara vilken bil som helst, till exempel den bil du äger.
  • Klass: Bilens modell eller typ, som BMW, Chevrolet, Kia eller Audi.
  • Egenskaper: Bilens färg, chassinummer, motortyp och växellåda med mera.
  • Beteende: Hur man växlar, hur man startar bilen och så vidare.

Egenskaper kallas ibland för attribut eller data, medan beteenden ofta benämns som procedurer, metoder eller funktioner i olika programmeringsspråk.

Låt oss nu undersöka några vanliga intervjufrågor om OOP.

Vad menas med begreppet OOP?

Svar: Objektorienterad programmering (OOP) är en programmeringsmetod som bygger på objekt och klasser istället för procedurer och funktioner. Enskilda objekt grupperas i klasser. OOP beskriver verkliga enheter med hjälp av begrepp som polymorfism, inkapsling, arv, och är ett viktigt programmeringsparadigm.

OOP förenar kod och data. Objekt representerar verkliga enheter som definieras genom klasser med specifika egenskaper och beteenden. En klass fungerar som en mall för ett specifikt objekt och kallas även för en användardefinierad datatyp.

Detta tillämpas i program för design och tillverkning samt i mobilapplikationer. Till exempel kan du använda OOP för att skapa mjukvara för systemsimulering.

Vilka andra programmeringsparadigmer finns utöver OOP?

Svar: Programmeringsparadigmer är olika sätt att kategorisera programmeringsspråk baserat på deras särdrag. Det finns huvudsakligen två huvudtyper:

  • Imperativt programmeringsparadigm: Detta paradigm fokuserar på hur logiken utförs och definierar kontrollflödet. Det inkluderar procedurprogrammering, objektorienterad programmering (OOP) och parallell programmering.
  • Deklarativt programmeringsparadigm: Här ligger fokus på vad som ska utföras i programmet, snarare än hur. Det omfattar logisk programmering, funktionell programmering och databasprogrammering.

Vad är skillnaden mellan OOP och SOP?

Svar: Låt oss undersöka skillnaderna mellan OOP och SOP genom denna tabell:

Objektorienterad programmering (OOP) Strukturerad programmering (SOP)
Struktur Baseras på objekt istället för procedurer och funktioner. Program är uppdelade i funktioner, ger en logisk struktur till programmet.
Metod Följer en ”nedifrån och upp”-metod. Följer en ”uppifrån och ned”-strategi.
Dataskydd Erbjuder datadöljning eller inkapsling. Erbjuder inte datadöljning.
Problemlösning Kan lösa komplexa problem. Kan lösa mer måttliga problem.
Kodåteranvändning Erbjuder hög kodåteranvändbarhet. Stöder inte återanvändbarhet av kod.
Flexibilitet Mer flexibel. Mindre flexibel.
Primärt fokus Fokus ligger på data. Fokus ligger på programmets logiska struktur.

Vilka är de viktigaste egenskaperna hos OOP?

Svar: Här är de centrala egenskaperna hos OOP:

  • Arv
  • Inkapsling
  • Abstraktion
  • Polymorfism
  • Metodöverstyrning
  • Metodöverlagring
  • Objekt
  • Klasser
  • Konstruktörer och destruktörer

Arv, polymorfism och inkapsling är de grundläggande komponenterna i OOP som skiljer dessa egenskaper från icke-OOP-språk.

Vad är inkapsling?

Svar: Inkapsling innebär att placera klasser, variabler, metoder och andra element som behövs för en uppgift, i en ”kapsel” som sedan presenteras för användaren. Det innebär att alla nödvändiga metoder och data kombineras, samtidigt som onödiga detaljer hålls dolda för användaren.

Det kan även beskrivas på följande sätt:

  • Databindning: Inkapsling är processen att binda samman datamedlemmar med metoder i en klass eller som en sammanhängande enhet.
  • Datadöljning: Inkapsling är processen att dölja onödig information, som exempelvis åtkomstbegränsningar för en medlemsvariabel i ett objekt.

Vad är polymorfism?

Svar: Låt oss förstå polymorfism genom att dela upp ordet i sina två beståndsdelar:

”Poly” betyder ”många”.

”Morf” betyder ”former”.

Polymorfism kan alltså beskrivas som att ett objekt kan anta olika former.

Inom OOP syftar det på den process där data, objekt, metoder eller kod beter sig olika beroende på sammanhang och omständigheter. Det finns två typer av polymorfism i OOP-modellen:

  • Körtidspolymorfism
  • Kompileringstidspolymorfism

Med andra ord innebär det flera definitioner för ett enda gränssnitt. Till exempel kan det finnas en klass som heter ”fordon”, som innehåller en hastighetsmetod. Det är omöjligt att ange hastigheten på förhand, eftersom olika fordon har olika hastigheter. Denna metod kan istället definieras i underklasser med olika definitioner för olika fordon.

Vad är statisk polymorfism?

Svar: Statisk polymorfism, även känd som kompileringstidspolymorfism, innebär att ett objekt kopplas till en specifik operator eller funktion baserat på dess värden vid kompilering. Detta kan åstadkommas genom operatörsöverlagring eller metodöverlagring.

I detta fall använder metoderna liknande namn, men parametern för varje namn varierar. Objektet beter sig olika beroende på vilken specifik anropare det är. På så sätt kan flera metoder implementeras i samma klass.

Vad är dynamisk polymorfism?

Svar: Dynamisk polymorfism, även kallad körtidspolymorfism, bestämmer den faktiska implementationen av en funktion under exekvering eller körtid. Det kan uppnås genom metodöverstyrning.

Till exempel kan man skapa två klasser, ”cykel” och ”Yamaha”, där klassen ”Yamaha” ärver från klassen ”cykel” och överskriver dess run()-metod. Eftersom underklassens metod överskriver metoden i den överordnade klassen, anropas den under körtiden.

Vad är en klass?

Svar: En klass kan beskrivas som en ritning eller mall som innehåller värden, kallade medlemsdata. Den innehåller även regler, som kallas funktioner eller beteenden. När ett objekt skapas antar det automatiskt de funktioner och data som definieras i klassen.

Kort sagt, en klass är en mall för objekt. Man kan skapa hur många objekt som helst baserat på en och samma klass. Till exempel skapas först en mall för en bil. Därefter kan olika bilar tillverkas baserat på den mallen.

Vad är ett objekt?

Svar: Ett objekt kan definieras som en instans av en klass som innehåller instanser av de beteenden och medlemmar som definieras i mallen. Objektet är den faktiska enheten som en användare interagerar med, medan klassen bara är en ritning för det objektet.

Ett objekt har alltså specifika egenskaper eller beteenden och tar upp minnesutrymme – till exempel en specifik bilmodell.

Vad är skillnaden mellan en klass och en struktur?

Svar: Låt oss belysa detta med hjälp av en tabell:

Klass Struktur
Typ Referenstyper Värdetyper
Minnesallokering Allokeras i heap-minne Allokeras i stackminne
Allokeringens hastighet Allokering är billigare i denna referenstyp Allokering är billigare i värdetyp än referenstyp
Funktioner Har obegränsade funktioner Har begränsade funktioner
Användning Används i stora program Används i små program
Konstruktor/Destruktor Innehåller en konstruktor och destruktor Innehåller parametriserad eller statisk konstruktor
Instansiering Använder ”new()” nyckelordet varje gång det skapar instanser Kan enkelt skapa instanser med eller utan nyckelord
Arv Kan ärva från en annan klass Får inte ärva
Datamedlemmar Datamedlemmar kan skyddas Datamedlemmar kan inte skyddas
Funktionsmedlemmar Funktionsmedlemmar kan vara abstrakta eller virtuella Funktionsmedlemmar kan inte vara abstrakta eller virtuella
Variabelreferens Två olika klassvariabler kan referera till samma objekt Varje variabel innehåller sin egen kopia

Vad är arv?

Svar: Arv är en av grundfunktionerna i OOP som gör det möjligt för en klass att ärva huvudegenskaper från en annan klass. Till exempel kan klassen ”fordon” vara en basklass, och klasserna ”bil”, ”cykel” etc. ärver egenskaper från fordonklassen.

Detta hjälper till att undvika redundant kod och minskar därmed storleken på koden. Enkelt uttryckt definieras arv som mottagandet av egenskaper från en föräldraklass till en underklass. I exemplet ovan är ”fordon” föräldraklassen och ”bil” eller ”cykel” är barnklasserna.

Genom arv kan man alltså återanvända programmeringskod från en klass i en annan klass utan att behöva skriva om koden eller lägga onödig tid på det.

Vilka olika typer av arv finns det?

Svar: Det finns olika typer av arv som används i OOP, bland annat:

  • Enkelt arv: Detta innebär att en enskild klass ärver funktioner från en enda basklass.
  • Multipel arv: Detta förekommer när en enskild klass ärver från mer än en klass.
  • Flerarvsnivå: En klass ärver från en annan klass, som i sin tur är en underklass till en annan klass.
  • Hierarkiskt arv: Innebär att en klass har flera underklasser.
  • Hybridarv: Detta är en kombination av flerarvsnivå och multipel arv.

Vilka är begränsningarna med arv?

Svar: Några av begränsningarna med arv är följande:

  • Det ökar den tid det tar att köra programmet. Detta beror på att man hoppar mellan klasser, vilket tar tid.
  • Föräldra- och barnklasserna är tätt kopplade, vilket minskar flexibiliteten.
  • Måste användas med försiktighet, annars kan det leda till felaktiga resultat.
  • En ändring i programmet kan leda till en kodändring i både förälder- och barnklasser.

Vad är abstraktion?

Svar: Abstraktion är en central del av OOP och syftar till att hantera komplexitet genom att dölja onödiga detaljer för användarna. Det tillåter användare att implementera komplex logik ovanpå abstraktionen utan att bekymra sig över den dolda komplexiteten.

Ett exempel är en kaffemaskin, där du som användare bara behöver veta hur du ska lägga till mjölk, kaffebönor och socker. Det är inte nödvändigt att förstå hur maskinen fungerar. Kaffemaskinen representerar en dold komplexitet, medan kaffebryggningen är det du bryr dig om.

Det finns två typer av abstraktion:

  • Dataabstraktion
  • Processabstraktion

Vad är en konstruktor?

Svar: En konstruktor är en specifik metod i en klass eller struktur som har samma namn som klassen. Den används för att initiera objekt och instansiera medlemsdata och metoder för att knyta objekt till klassen.

När du skapar en konstruktor är det viktigt att tänka på följande:

  • Den måste ha samma namn som klassen.
  • Den kan inte vara abstrakt, slutgiltig eller statisk.
  • Den har ingen returtyp.

Vilka olika konstruktortyper finns i C++?

Svar: Det finns huvudsakligen tre typer av konstruktorer i C++:

  • Standardkonstruktor: En konstruktor utan parametrar eller argument. Denna typ av konstruktor används för att initiera datamedlemmar med standardvärden.
  • Parameteriserad konstruktor: Den har argument eller parametrar i deklarationen och definitionen. Flera parametrar kan skickas genom den. Används för överlagring för att särskilja olika konstruktorer.
  • Kopieringskonstruktor: En medlemsfunktion som använder ett annat objekt av samma klass för att initiera ett objekt. Den kopierar data från ett objekt till ett annat.

Vad är en Destruktor?

Svar: En destruktor är en metod som automatiskt anropas när ett objekt förstörs. Den implementerar flera åtgärder:

  • Återställer heap-utrymme som allokerats under objektinitieringen.
  • Stänger databasanslutningar och filer.
  • Frigör nätverksresurser.
  • Utför andra hushållsuppgifter.

En destruktor förstör alltså de objekt som konstruktorn initierade. Det är en speciell medlemsfunktion som har samma namn som klassen, men som föregås av en (~) symbol. En destruktor kan inte överbelastas, eftersom den är en enkelriktad funktion.

Vad är Skräpinsamling (Garbage Collection, GC)?

Svar: Skräpinsamling (GC) är en mekanism för minneshantering som är inbyggd i programmeringsspråk som Java och C#. Ett GC-aktiverat språk har en skräpinsamlare som automatiskt frigör minnesutrymme som inte längre används i programmet.

Skräpinsamling ser till att programmet håller sig inom sin minneskvot. Det befriar utvecklare från att hantera minnet manuellt, vilket minimerar minnesrelaterade fel.

Vad är undantagshantering?

Svar: Undantagshantering är en metod för att svara på oväntade händelser som inträffar när ett datorprogram körs. Programmerare måste ”hantera” oönskade händelser (undantag) för att förhindra att system eller program kraschar. Utan denna metod kan undantag störa programmens funktion och leda till ineffektivitet eller risker.

Vad är ett try/catch-block?

Svar: ”Try” eller ”catch” är nyckelord som representerar undantagshantering som uppstår på grund av kodnings- eller datafel när ett program körs.

  • Ett try-block är kodblocket där undantagen kan inträffa.
  • Ett catch-block hanterar undantag som inträffar i try-blocket.

Try- och catch-satser används i många programmeringsspråk, inklusive C++, C#, Java, SQL och JavaScript. Varje try-sats motsvarar en catch-sats för att hantera exekveringen. Ytterligare punkter att notera i try/catch-satser:

  • Ett try-block följs av ett catch-block.
  • Ett try-block följs av minst ett catch-block.
  • Ett try-block kan följas av ett annat try-block och sedan ett catch-block.

Sammanfattning

OOP är ett viktigt begrepp för alla programmerare att behärska. Att ha en djup förståelse hjälper dig att programmera väl i språk som tillämpar OOP-koncept.

Om du förbereder dig för en intervju eller ett test kan de ovanstående frågorna och svaren hjälpa dig att fräscha upp dina kunskaper om OOP-koncept som klasser, objekt, inkapsling, polymorfism, arv och abstraktion med mera. På så sätt kan du känna dig trygg på intervjun och öka dina chanser att lyckas bygga din karriär.

Du kan även ta en titt på några av dessa SQL-intervjufrågor.