App A Java programmering Enkelt Javaprogram Variabler Konstanter
App A Java programmering
Enkelt Java-program
Variabler / Konstanter
Primitive datatyper Datatype Byte Min Max Wrapper byte short int long 1 2 4 8 -27 = 128 -215 = -32768 -231 -263 27 -1 = 127 215 -1 = 32767 231 -1 263 -1 Byte Short Integer Long float double 4 8 1. 4… x 10 -45 4. 9… x 10 -324 3. 4… x 1038 1. 7… x 10308 Float Double char 2 0 x 0 0 xffff Character boolean (false/true) Boolean
Aritmetiske operatorer Operator Kommentar Eksempel + * / % Addisjon Subtraksjon Multiplikasjon Divisjon Modulus 4 5 3 8 7 +7 - 3 * 4 / 2 %4
Tilordnings-operatorer Uttrykk Betydning x += y x -= y x *= y x /= y x=x x=x + * / y y
Innlesing fra tastatur
Selection if - else
Selection switch
Sammenlignings-operatorer Operator Kommentar Eksempel == != < > <= >= Lik Ikke lik Mindre enn Større enn Mindre enn eller lik Større enn eller lik x x x == != < > <= >= 3 3 3
Logiske operatorer Operator Betydning && || ^ ! Logisk AND OR XOR NOT
Bitvise operatorer Operator Betydning & | ^ << >> >>> <<= >>>= x&=y x|=y x^=y Bitvis AND Bitvis OR Bitvis XOR Left shift Right shift Zero fill right shift Bitvis complement Left shift assignment (x = x << y) Right shift assignment (x = x >> y) Zero fill right shift assignment ( x = x >>>y) AND assignment (x = x & y) OR assignment (x = x | y) XOR assignment (x = x ^ y)
Operator prioritet Operator Betydning . [] () ++ -- ! - instanceof * / % + << >> >>> < > <= >= == != & ^ | && || ? : = += -= *= /= %= ^= &= |= <<= >>>= Dot, array, parentes Increment, decrement, not, complement, forekomst av Multiplikasjon, divisjon, modulus Addisjon, subtraksjon Bitvis left shift and right shift Sammenligningsoperatorer Lik, ulik AND XOR OR Logisk AND Logisk OR Forkortet if … then … else Tilordning
Loop for
Loop while
Loop do - while
Array
Function
Rekursjon Nedtelling n = 5, 4, 3, 3, 1 count. Down (n) print(n) IF (n > 1) THEN count. Down(n-1) ENDIF count. Down(5) n=5 n=4 count. Down (5) print(n) IF (n > 1) THEN count. Down(5 -1) ENDIF 5 n=3 count. Down (4) print(n) IF (n > 1) THEN count. Down(4 -1) ENDIF 4 n=2 n=1 count. Down (3) print(n) IF (n > 1) THEN count. Down(3 -1) ENDIF count. Down (2) print(n) IF (n > 1) THEN count. Down(2 -1) ENDIF count. Down (1) print(n) IF (n > 1) THEN count. Down(1 -1) ENDIF 3 2 1
Rekursjon Towers of Hanoi p 1 p 2 p 3 Oppgave: Flytt n disker fra stativ p 1 til stativ p 3 slik at rekkefølgen beholdes ved bruk av følgende regler: 1. 2. 3. 4. Flytt kun en disk av gangen. Kun en disk på toppen kan flyttes. Ingen disk må ligge oppå en mindre disk. Stativ p 2 kan benyttes som midlertidig lagring av disker.
Rekursjon Towers of Hanoi - Løsning for n = 3
Rekursjon Towers of Hanoi - Løsning for n = 4 er langt ’vanskeligere’ enn for n = 3 Strategi: Del et komplekst problem opp i mindre deler. Benytt rekursjon hvis de mindre delene kan løses ved samme prinsipp som det opprinnelige komplekse problemet.
Rekursjon Towers of Hanoi - Algoritme Del et komplekst problem opp i mindre deler. Benytt rekursjon. p 1 tower (n, p 1, p 2, p 3) IF(n > 0) tower(n-1, p 3, p 2) move. Disc from p 1 to p 3 tower(n-1, p 2, p 1, p 3) ENDIF p 2 p 3
Rekursjon Beregning av n-fakultet n! = 1*2*3*…*n
Rekursjon Beregning av n-fakultet Iterasjon factorial (n) fac : = 1 FOR (i : = 1 TO n) DO fac : = fac * i ENDFOR RETURN fac n! = 1*2*3*…*n Rekursjon factorial (n) IF (n == 0) THEN RETURN 1 ELSE RETURN n*factorial(n-1) ENDIF n! = n*(n-1)!
Rekursjon Beregning av potens-uttrykk Iterasjon power (a, n) p : = 1 FOR (i : = 1 TO n) DO p : = a * p ENDFOR RETURN p p = an Rekursjon power (a, n) IF (n == 1) THEN RETURN a ELSE RETURN a * power(a, n-1) ENDIF an = a*an-1
Rekursjon Største felles divisor Største heltall som går opp i a og b Iterasjon Rekursjon gcd (a, b) WHILE (a != b) DO IF (a > b) THEN a : = a – b ELSE b : = b – a ENDIF ENDWHILE RETURN a Eks: gcd(24, 16) = 8 a=24, b=16 a=a-b=24 -16=8 b=b-a=16 - 8=8 gcd (a, b) IF (a == b) THEN RETURN a ELSE IF (a > b) THEN RETURN gcd(a-b, b) ELSE RETURN gcd(a, b-a)
Cryptography Definition Cryptography M 1 A 1 M 2 A 2 P Cryptography is the practice and study of hiding information. Modern cryptography intersects the disciplines of mathematics, computer science and electrical engineering.
P Crypthography RSA Strategy M 1 A 1 M 2 A 2 n, e A 1 P M M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) 01 A ønsker å sende en melding M til P. Meldingen skal krypteres. 02 P velger to ulike primtall p og q 03 P beregner produktet n av p og q 04 P beregner (n) som produktet av p-1 og q-1 05 P velger et heltall e gitt ved: P X n, e A 2 06 P beregner d gitt ved: EP(M 1) A 1 07 P sender krypteringsnøkkel n og e til A 08 A sender kryptert melding X til P 09 P dekrypterer meldingen X og får M P EP(M 2) A A 2 X = EP(M)=Me(mod n)
P Crypthography RSA Prime number A M M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X X = EP(M)=Me(mod n) Et primtall er et naturlig tall større enn 1 som ikke kan deles med noe annet tall enn 1 og selv. De første 30 primtall: 2 -3 -5 -7 -11 -13 -17 -19 -23 -29 -31 -37 -41 -43 -47 -53 -59 -61 -67 -71 -73 -79 -83 -89 -97 -101 -103 -107 -109 -113 Aritmetikkens fundamentalteorem: Ethvert positivt heltall større enn 1 kan skrives som et entydig produkt av primtallsfaktorer. Eks: 60 = 2*2*3*5 Euklid: Det finnes uendelig mange primtall. Bevis: Anta at det finnes et endelig antall primtall. La N være produktet av alle disse primtallene. Betrakt tallet N + 1. Siden alle primtallene deler N, kan det ikke finnes noe primtall som N + 1 er delelig med, hvilket medfører at N + 1 må være et primtall. Men N + 1 må iflg antakelsen være større enn alle primtall og kan derfor ikke selv være et primtall. Dette er en selvmotsigelse. Følgelig er antakelsen om at det finnes et endelig antall primtall feil. Konklusjon: Det finnes et uendelig antall primtall. Det største kjente primtallet pr i dag er: 2 43112609 -1 og har 12. 978. 189 siffer.
P Crypthography RSA gcd A M M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X X = EP(M)=Me(mod n)
P Crypthography RSA gcd extended A M M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X = EP(M)=Me(mod n) X Euclidean Algorithm: Compute the greatest common divisor between a and b (a >= b) Extended Euclidean Algorithm: Same as Euclidean Algorithm, but involves extra variables to compute ax + vy = gcd(a, b) and is more efficient (a >= b). gcd (a, b) WHILE b > 0 DO r : = a mod b a : = b b : = r ENDWHILE RETURN a IF (b = 0) THEN d : = a x : = 1 y : = 0 RETURN (d, x, y) ENDIF x 2: = 1; x 1: = 0; WHILE (b > 0) DO q : = floor (a/b); x : = x 2 – q*x 1; a : = b; x 2: = x 1; ENDWHILE d : = a; x : = x 2; RETURN (d, x, y) y 2: = 0; y 1: = 1 r : = a – q*b; y : = y 2 – q*y 1 b : = r x 1: = x; y 2: = y 1; y 1: = y y : = y 2
P Crypthography RSA Modular inverse A M M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X Modular inverse: Computes (using the extended Euclidean algorithm) the inverse of u modulo v (u -1 (mod v) and returns either the inverse as a positive integer less than v, or zero if no inverse exists. mod. Inv (u, v) u 1 : = 1; u 3 : = u; v 1 : = 0; v 3 : = v; iter : = 1 WHILE (v 3 != 0) DO q : = u 3 / v 3; t 3 : = u 3 % v 3; t 1 : = u 1 + q * v 1; u 1: = v 1; v 1: = t 1; u 3: = v 3; v 3 : = t 3 iter : = – iter ENDWHILE IF (u 3 != 1) THEN return 0; IF (iter < 0) THEN inv : = v – u 1 ELSE inv : = u 1 RETURN inv // make sure u 3 : = gcd(u, v) == 1 // error, no inverse exists // ensure a positive result // swap X = EP(M)=Me(mod n)
P Crypthography RSA Example A M = 65 M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) = 65 X = 2790 X = EP(M)=Me(mod n) = 2790 01. Melding som skal sendes fra A til P : M = 65 02. P velger to primtall : p = 61 03. P beregner n gitt : n = pq = 61*53 = 3233 04. P beregner (n) gitt ved : (n) = (3233) = (p-1)(q-1) = (61 -1)*(53 -1) = 3120 05. P velger en e gitt ved : : 1 < e < (n) = (3233) = 3120 e og (n) = 3120 er innbyrdes primiske e = 17 06. P beregner d gitt ved : d = e-1 (mod (n)) = 17 -1(mod 3120) = 2753 07. P sender public key til : (n, e) = (3233, 17) 08. A sender følgende krypterte melding X til P : X = Me(mod n) = 6517 (mod 3233) = 2790 09. P dekrypterer meldingen X fra A : M = Xd(mod n) = 27902753 (mod 3233) = 65 P velger e gitt ved q = 53
P Crypthography RSA Example A M=8 M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) = 65 X = 22 X = EP(M)=Me(mod n) = 22 01. Melding som skal sendes fra A til P : M=8 02. P velger to primtall : p=5 03. P beregner n gitt : n = pq = 6*7 = 35 04. P beregner (n) gitt ved : (n) = (35) = (p-1)(q-1) = (5 -1)*(7 -1) = 24 05. P velger en e gitt ved : : 1 < e < (n) = (35) = 24 e og (n) = 24 er innbyrdes primiske e = 11 06. P beregner d gitt ved : d = e-1 (mod (n)) = 11 -1(mod 24) = 11 07. P sender public key til : (n, e) = (35, 11) 08. A sender følgende krypterte melding X til P : X = Me(mod n) = 811 (mod 35) = 22 09. P dekrypterer meldingen X fra A : M = Xd(mod n) = 2211 (mod 35) = 8 P velger e gitt ved q=7
Rekursjon 0 1 1 2 3 5 8 13 21 … Fibonacci-tall Et tall i rekken er summen av de to foregående tall Iterasjon fib (n) IF (n == 1) THEN RETURN 0 ELSE IF (n == 2) THEN RETURN 1 ELSE a 1 : = 0 a 2 : = 1 FOR (i : = 3 TO n) DO a : = a 1 + a 2 a 1 : = a 2 : = a ENDFOR RETURN a ENDIF Rekursjon fib (n) IF (n == 1) THEN RETURN 0 ELSE IF (n == 2) THEN RETURN 1 ELSE RETURN fib(n-2) + fib(n-1) ENDIF
Rekursjon 0 1 1 2 3 5 8 13 21 … Fibonacci-tall Et tall i rekken er summen av de to foregående tall - Eksempel Fibonacci-tallene beskriver bl. a. : Antall kronblader på blomster og antall blader. Antall par kaniner i måned nr n i en idealisert kaninbestand: - Den første måneden blir det bare født ett kaninpar - Nyfødte kaninpar blir produktive fra og med den andre måneden og utover. - Innavl eksisterer ikke - Hver måned produserer hvert kjønnsmodent par et nytt kaninpar - Kaninene dør aldri
Rekursjon Polynom Iterasjon poly (a, x, n) y : = 0 FOR (i: =0 TO n) DO y : = y + a[i]*power(x, n) ENDFOR RETURN y poly (a, x, n) y : = 0 FOR (i: =n DOWNTO 0) DO y : = y*x + a[i] ENDFOR RETURN y Rekursjon poly (a, x, n) IF (n == 0) THEN RETURN a[0] ELSE RETURN poly(a, x, n-1)*x+a[n] ENDIF
Rekursjon Søk etter gitt element s i en array a med størrelse n Iterasjon in. Array (a, n, s) i : = 1 WHILE (i<=n) AND (s != a[i]) DO i : = i + 1 ENDWHILE IF (i>n) THEN RETURN false ELSE RETURN true ENDIF Rekursjon in. Array (a, n, k, s) IF (s == a[k]) THEN RETURN true ELSE IF (k == n) RETURN false ELSE RETURN in. Array(a, n, k+1, s)
(a-b)+c*(e/f) Rekursjon 3 Preorden traversering av binært tre Iterasjon 1 2 4 5 6 7 8 Rekursjon preorder. Traversal (rot, info, left, right, stakk) preorder. Traversal (rot) slutt : = 0 ref : = rot IF ref = slutt THEN tom : = true ELSE tom : = false push(stakk, slutt) WHILE ref != slutt prosess(info[ref]) IF right[ref] != slutt THEN push(stakk, right[ref]) ENDIF ref : = left[ref] IF ref = slutt THEN pop(stakk, ref) ENDIF ENDWHILE ENDIF IF rot != slutt THEN prosess(info[rot]) preorder. Traversal(left[rot]) preorder. Traversal(right[rot]) ENDIF 9
Rekursjon - Eks: Fraktaler Triade L 0 < M L 0/3 < M < L 0/9 < M < L 0/3 L 0/27 < M < L 0/9 triade(L) IF (L < M) THEN draw. Line(L) ELSE triade(L/3) left(60) triade(L/3) right(120) triade(L/3) left(60) triade(L/3) ENDIF
Rekursjon - Eks: Fraktaler Triade - Detaljer 1 L 0/9 < M < L 0/3 triade(L) IF (L < M) THEN draw. Line(L) ELSE triade(L/3) left(60) triade(L/3) right(120) triade(L/3) left(60) triade(L/3) ENDIF L 0/3 < M < L 0 4 1 2 3 4 5 6 7 3 1 2 5 6 7
Rekursjon - Eks: Fraktaler Triade - Detaljer 2 L=L 0 t 1 l 1 t 2 r t 3 l 2 t 4 L=L 0/3 1 t 1 l 1 t 2 r t 3 l 2 t 4 10 11 L=L 0/9 2 L 0/9 < M < L 0/3 d 3 4 L=L 0/9 5 d 6 7 L=L 0/3 t 1 l 1 t 2 r t 3 l 2 t 4 L 0/9 < M < L 0/3 L=L 0/9 d 8 L=L 0/9 9 d triade(L) IF (L < M) THEN draw. Line(L) ELSE triade(L/3) left(60) triade(L/3) right(120) triade(L/3) left(60) triade(L/3) ENDIF
Rekursjon - Eks: Fraktaler Kvadrikk L 0 < M L 0/3 < M < L 0/9 < M < L 0/3 L 0/27 < M < L 0/9 kvadrikk(L) IF (L < M) THEN draw. Line(L) ELSE kvadrikk(L/3) left(90) kvadrikk(L/3) right(90) kvadrikk(L/3) left(90) kvadrikk(L/3) ENDIF
Rekursjon - Eks: Fraktaler 2 dim L 0 < M L 0/2 < M < L 0/4 < M < L 0/2 L 0/8 < M < L 0/4 todim(L) IF (L < M) THEN draw. Line(L) ELSE todim(L/2) left(90) todim(L/2) right(180) todim(L/2) left(90) todim(L/2) ENDIF
Rekursjon - Eks: Fraktaler Tre L 0 > M L 0*GS 2 > M L 0*GS 3 > M tre(L) IF (L > M) THEN left(45) draw. Line(L) tre(L*GS) jump. Back(L) right(90) draw. Line(L) tre(L*GS) jump. Back(L) left(45) ENDIF GS = 0. 618
Det gylne snitt a b
Det gylne snitt
Lesing fra fil
Objektorientering (OO) 1/5 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på
Objektorientering (OO) 2/5 Norske pionerer Grunnleggere av det første objektorienterte dataspråk, Simula: Kristen Nygaard og Ole-Johan Dahl. Nobel Prize of Computing: A. M. Turing Award
Objektorientering (OO) 3/5 Window eksempel Klassen cls. Data. Field er tillagt egenskapen magenta bakgrunnsfarge.
Objektorientering (OO) 4/6 Flash eksempel Klassen Joystick inneholder et grensesnitt som forteller om joystickens posisjon (x, y) og vinkel. Klassen Car leser Joystickens data for å orientere seg om sin videre bevegelse
Objektorientering (OO) Klasse Objekt 4/5 Deklarasjon av data + operasjoner på ‘gjenstander’ av en gitt type En forekomst (variabel) av en klasse Klasse Abstrakt nivå Fysisk nivå Objekt
Objektorientering (OO) 5/5 Klassen Ansatt Data gir duplikater for hvert objekt Data Ansatt Nr Navn Adresse Tlf. . . Metoder Add_Ans. Nr Add_Navn Add_Adress Add_Tlf Get_Ans. Nr Beregn. Lonn. . . 3 Nilsen Storgt 7 37088888 5 Hansen Havnegt 8 37055555 Objekt 1 Metodene deles av objektene 7 Olsen Reinv 9 37022222 Objekt 3
Objektorientert programmering (OOP) La objektene ta hånd om seg selv (intern struktur, . . . ). Kommuniser med objektene via et grensesnitt som er uavhengig av intern struktur i objektene. Grensesnitt Melding Objekt Melding
class / object - main
class / object - class A
Primitive typer x 3 y 5 y = x if (y == x) false x 3 y 3 if (y == x) true
Referensetyper x . y = x if (y == x) false if (y. equals(x)) x . y . if (y == x) true
Parameteroverføring Overføring av primitive typer. Pass by value. Overføring av referense typer. Pass by reference. int x = 3 f(x) A x f(x) x 3 y 3 x . f(int y) f(A y) y
Klassemedlemmer public class A { private int // klasse A x; public A( ) { this(0) } public A(int x) { this. x = x; } public set. X(int x) { this. x = x; } public int get. X( ) { return x; } } // attributt x // kontruktør // konstruktør // mutator // accessor
Aksesskontroll 1/4 private Tilgang kun av klassen selv protected Tilgang kun av klassen selv samt arvede klasser public Tilgang av alle <default> Tilgang innenfor gjeldende pakke
Aksesskontroll private : 2/4 Strengeste aksess-kontroll. Kun funksjoner i klassen selv kan aksessere et private klasse-medlem. Avledede klasser eller forekomster har ingen aksess til private medlemmer i en parent-klasse. protected : Kun klassen selv eller avledede klassers funksjoner har aksess til protected medlemmer. Forekomster har ingen aksess til protected medlemmer. public Medlemmer deklarert vha public har man ubegrenset aksess til, dvs public medlemmer kan aksesseres av en hvilken som helst funksjon. :
Aksesskontroll ä ä ä 3/4 Attributter skal skjules for brukeren av klassen. Brukeren av klassen skal ikke ha tilgang til informasjon om klassens interne struktur. Brukeren skal benytte en protokoll til klassen. - Brukeren sender meldinger til objektet. - Brukeren kaller metodene. Informasjons-skjuling Nr Navn Init Get. Nr Get. Navn
Aksesskontroll 4/4 Base Class private protected public Other Class or Object Derived Class
Arv - Base class / Derived class A Base class B Derived class
Arv Person Ansatt Selger - Eksempel Navn Fødselsdato Avdeling Timelønn Beregning av lønn Arvet fra Person Navn Fødselsdato Avdeling Timelønn Beregning av lønn Salgsdistrikt Bonus Arvet fra Ansatt
Arv - Klassehierarki Transportmiddel Sykkel Trehjulsykkel Tandem Bil Personbil Tog Lastebil Fly
Arv - Akesess-kontroll 1 Private Base class A 2 Protected 3 Public Derived class B 2 Protected 3 Public Forekomst av B Derived class C
Arv - Klassehierarki-diagram Concrete class Abstract class Interface extends implements Concrete class Interface Concrete class
Arv - main
Arv - class A (1/2)
Arv - class A (2/2)
Arv - class B extends A (1/2)
Arv - class B extends A (2/2)
A Arv og polymorfi B public class A { public f (…) { … } } A a = new A(…) a. f(…) // eksekverer A sin f public class B extends A { public f (…) { … } } B b 1 = new B(…) A b 2 = new B(…) b 1. f(…) // eksekverer B sin f b 2. f(…) // eksekverer B sin f
Polymorfi Figur (get. Areal) Figur s = new Sirkel(…) Figur s. get. Areal( ). . . get. Areal Trekant Sirkel. . get. Areal
Polymorfi Figur (flytt) Figur s = new Sirkel(…) Figur s. flytt( ) flytt skjul nye. Koord vis Trekant Sirkel skjul vis
Interface - Abstrakte klasser main implements Interface I_A Abstract class A_A extends Concrete class A
Interface - Abstrakte klasser interface I_A
Interface - Abstrakte klasser abstract class A_A (1/2)
Interface - Abstrakte klasser abstract class A_A (2/2)
Interface - Abstrakte klasser class A
Indre klasser (non-static) public class A { int y; public class B { int x; void f( ) { … … } } // B eksisterer kun innenfor A // this refererer til B // A. this refererer til A } B kan instantieres kun av en ikke-statisk metode innenfor A. B kan aksessere alle medlemmer av A og B direkte.
Indre klasser (static) public class A { int y; public static class B { // B kan eksistere alene int x; void f( ) { … // this refererer til B … // A. this refererer til A } } } B kan eksistere alene (uten A-forekomst)og kan instantieres ved A. B b = A. B( ). Deretter kan f eksekveres ved b. f( ). B kan kun aksessere static medlemmer av A.
Indre klasser - main
Indre klasser - class A (1/3)
Indre klasser - class A (2/3)
Indre klasser - class A (3/3)
END
- Slides: 91