App A Java programmering

Slides:



Advertisements
Liknende presentasjoner
12.Studienreise nach Finnland,
Advertisements

Kvinner og politikk Kvinnelig valgmobilisering i Nord-Norge: Glasstak eller etterslep? Marcus Buck.
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Tabeller av objekter Klassen ArrayList
C++ for Java-programmerere
Kap 04 Lister. Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
TIF seminar -Visual Basic (VBA) og RExcel Elisabeth Orskaug Norsk Regnesentral Oslo, 8. november 2011.
Kontrollstrukturer (Kapittel 3)
Uke 8 - Mer om: Objekter, klasser og pekere
Matematisk Induksjon.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
1 Kap 04 Datamodellering. 2 Datamodellering -Et språk for å analysere og beskrive virkeligheten. -En metode for å beskrive naturlige sammenhenger i data.
Objektorientert programmering Objektorientert systemutvikling
Objektorientert programmering i PHP del 2
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
IS-102 Klassedefinisjoner
Kapittel 14 Simulering.
C# for javaprogrammerere
En gang til!? .
Om Øvelse 7 Stoff relatert til øvelse 7 Generering av tilfeldige tall Bruk ting vi har lært før.
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.
Kap 06 Diskrete stokastiske variable
Chapter 02 Wavelets - Lineær algebra
Objekt Orientert Programmering (OOP). Objektorientering (OO)1/6 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på.
Kap 01 Innledning I dette kapitlet skal vi se litt følgende hovedtemaer: - Kursoppbygging - Hva er algoritmer og datastrukturer - Anvendelser - …
Kap 04 Datamodellering. Datamodellering -Et språk for å analysere og beskrive virkeligheten. -En metode for å beskrive naturlige sammenhenger i data som.
Kap 07 Stakk I dette kapitlet skal vi se på datastrukturen stakk.
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 05 Abstrakte datastrukturer. Arv - Implementering Interface / Abstrakte klasser / Konkrete klasser Concrete classAbstract class Interface extends.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Kap 10 Graf.
Design Patterns Iterator & Mediator. Gruppe 8 Presentasjonsgruppe:Resten av gruppen: Marianne AtesAndrè Johansen Tom Vidar LundeHege-Kristin Johansen.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
Grunnleggende PHP - Ronny Mandal1 Grunnleggende PHP.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 11 Programmering med og uten objekter: hva er forskjellen?
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
1 Pointere, referencer, struct’s mv.. 2 Erklæringer Eksempel på erklæringer int i, *ip, f ( ), *fip( ), (*pfi) ( ); Erklærer en integer, en pointer til.
1 INF5110 – 23. april, 2013 Svar på noen oppgaver til kap. 8 Beklager noe trykkfeil og rot på forelesningene Håper dette er bedre (lagt ut 24/4) Nå fredag.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
1 App A Java programmering. 2 Enkelt Java-program.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
INF1000 (Uke 12) Sortering og eksamensoppgaver Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
Matematikk 1 årskurs 26. oktober 2009
Kapittel 5 Vilkårssetningar og løkker. 5.1 Boolske uttrykk George Boole ( ), britisk matematikar Utvikla teori om logikk ved bruk av symbol i.
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
IS-102 Interaksjon med objekter
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Utskrift av presentasjonen:

App A Java programmering

Enkelt Java-program

Variabler / Konstanter

Primitive datatyper Datatype Byte Min Max Wrapper byte 1 -27 = 128 27-1 = 127 Byte short 2 -215 = -32768 215-1 = 32767 Short int 4 -231 231-1 Integer long 8 -263 263-1 Long float 4 1.4… x 10-45 3.4… x 1038 Float double 8 4.9… x 10-324 1.7… x 10308 Double char 2 0x0 0xffff Character boolean (false/true) Boolean

Aritmetiske operatorer Operator Kommentar Eksempel + Addisjon 4 + 7 - Subtraksjon 5 - 3 * Multiplikasjon 3 * 4 / Divisjon 8 / 2 % Modulus 7 % 4

Tilordnings-operatorer Uttrykk Betydning x += y x = x + y x -= y x = x - y x *= y x = x * y x /= y x = x / y

Innlesing fra tastatur

