OOP (objektorienterad programmering) fick sin början på 1980-talet, precis som fallskärmsbyxor och Pac-Man. Men till skillnad från trendigt mode och videospelskaraktärer är denna programmeringsmodell fortfarande stark efter dessa många år.
OOP har blivit en grundläggande del av programvaruutvecklingen. Tack vare att språk som Java och C++ är allestädes närvarande kan man inte utveckla programvara för mobiler om man inte förstår det objektorienterade tillvägagångssättet. Samma sak gäller för seriös webbutveckling, med tanke på populariteten av OOP-språk som Python, PHP och Ruby.
Att få huvudet runt idén om objektorienterad programmering kan vara en utmaning för vissa IT-proffs. Du kanske undrar varför du överhuvudtaget behöver objekt när du kan använda den uppifrån-och-ned-strategi som traditionell strukturerad programmering i språk som Visual Basic innebär.
Om du har skrivit den här typen av programvara är du förmodligen van vid att dela upp stora problem i delproblem och lösa dem i separata kodenheter. Eller så har du erfarenhet av funktionell programmering, som behandlar kodelement som exakta matematiska funktioner och hindrar dem från att påverka andra element, dvs. inga bieffekter.
Fått tag på OOP, dock, och du kommer att se att det är ett helt nytt sätt att lösa problem. Det grundläggande konceptet är att man i stället för att skriva ett program skapar en klass, som är en slags mall som innehåller variabler och funktioner. Objekt är självständiga instanser av den klassen, och du kan få dem att interagera på roliga och spännande sätt.
Fördelarna med objektorienterad programmering ligger i denna typ av inkapsling. Här är en detaljerad titt på några av OOP:s främsta fördelar:
Modularitet för enklare felsökning
Något har gått fel och du har ingen aning om var du ska leta. Är problemet i Widget-filen eller är det WhaleFlumper? Måste du gå igenom den där ”sewage.c”-filen? Hoppas du kommenterat din kod!
När du arbetar med objektorienterade programmeringsspråk vet du exakt var du ska leta. ”Åh, bilobjektet gick sönder? Problemet måste finnas i klassen Car!” Du behöver inte rota i något annat.
Det är det fina med inkapsling. Objekten är fristående, och varje del av funktionaliteten gör sin egen sak och låter de andra delarna vara ifred. Dessutom gör denna modalitet det möjligt för ett IT-team att arbeta med flera objekt samtidigt samtidigt som risken för att en person duplicerar någon annans funktionalitet minimeras.
Vi kan hjälpa dig att hitta ditt nästa programmeringsjobb:
Nyttjandet av kod genom arv
Antag att utöver ditt Car-objekt behöver en kollega ett RaceCar-objekt, och en annan behöver ett Limousine-objekt. Alla bygger sina objekt separat men upptäcker gemensamma drag mellan dem. I själva verket är varje objekt egentligen bara en annan typ av bil. Det är här som arvstekniken sparar tid: Skapa en generisk klass (Car) och definiera sedan de underklasser (RaceCar och Limousine) som skall ärva den generiska klassens egenskaper.
Självklart har Limousine och RaceCar fortfarande sina unika attribut och funktioner. Om RaceCar-objektet behöver en metod för att ”fireAfterBurners” och Limousine-objektet behöver en Chauffeur, kan varje klass implementera separata funktioner bara för sig själv. Men eftersom båda klasserna ärver viktiga aspekter från Car-klassen, till exempel metoderna ”drive” eller ”fillUpGas”, kan dina ärftliga klasser helt enkelt återanvända befintlig kod i stället för att skriva dessa funktioner på nytt.
Hur blir det om du vill göra en ändring i alla Car-objekt, oavsett typ? Detta är en annan fördel med OO-metoden. Gör helt enkelt en ändring i din Car-klass och alla Car-objekt kommer helt enkelt att ärva den nya koden.
Flexibilitet genom polymorfism
Om du bygger vidare på det här exemplet behöver du nu bara några drivrutiner, eller funktioner, som ”driveCar”, ”driveRaceCar” och ”DriveLimousine”. RaceCarDrivers delar vissa egenskaper med LimousineDrivers, men andra saker, som RaceHelmets och BeverageSponsorships, är unika.
Det är här som den objektorienterade programmeringens fina polymorfism kommer in i bilden. Eftersom en enskild funktion kan ändra form för att anpassa sig till den klass den ingår i, kan du skapa en funktion i den överordnade klassen Car som heter ”drive” – inte ”driveCar” eller ”driveRaceCar”, utan bara ”drive”. Denna funktion skulle fungera med RaceCarDriver, LimousineDriver osv. Du skulle till och med kunna ha ”raceCar.drive(myRaceCarDriver)” eller ”limo.drive(myChauffeur).”
Effektiv problemlösning
Ett språk som C har ett fantastiskt arv i programmeringshistorien, men att skriva mjukvara i ett toppstyrt språk är som att spela Jenga med vantar på. Ju mer komplext det blir, desto större är risken att det kollapsar. Samtidigt kan det vara en pina att skriva ett program i funktionell stil i ett språk som Haskell eller ML.
Objektsorienterad programmering är ofta det mest naturliga och pragmatiska tillvägagångssättet, när man väl får grepp om det. OOP-språken gör det möjligt för dig att dela upp din programvara i små problem som du sedan kan lösa – ett objekt i taget.
Detta betyder inte att OOP är det enda sanna sättet. Fördelarna med objektorienterad programmering är dock många. När du behöver lösa komplexa programmeringsutmaningar och vill lägga till kodverktyg till dina färdigheter är OOP din vän – och har mycket större livslängd och användbarhet än Pac-Man eller fallskärmsbyxor.