Grundläggande
datavetenskap, 4p
Kapitel 6
Programmeringsspråk
Utgående från boken
Computer Science
av: J. Glenn Brookshear
2004-11-29
ITM
1
Innehåll
•
•
•
•
•
2004-11-29
Historik
Programmeringsmönster
Subrutiner
Kodning
OOP – Objektorienterad programmering
ITM
2
Första generationens språk
• Maskinspråk
156C
166D
5056
306E
C000
2004-11-29
ITM
3
Andra generationens språk
• Assembler
• Identifierare (variabler)
– PRICE
– TAX
– TOTAL
2004-11-29
ITM
LD R5,PRICE
LD R6,TAX
ADDI R0,R5 R6
ST R0, TOTAL
HLT
4
Andra generationens språk II
• Assemblator
– Översätter från ”mnemonics”
till maskinkod
• Assemblerspråk
– Lågnivåspråk
– Processorberoende språk
2004-11-29
ITM
5
Tredje generationens språk
• Högnivåspråk
–
–
–
–
FORTRAN
COBOL
Pascal
assign Total theValue Price + Tax
C++
Total = Price + Tax
• Kompilerare: C, C++, Pascal
– Översättare till maskinspråk
• Interpreterare: BASIC, (Cint)
2004-11-29
ITM
6
Maskinoberoende och framtiden
• 3:e generationens språk ”mer maskinoberoende”
• Standardiseringsorgan för programmeringsspråk
– ANSI: American National Standards Institute
– ISO: International Organisation for Standardisation
• Visioner om nya programspråk där man kunde
ange en algoritm snarare är koden för algoritmen
2004-11-29
ITM
7
Programspråksutveckling
• Programspråkens generationsutveckling från
maskinspråk till mänskligt språk
1:a
2:a
3:e
4:e . . . ??
Människan
anpassar sig
till maskinen
2004-11-29
Maskinen
anpassar sig
till människan
ITM
8
Programmeringsparadigmer
(programmvaruutvecklingsparadigmer)
2004-11-29
ITM
9
Imperativt
programmeringsmönster
•
•
•
•
Sekvens av kommandon
Traditionella programmeringsmönstret
Används av CPU (fetch-decode-execute)
Man löser problem med algoritmer
Data som ska används i
programmet deklareras här.
Imperativa satser som
beskriver vad som ska hända
i programmet
2004-11-29
ITM
10
Deklarativt
programmeringsmönster
• ”Vad är problemet?”
• Man testar hypoteser
• Tillämpas vid simulering av t ex ekonomiska
system
• Programmeraren anger relationer mellan
parametrar som ska testas
• Nya problemlösande algoritmer inom
logiken har gett ett uppsving till detta
programmeringssätt
2004-11-29
ITM
11
Funktionsbaserat
programmeringsmönster
• Black box
y = f (x1, x2, x3,...)
16,666…
13, 47, -10
2004-11-29
ITM
12
Funktionsbaserat
programmeringsmönster
En funktion kan
bestå av flera
nästlade funktioner
som argument till
andra funktioner
(Find_diff (Find_sum Old_balance Credits) (Find_sum Debits))
2004-11-29
ITM
13
Objektorienterat
Programmeringsmönster
• Aktiva objekt
– Objektet består av data
– Objektet kan själva manipulera data
•
•
•
•
Moduler
Färdiga komponenter
Objekt kan kommunicera med varandra
Dagens trend
2004-11-29
ITM
14
Traditionell programmering
• Behandlar imperativa språk och OOP
– Ada, C, C++, C#, FORTRAN, Java, (Pascal)
– Appendix D: Bakgrund med ett exempel
• Ett program består av ett antal instruktioner
(statements)
• Tre sorters instruktioner:
– Deklarationer
– Satser som utför något
– Kommentarer
2004-11-29
ITM
15
Datatyper
• Heltal
int
short int
32 bitar
16 bitar
• Flyttal
float
double
32 bitar
64 bitar
• Tecken
char
8 bitar
• Sträng
string
n · 8 bitar
• Boolsk
bool
1 bit (16 bitar)
2004-11-29
ITM
16
Variabler och konstanter
• Variabel
int antal;
antal = 75;
• Konstant
const float moms=0.25;
totalPris = pris * (1+moms);
• Direktkodning
totalPris = pris * 1.25;
2004-11-29
ITM
17
Datastruktur
– arrangemang av data
• Vektor (array)
Index
Data
0
1
2
3
4
5
6 7
11,3 13,6 14,8 5,6 5,4 -2,3 -3,4 2,0
float tal[8]
tal[0] = 11.3;
tal[7] = 2.0
• Sammansatt
datatyp
2004-11-29
struct Person
{
string namn;
string adress;
int age;
};
ITM
18
Aritmetik
Tilldelning
totalPris = pris *(1+moms); // C++
totalPris := pris *(1+moms); {Pascal}
totalPris <- pris *(1+moms); // APL
Precedens
2·4 + 6/2
= 11
”vä till hö” = 7
”hö till vä” = 14
(Prioritet)
Överlagring
2004-11-29
2·(4 + 6)/2
= 10
”abra” + ”cadabra = ”abracadabra”
ITM
19
Kontroll av programflödet: val
if
if(B)
s1;
else
s2;
2004-11-29
if(tal==3)
s1;
else
s2;
ITM
20
Programflöde: Upprepning
while
while(B)
s1;
2004-11-29
ITM
21
Kontroll av programflödet: val II
switch
switch (N)
{
case C1: s1;
case C2: s2;
case C3: s3;
};
2004-11-29
ITM
22
Programflöde: Upprepning II
for
for(int Count=1; Count<4;Count++)
body;
2004-11-29
ITM
23
Strukturerad programmering
If, while,switch, for m.fl. används för att skapa strukturerade
program
Ostrukturerat
Strukturerat
2004-11-29
10
20
30
40
50
60
70
Goto 40
total = price +10;
Goto 70
if price < 50 then goto 60
Goto 20
total = price + 5
stop
if price< 50 then
Total = price + 5
else
Total = price + 10
stop
ITM
24
Kommentarer
• Kommentarer ökar programmets läsbarhet
int tal = 9/6; // OBS! Heltalsdivision
// moms ges som ett decimaltal t ex moms = 0.25)
float totalpris = pris*(1+moms);
/* Dessa tecken kommenterar ett avsnitt. Inte
bara en rad */
// Dessa tecken kommenterar resten av raden
2004-11-29
ITM
25
Subrutiner
• Procedurer
–
–
–
–
void PrintCheck(”Stefan”, 2000);
Delprogram
Lokala variabler
Globala variabler
Parametrar
• Funktioner
int PrintCheck(”Stefan”, 2000);
– En funktion returnerar ett svar
– För övrigt som en procedur
2004-11-29
ITM
26
Anrop av en procedur/funktion
2004-11-29
ITM
27
In- och utmatning
Pascal
ReadLn(tal);
WriteLn(tal);
C++
cin >> tal;
cout << tal;
2004-11-29
ITM
28
Kompilera, länka och ladda
1. Kompilera en eller flera källkodsfiler till
maskinkod (objektkod)
2. Länka och ladda en eller flera objektkod-moduler
till exekverbar kod
3. Ladda den exekverbara koden till arbetsminnet
a.cpp
Kompilering
b.cpp
Kompilering
2004-11-29
a.obj
b.obj
ITM
Länkning
a.exe
Ladda
Körning
29
Översättningsprocessen
1. Källkoden läses teckenvis tills en token är bildad
2. Token skickas till Parsern
3. Parsern frågar efter nya tokens tills att en sats
har bildats
4. Kodgeneratorn översätter satsen till maskinkod
2004-11-29
ITM
30
Programutvecklingsmiljöer
•
•
•
•
•
•
Editor
Kompilator
Körning
Debug
Administration av stora program
Exempel på utvecklingsmiljöer
–
–
–
–
2004-11-29
C++ Builder
Visual C++
Delphi
Visual Basic
ITM
31
Objektorienterad programmering
• I objektorienterad programmering (OOP)
används enheter som kallas objekt
• Ett bankkonto:
–
–
–
–
–
Kontonummer
Saldo
Uttag
Insättning
Visa saldo
2004-11-29
Olles konto
kontoNr: "121314"
saldo: 120,45
uttag()
insättning()
visaSaldo()
ITM
Evas konto
kontoNr: "112233"
saldo: 3200,00
uttag()
insattning()
visaSado()
32
OOP II
• Bankkontot är ett objekt
– Data
• Kontonummer
• Saldo
– Operationer på data - metoder
• Uttag
• Insättning
• Visa saldo
• En klass är en mall för hur ett objekt är
uppbyggt
2004-11-29
ITM
33
Klass
• Klassdefinition
( C++ )
class Konto
{
private:
int kontoNr;
float saldo;
Evas konto
kontoNr: "112233"
saldo: 3200,00
uttag()
insattning()
visaSaldo()
public:
void uttag(float ut);
void insattning(float in);
void visaSaldo(void);
};
2004-11-29
ITM
34
Klass II
• Klassens metod-definitioner
void Konto::uttag(float ut)
{
saldo = saldo – ut;
}
void Konto::insattning( float in)
{
saldo = saldo + in;
}
void Konto::visaSaldo(void)
{
cout << ”Kontots saldo är ” << saldo;
}
2004-11-29
ITM
35
Klass och objekt
• Skapa och använd objekt
Konto olle;
Konto eva;
olle.insattning(120.45);
eva.insattning(3200);
olle.visaSaldo();
eva.visaSaldo();
2004-11-29
// -> 120.45 kr
// -> 3200.00 kr
ITM
36
Kännetecken för OOP
• Inkapsling
–
–
–
–
Endast objektet kommer åt en skyddad egenskap.
private, public
cout << konto1.saldo är INTE tillåtet.
konto1.visaSaldo() är tillåtet.
• Arv
– En klass kan ärva egenskaper från en annan klass.
– Klassen Personbil kan ärva från t.ex Fordon.
• Polymorfism
– Samma meddelande (metod) ger olika svar från olika
klasser.
– Triangel.rita()
– Kvadrat.rita()
2004-11-29
ITM
37