Strukturerad programmering är ett programmeringsparadigm som strävar efter att koden ska ha avskilda kodblock. Ofta gör man detta genom att undvika explicita GOTO-satser. Istället använder man endast de strukturerade kontrollflödes-mekanismerna som det använda programspråket erbjuder. Därmed undviks de problem som ostrukturerad spagettikod leder till. Många moderna programspråk omöjliggör ostrukturerad programmering genom att helt enkelt inte erbjuda någon explict GOTO-sats. Observera att det går att programmera strukturerat även när man använder GOTO. I assemblerkod gör man det genom att skicka med en returadress när man hoppar till en subrutin, och när subrutinen är klar hoppar programmet tillbaka till det ställe det var när subrutinen användes. Här är ett exempel i MIPS:

print_helloworld: # Subrutin för att skriva ut strängen "Hello World!"
   .data
helloworldstr:
   .asciiz "Hello World!\n"

   .text

   la $a0, helloworldstr
   li $v0, 4
   syscall

   jr $ra        # Här är en av två rader som gör programmet strukturerat. När subrutinen anropas av main sparas 
                 # först returadressen i $ra så att programmet kan hoppa tillbaka till exakt samma adress som hoppet kom ifrån.

main:
   .data
firststr:
   .ascii "När denna strängen skrivits ut gör vi ett strukturerat hopp till " 
   .asciiz "en subrutin som skriver ut Hello world!\n"
secondstr:
   .ascii "Nu fortsätter vi på instruktionen precis efter att vi anropade subrutinen.\n"

   .text

   la $a0, firststr           # Dessa tre rader skriver ut den första strängen
   li $v0, 4
   syscall

   jal print_helloworld      # Här anropas subrutinen, men adressen till nästa instruktion sparas i register $ra

   la $a0, secondstr         # Dessa tre rader skriver ut den andra strängen.
   li $v0, 4
   syscall

Historia redigera

Den teoretiska grunden för strukturerad programmering lades i slutet av 1960-talet med ett teorem[1] av Corrado Böhm och Giuseppe Jacopini där de visade att alla beräkningsbara funktioner kan implementeras med användning av endast tre grundläggande kontrollstrukturer:

  1. utför först en delfunktion och därefter en annan delfunktion. (sekvens)
  2. utför en av två delfunktioner beroende på värdet av en boolesk variabel. (selektion)
  3. utför en delfunktion tills en boolesk variabel är sann. (iteration)

Artikeln visade också hur ett godtyckligt, ostrukturerat, flödesschema kunde omformas till ett strukturerat schema med samma funktion. Edsger Dijkstra's berömda brev, "Go To Statement Considered Harmful" 1968[2] blev sedan början till en debatt om huruvida strikt strukturerade program enligt Böhm och Jacopinis principer var användbara för realistiska verkliga problem.

Efter viktiga praktiska tillägg till de ursprungliga tre mekanismerna under början av 1970-talet, till exempel i form av kontrollerade uthopp ur iterationer, accepterades idéerna om strukturerad programmering allt mer och de kom att bli den dominerande paradigmen för programmering under 1970- och 1980-talet.

Referenser redigera

  1. ^ Böhm, Corrado; and Giuseppe Jacopini (May 1966). "Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules". Communications of the ACM 9 (5)
  2. ^ Dijkstra, Edsger (1968). "Go To Statement Considered Harmful". Communications of the ACM 3