Mester Objektorientert Programmering: 21 Viktige Intervjufrågor & Svar

Spørsmål om objektorientert programmering (OOP) kan være nyttige for programmerere og utviklere som ønsker å styrke sin kunnskap om grunnleggende prinsipper innen programmering.

OOP er et sentralt programmeringsparadigme som fokuserer på objekter og klasser, i motsetning til prosedyrer og funksjoner. Dette paradigmet er fundamentalt i moderne programvareutvikling.

Flere programmeringsspråk benytter OOP-prinsipper, inkludert Objective-C, Java, Ada, Perl, Python og C++. Disse språkene er mye brukt i industrien.

Store teknologiselskaper rekrutterer ofte utviklere med solid kompetanse innen objektorientert design og tilhørende mønstre. Det er derfor viktig å beherske disse konseptene.

Dersom du planlegger å delta i en intervjuprosess som omhandler programmering, er det avgjørende å ha god innsikt i OOP-konsepter. Grundig forberedelse er nøkkelen til suksess.

Nedenfor ser vi nærmere på vanlige spørsmål og svar som kan være relevante i et OOP-intervju. Dette vil hjelpe deg i forberedelsene til både intervjuer og tester.

En oversikt over Objektorientert programmering (OOP)

OOP er en programmeringsmetodikk som er sentrert rundt begrepet objekter. Objekter kan betraktes som representasjoner av virkelige enheter. En klasse er malen for disse objektene, og den definerer deres egenskaper og oppførsel.

La oss illustrere dette med et eksempel. Vi kan tenke oss en bil ut fra OOP-perspektivet:

  • Objekt: En spesifikk bil. Dette kan være en hvilken som helst bilmodell, som din egen personlige bil.
  • Klasse: Bilens type, for eksempel BMW, Chevrolet, Kia eller Audi.
  • Egenskaper: Fargen på bilen, chassisnummeret, motortypen og girsystemet.
  • Oppførsel: Hvordan bilen skifter gir, hvordan motoren startes og andre relaterte handlinger.

Egenskaper kalles også for attributter eller data, mens oppførsel betegnes som prosedyrer, metoder eller funksjoner i programmeringsspråk. Disse konseptene er sentrale i OOP.

La oss nå se på noen av de mest stilte spørsmålene i OOP-intervjuer.

Hva betyr begrepet OOP?

Svar: Objektorientert programmering (OOP) er en programmeringsmetode som er basert på bruk av objekter og klasser, i stedet for prosedyrer og funksjoner. Objekter grupperes i klasser, og OOP benytter konsepter som polymorfisme, innkapsling og arv for å modellere virkelige enheter. OOP er et kraftfullt programmeringsparadigme.

I OOP bindes kode og data sammen. Objekter representerer konkrete enheter, definert av klasser som beskriver deres egenskaper og oppførsel. En klasse kan betraktes som en mal eller en brukerdefinert datatype for objekter.

OOP brukes i mange områder, inkludert programvare for design og produksjon samt applikasjonsutvikling for mobile enheter. OOP er for eksempel velegnet for utvikling av systemsimuleringsprogramvare.

Hvilke andre programmeringsparadigmer finnes i tillegg til OOP?

Svar: Programmeringsparadigmer er en måte å klassifisere programmeringsspråk på, basert på hvordan hvert språk strukturerer kode. De kan deles inn i to hovedkategorier:

  • Imperativt programmeringsparadigme: Fokus er på *hvordan* logikken skal utføres, med definert kontrollflyt. Dette inkluderer prosedyreorientert programmering, objektorientert programmering (OOP) og parallell programmering.
  • Deklarativt programmeringsparadigme: Her er fokus på *hva* programmet skal gjøre, og ikke kontrollflyten. Dette omfatter logisk programmering, funksjonell programmering og databaseprogrammering.

Hva er forskjellen mellom OOP og SOP?

Svar: La oss se på forskjellene mellom OOP (objektorientert programmering) og SOP (strukturert eller prosedyreorientert programmering) gjennom en sammenligning:

