Programmering i Java
för Dataingenjörsprogrammet
lördag 31 januari 2004 kl 08:00 - 13:00
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 34.
För betyget 3 krävs 17 poäng. För betyget 4 krävs 23 poäng. För betyget 5 krävs 28 poäng. |
Resultat och lösningar: | Meddelas på kursens hemsida senast lördag 14 januari 2004. |
Visning: |
Tisdag 17 januari 2004 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentor hämtas på expeditionen. |
Examinator och jourhavande: |
Thomas Padron-McCarthy, telefon 070-7347013.
(Kommer inte att besöka salen.) |
Skriv inte svaren till uppgifterna direkt här, utan skriv på lösa blad och lämna in.
class Djur { private String namn; public Djur(String namn) { System.out.println("Skapar ett djur"); this.namn = namn; } public Djur() { System.out.println("Skapar ett namnlöst djur"); this.namn = null; } public void läte() { System.out.println("Allmänt djurljud"); } } // class Djur class Katt extends Djur { private int kloskärpa; public Katt(String namn, int kloskärpa) { super(namn); System.out.println("Skapar en katt"); this.kloskärpa = kloskärpa; } public void läte() { System.out.println("Mjau!"); } } // class Mojäng class Myra extends Djur { public Myra() { System.out.println("Skapar en myra"); } public void läte() { System.out.println("Myran är tyst"); } } // class Mojäng public class Utskrifter { public static void main(String[] args) { Djur d1 = new Djur("Albert"); Djur d2 = new Katt("Måns", 3); Katt k = new Katt("Pelle", 2); Myra m = new Myra(); d1.läte(); d2.läte(); k.läte(); m.läte(); } // main } // class Utskrifter
a)
b)class Andra { private int x; } // class Andra public class Ena { public static void main(String[] args) { Andra a = new Andra(); a.x = 7; } } // class Ena
c)public class Fel { private void f() { } public static void main(String[] args) { f(); } } // class Fel
public class Yttre { private int y; class Inre { private int i; } public static void main(String[] args) { Inre i = new Inre(); } } // class Yttre
Appleten kan se ut så här, men det är inget krav att den ska vara exakt likadan. Den behöver inte vara vacker, bara alla knapparna och textfälten finns med.
Om det inmatade talet inte är ett tillåtet heltal, eller om den inmatade textsträngen är tom, ska svaret ERROR presenteras:
Några tips:
Knappklassen heter JButton, och den har en metod som heter addActionListener, vilken som argument tar ett objekt som uppfyller gränssnittet ActionListener. Gränssnittet ActionListener innehåller metoden actionPerformed, som tar ett argument av typen ActionEvent.
Klassen JTextField har metoderna getText och setText.
Textareaklassen JTextArea, har en metod som heter append, vilken som argument tar en sträng, och lägger till den strängen sist i textarean.
Idén är att när någon användare skriver en rad i sin klient, ska raden genast skickas till servern, som skickar vidare raden till alla de andra klienterna. Var och en av de andra klienterna ska sen visa raden.
a) (1p)
Servern bör använda flera trådar. Varför? Om man ändå skriver en enkeltrådad server, vilket beteende kan man då få i systemet?
b) (1p)
Även klienten bör använda flera trådar. Varför? Om man ändå gör klienten enkeltrådad, vilket beteende kan man då få i systemet?
c) (10p)
Skriv klienten. Den behöver inte vara grafisk. Servern kör på port 3000 på datorn chat.oru.se. För full poäng på uppgiften krävs att klienten är flertrådad. En lösning utan flera trådar ger maximalt fem poäng på deluppgift c.
Vad är skillnaden mellan en applet och en applikation?
b) (2p)
Det finns två olika sätt att skapa och starta en tråd i Java. Visa med exempel!
Vi ska skriva ett Adventure-spel på svenska, med hjälp av Java. Vi låter alla saker i spelet, som väskor och svärd, vara objekt. Som allra första steg i utvecklingen av spelet vill vi skapa följande klasser:
Ovanstående beskrivning ger utrymme för en del egna val, så gör en lämplig och bra design av klasserna. Klasserna ska gå att använda sen när man fortsätter att konstruera spelet, vilket till exempel betyder att väskklassen ska vara skriven på ett sätt så att man kan skriva kod som stoppar i och tar ut saker ur en väska. Förklara gärna de designval som du tycker behöver motiveras.
java.lang.Object java.net.ServerSocket
ServerSocket(int port)
Creates a server socket, bound to the specified port.
Socket
accept()
Listens for a connection to be made to this socket and accepts
it.
void
close()
Closes this socket.
java.lang.Object java.net.Socket
Socket()
Creates an unconnected socket, with the
system-default type of SocketImpl.
Socket(InetAddress address,
int port)
Creates a stream socket and connects it to the specified port
number at the specified IP address.
void
close()
Closes this socket.
InputStream
getInputStream()
Returns an input stream for this socket.
OutputStream
getOutputStream()
Returns an output stream for this socket.
java.lang.Object java.io.Reader java.io.BufferedReader
BufferedReader(Reader in)
Create a buffering character-input stream that uses a default-sized
input buffer.
void
close()
Close the stream.
int
read()
Read a single character.
String
readLine()
Read a line of text.
java.lang.Object java.io.Reader java.io.InputStreamReader
InputStreamReader(InputStream in)
Create an InputStreamReader that uses the default charset.
void
close()
Close the stream.
int
read()
Read a single character.
java.lang.Object java.io.Writer java.io.PrintWriter
PrintWriter(OutputStream out)
Create a new PrintWriter, without automatic line flushing, from an
existing OutputStream.
PrintWriter(OutputStream out,
boolean autoFlush)
Create a new PrintWriter from an existing OutputStream.
void
close()
Close the stream.
void
println()
Terminate the current line by writing the line separator string.
void
println(String x)
Print a String and then terminate the line.
java.lang.Object java.net.InetAddress
public static InetAddress getByName(String host) throws UnknownHostExceptionDetermines the IP address of a host, given the host's name.