Introduktion till programmering 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 2
Software engineering SE innebär design, utveckling och underhåll av programvara Flera typer finns: Kravspecialist Programmerare Testare Konfigurationsspecialist Kvalitetsansvarig 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 4
Exempel: MVC UPDATERAR MODEL MANIPULERAR VIEW CON- TROLLER SER USER ANVÄNDER 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 6
.NET Grunden i Microsoft Windows Samling av klassbibliotek för hantering av Kryptografi Databaser Algoritmer Nätverk och mycket annat 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 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 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 10
Datastrukturer 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 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 13
En länkad lista 14
Isättning I en länkad lista 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 16
Exempel på en stack 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 18
Exempel på en kö 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 20
Exempel på ett träd 21
Noder I ett träd 22
Binära träd 23
Generella träd 24
Grafer 25
Utvecklingsmodeller 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. 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. 28
Vattenfallsmodellen: Exempel 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 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. 31
Scrum: Exempel 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 33
extreme Programming: Exempel 34
Programspråk 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 36
Den 10 populäraste språken 2014 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 38
Exempel I LISP ; # 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)) ((equal val 'x) (format t "~%Exiting") ) ) (run)) ) (t (format t "~% That's not a valid option") (run)) 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) 40
Exempel I C /* 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; } 41
Objektorienterad programmering 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 43
Exempel I C++ class Rectangle { int width, height; public: void set_values (int,int); int area() {return width*height;} }; int main () { Rectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); return 0; } void Rectangle::set_values (int x, int y) { width = x; height = y; } 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 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 46
Arv Hund färg favoritben smutsa_ned() ät_katt() Kanin färg vikt smutsa_ned() Katt färg smutsa_ned() klös_soffa() 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 48
Arv: Superklass Husdjur färg smutsa_ned() Hund Favoritben ät_katt() vikt Kanin Katt klös_soffa() 49
Programspråkets byggstenar 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 51
Exempel på lexical struktur (LEX) /* 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;} 52
Parsern (YACC) /* 1998 */ %token NL PIPE SEMI GREAT LESS AND DBLARR EXIT %token<txt> WORD OPT %type<tptr> rad ccmd scmd cmd rad : ccmd NL { tree=$1; return 0;} NL { return 1;} ; ccmd : ccmd PIPE scmd { $$=(treeptr)makenode(pipe, $1, $3); } ccmd AND { $$=(treeptr)makenode(and, $1, NULL); } ccmd SEMI scmd { $$=(treeptr)makenode(semi, $1, $3); } ccmd SEMI { $$=(treeptr)makenode(semi, $1, NULL);} scmd { $$=$1;} ; 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 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; 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 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; 57
Programkodens uppbyggnad 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 59
Sekvens Satserna i koden utförs i den ordning de står angivna Skapa variabler Fråga värde Skriv ut värde 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 sant Jag är längre än Michael Jordan Olika varianter finns: if/else Switch Villkorsoperatorn? : falskt 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 Poäng >= 25 True Alert( passed ) JavaScript if ( grade >= 25 ) alert( passed ); False 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; } 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 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 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++; 66
Funktioner 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 Funktion Utdata 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 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 ); 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)); } 71
72