Kjennetegn Objektorientert programmering (OOP) Strukturert/Prosedyreorientert Programmering (SOP)
Struktur Basert på objekter og klasser. Basert på prosedyrer og funksjoner.
Programstruktur Gir logisk struktur, der programmer er delt inn i objekter. Programmer er delt inn i funksjoner.
Tilnærming «Bottom-up» tilnærming. «Top-down» tilnærming.
Dataskjuling Innkapsling/dataskjuling er en sentral egenskap. Dataskjuling er ikke innebygd.
Problemløsning Egnet for komplekse problemer. Egnet for enklere problemer.
Kode Gjenbruk Høy grad av gjenbrukbarhet. Støtter ikke kode gjenbruk like lett.
Fleksibilitet Mer fleksibelt design. Mindre fleksibelt.
Primært Fokus Data. Logisk struktur.

Hva er hovedtrekkene ved OOP?

Svar: Her er de viktigste egenskapene til OOP:

  • Arv
  • Innkapsling
  • Abstraksjon
  • Polymorfisme
  • Metodeoverstyring
  • Metodeoverbelastning
  • Objekter
  • Klasser
  • Konstruktører og destruktører

Arv, polymorfisme og innkapsling er de fundamentale elementene i OOP som skiller det fra ikke-OOP-språk. Disse egenskapene er essensielle for å forstå OOP fullt ut.

Hva er innkapsling?

Svar: Innkapsling er en teknikk der data og metoder som opererer på disse dataene, pakkes sammen i en «kapsel», vanligvis en klasse. Dette gjør at klassen presenterer et veldefinert grensesnitt for omverdenen, samtidig som den skjuler interne implementasjonsdetaljer. Dette gir bedre modularitet og reduserer risikoen for feil.

Innkapsling kan også defineres som:

  • Databinding: Prosessen med å binde data og tilhørende metoder i en enhet som en klasse.
  • Dataskjuling: Prosessen med å skjule unødvendig informasjon, for eksempel interne implementasjonsdetaljer eller tilgangsrestriksjoner til data.

Hva er polymorfisme?

Svar: For å forstå polymorfisme, kan vi dele ordet i to deler:

«Poly» betyr «mange»

«Morph» betyr «former»

Polymorfisme betyr dermed at et objekt kan ha ulike former, eller oppføre seg forskjellig i ulike kontekster.

I OOP refererer polymorfisme til prosessen der data, objekter, metoder eller kode kan oppføre seg annerledes i forskjellige situasjoner eller kontekster. Det finnes to typer polymorfisme i OOP:

  • Kjøretidspolymorfisme
  • Kompileringstidspolymorfisme

Med andre ord, polymorfisme gir mulighet for flere definisjoner av et enkelt grensesnitt. For eksempel kan en klasse kalt «kjøretøy» ha en metode for hastighet. Ulike kjøretøy har forskjellige hastigheter, så denne metoden må defineres ulikt i underklassene.

Hva er statisk polymorfisme?

Svar: Statisk polymorfisme, også kjent som kompileringstidspolymorfisme, oppstår når bindingen mellom et objekt og en spesifikk funksjon eller operator skjer ved kompileringstidspunktet. Dette oppnås gjennom overbelastning av operatorer eller metoder.

Her benytter metoder samme navn, men deres parametre varierer. Et objekt kan oppføre seg forskjellig avhengig av hvilken metode som kalles. Flere metoder med samme navn, men forskjellig parameterliste, implementeres i samme klasse.

Hva er dynamisk polymorfisme?

Svar: Dynamisk polymorfisme, også kjent som kjøretidspolymorfisme, oppstår når den faktiske implementeringen av en metode ikke bestemmes før programmet kjøres. Dette kan oppnås gjennom metodeoverstyring.

For eksempel, dersom vi har to klasser, «sykkel» og «Yamaha», og «Yamaha» arver fra «sykkel» og overstyrer sykkelens «run()» metode, vil den overstyrte metoden bli kalt ved kjøretid.

Hva er en klasse?

