Kodåteranvändning ( engelska code reuse ) är en metodik för att designa dator- och andra system, som består i att systemet ( datorprogram , programmodul) helt eller delvis ska vara sammansatt av delar, tidigare skrivna komponenter och/eller delar av en annan system, och dessa komponenter måste användas mer än en gång (om inte inom samma projekt, så åtminstone olika). Återanvändning är den huvudsakliga metodiken som används för att minska arbetskostnaderna vid utveckling av komplexa system.
Det vanligaste fallet med kodåteranvändning är programvarubibliotek . Biblioteken tillhandahåller en gemensam, ganska universell funktionalitet som täcker ett utvalt ämnesområde. Exempel: ett bibliotek med funktioner för att arbeta med komplexa tal, ett bibliotek med funktioner för att arbeta med 3D-grafik, ett bibliotek för att använda TCP/IP-protokollet, ett bibliotek för att arbeta med databaser. Utvecklare av ett nytt program kan använda befintliga bibliotek för att lösa sina problem och inte "uppfinna hjulet på nytt".
Programmerare tenderar att designa sina system på ett sådant sätt att de är så modulära som möjligt. Som abstraktioner, på grundval av vilka det är möjligt att bygga systemets modularitet, kan funktioner , coroutine , klass , protokoll fungera . Funktionsbiblioteket är ett bra exempel på en abstraktion som är användbar för att implementera programmodularitet och följa en återanvändbar metodik. Ett viktigt steg mot att uppnå maximal modularitet var principen om hierarkisk konstruktion av namnutrymmet .
Ett exempel på en framgångsrik implementering av modularitet och principen för återanvändning är Unix -skalverktyg och standard Java -klasser placerade i en namnrymdshierarki.
Mallar (se C++ Standard Template Library STL ) för funktioner och klasser var ett viktigt steg i utvecklingen av återanvändningsmetodik i den objektorienterade programmeringsindustrin .
Systemets hierarkiska modularitet gör det möjligt att implementera effektiva utvecklingshanteringsmetoder baserade på konstruktionen av kontrollhierarkier som motsvarar hierarkin av moduler i själva systemet.
Ibland är återanvändning av kod helt enkelt att kopiera en del kod från ett befintligt program till ett annat ( kopiera-klistra in ) . Detta är en av de mest lågnivåmetoder för återanvändning. Men det sker också, speciellt när det gäller kodåteranvändning "på ett litet sätt" ("återanvändning på ett litet sätt").
Detta tillvägagångssätt rekommenderas vanligtvis inte för användning, istället formateras ett repeterande programfragment som en subrutin eller makro med en uppsättning parametrar. Huvudargumentet för att använda subrutiner istället för att kopiera koden är att om det finns ett fel måste det fixas en gång i subrutinen, annars måste i allmänhet flera identiska kodfragment som finns på olika platser i programmet rättas till. Vid kopiering av kod finns det dessutom oftast behov av att ändra variabelnamn, vilket också ofta leder till mekaniska fel. Vid användning av underprogram kan sådan byte av namn undvikas genom att använda lokala variabler.
Metoden för kodåteranvändning är en viktig komponent i implementeringen av principen om metasystemövergång i utvecklingen av mjukvaruindustrin. Genomförandet av denna princip gör det möjligt för utvecklare att arbeta med koncept på hög nivå (visa en bild, ta bort en tabell från en databas, hitta alla rötter till en ekvation, konvertera en fil, etc.), snarare än lågnivå-koncept (färg). en pixel röd, återställ registret, lägg till två siffror, läs ett tecken från en fil, etc.).
Tänk på fördelarna och nackdelarna med hjälp av exemplet med funktionsbibliotek.
Att använda färdiga bibliotek har ett antal fördelar. För det första befriar utvecklaren av ett nytt system oron för implementeringen av den funktionalitet som är inbäddad i detta bibliotek. Hela cykeln för biblioteksutveckling utförs av utvecklaren av detta bibliotek. Han brukar ta ansvar för att underhålla biblioteket: fixa buggar, utveckla och förbättra arbetet, testa . Metoden för återanvändning av kod är mekanismen som låter utvecklare "stå på jättarnas axlar" [1] och snabbt bygga nya komplexa system från redan felsökta komponenter. Den andra fördelen kommer från själva upprepningen av att använda koden, vilket leder till en betydande minskning av storleken på det slutliga programmet, och i händelse av otillräcklig medieprestanda, till hastighet.
Förutom ett fåtal, men mycket viktiga fördelar, har metoden för återanvändning av kod ett antal nackdelar. Att ansluta tredjepartsbibliotek till projektet leder automatiskt till behovet av att kontrollera kompatibiliteten för versionerna av komponenterna i systemet som skapas och versionerna av de bibliotek som används. Det mest typiska exemplet på ett sådant fel anses vara olyckan med Ariane-5-raketen , orsakad av användningen av en mjukvarumodul utvecklad för Ariane-4- raketen [2] .
Det är också viktigt att notera att många bibliotek är kommersiella och kräver pengar (med utvecklingen av den fria mjukvarurörelsen blir detta gradvis mindre relevant). Dessutom är bibliotek ofta inte tillräckligt universella och implementerar inte den funktionalitet som krävs av systemet som skapas, eller omvänt är de för universella och som ett resultat ineffektiva, obekväma eller innehåller mycket redundant ( för ett givet projekt) funktionalitet. Det är möjligt, om licensen för det omdistribuerbara biblioteket tillåter, att använda dess källkoder och modifiera dem i enlighet med behovet. Men efter det flyttas ansvaret för att stödja bibliotekets funktionalitet över på axlarna av utvecklaren av det nya systemet. Användningen av överdriven modularitet kan också leda till en minskning av programexekveringshastigheten, när exekveringshastigheten som är inneboende i modulen inte kan täcka kostnaderna för åtkomst till denna modul.