Introduktion Upplägg Kursen heter konstruktion, ej design eller formgivning. det handlar främst om att lära sig att bygga gränssnitt som är sunda den är praktiskt orienterad; vetenskapliga teorier finns, men vi ska lära oss genom praktiska övningar Inlupp x 3 Ej tenta Gruppträffar, minst 1 timme per vecka. Obligatoriska. både redovisning och handledning Ni: kod, skärmdump, tidsredovisning, frågor Jag: exempel, svar, Föreläsningar: valfria, uppgiftutdelning, enklare genomgång av teori Examination Mål Aktivitet och visad förståelse på gruppträffar Personlig tidsredovisning Gruppens sammanlagda resultat Presentation/dokumentation av lösningar Betyg: 3, 4, eller 5 Efter kursen ska ni: på egen hand kunna implementera ett komplext grafiskt gränssnitt förstå hur gränssnitt uppdaterar sig själva, om rätt gjorda veta hur man bäst kopplar ihop logik med presentation kunna göra avbrottsstyrda applikationer Konsekvenser Java Ni kommer lära er Java Ni blir buzz word compliant +Ert värde stiger rejält Ni inser att allt annat än Java är omöjligt Ni blir en hopplös frälst fanatiker Alla moment görs i Java Gränssnittsbiblioteket heter Java Swing Detta är ej en kurs i objektorientering För att lära sig Java så är det viktigt med egna studier och försök En seriös initial insats är värd mycket om man inte redan kan Java 1
Nu då? Nästa steg Lär er Java Installera Java SDK på egen dator Skaffa en bok, t.ex Bruce Eckel, Thinking in Java Prova kod Övningsuppgifter ren Java med Swing www.hci.uu.se/courses/1it110/vt02/ gruppindelning 5 personer/grupp gruppträffar 1 timme varje torsdag, 2 grupper samtidigt Uppgift 1 (kommer sist under dagen) Inluppar Epostas till publikt arkiv Packas som JAR-fil Givet namn på JAR-filen Förbestämd struktur javadoc time screenshot Körbar Java 101 JAR som tar eller zip Make Används för att packa ihop en mängd filer jar cvf pack.jar /home/e/inlupp1 jar xvf pack.jar Kan vara körbar Fil manifest + class-filer på rätt ställe Main-Class: com.foo.start java jar foo.jar Verktyg för att kompilera stora mängder filer vill inte kompilera i onödan Används också av bekvämlighet Filen ska heta Makefile Kan vara enkel eller hur komplicerad som helst! http://www.gnu.org/software/make/make.html 2
Make - exempel Java #JAVAC=jikes JAVAC=javac all=t1 t1: t2 $(JAVAC) t1.java t2: clean $(JAVAC) t2.java clean: rm *.class Ett objektorienterat språk, påminner mycket om C och C++. Enkelt att lära enkel syntax inga pekare garbage-collection färdiga bibliotek med (massor!) kod manualer alltid on-line Exekvering Utrustning (Win) Kompilera javac Foo.java Köra java Foo Java SDK (1.3) java.sun.com Editor (xemacs, emacs, ) www.xemacs.org Makefile/bat/script (underlättar mycket) http://sources.redhat.com/cygwin/ setup.exe Exempel på utseende Hemlig eller offentlig public class Person { private String name; public Person(String s) { name = s; public String getname() { return name; public void sayhi(string s) { public String name; private int phone; protected Address adr; int bar = 42; // friendly se kap. 5, Eckel 3
Skapa objekt Constructor Car volvo = new S80( red ); Vector v = new Vector(); new Person(new Name( erik )); public class Car { public String model; private String color; public Car(String color, String model) { this.model = model; this.color = color; Constructor Primitiver Car c = new Car( blue, SAAB ); int, float, long, char, Integer, Float, Long, Effektivitetsskäl Scope Scope Fel i Java! { int x = 12; { int x = 17; Objekt försvinner av sig självt { String s = new String( Hej ); // s är nu borta. helt OK. 4
Klass & attribut Attribut public class Car { public String model; private String color; Måste vara i en fil som heter Car.java Car c = new Car(); c.model = Volvo ; c.color = Green ; // ok // fel Metoder Metoder public class Car { private String color; public void setcolor(string color) { this.color = color; Car c = new Car(); c.setcolor( Blue ); Returvärden Returnvärden public class Car { public int maxspeed() { return 250; Car c = new Car( blue, SAAB ); int max = c.maxspeed(); 5
Package Static Ett sätt att packetera kod för att undvika krockar, visa vem som är ägare, visa hur koden är strukturerad com.volvo.salary com.sun.http.server com.borland.jbuilder.ui.menu Används ihop med import Speciellt fall då ett attribut bör finnas oavsett om objektet är skapat eller ej. public class Integer { public static int MAX = 12345678; if (salary > Integer.MAX) // yahoo! Debug Kommentarer System.out.println( My value is = + val); // this is a one-line comment /* two lines of bad comments */ /* *better to * write a * on each line */ Kommentarer Namngivning /** A class comment */ public class doctest { /** A variable comment */ public int i; /** A method comment */ public void f() { getname() setmaxoflines(int i) longname 6
Eckel Ärvning Nu har vi gått igenom 133 sidor... class Student extends Person { private String studyprogram = ITP ; Finns bara enkel ärvning (extends)! Man kan uppfylla flera interface (implements): class Student implements Person, Poor { private String studyprogram = ITP ; Interface, kap 8 interface Car { int MAXSPEED = 250; // public, ej friendly void brake(); import java.net.*; import java.util.*; public class UrlStat { public static void main(string[] args) { try { URL url = new URL(args[0]); URLConnection conn = url.openconnection(); System.out.println("getContentType() " + conn.getcontenttype() ); catch (Exception e) { e.printstacktrace(); Klasser, nästlade Klasser: composition class A { int i; // inner class class B { int k = 0; A { B b = new B(); You simply create objects of your existing class inside the new class // Bil.java class Hjul { int antal = 4; public class Bil { private Hjul hjul = new Hjul(); 7
Klasser: inheritance UrlStat class Bil { // public class Volvo extends Bil { /// public class UrlStat { UrlStat(String u) { try { url = new URL(u); catch (IOException e) { log("error"); e.printstacktrace(); printstat(url); public void printstat(url url) { if (url!= null) { try { URLConnection conn = url.openconnection(); System.out.println("getContentEncoding() " + conn.getcontentencoding()); System.out.println("getContentType() " + conn.getcontenttype() ); System.out.println("getExpiration() " + new Date(conn.getExpiration())); System.out.println("getDate() " + new Date(conn.getDate())); System.out.println("getContentLength() " + conn.getcontentlength()); System.out.println("getLastModified() " + new Date(conn.getLastModified())); catch (Exception e) { e.printstacktrace(); Javadoc Literate programming, Knuth Swing Kap. 13 + SDK online docs: JPanel BorderLayout JLabel JButton JTextField 8