Föreläsning 2 - Intro till Java Sammanfattning av Lektion 1 (kap 2): Vad behövs för att kunna programmera? DrJava (t ex) Java (installera först!) Reserverade ord (t ex if, while...) Primitiva variabler (t ex int, double, char, boolean) Typomvandling Utskrifter och inläsning (Hur lagras information i datorn) Ev. Intro till Objektorienterad programmering Fö2 - Intro till Java och intro till OOP 1 (kap 3)
Vad behövs för att kunna programmera? λ Java = program som översätter (för människan begripliga) instruktioner till datorspråk (javabyte kod/maskinkod): Kompilator +... Andra exempel: C++, Python, etc λ DrJava = en editor (~ordbehandlare) anpassad för programmering. Andra exempel: BlueJ, Eclipse, etc (IDE) Fö2 - Intro till Java och intro till OOP 2
Vad är DrJava? DrJava är ett (gratis)program för att programmera i Java Utvecklat vid Rice University, USA DrJava är skrivet i Java Program för att programmera i kallas för IDE= Integrated Development Environment Med DrJava kan man Skapa Javaprogram (definitions pane) Testa javasatser (interactions pane) Lista alla öppna filer (files pane) Fö2 - Intro till Java och intro till OOP 3
DrJava Med kursboken följer en CD med många program (sk. javaklasser) för hantering av grafik, bilder, ljud, etc. DrJava använder i sin tur andra program som finns på datorn för att lösa sin uppgift Javakompilatorn Javainterpretatorn Fö2 - Intro till Java och intro till OOP 4
Java är ett programmeringsspråk högnivåspråk objektorienterat språk innehåller många hjälpprogram (klasser) Internet/Webben Grafik Användargränssnitt Standardprogram, t ex Math mm. är fritt kan användas på alla typer datorer Fö2 - Intro till Java och intro till OOP 5
Java När java installeras på datorn får ni bl.a följande: λ Javakompilatorn λ Javainterpretatorn λ Många färdiga javaprogram, sk. klasser som hör till språket Java, t.ex. Math, JoptionPane I kursen kommer ni att använda javaprogram: De standardprogram som följer med Java t ex Math, se http://download.oracle.com/javase/7/docs/api/ De specialprogram som följer med boken, t ex Turtle och World De program ni skriver själva Fö2 - Intro till Java och intro till OOP 6
Java Språket har strikta regler för hur det skall skrivas, dvs språkets grammatik, det kallas språkets syntax. Språket byggs upp av identifierare och reserverade ord som sätts ihop till satser. Identifierare är det som programmeraren själv hittar på namn för, t.ex. variabelnamn, Reserverade ord är de ord som finns inbyggda i språket. En sats är en instruktion. En sådan avslutas normalt med ett semikolon Ex: double xkoordinat = 18.4; Fö2 - Intro till Java och intro till OOP 7
Reserverade ord i språket Java abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while Ord i fet stil används i kursen Fö2 - Intro till Java och intro till OOP 8
Variabler Deklareras att vara av en specifik datatyp, tex int, double, char Har ett namn: börjar på _ eller bokstav En primitiv variabel kan innehålla ett värde, t.ex. ett heltal Vid deklarationen reserveras ett minnesutrymme för variabelns värde. Variabelns namn är ett alias för adressen till minnesutrymmet. Fö2 - Intro till Java och intro till OOP 9
Variabler Exempel: Vi deklarerar och initierar variabler som är primitiva datatyper: int tal; (deklarera en variable) int x=67;(deklarera och initiera) double x=2.5; char c= A'; boolean sommar=true; Vi går igenom på tavlan hur dessa variabler lagras i datorns minne. Detaljer finns under sidorna 22-34 i denna presentation som börjar med rubriken Hur lagras data i datorn? Fö2 - Intro till Java och intro till OOP 10
Åtta primitiva datatyper Fyra heltalstyper (numeriska): byte, short, int, long Två flyttalstyper (numeriska) float, double En teckentyp: char En boolskt typ, sant eller falskt (default): boolean Fö2 - Intro till Java och intro till OOP 11
Primitiva datatyperna byte, boolean short int long float 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits double 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits char 8 bits 8 bits Fö2 - Intro till Java och intro till OOP 12
De numeriska datatyper Typ Minnesutrymme Min/Maxvärde byte 8 bit -128 127 short 16-32768 32767 int 32-2147483648 2147483647 long 64 +/- 9 x 10 18 float 32 +/- 3.4 x 10 38, 7 siffrors nogr. double 64 +/- 1.7 x 10 308, 15 siffrors nogr. Fö2 - Intro till Java och intro till OOP 13
Numeriska datatyper, några viktiga kom-i-håg Heltalsdivision (decimaler huggs av) int a = 2, b = 3, c = a/b; System.out.println(c); //Vad skrivs ut? System.out.println(7/4); //Vad skrivs ut? Modulusoperatorn % (resten vid division) int x = 7, y = 3, z = x%y; System.out.println(z); //Vad skrivs ut? System.out.println(10%5); //Vad skrivs ut? Fö2 - Intro till Java och intro till OOP 14
Numeriska datatyper, några viktiga kom-i-håg λ ++ och - - operatorerna x++; System.out.println(x); //Vad skrivs ut? λ Ändra en variabels värde OBS! Tilldelning int tal = 3; tal = tal + 2; // Det nya värdet = det gamla + 2 tal += 2; //samma som ovan tal = tal * 5; tal *= 5; //samma som ovan Fö2 - Intro till Java och intro till OOP 15
Typomvandling Heltal Flyttal per auto, eller med (double) ( ) Flyttal Heltal (int) ( ) ger trunkering (int) ( + 0.5) ger avrundning av tal>0 Math.round(...) ger avrundning Char Heltal: (int) ( ) Heltal Char: (char) ( ) Flyttal String: Double.toString( ) String Flyttal: Double.parseDouble( ) String Heltal finns motsvarande Fö2 - Intro till Java och intro till OOP 16
Tecken λ En char-variabel lagrar ett enstaka tecken i två byte (speciellt för Java). Skrivs med apostrofer, t ex 'p'. λ Tecknet kodas först till ett heltal innan det lagras i minnet. λ T ex tecknet 'T' har den (decimala) koden 84, vilket binärt är 01010100 λ Koden är unicode, se http://www.unicode.org. Koden för de 256 första tecknen överensstämmer med ASCIIkoden ASCII Code - The extended ASCII table λ Version 6.0: mer än 100.000 tecken från världens alfabet, symboler,... System.out.println( \u0041 ); //A Ethiopic Extended-A Fö2 - Intro till Java och intro till OOP 17
Klasserna String och Math En String-variabel är inte inte en primitiv variabel String s = "Java"; String t = s + "programmering"; Jämför: char tkn = 'a'; En strängvariabel är en sk. Objektvariabel. En sådan variabel refererar till många värden Math-klassen, anropa med klassens namn: double a1=math.sin(x), a2=math.sqrt(x); double a3=math.pow(bas,exp), a4=math.random(); Fö2 - Intro till Java och intro till OOP 18
Varför (1) deklarera och (2) ha många datatyper? 1. Säkerhet : Bara använda variabler som är deklarerade Ex. stavfel: x1=4; x1=xl+8; 2. Värden man vill räkna med är av olika sorter Bra då att ha variabler som matchar dessa. Minnesutrymmet anpassas till värdena. Beräkningarna anpassas till datatypen. Snabbare beräkningar. Ordning och reda Men: flyttal kan inte alltid representeras exakt Fö2 - Intro till Java och intro till OOP 19
Utskrifter i Java I terminalfönstret (I DrJava s Interaction Pane): double O = bas*2 + höjd*2; System.out.println( Omkrets: + O + m ); I ett Popup-fönster: import javax.swing.*; String namn = Anna ; JOptionPane.showMessageDialog(null,"Jag heter "+namn); Fö2 - Intro till Java och intro till OOP 20
Inläsning i Java I terminalfönstret (I DrJava s Interaction Pane): import java.util.scanner; Scanner scan = new Scanner(System.in); int x = scan.nextint(); double y = scan.nextdouble(); String s1 = scan.nextline(); // hel rad String s2 = scan.next(); // ett ord λ I ett Popup-fönster: import javax.swing.*; String s; s = JOptionPane.showInputDialog("x?"); x = Integer.parseInt(s); Kommande bilder 22-33 tar vi inte upp på föreläsningen. Till för egna studier. Vi hoppar till bild 34! Fö2 - Intro till Java och intro till OOP 21
Hur lagras data i datorn? I datorn används koder för att representera all information Koderna består av 1:or och 0:or Någonting är på (1) eller av (0) Binära tal används (binära talsystemet) Fö2 - Intro till Java och intro till OOP 22
Vad är ett talsystem? Ett talsystem har en bas och siffror (symboler) Ex.decimala systemet har basen 10 och symbolerna 0-9: 103 10 = 1*10 2 +0*10 1 +3*10 0 = 1*100 + 0*10 + 3*1 Fö2 - Intro till Java och intro till OOP 23
Binära talsystemet Basen 2 och symbolerna 0, 1. 1101 2 = 1*2³+1*2 2 +0*2 1 +1*2 0 = 8+4+0+1= 13 10 Översätt från decimalt till binärt: 27 10 = 16 + 8 + 2 + 1 = 2 4 + 2 3 + 2 1 + 2 0 = 11011 2 Fö2 - Intro till Java och intro till OOP 24
Binära talsystemet En byte = 8 bit, 0-255, dvs 256 st värden 00000000 = 0 00000001 = 1 00000010 = 2 11111111 = 255 Ex. en byte: 00001111 = 0*2 7 + 0*2 6 + 0*2 5 + 0*2 4 + 1*2 3 + 1*2 2 + 1*2 1 + 1*2 0 = 15 10 Fö2 - Intro till Java och intro till OOP 25
Binära talsystemet Bit : 0 eller 1 Byte: 8 bitar Kilobyte (KB): 10 3 byte Megabyte (MB): 10 6 byte Gigabyte (GB): 10 9 byte Terabyte (TB): 10 12 byte Fö2 - Intro till Java och intro till OOP 26
Hexadecimala talsystemet Basen 16 och symbolerna 0-9,A,B,C,D,E,F A=10, B=11, C=12, D=13, E=14, F=15 Ex: 2F 16 = 2*16 1 + F*16 0 = 2*16 1 + 15*16 0 = 32 + 15 = 47 10 Omvandling hexadecimalt binärt och tvärtom är relativt enkelt (4 binära siffor=en hexadecimal siffra): 11110101 2 = 1111 0101 = 15*16 1 + 5*16 0 = F5 16 Fö2 - Intro till Java och intro till OOP 27
Att lagra tal Tal kan lagras som heltal flyttal Fö2 - Intro till Java och intro till OOP 28
Heltal Lagras ofta i 4 byte, dvs 32 bit. En bit används för +/- Vänstra biten=0 positivt tal 31 bitar Vänstra biten=1 negativt tal 31 bitar Värdemängden i 4 byte: [-2 32-1, 2 32-1 -1], d.v.s. [-2147483648, 2147483647] Exempel: 67 10 = 1000011 2 och lagras i 4 byte som 00000000 00000000 00000000 01000011 Teckenbiten: 0 positivt tal Fö2 - Intro till Java och intro till OOP 29
Text (String) Text är en sekvens av tecken Exempel, texten: Torsten Består av 7 tecken som kodas enligt asciikoden (decimalt som): T o r s t e n 84 111 114 115 116 101 110 Vilket kan lagras binärt i 7 byte, eller som i java 7x2 byte Fö2 - Intro till Java och intro till OOP 30
Decimaltal 10-potenser Flyttal Ett flyttal = 0.mantissa * 2 exponent Lagras som två delar: Mantissa (siffrorna) och exponent Om 4 byte flyttal: 3 byte mantissa och 1 byte exponent Om 8 byte flyttal: 6 byte mantissa och 2 byte exponent Fö2 - Intro till Java och intro till OOP 31
Flyttal Ex: 2,5 10 = 2*(10) 0 + 5*(10 )-1 = 0.25*(10) 1 Men tal lagras binärt, gör om till binärt: 2,5 10 = 1*(2) 1 + 0*(2) 0 + 1*(2) -1 = 10.1 2 (obs binärpkt). 10.1 2 = 0.101*2 2 Mantissan är 101 Exponenten är 2 = 10 binärt. Om talet lagras i 4 byte: Mantissa (3 byte) = 101 Exponent (1 byte) = 10 Fö2 - Intro till Java och intro till OOP 32
Flyttal Problem med flyttal Begränsad mängd siffror: 4 byte: 7 siffrors nogrannhet 8 byte: 15 siffrors nogrannhet Kan vanligen ej lagras exakt: Ex.flyttalet 2,6 = 2,6 10 = 1*(2) 1 + 0*(2) 0 + 1*(2) -1 + =1*2+0*1+1*0.5+0*0.25+0*0.125+1*0.0625+ Fö2 - Intro till Java och intro till OOP 33
OOP Att hitta klasser, egenskaper (instansvariabler) och metoder. Ett exempel. Det kommer bilar till en vägkorsning. Vid korsningen finns trafikljus som kan visa olika färg och kan ha svängpil. Trafikljuset kan slå om, det kan gå sönder. Bilarna har hastighet, riktning och position. Bilarna kan bromsa, gasa eller få motorstopp.. Fö2 - Intro till Java och intro till OOP 34
OOP Att hitta klasser, egenskaper (instansvariabler) och metoder. Ett exempel. Det kommer bilar till en vägkorsning. Vid korsningen finns trafikljus som kan visa olika färg och kan ha svängpil. Trafikljuset kan slå om, det kan gå sönder. Bilarna har hastighet, riktning och position. Bilarna kan bromsa, gasa eller få motorstopp. Fö2 - Intro till Java och intro till OOP 35
Övning OOP Hur många objekt finns i bild 1, och hur många olika typer av objekt, dvs hur många klasser, finns representerade i bild 1? Ange lämpligt namn på respektive klass. Vilka egenskaper kan klasserna beskrivas med (bild1)? Ange vilka metoder som kan vara lämpliga i respektive klass för att kunna rita bilderna 2 och 3, utgående från bild 1. Föreslå namn på metoderna. Bild 1 Bild 2 Bild 3 Fö2 - Intro till Java och intro till OOP 36
Intro till ObjektOrienterad Programmering (OOP) Klass vs objekt En klass beskriver objektens egenskaper och metoder, mha ett språk, t ex Java, och sparat i en textfil, t ex Circle.java Klassen är en mall. Många objekt kan skapas från mallen. Ett objekt har egenskaper (inre tillstånd/eget minne) Ex Cirkel c har position och färg Kan kommunicera med (skicka meddelanden till) objekten via metoder för ändra objekten eller få veta deras egenskaper. Ex move(int step), changecolor(color co) När ett program körs är objekten aktiva genom sina metoder. Ex c.move(50); //cirkel c rör sig Fö2 - Intro till Java och intro till OOP 37