Introduktion till programmering Christian Ohlsson 1 Definition av programmering § Programmering handlar om att instruera en maskin att utföra någon typ av arbete § Maskinen består endast av kretsar och kan inte utföra något utan instruktioner § Instruktionerna utförs på olika abstraktionsnivåer § Närmast hårdvaran: Maskinkod § Närmast människan: Pseudokod Christian Ohlsson 2 Software engineering § SE innebär design, utveckling och underhåll av programvara § Flera typer finns: § § § § § Kravspecialist Programmerare Testare Konfigurationsspecialist Kvalitetsansvarig Christian Ohlsson 3 Design Patterns § DP (design-mönster) innebär att man kan identifiera vanliga problem-områden inom programvaruutveckling § När problemområdet identifierats kan man utgå från kända lösningar på problemet, som då snabbt kan få en lösning § DP kan enkelt sägas vara en viss standardlösning på ett visst standardproblem Christian Ohlsson 4 Exempel: MVC MODEL UPDATERAR MANIPULERAR CONTROLLER VIEW SER ANVÄNDER USER Christian Ohlsson 5 Ramverk § Ett ramverk (framework) är ett bibliotek med funktionalitet som tagits fram för att underlätta utveckling av något § Nackdel: Man har inte full koll på vad som händer under ytan § Fördel: Koden I ramverket är oftast effektiv, vältestad, robust och generell Christian Ohlsson 6 .NET § Grunden i Microsoft Windows § Samling av klassbibliotek för hantering av § § § § § Kryptografi Databaser Algoritmer Nätverk …och mycket annat Christian Ohlsson 7 SOA § Service Oriented Architecture § Man organiserar ett distribuerat IT-system som en samling kommunicerande tjänster § Ett bra exempel på SOA är webbtjänster som kommunicerar med jSON, XML eller SOAP Christian Ohlsson 8 Testning § Innebär att informera inblandade parter om kvalitetsaspekterna i ett datorprogram § Kan ge en objektiv vy på riskerna med att använda ett visst program Christian Ohlsson 9 Testning: vad testar man? § Uppfyller de krav som fastslogs i design och utveckling § Svarar korrekt på alla typer av indata § Utför sina uppgifter inom acceptabel tid § Är tillräckligt användbar § Kan installeras och köras I avsedda miljöer § Genererar de resultat som intressenterna önskar Christian Ohlsson 10 Datastrukturer Christian Ohlsson 11 Datastrukturer § En datastruktur är en komplex samling av primitiva datatyper § Används för att realisera en ADT (abstract datatype) § Man en god datastruktur kan stora mängder data hanteras på ett ändamålsenligt sätt Christian Ohlsson 12 Listor § En länkad lista är en linjär samling objekt som kallas noder § Dessa noder innehåller en ADT och en pekare till nästa nod § Den sista noden pekar på NULL så att man vet var listan slutar § Listans första nod kallas HEAD § Data lagras dynamiskt i en lista och varje ny nod skapas först när den behövs Christian Ohlsson 13 En länkad lista Christian Ohlsson 14 Isättning I en länkad lista Christian Ohlsson 15 Stackar § En stack är en variant av en länkad lista där där man lägger till och tar bort i samma ände. § Elementet som läggs in sist tas ut först. § Principen kallas LIFO, Last In First Out § Exempel: § Tallrikar § Brickor i en matsal § Pengar i ett rör Christian Ohlsson 16 Exempel på en stack Christian Ohlsson 17 Köer § Den abstraka datatypen kö fungerar som en ”vanlig” kö § Kan implementeras som ett skal ovanpå en vanlig lista (insert på pos 1, delete på pos last) § Exempel: § Schemaläggning av processer i en dator § Köhantering Christian Ohlsson 18 Exempel på en kö Christian Ohlsson 19 Träd § Träd byggs som en lista, fast med flera noder § Består av noder och kanter § Noderna – Innehåller data § Kanterna – Binder ihop noderna § Träd är hierarktiska § Noderna finns på olika nivåer § Noder på samma nivå får inte ha kanter till varandra § Träd är rekursiva § Varje nod kan ha 0 eller flera barn, som i sin tur är träd Christian Ohlsson 20 Exempel på ett träd Christian Ohlsson 21 Noder I ett träd Christian Ohlsson 22 Binära träd Christian Ohlsson 23 Generella träd Christian Ohlsson 24 Grafer Christian Ohlsson 25 Utvecklingsmodeller Christian Ohlsson 26 Utvecklingsmetoder § Många metoder för att hjälpa verksamhetsutvecklare, designers, projektledare, arkitekter och programmerare att ta fram digitala tjänster. § Syftar de till att hjälpa till att göra processen bättre på något sätt, vilket oftast innefattar tydlighet och ibland spårbarhet. Christian Ohlsson 27 Traditionella § Det finns en mängd olika modeller för utveckling som alla faller under kategorin ”traditionella” § Det som utmärker dessa är att de alla är varianter på vattenfallsmodeller § Inom vattenfallsmodellen slutför man alltid ett steg före man går på nästa steg i utvecklingen. Christian Ohlsson 28 Vattenfallsmodellen: Exempel Christian Ohlsson 29 Agila § Agilt = Lättrörligt § Paraplybegrepp för moderna arbetssätt för framtagande av programvara § Man arbetar i små cykler med små enheter § Iterativt och inkrementellt § Mindre dokumentation, mestadels i form av personas och user stories § Visuella dokument Christian Ohlsson 30 Agil metod: Scrum § Iterativt och inkrementellt ramverk för hantering av produktutveckling § Utvecklingsteamet arbetar som en enhet för att nå ett gemensamt mål § En viktig princip i Scrum är att kunden kan ändra sig om vad de vill ha och behöver § Fokuserar istället på att maximera lagets förmåga att leverera snabbt och reagera på nya krav. Christian Ohlsson 31 Scrum: Exempel Christian Ohlsson 32 Agil metod: eXtreme Programming § Metodik som syftar till att förbättra programvarans kvalitet och anpassbarhet till föränderliga kundkrav § Har korta intervall mellan “releases” och använder kontrollstationer där nya kundkrav kan antas § Namnet kommer från idén att de fördelaktiga delarna av traditionella systemutvecklingsmetoder tas till "extrem "nivåer Christian Ohlsson 33 eXtreme Programming: Exempel Christian Ohlsson 34 Programspråk Christian Ohlsson 35 Olika programspråk § Ett programspråk kan ses som ett verktyg för att realisera en idé § Beroende på idén behövs olika språk § Olika verktyg är rätt i olika situationer Christian Ohlsson 36 Den 10 populäraste språken 2014 Christian Ohlsson 37 Funktionell programmering § En typ av programspråk där strukturen och elementen evalueras som ett matematiskt uttryck § Har sitt ursprung i Lambda kalkyler § Används idag sparsamt, bortsett från inom artificiell intelligens Christian Ohlsson 38 Exempel I LISP ; # Christian Ohlsson 1999 (defun run () (format t "~% Welcome to the database ") (format t "~% ======================= ") (format t "~% Press s to search, ") (format t "~% or 'x' to exit. ") (format t "~% ======================= ") (format t "~% ") (setq val (read)) (cond ((equal val 's) (dosearch (getdb)) (run)) ((equal val 'x) (format t "~%Exiting") ) (t (format t "~% That's not a valid option") (run)) ) ) Christian Ohlsson 39 Proceduriell programmering § Mycket vanligt förekommande paradigm av språk § Har sina anor från strukturell programmering § Baseras på procedurer § Aka: rutiner, subrutiner, metoder eller funktioner § Modularitet – dela in programmet i moduler § Scoping – variablers synlighet (livslängd) Christian Ohlsson 40 Exempel I C /* Christian Ohlsson 1998 */ #include "header_ftp.h” int State_IDLE(int sig, long len, char buffer[BUFSIZE], int fd) { if(sig == AF_Con_Ind) { ReadDatafromSocket(FSOCK_FD, (char *)&len, sizeof(long)); if((fd = open(buffer, O_WRONLY)) == -1) { printf("Unable to open file.\n"); WriteSignaltoSocket(FSOCK_FD, AF_Rej_Req, SIGLEN); return TRUE; } else WriteSignaltoSocket(FSOCK_FD, AF_Con_Resp, SIGLEN); } return FALSE; } Christian Ohlsson 41 Objektorienterad programmering Christian Ohlsson 42 Objektorienterad programmering § Inom OO ser man de inblandade entiteterna som objekt § Som har egenskaper och kan utföra metoder § Dessa objekt programmeras att kunna interagera med varandra för att lösa en uppgift Christian Ohlsson 43 Exempel I C++ int main () { Rectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); return 0; } class Rectangle { int width, height; public: void set_values (int,int); int area() {return width*height;} }; void Rectangle::set_values (int x, int y) { width = x; height = y; } Christian Ohlsson 44 Klasser § En klass är en beskrivning av hur ett objekt är uppbyggt § Kan liknas vid en ritning eller ett kakrecept § Klassen definierar vilka dataattribut som ingår samt vilka operationer som kan utföras på ett objekt Christian Ohlsson 45 Instans § En instans är ett unikt och konkret objekt redo för användning § Instansen skapas med en klass som mall § En klass kan vara upphov till många instanser Christian Ohlsson 46 Arv Katt Hund färg färg favoritben smutsa_ned() smutsa_ned() ät_katt() Kanin klös_soffa() färg vikt smutsa_ned() Christian Ohlsson 47 Arv: Identifiera likheter § Många klasser delar på egenskaper och beteende § Det framstår onödigt att återskapa samma saker om och om igen § OO erbjuder verktyg för att samla ihop gemensamma egenskaper och beteenden i överklasser Christian Ohlsson 48 Arv: Superklass Husdjur färg smutsa_ned() Katt Kanin Hund Favoritben vikt ät_katt() klös_soffa() Christian Ohlsson 49 Programspråkets byggstenar Christian Ohlsson 50 Lexikal struktur § Uppsättningen regler som bestämmer hur man ska skriva program i språket § Regler finns bland annat för § Syntax § Värden, variabler, reserverade ord Christian Ohlsson 51 Exempel på lexical struktur (LEX) /* Christian Ohlsson 1998 */ WORD [a-zA-Z0-9_\-\./\*]+ [ \t]+ {/*Käkar upp white-space*/} "\n" { insert(NULL); return NL;} "&" { insert(NULL); return AND;} "|" { insert(NULL); return PIPE;} ";" { insert(NULL); return SEMI;} ">" { insert(NULL); return GREAT;} "<" { insert(NULL); return LESS;} ">>" { insert(NULL); return DBLARR;} "exit" { printf("OK, use another stinky shell then...\n");exit(0);} {WORD} { yylval.txt=insert(yytext);return WORD;} Christian Ohlsson 52 Parsern (YACC) /* Christian Ohlsson 1998 %token NL PIPE SEMI GREAT %token<txt> WORD OPT %type<tPtr> rad ccmd scmd rad : ccmd NL { | NL { ; ccmd : ccmd PIPE scmd | ccmd AND | ccmd SEMI scmd | ccmd SEMI | scmd ; */ LESS AND DBLARR EXIT cmd tree=$1; return 0;} return 1;} { { { { { $$=(treePtr)makeNode(PIPE, $1, $3); } $$=(treePtr)makeNode(AND, $1, NULL); } $$=(treePtr)makeNode(SEMI, $1, $3); } $$=(treePtr)makeNode(SEMI, $1, NULL);} $$=$1;} Christian Ohlsson 53 Datatyper § Ett programspråk använder olika datatyper för att kunna representera olika typer av data § Vanligt förekommande datatyper § § § § § Heltal Flyttal Tecken Strängar Booleska värden Christian Ohlsson 54 Variabler § En lagringsbehållare för ett värde § Associeras oftast med ett namn, där namnet är en referens till minnesadressen som innehåller variabelns värde int ålder; float medelÅlder; string namn; Christian Ohlsson 55 Uttryck § Ett uttryck utvärderas för att producera ett värde § Det vanligaste sättet att skapa uttryck är med operatorer § Operatorn kombinerar operandernas värden och producerar ett värde operand summa = 10 + 20; uttryck operator Christian Ohlsson 56 Operatorer § Ett programspråk använder operatorer för att kunna hantera § § § § Aritmetriska uttryck Jämförelser Logiska uttryck Tilldelningar och annat § Olika operatorer har olika prioritet § Exempelvis: svar = 2 + 5 * 7; Christian Ohlsson 57 Programkodens uppbyggnad Christian Ohlsson 58 Alla programs byggstenar § Alla program utförs av tre olika strukturer: § Sekvens - operationerna utförs i den ordning de står § Selektion - olika villkor styr vilken “väg” programmet tar § Iteration - upprepningar i koden Christian Ohlsson 59 Sekvens § Satserna i koden utförs i den ordning de står angivna Skapa variabler Fråga värde Skriv ut värde Christian Ohlsson Fråga värde Skriv ut värde 60 Selektion § Villkor styr vilken väg exekveringen av programmet skall ta § Dessa villkor evalueras till sanna eller falska § 10 kr är mer än 5 kr § Jag är längre än Michael Jordan sant falskt § Olika varianter finns: § if/else § Switch § Villkorsoperatorn ? : Christian Ohlsson 61 Exempel på selektion § Om minimikravet på en tenta är 25 poäng om studentens poäng är högre än eller lika med 25 studenten är godkänd § Om villkoret är sant är studenten godkänd § Om villkoret är falskt är studenten inte godkänd JavaScript Poäng >= 25 True Alert(”passed”) if ( grade >= 25 ) alert(“passed”); False Christian Ohlsson 62 Selektion: switch § Switch kan vara praktiskt att använda om du har distinkta lägen att variera på switch (uttryck) { case värde1 : satser 1; break; case värde2 : satser 2; break; ... case värdeN : satser N; break; default: satser; } Christian Ohlsson 63 Iterationer § Repetitioner, upprepningar, slingor § Vardagsexempel på iterationer: § Så länge ingen svarar när jag ringer § Ring upp igen § Så länge det finns sidor kvar i boken § Läs sidan § Vänd blad § Så länge jag inte lyssnat klart på skivan § Lyssna på nästa låt Christian Ohlsson 64 Iterationer forts § Alla typer av iterationer innehåller ett villkor som evalueras till sant eller falskt § Så länge villkoret evalueras till sant kommer kodblocket att exekveras § Olika varianter av iterationer finns: § § § § while do/while for for in Christian Ohlsson 65 While § Bra variant när man på förhand inte vet hur många gånger något kommer att upprepas while ( villkor ) satser while ( counter < 100 ) counter++; Christian Ohlsson 66 Funktioner Christian Ohlsson 67 Funktioner § En funktion är en mindre programmodul, som löser en specifik uppgift § Med flera sådana här små moduler bygger man upp ett program § En funktion är som en svart låda som tar emot en viss indata och genererar en viss utdata Indata Utdata Funktion Christian Ohlsson 68 Fördelar med funktioner § § § § § § Små avgränsade moduler Ger välstrukturerade program Lättare att testa Lättare att felsöka och underhålla Möjlighet till återanvändning av kod Möjliggör kontraktsprogrammering Christian Ohlsson 69 Anropa funktioner § För att anropa en funktion, dvs få den att exekvera, behöver man bara skriva dess namn, och eventuella parametrar § Ex: function printDocument (theDocument) { // kod som löser uppgiften } printDocument (“resultat.xlsx”); Christian Ohlsson 70 Nästlade funktioner § I vissa språk kan funktioner vara nästlade, dvs en funktion kan innehålla en funktion function hypotenuse(a, b) { function square(x) { return x*x; } return Math.sqrt(square(a) + square(b)); } Christian Ohlsson 71 Christian Ohlsson 72