www.wikidata.da-dk.nina.az
Programmering fra oldgraesk programma programma 1 er en proces som gar ud pa at udvikle computerprogrammer software til elektronisk databehandling pa en computer ofte ved hjaelp af et programmeringssprog Programmering er en underafdeling af softwareudvikling Formalet med et program er overordnet at modtage nogle input data udfore en opgave pa disse f eks beregninger udskrivning kommunikation med database og som resultat tilbagelevere nogle output data Lidt JavaScript kode i en HTML fil Javascript er fortolket kode Indholdsfortegnelse 1 Programmeringsprocessen 2 Datatyper 2 1 Operatorer 3 Variable og konstanter 4 Saetninger 4 1 Forgreninger 4 2 Lokker 4 3 Funktionskald 5 Struktureret programmering 5 1 Kompleksitet 6 Objektorienteret programmering 6 1 Klasser 6 2 Ansvarsfordeling 7 Fodnoter 8 Se ogsaProgrammeringsprocessen RedigerUdviklingen af et program er en proces bestaende af det at skrive kildekode testning fejlretning ogsa kaldet aflusning eng debugging og vedligeholdelse af kildekoden Programmet skrives som regel som ren tekst i et programmeringssprog som har en defineret syntaks for koden Hvis der er tale om et compileret sprog oversaettes compileres kildekoden forst til maskinkode eller et anden mere maskinnaer kode I denne compilering opdages ogsa eventuelle syntaksfejl Den oversatte maskinkode kan derefter kores af computeren Hvis der er tale om et fortolket sprog korer fortolkeren programmet direkte fra kildekoden og forst undervejs i korselen opdages eventuelle syntaksfejl Programmeringen er en del af hele systemudviklingsprocessen og forudsaetningen for at programmere er at der forst er gennemfort en analyse af hvilke krav systemet skal opfylde over for brugerne Dette er beskrevet i en kravspecifikation Herefter designes systemet og programmeringen gennemfores Der er en lobende debat om hvorvidt kodning af programmer er en kunst et handvaerk eller en ingenior disciplin Generelt anses god programmering for en afmalt anvendelse af alle tre hvor malet er at producere en effektiv software losning som kan videreudvikles Disciplinen afviger fra mange andre tekniske professioner da programmorer generelt set ikke behover licens eller bevis pa en standardiseret eller offentligt reguleret certifikation for at kalde sig selv programmorer eller endda softwareingenior Datatyper RedigerData i et program skal tilhore en bestemt datatype Hvilke datatyper der kan anvendes afhaenger af programmeringssproget men groft sagt kan de deles op i Primitive datatyper Heltal Her er der flere typer afhaengig af hvor store heltal man har behov for at kunne beregne Decimaltal Her er der ogsa flere typer afhaengig af behovet for regnenojagtighed eng precision pa decimaler Sandhedsvaerdi boolean Disse kan kun antage to vaerdier sandt eller falsk Tegn karakter Kan vaere et hvilket som helst tegn i det tegnsaet programmet anvender Peger eng pointer Indeholder en reference til en variabel og bestar egentlig af variabelens adresse i hukommelsen Sammensatte datatyper Tekststreng En tekststreng eng string er et stykke tekst bestaende af et antal tegn karakterer Grundlaeggende er alle inputdata og outputdata til et program af denne type der sa af programmet skal oversaettes til f eks heltal Array Er en statisk indiceret samling af variable af samme datatype Post eng record Bestar af felter af forskellig datatype Denne afspejler bl a en post i en database tabel Objekter Objekt En avanceret datatype som i nyere objektorienteret programmering er en type med bade har data og adfaerd I et objektorienteret sprog daekker et objekt over andre sammensatte datatyper Operatorer Rediger For at regne pa de enkelte datatyper opstiller man regneudtryk der bestar af datavaerdier og operatorer Operatorerne kan deles op i Aritmetiske operatorer der regner pa talvaerdier Konkatenering hvor to tekststrenge saettes sammen til en Logiske operatorer der sammenligner vaerdier og regner pa sandhedsvaerdier Derudover har de enkelte programmeringssprog en raekke ekstra operatorer for at handtere sprogets saetninger og datatyper isaer objekterne En vigtig del af et programmeringssprog er dets operatorpraecedens der angiver raekkefolgen for at bruge de enkelte operatorer hvis der optraeder flere forskellige i samme udtryk Variable og konstanter RedigerEn datavaerdi placeres ofte i en eller flere variable pladsholder En variabel er kendetegnet ved et alfanumerisk variabelnavn og en bestemt datatype men dens konkrete vaerdi kan skifte undervejs i programmet Har man brug for en pladsholder der ikke ma skifte vaerdi har de fleste sprog mulighed for at definere en konstant Saetninger RedigerFor at opfylde sine formal gennemgar programmet nogle algoritmer der er sekvenser af beregninger De enkelte trin i sprogets implementering af en algoritme kaldes saetninger som grundlaeggende opdeles i Variabelerklaeringer hvor man opretter en variabel og angiver dens datatype Tildelinger eng assignment hvor man giver en variabel en bestemt datavaerdi der maske udregnes i den samme saetning Forgreninger hvor et sandhedsudtryk afgor om programmet skal udfore den ene eller anden gruppe saetninger Lokker hvor et sandhedsudtryk er afgorende for hvor mange gange man skal udfore en gruppe saetninger Funktionskald hvor en gruppe sammenhorende beregninger er blevet samlet i en selvstaendig programdel funktion procedure metode som sa kaldes fra andre dele af programmet Forgreninger Rediger Forgreninger er noget af det mest basale i et program fordi grundlaget for computerberegninger netop er forgreninger hvor der overalt evalueres pa om noget er sandt eller falsk For at en algoritme ikke blot er en lineaer sekvens af beregninger men kan variere beregningerne afhaengig af de givne data er man nodt til at vurdere pa hvorvidt en betingelse er opfyldt eller ej Enhver forgrening indledes derfor med en betingelse Forgreninger kan ogsa vaere indlejrede i hinanden eng nested sa man kan ga tre eller flere veje det givne sted i algoritmen En programstump i BASIC med eksempler pa GOTO saetninger I de aeldste programmeringssprog implementerede man forgreninger ved hjaelp af etiketter eng labels ved bestemte saetninger eller linienumre kombineret med GOTO saetninger der fortalte hvor i programmet man skulle ga hen GOTO saetninger kunne dog nemt medfore fejl i programmets flow fordi der til enhver gren i en forgrening skulle vaere en GOTO saetning bade for at starte pa grenen og for at afslutte den I dag har man andre metoder til at vise at en gruppe saetninger horer sammen i en gren Som regel bruger man nogleord som IF THEN ELSE for at implementere en forgrening eller SWITCH SELECT el lign ved en bredere forgrening Lokker Rediger Hvis en gruppe saetninger skal udfores flere gange indforer man en lokke i programmet Ogsa her skal der anvendes en betingelse der skal evalueres hver gang en iteration i lokken indledes eller afsluttes Et meget vigtigt element i programmeringen af en lokke er at sikre sig at gruppen af saetninger i lokken aendrer pa data pa en sadan made at betingelsen pa et tidspunkt far programmet til at hoppe vaek fra lokken Hvis ikke gar programmet ind i en uendelig lokke med fatale folger for dets gennemforelse Ogsa lokker blev i de aeldste programmeringssprog implementeret vha GOTO saetninger og ligesom i en forgrening kunne det vaere komplekst at placere GOTO saetninger rigtigt i programmet I dag er lokker implementeret med nogleord som f eks WHILE DO REPEAT UNTIL eller FOR NEXT Funktionskald Rediger Hvis man har brug for at udfore den samme type beregninger flere steder i et program eller hvis en gruppe saetninger horer sa meget sammen i forhold til saetningerne omkring dem at man har et onske om at pakke dem ind kan man med fordel oprette en funktion kaldes ogsa procedure sub rutine metode Funktionen kan modtage en til flere parametre som sine input data og den kan tilsvarende returnere et resultat som output data De steder i programmet hvor beregningerne skal udfores gennemforer man sa et kald af funktionen med nogle aktuelle vaerdier som parametre og en eventuelt returvaerdi fra funktionskaldet kan man sa opfange og arbejde videre med En fordel ved funktioner er at variable som kun oprettes af hensyn til beregningerne internt i funktion kan erklaeres lokalt i funktionen sa andre dele af programmet ikke kan manipulere endsige se dem Funktionskald var svaere at gennemfore da man kun havde GOTO saetninger til radighed Det kunne lade sig gore med lidt datadisciplin for alle variable ogsa de lokale i funktionen kunne i princippet anvendes overalt globalt I det mindste skulle bade parametrene og returvaerdierne graensefladen mellem det kaldende sted i programmet og funktionen anvendes bade inden for og uden for funktionens gruppe af saetninger Endelig skulle der vaere en variabel der viste hvilken etiket programmet skulle returnere til nar funktionen var faerdig Endnu mere komplekst blev det hvis man skulle lave en sakaldt rekursion hvor en funktion internt i sine beregninger kalder sig selv Da hver funktionskald skulle kunne finde tilbage til det kaldende sted i programmet var man nodt til programmeringsmaessigt at lave en begraensning for hvor mange rekursive kald der kunne vaere inden i hinanden Struktureret programmering RedigerDen omfattende brug af GOTO saetninger i implementeringen af forgreninger lokker og funktionskald kunne meget nemt fore til uoverskuelig spaghettikode Isaer var det begraensningerne ved funktionskald der fremkaldte et behov for at kunne indhegne en gruppe sammenhorende saetninger i en blok f eks med en parentetisk BEGIN END struktur eller andre typer parenteser Sadanne blokke anvendes bade omkring de saetninger der skal udfores i en forgrening og en iteration i en lokke men de er isaer anvendelige til at erklaere funktioner med parametre returvaerdier og lokale variable Sammen med de nye sprog med sadanne faciliteter opstod programmeringsparadigmet struktureret programmering I de fleste sprog designet til struktureret programmering har man ogsa muligheden for at erklaere en funktion inde i kroppen af en anden funktion Pa den made kan en funktion ikke kun indeholde lokale variable men ogsa lokale funktioner Der gaelder nemlig som regel at lokale variable eller funktioner i en funktion ikke kan ses udefra man taler om at deres scope kun er funktionen selv eller funktioner erklaeret inde i funktionen I sprog hvor dette ikke gaelder automatisk er det op til programmoren selv at udvise datadisciplin ved anvendelsen af variable Udover at undga anvendelsen af GOTO saetninger er konsekvens omkring variables og funktioners scope nok det vigtigste middel til at undga spaghettikode i struktureret programmering Kompleksitet Rediger Struktureret programmering abner ogsa storre muligheder for at arbejde med abstrakte datatyper dvs komplekse datastrukturer der vha reference typer pegere pointere post typer og specielle funktioner er optimeret til at kunne udfore f eks indsaettelse af elementer eller sogning efter elementer Med de storre muligheder blev der ogsa storre behov for at vurdere effektiviteten af et program saerligt med henblik pa en algoritmes kompleksitet Hermed menes en vurdering af i hvilket omfang beregningstiden i algoritmen vokser nar datamaengden stiger Hermed fik programmoren redskaber til at finde frem til den mest effektive algoritme for sit program Objektorienteret programmering RedigerI de forste computere interagerede brugeren ved hjaelp af en tekstbaseret kommandolinjegraenseflade til computerens styresystem 2 Pa en kommandolinie kalder man f eks programmet ved at skrive dets navn efterfulgt af eventuelle parametre som input Nar programmet har udfort sin opgave svarer den tilbage med eventuelt tekst output og giver brugeren mulighed for at indtaste en ny kommando Der er tale om en sakaldt lineaer kommunikation mellem bruger og computer hvor en af dem hele tiden venter pa den anden Med fremkomsten af computere med en grafisk brugergraenseflade GUI fra eng Graphical user interface blev bade input og output vaesentligt mere komplekst Brugeren kan ikke blot levere tekstinput flere forskellige steder pa skaermen men der kommunikeres ogsa ved hjaelp af forskellige enheder som tastatur mus og scanner og der er ingen regler for hvilken raekkefolge kommunikationen foregar Computeren korer med flere trade Dette satte skub i udviklingen af objektorienteret programmering I dette programmeringsparadigme arbejder man med begrebet et objekt som er defineret som en helhed med identitet tilstand og adfaerd 3 Sadanne objekter kan eksempelvis vaere de enkelte komponenter som et skaermbillede er opdelt i eller de forskellige stykker hardware som brugeren anvender Men det kan ogsa vaere genstande eller begreber fra it systemets problemomrade den del af systemets omverden som systemet skal afspejle Det er opgaven for objektorienteret analyse og design at finde frem til hvilke objekter der skal medtages Desuden kan et objekt vaere en avanceret datastruktur til at manipulere en dynamisk samling af variable af samme datatype optimeret til sogning eller sortering eller hurtig indsaettelse og fjernelse af elementer Klasser Rediger I den objektorienterede programmering opdeles programkoden i klasser der har hver sit velafgraensede ansvarsomrade i programmet Et objekt er en forekomst instans af klassen Et objekt kan altsa opfattes som en variabel i programmet og klassen er variabeltypen Objektets tilstand beskrives vha medlemsvariable der som regel kun har scope i klassen Objektets adfaerd beskrives vha metoder funktioner med parametre der kan kaldes udefra og som manipulerer med medlemsvariablene Endelig sikres objektets identitet ved at andre dele af programmet kun har dette objekt som variabel i form af en reference til objektet To variable forskellige steder i programmet kan altsa godt vaere et og samme objekt der interageres med Objektorienteret programmering har tre grundprincipper Indkapsling Objektets tilstand er usynlig udefra men dens adfaerd bestemmes af en graenseflade af metoder som omverdenen anvender ved metodekald Nedarvning Klassens definitioner af variable og metoder kan udvides til at definere en ny klasse Man siger at en subklasse arver fra en superklasse Dermed er et objekt fra subklassen ogsa en forekomst af superklassen Polymorfi To subklasser med den samme superklasse kan arve samme metode fra superklassen men udviser forskellig adfaerd nar metoden kaldes De har hver sin implementering af metoden og eventuelt overskriver de superklassens implementering af metoden Med disse principper har man gode muligheder for f eks at fa en GUI til at udvise den onskede adfaerd Hvis man vil have en bestemt komponent til at opfore sig anderledes definerer man en ny klasse der arver fra denne komponent og giver den en ny implementering af metoderne De fleste muligheder for kodning i struktureret programmering er ogsa overfort til objektorienteret programmering Dog er muligheden med at definere en funktion lokalt i en anden funktion ikke overfort til en klasses metoder Derimod kan man i en klasse definere en anden sakaldt indre klasse som pa mange mader kan anvendes hvor man i struktureret programmering ville anvende lokale funktioner Ansvarsfordeling Rediger I et program med mange klasser kan det ofte vaere svaert at afgore praecist hvilke ansvarsomrader man skal fordele til hvilke klasser En hovedregel i denne problemstilling som egentlig er en design problematik er at man skal lade den klasse som besidder den nodvendige information lose opgaven Det betyder at hvis der f eks opstar en runtime fejl i en klasse og klassen har tilstraekkelig information til at handtere fejlen skal den selv handtere den i stedet for at sende problemet videre til en anden klasse En anden hovedregel er at man sa vidt muligt skal lade afhaengighed mellem to klasser kun ga den ene vej hvor afhaengighed betyder at koden i den ene klasse er afhaengig af kendskab til den anden klasses graenseflade Ogsa i objektorienteret programmering kan man nemlig lave spaghetti kode Det kan f eks vaere fristende at definere et GUI vindue der udover at levere en brugergraenseflade ogsa tager sig at at evaluere data som brugeren taster ind og gemme disse i en database Dette kan maske vaere overskueligt hvis der kun er fa typer data i et system men hvis der f eks er mange bindinger mellem data i en database der kraever flere forskellige GUI vinduer til brugerens indtastninger kan der blive sa mange afhaengigheder mellem de enkelte klasser at det besvaerliggor vedligeholdelse af koden Der er losningen at fa lavet en hensigtsmaessig fordeling af ansvarsomraderne ud pa enkelte klasser En sadan opdeling er der f eks i den sakaldte 3 lags model eng 3 tier model ogsa kaldet MVC fra eng Model View Control I en sadan vil man fordele ansvarsomraderne saledes Model Her definerer man klasser der afspejler klasserne i genstandsomradet Klasserne skal primaert opbevare data og evaluere data den modtager udefra I storst muligt omfang skal klasserne opdeles hierarkisk sa afhaengigheden kun gar nedad View Denne star for brugergraensefladen som skal levere data til de enkelte objekter i modellen Klasser her skal have kendskab til en eller flere klasser i modellen Den skal kun evaluere indtastede data i det omfang de helt abenlyst ikke kan vaere brugbare Control Denne skal styre forretningsgangen i programmet og have kendskab til bade modellen og brugergraensefladen Desuden skal den hente data om modellen fra en database og levere dem til brugergraensefladen ligesom den skal gemme data om modellen i databasen Fodnoter Rediger Wilhelm Pape amp Max Sengebusch 1914 Handworterbuch der griechischen Sprache 6 udg Bd 3 Vieweg amp Sohn Se f eks om styresystemet MS DOS Lars Mathiassen Andreas Munk Madsen Peter Axel Nielsen Jan Stage Objektorienteret analyse amp design 2001 Forlaget Marko ApS Aalborg ISBN 87 7751 153 0 s 4 Se ogsa RedigerProgrambiblioteker Datalogi Hentet fra https da wikipedia org w index php title Programmering amp oldid 11323106