Hoppa till innehållet
Hem

Programmeringsparadigm: definition och översikt (imperativ, deklarativ)

Lär dig programmeringsparadigm: klar och praktisk översikt av imperativ vs deklarativ, skillnader, exempel och när du bör välja vilket paradigm.

Programmeringsparadigm är ett sätt att gruppera programmeringsspråk efter vad de gör. Språk kan ha mer än ett paradigm.

Vissa paradigm tittar på hur koden körs, t.ex. om sidoeffekter tillåts eller om saker måste göras i en viss ordning. Andra paradigm tittar på hur koden grupperas, t.ex. genom att dela upp koden i en eller två delar (eller i stället många små delar). Vissa andra paradigm tittar på den ordning och de delar som gör att programmet blir som det är.

Det finns två huvudgrupper av paradigm, imperativ och deklarativ. Ett språk kan vara båda samtidigt.


 

Vad menas med "paradigm"?

Ett programmeringsparadigm är en grundläggande stil eller modell för hur man uttrycker beräkningar i kod. Paradigmet påverkar hur man tänker när man designar program: vilka byggstenar man använder (funktioner, objekt, regler, dataflöden), hur man organiserar tillstånd och förändring, och vilka verktyg som är naturliga att använda för att lösa ett problem.

Imperativa paradigm

Det imperativa paradigmet handlar om att beskriva steg-för-steg hur något ska göras. Programmet består av instruktioner som ändrar tillstånd över tid. Typiska egenskaper:

  • Uttrycker kontrollflöde: sekvenser, slingor, villkor
  • Tillstånd och sidoeffekter: variabler uppdateras; sidoeffekter är vanliga
  • Nära maskinnivån: lätt att optimera för prestanda

