Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Afleveringsopgave 4.2: Billedredigering Forelæsning 4.1
Find et element i en liste dIntProg, E14
findEn = Find et element i en liste dIntProg, E14 Algoritmeskabelon –Gennemsøger en liste og returnerer et element der opfylder en specificeret betingelse –Hvis ingen elementer opfylder betingelsen returneres null
Find alle elementer i en liste dIntProg, E14
findAlle = Find alle elementer i en liste dIntProg, E14 Algoritmeskabelon –Gennemsøger en liste og returnerer en liste med alle elementer der opfylder en specificeret betingelse –Hvis ingen elementer opfylder betingelsen er listen tom –Video 4.2 fra BlueJ bogen handler om findAlle
dIntProg, E14 Primitive typer double d; //real int i; //heltal d = 3.14; i = 7; d = i // ok i = d // ej ok! Ved assignments skal typerne være ”sammenlignelige” Det samme gælder for aktuelle/formelle parametre byte ≤ short ≤ int ≤ long ≤ float ≤ double char boolean ≤ 8 bit16 bit32 bit 64 bit heltal reals 32 bit 64 bit 1 bit16 bit
dIntProg, E14 Typeregel for assignment Assignmentsætningen giver kun mening når typen af udtrykket på højresiden er en subtype af variablen på venstresiden. v= exp; T(exp) ≤ T(v) byte ≤ short ≤ int ≤ long ≤ float ≤ double char boolean ≤ 8 bit16 bit32 bit 64 bit heltal reals 32 bit 64 bit 1 bit16 bit
dIntProg, E14 Forfremmelse og begrænsning Forfremmelse –En værdi af en subtype kan ved en implicit typekonvertering (automatisk) forfremmes til en værdi af en supertype Begrænsning –En værdi af en supertype kan ved en eksplicit typekonvertering (et såkaldt ”type cast”) begrænses til en værdi af en subtype Eksempel: 9 + (int) ((6 * 2) / 2.5) 9 + (int) ( 12 / 2.5) 9 + (int) ( 12.0 / 2.5) 9 + (int) Hvad bliver resultatet hvis vi fjerner (int) ?
dIntProg, E14 Eksempel: Integers og doubles double d1,d2; int i; d1= 3.14; d2= 7; i= d1; i= d2; i= (int) d1; i= (int) d2; int ≤ double // ok // ej ok // ok
Bemærk –Tegn (char) behandles som heltal: '2' + 1 = 51 = '3' –Strenge (String) konkateneres: "24" + 1 = "241" dIntProg, E14 Forfremmelse og begrænsning Javas subtyperelation: char ≤ int ≤ double Forfremmelse ( ) sker automatisk hvis nødvendigt evaluerer til 3.5 '2' + 1 evaluerer til 51 !!! Begrænsning ( ) sker kun ved eksplicitte cast (int) ( ) evaluerer til 3 (char) ('2' + 1) evaluerer til '3' !!!
dIntProg, E14 Konstanter (literals) TypeLiteral int2 double2.0 char'2' String"2" String"two"
dIntProg, E14 Identitet versus lighed Java modellerer == identitet ≈ ”samme som” equals()lighed ≈ ”magen til” I det virkelige liv skelner vi mellem objekter der er identiske og objekter der er af magen til hinanden –Hvis et barn siger, at det vil have den Pizza, som står på nabobordet, kommer tjeneren med en ”magen til”.
dIntProg, E14 Identitet mellem objekter person1 == person2 evaluerer til false “Fred” :Person person1person2 “Jill” :Person
dIntProg, E14 Identitet mellem objekter person1 == person2 “Fred” :Person person1person2 “Fred” :Person person1 == person2 evaluerer til false
dIntProg, E14 Identitet mellem objekter “Fred” :Person person1person2 “Fred” :Person person1 == person2 evaluerer til true
dIntProg, E14 Identitet mellem strenge "bye" :String input "bye" :String String input = reader.getInput(); if( input == "bye" ) {... } == tester identitet evaluerer til false
String input = reader.getInput(); if( input.equals("bye") ) {... } dIntProg, E14 Lighed mellem strenge "bye" :String input "bye" :String evaluerer til true equals tester lighed
Opsummering Vi har kigget på to algoritmeskabeloner, som kan anvendes i mange forskellige sammenhænge –FindEn gennemsøger en liste og returnerer et element der opfylder en specificeret betingelse –FindAlle gennemsøger en liste og returnerer en liste med alle elementer der opfylder en specificeret betingelse Primitive typer –Typehierarki –Regler for assigmentns og parametre – Forfremmelse og begrænsning Identitet versus lighed –for objekter generelt –strenge dIntProg, E14
Afleveringsopg 4.2: Billedredigering I får ”udleveret” et projekt med nedenstående to klasser –Samme som i billedredigering i mandags forelæsningen
dIntProg, E14 Afleveringsopgave – fortsat I skal implementere en række billedoperationer –darken –invert –solarize (inverterer mørke pixels) –mirrorHorizontal og mirrorVertical –rotate –blur (udjævn)