Svar: En klasse kan beskrives som en blåkopi eller mal som definerer data (medlemsvariabler) og oppførsel (metoder eller funksjoner). Når et objekt opprettes, arver det automatisk de egenskapene og metodene som er definert i klassen.

En klasse er altså en mal for objekter. Flere objekter kan opprettes fra samme klasse. Tenk på det som en arkitektonisk tegning som brukes til å bygge flere lignende hus. På samme måte lages en bilmodell før man designer og produserer flere biler basert på denne malen.

Hva er et objekt?

Svar: Et objekt er en instans av en klasse. Det inneholder den faktiske dataen og den spesifikke oppførselen som er definert i klassen. Objekter er de konkrete enhetene brukeren samhandler med, mens klassen er bare en mal for disse objektene. Objekter har attributter og utfører handlinger, for eksempel en spesifikk bilmodell.

Hva er forskjellen mellom en klasse og en struktur?

Svar: La oss se på forskjellene mellom en klasse og en struktur:

Kjennetegn Klasse Struktur
Type Referansetype. Verditype.
Minne Allokert i heap-minne. Allokert i stack-minne.
Allokering Mer ressurskrevende allokering. Billigere allokering.
Funksjoner Ubegrenset antall funksjoner. Begrensede funksjoner.
Anvendelse Brukes i store programmer. Brukes i små programmer.
Konstruktør/Destruktor Inneholder konstruktør og destruktor. Inneholder parametrisert eller statisk konstruktør.
Instansiering Bruker `new()` for å opprette instanser. Enklere instansiering, med eller uten `new`.
Arv Kan arve fra andre klasser. Kan ikke arve.
Datatilgang Medlemmer kan beskyttes med tilgangsmodifikatorer. Medlemmer kan ikke beskyttes.
Funksjoner Funksjoner kan være abstrakte eller virtuelle. Funksjoner kan ikke være abstrakte eller virtuelle.
Variabler Flere variabler kan referere til samme objekt. Hver variabel har sin egen kopi av data.

Hva er arv?

Svar: Arv er en av de sentrale egenskapene i OOP som gjør det mulig for en klasse å arve egenskapene til en annen klasse. Hvis «kjøretøy» er en klasse, kan «bil», «sykkel» og andre klasser arve fra «kjøretøy». Dette gir kode gjenbruk og reduserer redundans.

Med andre ord er arv mekanismen der en underklasse arver egenskaper fra en overordnet klasse. I eksemplet ovenfor er «kjøretøy» foreldreklassen, og «bil» og «sykkel» er underklasser.

På denne måten kan du gjenbruke kode fra en eksisterende klasse uten å måtte skrive den på nytt, noe som sparer tid og ressurser.

Hva er de forskjellige typene arv?

Svar: Det finnes flere typer arv som benyttes i OOP, inkludert:

  • Enkelarv: En klasse arver fra en enkelt basisklasse.
  • Multippel arv: En klasse arver fra flere basisklasser.
  • Multilevel arv: En klasse arver fra en annen klasse som igjen er underklasse til en annen klasse.
  • Hierarkisk arv: En klasse har flere underklasser.
  • Hybrid arv: En kombinasjon av multilevel og multippel arv.

Hva er begrensningene ved arv?

Svar: Her er noen av begrensningene ved arv:

  • Kan øke kompleksiteten og tiden det tar å utføre programmet, da det krever navigasjon mellom ulike klasser.
  • Kan føre til tett kobling mellom foreldre- og barneklasser, noe som reduserer fleksibiliteten.
  • Krever nøye planlegging og implementering for å unngå inkonsekvens eller feil.
  • En endring i en foreldreklasse kan medføre endringer i barneklassene.

Hva er abstraksjon?

Svar: Abstraksjon er en viktig del av OOP, som fokuserer på å håndtere kompleksitet ved å skjule unødvendige detaljer fra brukeren. Abstraksjon lar brukere implementere kompleks logikk uten å måtte bekymre seg for den underliggende implementasjonen.

For eksempel, når du bruker en kaffemaskin, er det relevant hvor mye melk, kaffe og sukker du ønsker. Selve mekanikken bak maskinen er ikke nødvendig for deg som bruker. Kaffemaskinen abstraherer den interne kompleksiteten, og lar deg fokusere på den enkle prosessen med å lage kaffe.

