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