Upload
others
View
17
Download
0
Embed Size (px)
Citation preview
Introduktion till programmering
1 Christian Ohlsson
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
Christian Ohlsson 5
MODEL
USER
VIEW CON-
TROLLER
UPDATERAR MANIPULERAR
SER ANVÄNDER
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 39
; # 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)) ) )
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 41
/* 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; }
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++
Christian Ohlsson 44
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; }
int main () { Rectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); return 0; }
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
Christian Ohlsson 47
Hund
färg
favoritben
smutsa_ned()
ät_katt()
Katt
färg
smutsa_ned()
klös_soffa() Kanin
färg
vikt
smutsa_ned()
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
Christian Ohlsson 49
Husdjur
färg
smutsa_ned()
Katt
klös_soffa()
Kanin
vikt
Hund
Favoritben
ät_katt()
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 52
/* 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;}
Parsern (YACC)
Christian Ohlsson 53
/* Christian Ohlsson 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;} ;
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
Christian Ohlsson 55
int ålder; float medelÅlder; string namn;
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
Christian Ohlsson 56
summa = 10 + 20;
operator
uttryck
operand
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:
Christian Ohlsson 57
svar = 2 + 5 * 7;
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
Christian Ohlsson 60
Skapa variabler
Fråga värde
Skriv ut värde
Fråga värde
Skriv ut värde
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 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
Christian Ohlsson 62
JavaScript if ( grade >= 25 ) alert(“passed”);
Poäng >= 25
True
False
Alert(”passed”)
Selektion: switch § Switch kan vara praktiskt att använda om du har
distinkta lägen att variera på
Christian Ohlsson 63
switch (uttryck) { case värde1 : satser 1; break; case värde2 : satser 2; break; ... case värdeN : satser N; break; default: satser; }
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
Christian Ohlsson 66
while ( villkor ) satser
while ( counter < 100 ) counter++;
§ Bra variant när man på förhand inte vet hur många gånger något kommer att upprepas
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
Christian Ohlsson 68
Funktion Indata Utdata
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:
Christian Ohlsson 70
function printDocument (theDocument) { // kod som löser uppgiften } printDocument (“resultat.xlsx”);
Nästlade funktioner
§ I vissa språk kan funktioner vara nästlade, dvs en funktion kan innehålla en funktion
Christian Ohlsson 71
function hypotenuse(a, b) { function square(x) { return x*x; } return Math.sqrt(square(a) + square(b)); }
Christian Ohlsson 72