Det finnes to typer abstraksjon:

  • Dataabstraksjon: Fokuserer på de nødvendige dataene.
  • Prosessabstraksjon: Fokuserer på de nødvendige prosedyrene.

Hva er en konstruktør?

Svar: En konstruktør er en spesiell metode i en klasse eller struktur som har samme navn som klassen. Den brukes til å initialisere objekter og tildele dem verdier når de opprettes.

Når du oppretter en konstruktør er det viktig å huske følgende:

  • Konstruktørens navn må være det samme som klassenavnet.
  • Den kan ikke være abstrakt, endelig eller statisk.
  • Den har ingen returverdi.

Hva er de ulike typene konstruktører i C++?

Svar: I C++ finnes det hovedsakelig tre typer konstruktører:

  • Standardkonstruktør: En konstruktør uten parametere. Den brukes til å initialisere data i klassen med forhåndsdefinerte verdier.
  • Parametrisert konstruktør: En konstruktør som tar inn parametere. Dette gir mulighet for overbelastning og forskjellige konstruktører for ulike behov.
  • Kopikonstruktør: En konstruktør som brukes til å opprette et objekt som er en kopi av et eksisterende objekt av samme klasse.

Hva er en destruktor?

Svar: En destruktor er en metode som kalles automatisk når et objekt ødelegges. Destruktoren sørger for at ressurser som er allokert til objektet frigjøres, slik som:

  • Frigjøring av allokert minne.
  • Lukking av databaseforbindelser og filer.
  • Frigjøring av nettverksressurser og ressurslåser.
  • Utføre andre oppryddingsoppgaver.

Med andre ord, destruktoren utfører opprydning etter objekter som er initialisert av konstruktøren. En destruktor er en spesialmetode som har samme navn som klassen, men med en tilde (~) foran. En destruktor kan ikke overbelastes.

Hva er Garbage Collection (GC)?

Svar: Garbage Collection (GC) er en automatisk minnehåndteringsteknikk som er innebygd i noen programmeringsspråk, som Java og C#. GC frigjør automatisk minne som ikke lenger er i bruk av et program.

GC sikrer at programmet opererer innenfor minnekvoten. Dette fjerner behovet for manuell minnehåndtering fra utviklerens side, og reduserer risikoen for minnerelaterte feil.

Hva er unntakshåndtering?

Svar: Unntakshåndtering er en mekanisme for å reagere på uventede hendelser som kan oppstå mens et dataprogram kjører. Programmerere må «håndtere» disse hendelsene (unntak) for å hindre at et program krasjer. Uten unntakshåndtering kan feil avbryte normal drift og føre til ineffektivitet eller risiko.

Hva er en try/catch-blokk?

Svar: Try/catch-blokker er nøkkelord som brukes for å håndtere unntak som oppstår under kjøring av et program, forårsaket av kode eller datafeil.

  • En try-blokk er en kodeblokk der unntak kan oppstå.
  • En catch-blokk fanger opp unntak som oppstår i tilhørende try-blokk.

Try/catch-setninger brukes i mange programmeringsspråk, inkludert C++, C#, Java, SQL og JavaScript. Hver try-setning må ha minst én tilhørende catch-setning. Det er også viktig å huske at:

  • En try-blokk må følges av en catch-blokk.
  • En try-blokk kan følges av flere catch-blokker.
  • Try/catch-blokker kan være nestet.

Konklusjon

OOP er et fundamentalt konsept for alle programmerere. Forståelse av disse prinsippene er viktig for å kunne programmere effektivt med språk som bruker OOP.

Spørsmålene og svarene ovenfor gir en god oversikt over viktige OOP-konsepter som klasser, objekter, innkapsling, polymorfisme, arv og abstraksjon. God forberedelse er nøkkelen til å lykkes i tekniske intervjuer og bygge en vellykket karriere.

Du kan også undersøke noen relaterte SQL intervjuspørsmål. Dette kan også være relevant for din utvikling.