Ö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 20 januari 2007 kl 08:00 - 11:00 i L001










Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 35.
För godkänt betyg (3 respektive G) krävs 17 poäng.
Resultat och lösningar: Meddelas på kursens hemsida senast tisdag 6 februari 2007.
Visning och frågestund: Tisdag 6 februari 2007 kl 15:00-15:30 i mitt rum (T2220).
Efter visningen kan tentorna hämtas på expeditionen.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-73 47 013.





LYCKA TILL!

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

Uppgift 1 (10 p)

Skriv en Java-applet som fungerar som en enkel miniräknare. Det ska finnas två inmatningsfält för att mata in tal, knappar för vanliga räkneoperationer, och ett utmatningsfält. Här har vi tryckt på minusknappen:

Kalkylatorappleten

Knapparna för addition, subtraktion, multiplikation och division ska beräkna resultatet utifrån de två tal man matat in. Knapparna för kvadratrot och kvadrat ska använda sig av bara det första talet.

Om man försöker utföra in en felaktig operation, ska texten "Error!" skrivas ut i resultatfältet. Fel som ska hanteras är:

Här har vi tryckt på kvadratrotsknappen:

Kalkylatorappleten med felmeddelande

Använd exempelvis textfält (JTextField) för inmatningen och presentationen. Knapparna kan vara av klassen JButton.

Appleten behöver inte se ut exakt som på bilderna.

Uppgift 2 (5 p)

a)

I nedanstående program måste en eller flera rader i main-metoden strykas, för att programmet ska gå att kompilera. Vilka rader?

b)

Om vi antar att vi gjort dessa strykningar, vad skriver programmet ut när det körs?

// Java-programmet "Utskrifter"

abstract class Djur {
    abstract public void läte();
    static public String namn() {
        return "Djur";
    }
} // class Djur

class Apa extends Djur {
    public void läte() {
        System.out.println("Ook ook!");
    }
} // class Apa

class Katt extends Djur {
    public void läte() {
        System.out.println("Mjau!");
    }
} // class Katt

class Tiger extends Katt {
    public void läte() {
        System.out.println("Roarrr!");
    }
} // class Tiger

public class Utskrifter {
    public static void main(String[] args) {
        Djur d1 = new Djur();
        Djur d2 = new Katt();
        d2.läte();
        Katt k1 = new Katt();
        k1.läte();
        Katt k2 = new Katt();
        k2.läte();
        Katt k3 = new Tiger();
        k3.läte();
        Tiger t = new Tiger();
        t.läte();
        System.out.println("Namn: " + d2.namn());
        System.out.println("Namn: " + Djur.namn());
        System.out.println("Namn: " + t.namn());
        System.out.println("Namn: " + Tiger.namn());
    } // main
} // class Utskrifter

Uppgift 3 (20 p)

Ett taxiföretag vill bygga ett larmsystem, som kan användas av taxiförarna. Alla bilarna har nätanslutna datorer som kan köra Java-program, och de ska köra Java-applikationer som fungerar som klienter i larmsystemet. På taxibolagets kontor står datorn server.taxibolaget.se, och på den körs en annan Java-applikation som fungerar som server.

Taxichauffören börjar med att starta klientprogrammet, skriva in sitt namn, och klicka på knappen Anslut:

Taxiklienten

Då kopplar klienten upp sig mot servern, och är redo både att skicka och ta emot larm.

Om en kund blir bråkig eller inte vill betala, ska taxichauffören kunna trycka på knappen Hjälp!. Då ska alla klienterna visa en larmtext:

Taxiklienten med ett larm

Koppla ner-funktionen behöver inte implementeras, men knappen ska finnas, för eventuell framtida utveckling. Klientfönstret behöver inte se ut exakt som på bilderna.

a) Skriv klientapplikationen, som ska köras i taxibilarna.

b) Skriv serverapplikationen, som ska köras hemma på kontoret. Det räcker om serven hanterar nätverkskommunikationen, så den behöver inte ha något grafiskt gränssnitt eller skriva ut något.

c) Beskriv det kommunikationsprotokoll som används mellan klienterna och servern.

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.