Vanliga imperativa underkategorier:

  • Procedural programmering: delar upp program i procedurer/funktioner (t.ex. C).
  • Objektorienterad programmering (OOP): kapslar data och metoder i objekt (t.ex. Java, C#).

Fördelar: tydlig kontroll över exekvering och tillstånd, ofta bra prestanda och enkel kartläggning till hårdvara. Nackdelar: mer risk för buggar genom delat tillstånd, svårare att resonera om parallell exekvering.

Deklarativa paradigm

Deklarativa paradigm fokuserar på vad som ska uppnås, inte exakt hur. Man beskriver önskat resultat eller relationer, och låter språket eller körmiljön bestämma exekveringsstrategin. Typiska egenskaper:

  • Beskriver mål eller regler: uttryck, förfrågningar eller logiska satser
  • Minimerar sidoeffekter: särskilt i funktionell programmering
  • Högre abstraktionsnivå: användaren behöver inte hantera kontrollflödet direkt

Exempel på deklarativa underparadigm:

  • Funktionell programmering: bygger på rena funktioner, immutabilitet och uttryck (t.ex. Haskell, delvis i Scala).
  • Logikprogrammering: uttrycker problem som logiska satser och låter en inferensmotor lösa dem (t.ex. Prolog).
  • Databasspråk och domänspecifika deklarativa språk: SQL är deklarativt — man beskriver vilka data man vill ha, inte hur sökningen sker. Även HTML/CSS är deklarativa för struktur och presentation.

Fördelar: enklare att resonera om kod, bättre möjligheter till parallellisering och formell analys; ofta kortare och mer uttrycksfull kod. Nackdelar: ibland mindre kontroll över prestanda eller minnesanvändning, och brantare inlärningskurva för vissa koncept.

Andra paradigm och kombinationer

Många moderna språk är multiparadigm och låter dig kombinera tekniker, t.ex. objektorienterat med funktionella inslag. Andra paradigm att känna till:

  • Reaktiv/reaktionsbaserad programmering: hanterar dataflöden och asynkrona händelser (t.ex. RxJS).
  • Dataflödesprogrammering: modellerar beräkningar som flöden av data genom noder.
  • Event-driven: bygger logik kring händelser och callbacks (vanligt i UI och serverprogram).
  • Konfigurations- och deklarativa infrastrukturverktyg: såsom Terraform eller Kubernetes YAML, där man beskriver önskat tillstånd.

Sidoeffekter, ordning och komposition

Frågor om sidoeffekter, ordning och delar är centrala när man väljer paradigm. I imperativa språk är ordningen viktig: samma instruktioner i annan ordning kan ge annat resultat. I rena funktionella språk minimeras sidoeffekter och ordningen spelar mindre roll, vilket underlättar parallell körning och testning. Komposition — att bygga större system av mindre delar — ser olika ut: i OOP sker det ofta via objekt och gränssnitt, i funktionell programmering via funktioner och funktionskomposition.

När ska man välja vad?

  • Prestanda- och kontrollkrav: imperativt (och proceduralt) passar när du behöver fin kontroll över resurser.
  • Komplexitet och underhåll: deklarativa stilar kan göra det enklare att förstå och underhålla komplex logik.
  • Parallellism och skalbarhet: funktionell och andra deklarativa tekniker underlättar säkrare parallell exekvering.
  • Domänspecifika behov: databashantering (SQL), logikproblem (Prolog) eller UI (reaktiva modeller) kan bestämma paradigm.
  • Teamets kunskap och ekosystem: välj verktyg och paradigm som passar teamets erfarenhet och tillgängliga bibliotek.

Sammanfattning

Programmeringsparadigm är olika sätt att tänka och uttrycka lösningar i kod. De två stora grupperna är imperativ (beskriver hur något görs) och deklarativ (beskriver vad som ska uppnås). Inom dessa finns många varianter — procedur, objektorienterat, funktionellt, logik, reaktivt med flera — och många moderna språk kombinerar flera paradigm. Valet av paradigm påverkar kodens läsbarhet, säkerhet, prestanda och hur enkelt det är att parallellisera och testa programmet.

Imperativ programmering

I imperativa program ger programmerarna datorn en uppsättning ordnade steg som måste utföras för att göra något. Om någon vill att datorn ska rita ett kattansikte kan han eller hon ge instruktioner som "rita en cirkel här, rita två mindre cirklar där, rita två trianglar ovanpå" och så vidare. Imperativa program har ibland många bieffekter.

Det finns två stora imperativa paradigm, och ofta har ett språk båda:

  • Strukturerad - Datorn får anvisningar som alltid är i en viss ordning. Steg som "gå tillbaka till steg 3" (så kallade goto-anvisningar) är inte tillåtna.
    • Procedurell - Programmet låter programmeraren ge en lista med order ett namn, vilket gör dessa order till en "procedur" som kan användas senare. De flesta strukturerade språk är också procedurella.
  • Objektorienterad - Idéer förklaras för datorn med hjälp av objekt, kodbitar som har en uppsättning order som de kan få och viss information om dem.

 

Deklarativ programmering

I deklarativa paradigmer talar programmeraren om för datorn vad den ska göra i stället för hur den ska göra det. Om de vill att datorn ska rita ett kattansikte kan de ge instruktioner som "Rita ett ansikte, rita två ögon, två öron och en mun".

De mest kända deklarativa paradigmen är:

  • Funktionell - Det mesta av arbetet utförs av funktioner utan några bieffekter.
  • Logik - En uppsättning fakta anges och sedan ställs en eller flera "frågor".
  • Händelsestyrd - Koddelar ställs in för att köras när vissa saker händer (t.ex. när datorn slås på).

 

Andra paradigmer

Vissa paradigmer finns i både imperativa och deklarativa språk. Dessa paradigm finns vanligtvis tillsammans med något av ovanstående paradigm i stället för att vara fristående.

  • Parallell: Flera kodstycken körs samtidigt.
  • Meta: Särskilda saker i språket låter programmeraren ändra hur språket självt agerar.

 

Översikt

Programmeringsspråk grupperas efter paradigm på samma sätt som maskiner kan grupperas efter vad de används till.

Några få språk passar in i ett enda huvudparadigm, t.ex:

  • Smalltalk (objektorienterad)
  • Assembly (tvingande, men inte strukturerad eller objektorienterad).
  • Haskell (funktionell)
  • Prolog (logik)

De flesta språk har dock mer än ett paradigm. Några av de som utmärker sig genom att ha mer än ett paradigm är:

  • Scala (objektorienterad, funktionell, parallell)
  • Visual Basic (händelsestyrd, objektorienterad)
  • Common Lisp (procedurell, funktionell, objektorienterad, meta)
  • Schema (funktionellt, procedurellt, meta)
  • Perl (funktionell, procedurell, meta, objektorienterad, händelsestyrd)
  • Python (funktionell, objektorienterad, procedurell)
  • Ruby (funktionell, objektorienterad, procedurell)
  • Wolfram Language (funktionellt, procedurellt, i allmänhet deklarativt)
  • Oz (logik, funktionell, imperativ, objektorienterad)
  • F# (funktionell, imperativ, objektorienterad, meta)

Det är inte alltid bra att ha fler paradigmer. Ett tillfälle då det kan vara bra att ha färre paradigm är när det finns ett språk som endast är funktionellt. En funktion i ett sådant språk gör ibland mindre arbete (t.ex. går den bara igenom de delar av en grupp av saker som den faktiskt behöver) än vad den skulle ha behövt göra om språket också var procedurellt.

Många programmeringsparadigm är lika kända för de saker de inte låter folk göra som för de saker de låter folk göra. Ett exempel på detta är funktionella språk. När ett funktionellt språk endast eller huvudsakligen är funktionellt tillåter det vanligtvis inga sidoeffekter. Det skiljer sig från vanliga imperativa språk eftersom det inte tillåter programmerare att använda "goto-satser" (uttalanden som säger åt programmet att gå till ett tidigare steg). På grund av detta och andra orsaker anser människor ibland att nya paradigm inte tillåter tillräckligt mycket. Ibland är det dock okej att datorn inte låter människor göra saker: den kan hjälpa människor att undvika problem med sin kod och låta datorn göra gissningar så att den kan köra koden snabbare, eller till och med kontrollera koden för problem innan den körs!



 

Problem med paradigmer

Vissa personer som studerar programmeringsspråk tycker inte om att paradigm används för att gruppera programmeringsspråk, till exempel Harper och Krishnamurthi. Dessa personer menar att många programmeringsspråk inte bara kan grupperas i paradigm eftersom språken lånar saker och idéer från många paradigm.


 

Historia

Nya paradigmer har skapats med tiden, och människor har antingen påpekat dem då eller när de ser tillbaka på dem. Ett av de första paradigmen som erkändes som ett nytt sätt att programmera var strukturerad programmering från 1960-talet. Idén om ett "programmeringsparadigm" är från 1978, om inte tidigare, då Robert W. Floyd använde den när han undervisade. Ordet "paradigm" på det sätt som Robert menade det användes först av Thomas Kuhn i hans bok The Structure of Scientific Revolutions (1962).

Maskinkod

Den lägsta nivån (närmast hur datorn vill förstå saker och ting) och det äldsta programmeringsparadigmet är maskinkod, ett imperativt paradigm. Riktlinjerna i maskinkod är bara en uppsättning siffror i en viss ordning. Assembleringsspråk är lite mindre låg nivå (och lite mindre gammalt). I assemblerspråk ges anvisningarna för datorn mnemonik (namn som är lättare att komma ihåg), och minnesadresser (anvisningar för att hitta en information i datorn) kan ges namn. Dessa kallas ibland för första och andra generationens språk.

På 1960-talet förbättrades assemblerspråken genom att lägga till nya saker som bibliotek COPY, makron (bitar av "specialkod" som omvandlades till normal kod innan programmet började köras), körprocedurer (uppsättningar av anvisningar som ges ett namn och sparas för senare) och variabler (objekt som ges namn och sparas för senare) från utanför programmet. Detta gjorde att man kunde använda viss kod i mer än ett projekt och inte behöva oroa sig för hårdvaruspecifika problem (problem som bara uppstår på en viss typ av dator) tack vare kommandon (namn för anvisningar) som READ/WRITE/GET/PUT.

Assembly användes, och används ibland fortfarande, i system där det är viktigt att koden är snabb, och den används också mycket i inbyggda system eftersom den ger användaren exakt kontroll över vad maskinen gör.

Procedurella språk

I slutet av 1960-talet började folk uppfinnas procedurella språk. Dessa tredje generationens språk (de första av vad vi nu kallar högnivåspråk) hade ord som hade att göra med vad de försökte lösa. Till exempel,

  • COBOL (COmmon Business Oriented Language) - använder ord som file, move och copy.
  • FORmula TRANslation (FORTRAN) - använder matematiska ord och symboler (former som används vid skrivning och maskinskrivning). Det utvecklades främst för vetenskap och teknik.
  • ALGOrithmic Language (ALGOL) - används för att skriva algoritmer (uppsättningar steg som talar om för datorn vad den ska göra). Det använder matematiska ord och symboler, precis som FORTRAN.
  • Programming Language One (PL/I) - skulle vara användbart för alla.
  • Beginners All purpose Symbolic Instruction Code (BASIC) - gjord för att hjälpa nybörjare att programmera.
  • C - ett programmeringsspråk som kan göra många saker. Dennis Ritchie arbetade med det mellan 1969 och 1973 på AT&T Bell Labs.

Objektorienterad programmering

Efter att många människor hade börjat använda procedurella språk uppfann man objektorienterade programmeringsspråk. I dessa språk samlas data och dess "metoder" (sätt att hantera data) i ett "objekt". Vissa programmerare, som Richard Stallman, håller inte med om att objektorienterade språk är bättre än procedurspråk för att förklara idéer för en dator.

Eftersom objektorienterad programmering är ett paradigm, inte ett språk, har man skapat objektorienterade monteringsspråk som HLA (High Level Assembly).

Deklarativa paradigmer

Samtidigt började vissa människor skapa deklarativa programmeringsspråk. Ett språk som är välkänt för att vara deklarativt är SQL (ett språk för att lägga till och ta bort saker från tabeller).


 

Relaterade sidor

  • Tankesätt
  • Typ av system
  • Turing fullständighet
 

Frågor och svar

F: Vad är ett programmeringsparadigm?

S: Ett programmeringsparadigm är ett sätt att gruppera programmeringsspråk utifrån hur de fungerar.

F: Vilka är de två huvudgrupperna av paradigm?

S: De två huvudgrupperna av paradigm är imperativ och deklarativ.

F: Hur skiljer sig imperativa och deklarativa paradigm från varandra?

S: Imperativa paradigm tittar på hur koden körs, t.ex. genom att tillåta sidoeffekter eller genom att saker måste göras i en viss ordning, medan deklarativa paradigm tittar på hur koden grupperas, t.ex. genom att koden delas upp i en eller två delar (eller i stället många små delar).

F: Kan ett språk vara både ett imperativt och ett deklarativt paradigm?

S: Ja, ett språk kan vara både ett imperativt och ett deklarativt paradigm samtidigt.

F: Hur grupperar ett programmeringsparadigm språk?

S: Programmeringsparadigmmen grupperar språk efter vad de gör. De tittar på hur koden körs, hur den är grupperad och vilken ordning och vilka delar som utgör programmet.

F: Finns det andra typer av programmeringsparadigm än imperativ och deklarativ?

S: Ja, det finns andra typer av programmeringsparadigm än imperativ och deklarativ. Vissa tittar t.ex. på hur koden körs (t.ex. genom att tillåta sidoeffekter), medan andra tittar på hur koden grupperas (t.ex. genom att sätta koden i en eller två delar).

F: Tillhör varje språk endast en typ av programmeringsparadigm?

S: Nej, alla språk tillhör inte bara en typ av programmeringsparadigm; vissa språk kan tillhöra mer än en typ av paradigm.

Relaterade artiklar

Författare

AlegsaOnline.com Programmeringsparadigm: definition och översikt (imperativ, deklarativ)

URL: https://sv.alegsaonline.com/art/79379

Dela

Källor