Programmeringsparadigme | en måde at gruppere programmeringssprog på efter hvad de gør

Programmeringsparadigmer er en måde at gruppere programmeringssprog på efter, hvad de gør. Sprog kan være i mere end ét paradigme.

Nogle paradigmer ser på den måde, koden udføres på, f.eks. om sideeffekter er tilladt, eller om ting skal udføres i en bestemt rækkefølge. Andre paradigmer ser på den måde, hvorpå koden er grupperet, f.eks. ved at samle koden i et eller to stykker (eller i stedet mange små stykker). Andre paradigmer ser på den rækkefølge og de dele, der gør programmet til det, det er.

Der findes to hovedgrupper af paradigmer, imperative og deklarative paradigmer. Et sprog kan være begge dele på samme tid.


 

Imperativ programmering

I imperative programmer giver programmører computeren en række ordnede trin, der skal udføres for at gøre noget. Hvis nogen ønsker, at computeren skal tegne et katteansigt, kan de give anvisninger som: "Tegn en cirkel her, tegn to mindre cirkler der, tegn to trekanter ovenpå" osv. Imperative programmer har nogle gange en masse bivirkninger.

Der findes to store imperative paradigmer, og ofte har et sprog begge paradigmer:

  • Struktureret - Computeren får anvisninger, der altid er i en bestemt rækkefølge. Skridt som "gå tilbage til trin 3" (kendt som goto-meddelelser) er ikke tilladt.
    • Procedurelt - Programmet lader programmøren give en liste af ordrer et navn, hvilket forvandler ordrerne til en "procedure", som de kan bruge senere. De fleste strukturerede sprog er også procedurale.
  • Objektorienteret - Idéer forklares til computeren ved hjælp af objekter, dvs. kodestykker, der har et sæt ordrer, som de kan få, og nogle oplysninger om dem.

 

Deklarativ programmering

I deklarative paradigmer fortæller programmøren computeren, hvad den skal gøre, i stedet for hvordan den skal gøre det. Hvis computeren skulle tegne et katteansigt, kunne man give anvisninger som "Tegn et ansigt, tegn to øjne, to ører og en mund".

De mest velkendte deklarative paradigmer er:

  • Funktionel - Det meste af arbejdet udføres af funktioner uden bivirkninger.
  • Logik - En række fakta angives, og derefter stilles et eller flere "spørgsmål".
  • Hændelsesstyret - Kodestykker er indstillet til at køre, når der sker bestemte ting (f.eks. når computeren tændes).

 

Andre paradigmer

Nogle paradigmer findes i både imperative og deklarative sprog. Disse paradigmer findes normalt sammen med et af de ovennævnte paradigmer i stedet for at stå alene.

  • Parallelt: Flere kodestykker køres samtidig.
  • Meta: Særlige ting i sproget giver programmøren mulighed for at ændre den måde, som sproget selv fungerer på.

 

Oversigt

Programmeringssprog grupperes efter paradigmer på samme måde som maskiner kan grupperes efter, hvad de bruges til.

Nogle få sprog passer ind i kun ét hovedparadigme, f.eks:

  • Smalltalk (objektorienteret)
  • Assembly (imperativ, men ikke struktureret eller objektorienteret)
  • Haskell (funktionel)
  • Prolog (logik)

De fleste sprog findes dog i mere end ét paradigme. Nogle af dem, der skiller sig ud ved at have mere end ét, er:

  • Scala (objektorienteret, funktionelt, parallelt)
  • Visual Basic (begivenhedsstyret, objektorienteret)
  • Common Lisp (procedurel, funktionel, objektorienteret, meta)
  • Scheme (funktionelt, proceduremæssigt, meta)
  • Perl (funktionelt, proceduremæssigt, meta, objektorienteret, begivenhedsstyret)
  • Python (funktionelt, objektorienteret, proceduremæssigt)
  • Ruby (funktionelt, objektorienteret, proceduremæssigt)
  • Wolfram Language (funktionelt, processuelt, generelt deklarativt)
  • Oz (logisk, funktionel, imperativ, objektorienteret)
  • F# (funktionel, imperativ, objektorienteret, meta)