Selection if - else

Selection switch

Sammenlignings-operatorer Operator Kommentar Eksempel == Lik x == 3 != Ikke lik x != 3 < Mindre enn x < 3 > Større enn x > 3 <= Mindre enn eller lik x <= 3 >= Større enn eller lik x >= 3

Logiske operatorer Operator Betydning && Logisk AND || Logisk OR ^ Logisk XOR ! Logisk NOT

Bitvise operatorer Operator Betydning & 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) x&=y AND assignment (x = x & y) x|=y OR assignment (x = x | y) x^=y XOR assignment (x = x ^ y)

Operator prioritet Operator Betydning . [ ] ( ) Dot, array, parentes ++ -- ! - instanceof 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 countDown (n) print(n) IF (n > 1) THEN countDown(n-1) ENDIF countDown(5) n = 5 n = 4 n = 3 n = 2 n = 1 countDown (5) print(n) IF (n > 1) THEN countDown(5-1) ENDIF countDown (4) print(n) IF (n > 1) THEN countDown(4-1) ENDIF countDown (3) print(n) IF (n > 1) THEN countDown(3-1) ENDIF countDown (2) print(n) IF (n > 1) THEN countDown(2-1) ENDIF countDown (1) print(n) IF (n > 1) THEN countDown(1-1) ENDIF 5 4 3 2 1

Rekursjon Towers of Hanoi p1 p2 p3 Oppgave: Flytt n disker fra stativ p1 til stativ p3 slik at rekkefølgen beholdes ved bruk av følgende regler: 1. Flytt kun en disk av gangen. 2. Kun en disk på toppen kan flyttes. 3. Ingen disk må ligge oppå en mindre disk. 4. Stativ p2 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. p1 p2 p3 tower (n,p1,p2,p3) IF(n > 0) tower(n-1,p1,p3,p2) moveDisc from p1 to p3 tower(n-1,p2,p1,p3) ENDIF

Rekursjon Beregning av n-fakultet n! = 1*2*3*…*n

Rekursjon Beregning av n-fakultet n! = 1*2*3*…*n Iterasjon Rekursjon factorial (n) fac := 1 FOR (i := 1 TO n) DO fac := fac * i ENDFOR RETURN fac factorial (n) IF (n == 0) THEN RETURN 1 ELSE RETURN n*factorial(n-1) ENDIF n! = n*(n-1)!

Rekursjon Beregning av potens-uttrykk p = an Iterasjon Rekursjon power (a,n) p := 1 FOR (i := 1 TO n) DO p := a * p ENDFOR RETURN p 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 Eks: gcd(24,16) = 8 Iterasjon Rekursjon gcd (a,b) WHILE (a != b) DO IF (a > b) THEN a := a – b ELSE b := b – a ENDIF ENDWHILE RETURN a 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) Eks: a=24, b=16 a=a-b=24-16=8 b=b-a=16- 8=8

Cryptography Definition M1 P M2 A2 Cryptography is the practice and study of hiding information. Modern cryptography intersects the disciplines of mathematics, computer science and electrical engineering.

Crypthography RSA Strategy M M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X = EP(M)=Me(mod n) X 01 A ønsker å sende en melding M til P. Meldingen skal krypteres. A1 M1 P 02 P velger to ulike primtall p og q M2 A2 03 P beregner produktet n av p og q 04 P beregner (n) som produktet av p-1 og q-1 n,e A1 P 05 P velger et heltall e gitt ved: n,e A2 06 P beregner d gitt ved: EP(M1) A1 07 P sender krypteringsnøkkel n og e til A P 08 A sender kryptert melding X til P EP(M2) A2 09 P dekrypterer meldingen X og får M

Crypthography RSA Prime number M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X = EP(M)=Me(mod n) X Et primtall er et naturlig tall større enn 1 som ikke kan deles med noe annet tall enn 1 og seg 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.

Crypthography RSA gcd P A M M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X = EP(M)=Me(mod n) X

