Som faldskærmsbukser og Pac-Man fik OOP (objektorienteret programmering) sin begyndelse i 1980’erne. Men i modsætning til trendy mode og videospilkarakterer er denne programmeringsmodel stadig i høj kurs efter disse mange år.
OOP er blevet en grundlæggende del af softwareudvikling. Takket være udbredelsen af sprog som Java og C++ kan man ikke udvikle software til mobile enheder, medmindre man forstår den objektorienterede tilgang. Det samme gælder for seriøs webudvikling på grund af populariteten af OOP-sprog som Python, PHP og Ruby.
Det kan være en udfordring for nogle it-professionelle at få styr på idéen om objektorienteret programmering. Du undrer dig måske over, hvorfor du overhovedet har brug for objekter, når du kan bruge top-down-tilgangen i traditionel struktureret programmering i sprog som Visual Basic.
Hvis du har skrevet denne form for software, er du sikkert vant til at opdele store problemer i delproblemer og løse dem i separate kodenheder. Eller du har måske erfaring med funktionel programmering, som behandler kodeelementer som præcise matematiske funktioner og forhindrer dem i at påvirke andre elementer, dvs. ingen sideeffekter.
Har du imidlertid fået styr på OOP, vil du se, at det er en helt ny måde at løse problemer på. Det grundlæggende koncept er, at man i stedet for at skrive et program opretter en klasse, som er en slags skabelon, der indeholder variabler og funktioner. Objekter er selvstændige instanser af denne klasse, og du kan få dem til at interagere på sjove og spændende måder.
Fordelene ved objektorienteret programmering ligger i denne form for indkapsling. Her er et detaljeret kig på nogle af OOP’s største fordele:
Modularitet for nemmere fejlfinding
Der er gået noget galt, og du aner ikke, hvor du skal lede. Er problemet i Widget-filen, eller er det WhaleFlumper? Skal du trille dig igennem den “sewage.c”-fil? Jeg håber, du har kommenteret din kode!
Når du arbejder med objektorienterede programmeringssprog, ved du præcis, hvor du skal lede. “Åh, bilobjektet er gået i stykker? Problemet må ligge i Car-klassen!” Du behøver ikke at rode dig igennem noget andet.
Det er det smukke ved indkapsling. Objekter er selvstændige, og hver del af funktionaliteten gør sin egen ting og lader de andre dele være i fred. Desuden giver denne modalitet et it-team mulighed for at arbejde på flere objekter samtidig og samtidig minimere risikoen for, at en person duplikerer en andens funktionalitet.
Vi kan hjælpe dig med at finde dit næste programmeringsjob:
genbrug af kode gennem arv
Sæt, at en kollega ud over dit Car-objekt har brug for et RaceCar-objekt, og en anden kollega har brug for et Limousine-objekt. Alle bygger deres objekter hver for sig, men opdager fællestræk mellem dem. Faktisk er hvert objekt i virkeligheden bare en anden slags Bil. Det er her, arveteknikken sparer tid: Opret én generisk klasse (Bil), og definér derefter de underklasser (RaceCar og Limousine), der skal arve den generiske klasses egenskaber.
Limousine og RaceCar har naturligvis stadig deres unikke egenskaber og funktioner. Hvis RaceCar-objektet har brug for en metode til at “fireAfterBurners” og Limousine-objektet har brug for en Chauffeur, kunne hver klasse implementere separate funktioner kun for sig selv. Men da begge klasser arver vigtige aspekter fra Car-klassen, f.eks. metoderne “drive” eller “fillUpGas”, kan dine arvelige klasser blot genbruge eksisterende kode i stedet for at skrive disse funktioner forfra.
Hvad sker der, hvis du vil foretage en ændring i alle Car-objekter, uanset type? Dette er en anden fordel ved OO-tilgangen. Du skal blot foretage en ændring i din Car-klasse, og alle Car-objekter vil simpelthen arve den nye kode.
Fleksibilitet gennem polymorfisme
I forlængelse af dette eksempel har du nu kun brug for nogle få drivere, eller funktioner, som “driveCar”, “driveRaceCar” og “DriveLimousine”. RaceCarDrivere deler nogle træk med LimousineDrivere, men andre ting, som RaceHelmets og BeverageSponsorships, er unikke.
Det er her, objektorienteret programmerings søde polymorfisme kommer i spil. Fordi en enkelt funktion kan ændre form for at tilpasse sig til den klasse, den befinder sig i, kan du oprette en funktion i den overordnede Car-klasse, der hedder “drive” – ikke “driveCar” eller “driveRaceCar”, men bare “drive”. Denne ene funktion ville fungere med RaceCarDriver, LimousineDriver osv. Faktisk kunne man endda have “raceCar.drive(myRaceCarDriver)” eller “limo.drive(myChauffeur).”
Effektiv problemløsning
Et sprog som C har en fantastisk arv i programmeringshistorien, men at skrive software i et top-down-sprog er som at spille Jenga, mens man har vanter på. Jo mere komplekst det bliver, jo større er risikoen for, at det kollapser. I mellemtiden kan det være en pligt at skrive et program i funktionel stil i et sprog som Haskell eller ML.
Objektorienteret programmering er ofte den mest naturlige og pragmatiske tilgang, når man først får styr på det. OOP-sprog giver dig mulighed for at opdele din software i mundrette problemer, som du derefter kan løse – et objekt ad gangen.
Det betyder ikke, at OOP er den eneste rigtige måde. Men fordelene ved objektorienteret programmering er mange. Når du skal løse komplekse programmeringsudfordringer og ønsker at tilføje kodeværktøjer til dit færdighedssæt, er OOP din ven – og har en langt større levetid og anvendelighed end Pac-Man eller faldskærmsbukser.