Det er ikke altid godt at have flere paradigmer. Et tilfælde, hvor det kan være godt at have færre paradigmer, er, når der er tale om et sprog, der kun er funktionelt. En funktion i et af disse sprog gør nogle gange mindre arbejde (f.eks. kun gennemgå de dele af en gruppe af ting, som den faktisk har brug for), end hvis sproget også var proceduralt.

Mange programmeringsparadigmer er lige så kendte for de ting, de ikke lader folk gøre, som for de ting, de lader folk gøre. Et tilfælde, hvor dette er tilfældet, er funktionelle sprog. Når et funktionelt sprog kun eller hovedsagelig er funktionelt, vil det normalt ikke tillade sideeffekter. Et andet tilfælde, hvor dette er tilfældet, er struktureret programmering: det adskiller sig fra normale imperative sprog, fordi det ikke tillader programmører at bruge "goto-meddelelser" (meddelelser, der fortæller programmet, at det skal gå til et tidligere trin). Af denne og andre grunde mener folk nogle gange, at nye paradigmer ikke tillader nok ting. Nogle gange er det dog helt i orden, at computeren ikke lader folk gøre noget: det kan hjælpe folk med at undgå problemer med deres kode og lade computeren gætte sig frem til, at den kan køre koden hurtigere, eller endda kontrollere koden for problemer, før den kører!



 Oversigt over de forskellige programmeringsparadigmer ifølge Peter Van Roy  Zoom
Oversigt over de forskellige programmeringsparadigmer ifølge Peter Van Roy  

Problemer med paradigmer

Nogle folk, der studerer programmeringssprog, bryder sig ikke om, at paradigmer bruges til at gruppere programmeringssprog, f.eks. Harper og Krishnamurthi. Disse mennesker siger, at mange programmeringssprog ikke bare kan grupperes i paradigmer, fordi sprog låner ting og idéer fra mange paradigmer.


 

Historie

Nye paradigmer er blevet skabt gennem tiden, og folk har enten påpeget dem på det tidspunkt, de blev skabt, eller når de ser tilbage. Et af de første paradigmer, der blev anerkendt som en ny måde at programmere på, var struktureret programmering fra 1960'erne. Ideen om et "programmeringsparadigme" er fra 1978, hvis ikke tidligere, da Robert W. Floyd brugte den i sin undervisning. Ordet "paradigme" på den måde, som Robert mente det, blev første gang brugt af Thomas Kuhn i hans bog The Structure of Scientific Revolutions (1962).

Maskinkode

Det laveste niveau (tættest på den måde, som computeren kan lide at forstå tingene på) og ældste programmeringsparadigme er maskinkode, et imperativt paradigme. Retninger i maskinkode er blot et sæt tal i en bestemt rækkefølge. Assembleringssprog er en smule mindre lavt niveau (og lidt mindre gammelt). I assemblagesprog får anvisningerne til computeren mnemonics (navne, der er lettere at huske), og hukommelsesadresser (anvisninger til at finde en oplysning i computeren) kan få navne. Disse sprog kaldes undertiden første og anden generation af sprog.

I 1960'erne blev assembler-sprogene forbedret ved at tilføje nye ting som biblioteket COPY, makroer (stykker af "speciel" kode, der blev omdannet til normal kode, før programmet begyndte at køre), kørende procedurer (sæt af anvisninger, der fik et navn og blev gemt til senere) og variabler (elementer, der fik navne og blev gemt til senere) fra uden for programmet. Dette gjorde det muligt for folk at bruge noget kode i mere end ét projekt og ikke at skulle bekymre sig om hardwarespecifikke problemer (problemer, der kun opstår på én slags computer) takket være kommandoer (navne for anvisninger) som READ/WRITE/GET/PUT.

Assemblering blev og bruges nogle gange stadig i systemer, hvor det er vigtigt, at koden er hurtig, og det bruges også meget i indlejrede systemer, fordi det giver brugeren nøjagtig kontrol over, hvad maskinen gør.

