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