Konstruktion av användargränssnitt Kursvärdering 2002 Lärare Erik Borälv (1157), Arvid Kauppi (1258) Kurswebb, kolla ofta för nyheter och ändringar: http://www.hci.uu.se/courses/1it110/vt03/ Kursen var mycket omtyckt av studenterna som ansåg att det var inspirerande med praktiska uppgifter istället för tentamen. Studenterna ansåg även att det var roligt att lära sig Java Swing. Fler och djupare föreläsningar efterlyses dock av studenterna. Om Java Ingen tenta Hur bra var du på JAVA innan kursen? dålig mycket bra 1 2 3 4 5 22 10 29 10 1 Antal svar: 62 Medelvärde: 2.81 Hur bra var du på JAVA efter kursen? dålig mycket bra 1 2 3 4 5 0 2 28 38 4 Antal svar: 72 Medelvärde: 3.61 Vad tycker du om praktiska uppgifter istället för tentamen? dålig mycket bra 1 2 3 4 5 0 0 3 21 49 Antal svar: 73 Medelvärde: 4.63 Missar Förändringar 2003 Vi missar ibland tala om vad som varit bra, eftersom vi letar fel i era inluppar Säg till oss om vi slarvar! Fler/djupare föreläsningar efterfrågades Det är avsiktligt, men vi ger gärna fler föreläsningar på begäran Aningen högre tempo; fler kan Java Mindre grupper för bättre arbete Mer handledning genom Arvid (+Joppe?) Tydligare checklista för inluppar Aningen modifierade gruppträffar Mer redovisning än utfrågning 1
Kursinriktning Upplägg Kursen heter konstruktion, ej design eller formgivning. det handlar främst om att lära sig att bygga gränssnitt som är datalogiskt sunda kursen är 100% praktiskt orienterad; vetenskapliga teorier finns, men vi ska lära oss genom praktiska övningar Grupparbete 4 x Inlupp Ej tenta Valfri litteratur (finns på nätet) Föreläsningar: frivilliga, uppgiftutdelning, kort genomgång av teori Gruppträffar, obligatoriska, oftast torsdagar Gruppträffar Gruppträff 45 min. per vecka; 3 grupper/träff Obligatoriska, anmäl förhinder via någon i gruppen Redovisning Ni: kod på papper, skärmdump på papper, ha koll på aktuell tidsredovisning, förbered frågor Handledning Vi: exempel, svar, feedback, 8 9 : a+b+c 9 10: d+e+f 10-11: g+h+i 11-12: j+k+l 13-14: m+n+o 14-15: p+q+r 15-16: s+t+u 16-17: reserv Byt tid med varann om gruppen har förhinder en viss tid Examination Mål Aktivitet och visad förståelse på gruppträffar Personlig tidsredovisning Gruppens 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 egna grafikkomponenter om så behövs 2
Språkoberoende Client-server Dynamiskt beteende Java Alla moment görs i Java, med editor + kompilator (ej builders) Gränssnittsbiblioteket heter Java Swing Detta är ej en kurs i objektorientering, krävs heller inte Behövs hjälp här så säg till och vi kan föreläsa om det! 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 3
Nästa steg Inlupp 1 Registrering, kod 10 Gruppindelning 4 personer/grupp Anmäler sig på lappar/pärm vid rum 1157 Frivillig labb i morgon (känna på uppgift 1, prova CVS & Makefile) Ska in måndag 28:e! Enkel! Är ej speciellt viktig för kursen som helhet mest för att komma igång med Swing och gruppen Kolla kurssidan för instruktioner Mer hjälp på labben (tisdag) samt gruppträffen (torsdag) Laboration Instruktioner finns på: http://www.hci.uu.se/courses/1it110/vt03/lab.shtml Läs helst igenom innan.. När: Tisdag 21/1-03 Kl. 15.15. Var: Sal 1515 Polacksbacken Vad: Makefile, make och CVS Vem: De som inte har vana av ovanstående saker. Dvs. labben är bra för att komma igång men inte obligatorisk. Paus + Java 101 JAR som tar eller zip Make Används för att packa ihop en mängd filer jar cvf foo.jar ~user/inlupp1/* Packa upp jar xvf foo.jar Kan vara körbar Fil manifest + class-filer på rätt ställe Main-Class: cachet.ui.main java jar foo.jar Finns exempel i utdelad kod för inlupp1 Verktyg för att kompilera stora mängder filer man 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 Känsligt för tabbar det ska vara (\t), ej space 4
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++. Mycket enkelt att lära enkel syntax inga pekare garbage-collection färdiga bibliotek med (massor!) kod manualer alltid on-line; literate programming Exekvering Utrustning (Win) Kompilera javac Foo.java jikes Foo.java Skapar fil Foo.class Köra java Foo Java SDK (1.4.1) java.sun.com Editor (xemacs, gnu emacs, ) www.xemacs.org Makefile/bat/script (underlättar mycket) http://www.cygwin.com/ setup.exe (välj: openssh, cvs, make) Exempel på kod 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) { // notera append på strängar System.out.println( Hi + s); public String name; private int phone; protected User user; // friendly, syns inom ett package int bar = 42; se kap. 5, Eckel 5
Skapa objekt Constructor int i = 7; // primitiv, ej objekt String s = foo ; Vector v = new Vector(); Car volvo = new S80( red ); // måste inte hålla i objekten; fult new Person(new Name( erik )); public class Car { // attribut public String model; // konstruktor public Car(String model) { this.model = model; Car c = new Car( SAAB ); Primitiver Scope Primitiver int, float, long, char, Objekt Integer, Float, Long, Primitiver finns av effektivitetsskäl Objekt försvinner av sig självt { String s = new String( Hej ); // s är nu borta. helt OK. Namn på klass och fil Attribut public class Car { // stor bokstav! public String model; private String color; Måste finnas i en fil som heter Car.java public class Car { public String model; private String color; Car c = new Car(); c.model = Volvo ; // ok c.color = Green ; // fel 6
Metoder Returvärden public class Car { private String color; public void setcolor(string color) { this.color = color; // test Car c = new Car(); c.setcolor( Blue ); public class Car { public int maxspeed() { return 250; // test Car saab93 = new Car( SAAB ); int max = saab93.maxspeed(); Package Package Ettsättattpacketerakodföratt 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 package kurs.konstruktion; import com.util.calculator; import java.math.*; // all in math! public class Foo { private Calculator cal; Static Debug 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! // not nice, but works System.out.println( Val is = + val); // better private static Logger log = Logger.getLogger("cachet.ui"); log.severe( Going down ); log.warning( Salary is null ); log.info( Created account ); 7
Kommentarer Javadoc // this is a one-line comment /* two lines of bad comments */ /* * better to * write a * on each line */ Literate programming, Donald Knuth Bra kommentarer Namngivning av variabler och metoder /** A class comment */ public class DocTest { /** A variable comment */ public int i; /** A method comment */ public void f() { getlastname() setmaxoflines(int i) String longname = foo ; int loopcounter = 7; Eckel Ärvning Nu har vi gått igenom 133 sidor ur hans bok... 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 ; 8
Interface, kap 8 Interface, kap 8 interface Car { int MAXSPEED = 250; // alltid public, ej friendly void brake(); void shift(int gear); class Saab implements Car { public void brake() { // do something public void shift(int gear) { // do sometihng 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(); Klasser: inheritance Try/catch class Bil { // public class Volvo extends Bil { /// public class UrlStat { UrlStat(String s) { try { URL url = new URL(s); catch (MalformedURLException e) { e.printstacktrace(); 9
Stack Trace Swing java.lang.nullpointerexception at se.uu.it110.icqui.icqclient.setstatus(icq- Client.java:102) at se.uu.it110.icqui.icqui$15.actionperformed(icqui.java:343) at javax.swing.jcombobox.fireactionevent(jcombobox.java:654) at javax.swing.jcombobox.selecteditemchanged(jcombobox.java:678) at javax.swing.jcombobox.contentschanged(jcombobox.java:730) at javax.swing.abstractlistmodel.firecontentschanged(abstractlistmode.jav a:82) at javax.swing.defaultcomboboxmodel.setselecteditem(defaultcomboboxm odel.java:90) at javax.swing.jcombobox.setselecteditem(jcombobox.java:377) at javax.swing.jcombobox.setselectedindex(jcombobox.java:414) at... Kap. 14 + SDK online docs: JPanel BorderLayout JLabel JButton JTextField 10