Örebro universitet
Institutionen för teknik
Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se)







Tentamen i

Javaprogrammering

för D3 m fl

lördag 15 mars 2008 kl 08:00 - 13:00 i L001

Gäller som tentamen för:
DT3010 Datateknik C, Java för gränssnitt och nätverk, provkod 0100
JAP004 Java-programmering, provkod 0300








Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 42.
För godkänt betyg (3 respektive G) krävs 20 poäng.
Resultat och lösningar: Meddelas på kursens hemsida eller via e-post senast lördag 5 april 2008.
Återlämning av tentor: Efter att resultatet meddelats kan tentorna hämtas på institutionen. Man kan också få sin rättade tenta hemskickad.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-73 47 013.





LYCKA TILL!

Scenario till uppgifterna

Ett ånglok. Fotograf: Frederik Tellerup. Licens: Creative Commons.
Fig. 1. Ett tåg.

Vi ska skriva ett tågspel, där man tävlar med tåg på järnvägen. Tågspelet innehåller följande typer av saker:

Skriv inte svaren till uppgifterna direkt här, utan skriv på lösa blad och lämna in.

Uppgift 1 (6 p)

Skriv de klasser som behövs för att lagra tågen och de andra sakerna i scenariot ovan. Varje klass ska ha de attribut (eller "medlemsvariabler", som C++-programmerare brukar säga), konstruktorer och metoder ("medlemsfunktioner") som behövs för att klara uppgift 2 här nedan.

Uppgift 2 (6 p)

Skriv en main-metod som skapar följande objekt: Därefter ska följande hända:

Uppgift 3 (5 p)

a) (2p)

Skapa en ny klass som heter Tankvagn, som är en sorts vagn och som kan kopplas på tåget. Den skiljer sig från vanliga vagnar genom att den förutom tomvikt och lastvikt också har en volym, till exempel 17.3 kubikmeter.

b) (1p)

Vi antar att vi inte har tillgång till några .java-filer från uppgift 1, utan bara .class-filerna, till exempel Tåg.class. Vad är skillnaden mellan .java- och .class-filer?

c) (2p)

Vi vill kunna ha med tankvagnar i tågen, trots att vi alltså inte har kvar .java-filerna, utan bara .class-filerna. Går det? Förklara också varför det går, eller inte går.

Uppgift 4 (15 p)

Tågspelet ska kunna ha flera samtidiga spelare, som kopplar upp sig mot en server. Vi börjar med att skriva servern. Servern ska lyssna efter nya uppkopplingar på port 2000, och den ska förstå följande protokoll: Tänk på följande:

Uppgift 5 (10 p)

Skriv klienten. Den kan vara en textbaserat Java-applikation, en grafisk Java-applikation, eller en applet.

Klienten ska koppla upp sig mot servern, och spelaren ska kunna ge ett flytta-kommando, som innebär att han eller hon försöker köra tåget till en viss station. Klienten ska hela tiden hålla reda på var spelarens tåg just nu befinner sig.

Här är ett förslag på hur en grafisk klient skulle kunna se ut:

Förslag på hur en grafisk klient kan se ut

Bilaga: Utdrag ur API-specifikationen

java.net
Class ServerSocket

java.lang.Object
  extended byjava.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.net
Class Socket

java.lang.Object
  extended byjava.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.io
Class BufferedReader

java.lang.Object
  extended byjava.io.Reader
      extended byjava.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.io
Class InputStreamReader

java.lang.Object
  extended byjava.io.Reader
      extended byjava.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.io
Class PrintWriter

java.lang.Object
  extended byjava.io.Writer
      extended byjava.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.net
Class InetAddress

java.lang.Object
  extended byjava.net.InetAddress

public static InetAddress getByName(String host)
                             throws UnknownHostException
          Determines the IP address of a host, given the host's name.