Crypthography RSA gcd extended 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) IF (b = 0) THEN d := a x := 1 y := 0 RETURN (d,x,y) ENDIF x2 := 1; x1 := 0; y2 := 0; y1 := 1 WHILE (b > 0) DO q := floor (a/b); r := a – q*b; x := x2 – q*x1; y := y2 – q*y1 a := b; b := r x2 := x1; x1 := x; y2 := y1; y1 := y ENDWHILE d := a; x := x2; y := y2 gcd (a, b) WHILE b > 0 DO r := a mod b a := b b := r ENDWHILE RETURN a

Crypthography RSA Modular inverse M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) X = EP(M)=Me(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. modInv (u, v) u1 := 1; u3 := u; v1 := 0; v3 := v; iter := 1 WHILE (v3 != 0) DO q := u3 / v3; t3 := u3 % v3; t1 := u1 + q * v1; u1 := v1; v1 := t1; u3 := v3; v3 := t3 // swap iter := – iter ENDWHILE IF (u3 != 1) THEN // make sure u3 := gcd(u,v) == 1 return 0; // error, no inverse exists IF (iter < 0) THEN // ensure a positive result inv := v – u1 ELSE inv := u1 RETURN inv

Crypthography RSA Example M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) = 65 X = EP(M)=Me(mod n) = 2790 X = 2790 01. Melding som skal sendes fra A til P : M = 65 02. P velger to primtall : p = 61 q = 53 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 P velger e gitt ved : 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

Crypthography RSA Example M = DP(X) = DP(EP(M)) = Xd (mod n) = (EP(M))d (mod n) = 65 X = EP(M)=Me(mod n) = 22 X = 22 01. Melding som skal sendes fra A til P : M = 8 02. P velger to primtall : p = 5 q = 7 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 P velger e gitt ved : 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

Rekursjon Fibonacci-tall Et tall i rekken er summen av de to foregående tall 0 1 1 2 3 5 8 13 21 … Iterasjon Rekursjon fib (n) IF (n == 1) THEN RETURN 0 ELSE IF (n == 2) THEN RETURN 1 ELSE a1 := 0 a2 := 1 FOR (i := 3 TO n) DO a := a1 + a2 a1 := a2 a2 := a ENDFOR RETURN a ENDIF 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 Fibonacci-tall Et tall i rekken er summen av de to foregående tall - Eksempel 0 1 1 2 3 5 8 13 21 … 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 poly (a,x,n) y := 0 FOR (i:=0 TO n) DO Iterasjon Rekursjon 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) IF (n == 0) THEN RETURN a[0] ELSE RETURN poly(a,x,n-1)*x+a[n] ENDIF poly (a,x,n) y := 0 FOR (i:=n DOWNTO 0) DO y := y*x + a[i] ENDFOR RETURN y

Rekursjon Søk etter gitt element s i en array a med størrelse n Iterasjon Rekursjon inArray (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 inArray (a,n,k,s) IF (s == a[k]) THEN RETURN true ELSE IF (k == n) RETURN false ELSE RETURN inArray(a,n,k+1,s)

Rekursjon Preorden traversering av binært tre ( a - b ) + c * ( e / f ) 1 Rekursjon Preorden traversering av binært tre 2 5 3 4 6 7 8 9 Iterasjon Rekursjon preorderTraversal (rot,info,left,right,stakk) 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] pop(stakk,ref) ENDWHILE preorderTraversal (rot) IF rot != slutt THEN prosess(info[rot]) preorderTraversal(left[rot]) preorderTraversal(right[rot]) ENDIF

Rekursjon - Eks: Fraktaler Triade L0 < M L0/3 < M < L0 triade(L) IF (L < M) THEN drawLine(L) ELSE triade(L/3) left(60) right(120) ENDIF L0/9 < M < L0/3 L0/27 < M < L0/9

Rekursjon - Eks: Fraktaler Triade - Detaljer 1 L0/9 < M < L0/3 triade(L) IF (L < M) THEN drawLine(L) ELSE triade(L/3) left(60) right(120) ENDIF L0/3 < M < L0 4 1 2 3 4 5 6 7 3 5 1 2 6 7

