1
Central-enhet
BIOS
PM
CPU
Skivminne
Sekundärminnesenheter
(SM)
CD-läsare
Diskett-läsare
Stefan Möller
2
Primär-minne (PM)
Processor (CPU)
0
11001010 00101101 10101100 10101101
4
00101101 10101100 10101101 10101010
R1
8
10101011 01101101 10011100 11010011
R2
12
00101101 10101100 10101101 11010001
16
11001010 00101101 10101100 10101101
20
01011100 01111001 00110100 11101001
24
10011100 10101011 10101100 10101101
28
11001010 00101101 10101100 01110001
Ett antal register ...
Styrenhet
Aritmetisk
enhet
Vektor av minnesceller
8 bitar = 1 byte, 4 byte = 1 ord
t ex 256 MB (megabyte - miljoner byte)
program-instruktioner & -data
Stefan Möller
3
Olika nivåer av program
Maskinkod (binär kod)
Ett antal (t ex 32) ettor/nollor
100111001001111100011010
Krångligt att skriva direkt
Assemblerkod
Mnemoniska namn för instruktioner
Add #25 to R3
Ett-till-ett matchning mot maskinkod
Olika instruktioner beroende på dator
Högnivåspråk
Mer kraftfulla instruktioner
if (x!=5) x+=10;
Ger 5-10 maskininstruktioner
Ej beroende av datorsystem
T ex Pascal, C, C++, Java
Stefan Möller
4
Kod i högnivåspråk måste översättas till maskinkod.
Kompilering:
Källkod i
högnivåspråk
Kompilator
Olika beroende
på datorsystem
Maskinkod som
kan exekveras i
datorsystemet
Interpretering:
Källkod i
högnivåspråk
Interpretator
Olika beroende på datorsystem
Läser en instruktion i taget, översätter
till maskinkod och exekverar
Stefan Möller
5
Programmering
Indata
Program
Utdata
Data kan vara av olika typ:
12
43
73.67
true
”Kalle Nilsson”
’X’
730512
”Stockholm”
Bil:
Volvo
ABC 123
Röd
7300 mil
Måste representeras i programmet.
Stefan Möller
6
Javas Primitiva Datatyper
Heltalstyper:
byte
short
int
long
8 bitar
16 bitar
32 bitar
64 bitar
Flyttalstyper:
float
double
32 bitar
64 bitar
Övriga:
char
boolean
Unicode 16 bitar
true / false
Textsträngar (INTE primitiv datatyp):
String
Stefan Möller
7
Litteraler
Deklaration
Tilldelning
Utskrift
Inläsning
Selection
Iteration
Stefan Möller
if-satsen
if (<villkor>)
<programsats>;
if (<villkor>)
<programsats1>;
else
<programsats2>;
Nästlade if-satser
8
int x=8;
if (x>5)
System.out.println(x);
if (x<10)
x++;
else
x--;
//Kan även skrivas så här:
if (x<10) x++; else x--;
if (x>25)
if (x<50)
System.out.println(”Mellan 25 och 50”);
else
System.out.println(”50 eller större”);
else
System.out.println(”25 eller mindre”);
Stefan Möller
9
Villkor (booleska uttryck)
Jämförelse-operatorer:
< <= >
(operanderna enkla datatyper)
>=
==
!=
Logiska operatorer:
&& ||
!
(fullständigt utvärderande: & | )
String’ar jämförs INTE med dessa operatorer.
String s1=”Hej”, s2=”Hopp”;
if ( s1.equals(s2) ) ... ;
//equals returnerar true om INNEHÅLLET i s1 och s2 är lika
int x = s1.compareTo(s2);
//compareTo returnerar ett positivt tal om s1 > s2
//ett negativt tal om s1 < s2 samt 0 om s1 = s2
Stefan Möller
10
switch-satsen
switch (<uttryck>) {
case <värde>:
<programsatser>
case <värde>:
<programsatser>
default:
<programsatser>
}
”Hoppar” till den case som
matchar uttrycket. Exekverar
resten av programsatserna.
break-satsen bryter switch
break;
(kan även användas på loopar)
Uttryck och värde måste vara av
heltalstyp eller char
int x, tal=10;
//x får ett slumpvärde
switch(x){
case 1:
System.out.println(tal);
case 2: case 3:
System.out.println(++tal);
case 4:
System.out.println(tal++);
default:
System.out.println(tal);
}
Stefan Möller
11
while - loopen
while (<villkor>)
<programsats>;
<villkor> - booleskt uttryck
<programsats> - valfri programsats
om flera satser inom { } - block
do
break;
continue;
<programsats>;
while (<villkor>);
false
villkor
//bryter loopen
//börja om nästa varv
sats
true
villkor
sats
true
false
Stefan Möller
12
for-loopen
for (<initiering> ; <villkor> ; <uppräkning>)
<programsats>;
initiering
Skriv ut talen 1 - 10:
for (int x=1; x<=10; x++)
System.out.println(x);
false
villkor
true
Man kan utelämna någon del:
programsats
int x=1;
for ( ; x<=10; x++)
System.out.println(x);
uppräkning
for (int y=1; y<=10; )
System.out.println(y++);
Stefan Möller
Skriv en programsnutt som skriver ut en tabell över
celsius-temperaturer & motsvarande fahrenheit-temperaturer
var 10’de celsius i intevallat 10-90:
Förväntat utseende:
Celsius Fahrenheit
----------------------10
50
20
68
30
86
40
104
50
122
60
140
70
158
80
176
90
194
System.out.println("Celsius Fahrenheit");
System.out.println("-----------------------");
for (int cels=10; cels<100; cels+=10){
int fahr=(int)(9.0/5.0*cels+32);
System.out.println("
"+cels+"
"+fahr);
}
Stefan Möller
13
14
Operatorer
Prioritetsordning
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Operatorer
[] . (metod anrop) ++ -++ -- + - ~ !
new (cast)
* / %
+ << >> >>>
< <= > >=
instanceof
== !=
&
^
|
&&
||
?:
Stefan Möller
= += -= *= /= %=
15
Flera variabler av samma sort - arrayer
Varje variabel som deklareras får ett utrymme i primärminnet.
int tal;
double d;
tal=43;
d=7.85;
tal
43
7.85
d
En array deklareras som <typ>[ ]
int[] arr;
arr
Utrymmet måste skapas, görs med new
arr = new int[5];
arr[0]=28;
arr
28
arr[1]=43;
0
arr[2]=12;
arr[3]=19;
arr[4]=193;
(inget utrymme finns...)
43
12
19
193
1
2
3
4
Stefan Möller
16
Array
Deklaration:
int[] arr;
int arr[];
//Alternativ deklarering
Skapas med new
arr=new int[25];
//Alltid index från 0 och uppåt
Indexering med [<index>]
arr[3]=12;
Längden kan kollas med length
int max=arr.length;
//max får värdet 25
Initiering vid deklaration
int[] kvadrater={0, 1, 4, 9, 16, 25, 36};
Stefan Möller
17
Om vi vill representera mer komplexa objekt?
T ex bilar som har ett bilmärke, ett registreringsnummer, en färg samt
en mätarställning.
Volvo
ABC 123
Röd
7300
Saab
XYW 987
Vit
3800
Fiat
MSQ 545
Svart
12900
Att ”samla ihop” flera attribut på detta sätt görs i klasser.
Vi behöver alltså nu en klass Bil som skall ha attributen
märke, regnummer, färg och mätarställning.
Klasser kan innehålla mer än attribut, exempelvis konstruktorer och
metoder.
Stefan Möller
18
Deklaration av klass Bil:
class Bil{
String märke, regnummer, färg;
int mätarställning;
}
Varje klass läggs lämpligen i en egen fil. Denna Bil-klass läggs
alltså då på filen Bil.java
Skapa objekt
Referenser
Åtkomst
null
Stefan Möller
19
class - deklaration
class <class-namn>{
Olika data som beskriver
klassen, t ex märke, mätarställning
hos en Bil
<variabel-deklarationer>
<konstruktorer>
Anropas när ett objekt av klassen
skapas (med new <classnamn>)
<metoder>
<class-deklarationer>
}
Olika operationer som kan
göras på klassen
En klass kan ha ”inre” klasser
Stefan Möller
20
Metoder - subrutiner
<modifierare> <returtyp> <namn> (<argumentlista>){
<lokala deklarationer och programsatser>;
}
modifierare anger olika egenskaper, t ex för åtkomst
public, private, protected, abstract, static, final, native, synchronized
returtyp vad som returneras. Valfri datatyp, även referenser till classer eller arrayer.
argumentlista lista över eventuella indata till metoden. Om inga argument ( ).
int getInt(){...}
static void skriv(int x, int y, String str){...}
Java ”letar upp” och startar metoden main vid programmets start:
public static void main(String[] args){...}
Stefan Möller
21
Argumentöverföring
Retur-värde
Överlagring
klass-metoder
instans-metoder
Stefan Möller
22
Slumptal - biblioteks-klassen Random
Det finns ett antal fördefinierade klasser i Java’s API-bibliotek.
Beskrivs i API-dokumentationen:
http://java.sun.com/j2se/1.5.0/docs/api/
Klassen Random används om man vill ha slumptal. Random ligger i
java.util - delbiblioteket.
Innehåller metoder för att få slumptal, t ex:
int nextInt()
int nextInt(int n)
boolean nextBoolean()
double nextDouble()
returnerar ett slumpmässigt heltal
returnerar ett slumptal mellan 0 och n-1
(nextInt(100) returnerar alltså ett tal mellan 0 och 99)
returnerar true eller false
returnerar ett tal mellan 0.0 och 1.0
Stefan Möller
Ett program som skriver ut 10 slumptal mellan 1 och 100:
import java.util.*;
class SlumpTest{
public static void main(String[] args){
Random slump = new Random();
for (int x=1; x<=10; x++){
int tal = slump.nextInt(100) + 1;
System.out.println(tal);
}
}
}
import-satsen kan utelämnas. Man måste då skriva:
java.util.Random slump = new java.util.Random();
Man kan skriva:
import java.util.Random;
Stefan Möller
23
24
Klassen Math
Ligger på java.lang - delbiblioteket.
Allt som ligger i java.lang kan användas direkt, man behöver alltså INTE
göra: import java.lang.*;
I Math-klassen finns ett antal statiska metoder och variabler, t ex
static double PI
pi med jättemånga decimaler...
static int abs(int a)
returnerar absolutbeloppet av a
static double log(double a)
returnerar naturliga logaritmen av a
static double pow(double a, double b)
returnerar a upphöjt till b
plus många fler... Eftersom metoderna är statiska så kan de anropas utan
att man skapar ett Math-objekt:
double dd = Math.sqrt(14);
double omkrets = Math.PI * diameter;
Stefan Möller
25
Jämförelse av anrop på metoder i Random och Math:
Random slump = new Random();
int tal = slump.nextInt(100);
double d = 4.876;
int x = (int)Math.round(d);
nextInt är en instansmetod. Man måste alltså
skapa ett Random-objekt
innan nextInt kan anropas
round är en klassmetod.
static long round(double d);
Kan alltså anropas via
klassnamnet
Stefan Möller