Procedurelle sprog

I slutningen af 1960'erne begyndte man at opfinde proceduremæssige sprog. Disse tredjegenerationssprog (de første få af det, vi i dag kalder højniveausprog) havde ord, der var relateret til det, de forsøgte at løse. F.eks,

  • COBOL (COmmon Business Oriented Language) - bruger ord som file, move og copy.
  • FORmula TRANslation (FORTRAN) - bruger matematiske ord og symboler (former, der bruges ved skrivning og indtastning). Det blev hovedsagelig udviklet til naturvidenskab og teknik.
  • ALGOrithmic Language (ALGOL) - lavet til at skrive algoritmer (sæt af trin, der fortæller computeren, hvad den skal gøre). Det bruger matematiske ord og symboler ligesom FORTRAN.
  • Programming Language One (PL/I) - skulle være nyttigt for alle.
  • Begyndere Alle formål Symbolic Instruction Code (BASIC) - lavet til at hjælpe begyndere med at programmere.
  • C - et programmeringssprog, der kan bruges til mange ting. Dennis Ritchie arbejdede på det fra 1969 til 1973 hos AT&T Bell Labs.

Objektorienteret programmering

Efter at mange mennesker var begyndt at bruge procedurale sprog, opfandt man objektorienterede programmeringssprog. I disse sprog er data og deres "metoder" (måder at manipulere dataene på) samlet i et "objekt". Nogle programmører, som f.eks. Richard Stallman, er ikke enige i, at objektorienterede sprog er bedre til at forklare idéer til en computer end procedurale sprog.

Fordi objektorienteret programmering er et paradigme og ikke et sprog, har folk lavet objektorienterede assembler-programmeringssprog som HLA (High Level Assembly).

Deklarative paradigmer

Samtidig var der nogle mennesker, der udviklede deklarative programmeringssprog. Et sprog, der er velkendt for at være deklarativt, er SQL (et sprog til at tilføje og fjerne ting fra tabeller).


 

Relaterede sider

  • Mindset
  • Type system
  • Turing-fuldstændighed
 

Spørgsmål og svar

Spørgsmål: Hvad er et programmeringsparadigme?


A: Et programmeringsparadigme er en måde at gruppere programmeringssprog på, baseret på hvordan de fungerer.

Spørgsmål: Hvad er de to hovedgrupper af paradigmer?


Svar: De to hovedgrupper af paradigmer er imperative og deklarative paradigmer.

Spørgsmål: Hvordan adskiller imperative og deklarative paradigmer sig fra hinanden?


A: Imperative paradigmer ser på den måde, som koden udføres på, f.eks. ved at tillade sideeffekter eller ved at gøre tingene i en bestemt rækkefølge, mens deklarative paradigmer ser på den måde, som koden grupperes på, f.eks. ved at sætte koden op i en eller to stykker (eller i stedet mange små stykker).

Spørgsmål: Kan et sprog være både et imperativt og et deklarativt paradigme?


Svar: Ja, et sprog kan være både et imperativt og deklarativt paradigme på samme tid.

Spørgsmål: Hvordan grupperer et programmeringsparadigme sprog?


Svar: Programmeringsparadigmer grupperer sprog efter, hvad de gør. De ser på, hvordan koden køres, hvordan den er grupperet, og hvilken rækkefølge og hvilke dele der udgør programmet.

Spørgsmål: Findes der andre typer programmeringsparadigmer end imperative og deklarative paradigmer?


A: Ja, der findes andre typer programmeringsparadigmer end imperativ og deklarativ. Nogle ser f.eks. på den måde, hvorpå koden køres (f.eks. ved at tillade sideeffekter), mens andre ser på den måde, hvorpå koden grupperes (f.eks. ved at sætte kode i en eller to dele).

Spørgsmål: Hører alle sprog kun til én type programmeringsparadigme?


A: Nej, ikke alle sprog hører kun til én type programmeringsparadigme; nogle sprog kan tilhøre mere end én type paradigme.

AlegsaOnline.com - 2020 / 2023 - License CC3