Rekursjon - Eks: Fraktaler Triade - Detaljer 2 L0/9 < M < L0/3 L0/9 < M < L0/3 L=L0 L=L0/3 L=L0/9 2 1 d t1 l1 t2 r t3 l2 t4 t1 l1 t2 r t3 l2 t4 3 4 L=L0/9 10 5 d 6 L=L0/9 triade(L) IF (L < M) THEN drawLine(L) ELSE triade(L/3) left(60) right(120) ENDIF 11 7 d L=L0/3 8 t1 l1 t2 r t3 l2 t4 L=L0/9 9 d

Rekursjon - Eks: Fraktaler Kvadrikk L0 < M L0/3 < M < L0 kvadrikk(L) IF (L < M) THEN drawLine(L) ELSE kvadrikk(L/3) left(90) right(90) ENDIF L0/9 < M < L0/3 L0/27 < M < L0/9

Rekursjon - Eks: Fraktaler 2dim L0 < M L0/2 < M < L0 todim(L) IF (L < M) THEN drawLine(L) ELSE todim(L/2) left(90) right(180) ENDIF L0/4 < M < L0/2 L0/8 < M < L0/4

Rekursjon - Eks: Fraktaler Tre L0 > M L0*GS > M tre(L) IF (L > M) THEN left(45) drawLine(L) tre(L*GS) jumpBack(L) right(90) ENDIF L0*GS2 > M L0*GS3 > M GS = 0.618

Det gylne snitt a b

Det gylne snitt

Lesing fra fil

Objektorientering (OO) 1/5 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 clsDataField 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) 4/5 Klasse Deklarasjon av data + operasjoner på ‘gjenstander’ av en gitt type Objekt 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_AnsNr Add_Navn Add_Adress Add_Tlf Get_AnsNr BeregnLonn ... Metodene deles av objektene 3 Nilsen Storgt 7 37088888 5 Hansen Havnegt 8 37055555 7 Olsen Reinv 9 37022222 Objekt 1 Objekt 2 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 Objekt Melding Melding

class / object - main

class / object - class A

Primitive typer x y = x y if (y == x) if (y == x) false true 3 x 3 5 y

Referensetyper x y = x y if (y == x) if (y == x) false true . y = x x . y . y . if (y == x) if (y == x) false true if (y.equals(x))

Parameteroverføring Overføring av primitive typer. Pass by value. int x = 3 f(x) x 3 f(int y) y 3 Overføring av referense typer. Pass by reference. A x f(x) x . f(A y) y

Klassemedlemmer public class A { // klasse A private int x; // attributt x public A( ) { // kontruktør this(0) } public A(int x) { // konstruktør this.x = x; public setX(int x) { // mutator this.x = x; public int getX( ) { // accessor return x;

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 2/4 private : 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 GetNr GetNavn

Aksesskontroll 4/4 Base Class Other Class or Object Derived Class private protected public Other Class or Object Derived Class

Arv - Base class / Derived class

Arv - Eksempel Navn Fødselsdato Person Navn Fødselsdato Avdeling Timelønn Beregning av lønn Ansatt Arvet fra Person Selger Navn Fødselsdato Avdeling Timelønn Beregning av lønn Salgsdistrikt Bonus Arvet fra Ansatt

Arv - Klassehierarki Transportmiddel Sykkel Bil Tog Fly Trehjul- Tandem Person- bil Laste- bil

Arv - Akesess-kontroll Base class A 1 Private 2 Protected 3 Public Derived class B 2 Protected 3 Public Forekomst av B Derived class C

Arv - Klassehierarki-diagram extends Concrete class Concrete class extends Abstract class Concrete class extends Interface Interface implements 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)

Arv og polymorfi A B public class A { public f (…) { … } A a = new A(…) a.f(…) // eksekverer A sin f public class B extends A { public f (…) { … } B b1 = new B(…) A b2 = new B(…) b1.f(…) // eksekverer B sin f b2.f(…) // eksekverer B sin f

Polymorfi Figur (getAreal) Figur s = new Sirkel(…) s.getAreal( ) ..... getAreal Trekant Sirkel ..... ..... getAreal getAreal

Polymorfi Figur (flytt) Figur s = new Sirkel(…) s.flytt( ) Figur flytt skjul nyeKoord vis Trekant Sirkel skjul skjul vis vis

Interface - Abstrakte klasser main implements Abstract class A_A Interface I_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 { // B eksisterer kun innenfor A int x; void f( ) { … // 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