DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle: Måndagen den12 april kl 11.50 i S200. Max: 70 poäng, för godkänt krävs 50%. Skriv tydliga och kortfattade svar! 1. Introduktion till Java (10p) Vad beskrivs nedan? Svara med maximalt två ord per beskrivning. a) I ett objektorienterat datorprogram förekommer en sorts beskrivningar av olika typer av objekt. Vad kallas dessa beskrivningar? b) En referens som alltid refererar till sitt eget objekt c) Ett uttryck som syftar på metodens namn och parameterlista. d) Ett objekt som tillhör en viss klass sägs utgöra en???? av klassen. e) Samlar objekt som inte används längre och återlämnar deras minnesutrymme. f) En modifierare som måste användas vid deklaration av en konstant g) Referenser som inte refererar till något har detta värde h) Endast klasser implementerar sådana i) Får endast förekomma som första rad i konstruktorns metodkropp j) Programmet bestämmer själv under sin exekvering vilken version av en metod som ska anropas
2. Klasser och objekt. Typer och operatorer. Arv och gränssnitt. (10p) Den här uppgiften består av tre deluppgifter. I deluppgifterna används följande kod: public abstract class Person private int ålder; protected String namn; protected long hemnr; public Person(String personensnamn, long hemtelefon, int personensålder) namn = personensnamn; hemnr = hemtelefon; ålder = personensålder; public int getålder() return ålder; public class Arbetare extends Person protected long jobbnr; Arbetare(String arbetarensnamn, long hemtelefon, int arbetarensålder, long jobbtelefon) super(arbetarensnamn, hemtelefon, arbetarensålder); jobbnr = jobbtelefon; public long gettelnr() return jobbnr; public class Vikarie extends Arbetare private boolean itjänst = false; Vikarie(String vikariensnamn, long hemtelefon, int vikariensålder, long jobbtelefon) super(vikariensnamn, hemtelefon, vikariensålder, jobbtelefon); public long gettelnr() if (itjänst) return jobbnr; else return hemnr; public int getålder() return 27; 2
a) Metoden "main" i följande klass innehåller tre fel. Beskriv dessa fel. (3p) public class Uppgift2a public static void main(string[] arg) Person lisa = new Person("Lisa Karlsson", 11111, 10); Arbetare erik = new Arbetare("Erik Nilsson", 22222, 20, 12345); Arbetare karin = new Vikarie("Karin Andersson", 33333, 30, 56789); System.out.println("Namn: " + erik.getnamn()); System.out.println("Telefon: " + erik.gettelnr()); System.out.println("Ålder: " + erik.ålder); b) Vilken utskrift ger följande main-metod (3p) public class Uppgift2b public static void main(string[] arg) Person[] individ = new Person[2]; Arbetare[] knegare = new Arbetare[2]; knegare[0] = new Arbetare("Niklas Jonsson", 54321, 30, 12345); knegare[1] = new Vikarie("Urban Jansson", 99999, 35, 11111); individ[0] = knegare[0]; individ[1] = knegare[1]; for (int i=0; i<individ.length; i++) System.out.println(individ[i].getÅlder()); for (int i=0; i<knegare.length; i++) System.out.println(knegare[i].getTelNr()); c) Implementera gränssnittet "Info" så att följande main-metod ger nedanstående utskrift. (4p) Endast förändringar i uppgiftens ursprungliga kod behöver redovisas. public interface Info public String getinfo(); public class Uppgift2c public static void main(string[] arg) Info stina = new Arbetare("Stina Flink", 54321, 40, 12345); Info urban = new Vikarie("Urban Rask", 99999, 45, 11111); System.out.println(stina.getInfo()); System.out.println(urban.getInfo()); Följande utskrift ska erhållas: 3
Stina Flink har telefonnummer 54321 hem och 12345 till arbetet. Urban Rask har telefonnummer 99999 hem och 11111 till arbetet. 3. Användargränssnitt och händelsehantering (10p) a. Klasserna Container och Component är två viktiga klasser i Javas AWT-paket. När man bygger ett användargränssnitt används subklasser av dessa klasser. Ange de viktigaste skillnaderna mellan dessa båda klasser. (2p) b. Följande deklaration är felaktig. Förklara varför. (2p) Component area = new Component(); c. Förklara varför följande anrop av metoden add är olika. Varför har tredje och fjärde satsen anropet p.add() medan femte satsen anropas med add()? (2p) Panel p = new Panel(); p.setlayout(new FlowLayout()); p.add(new Label("Tel:", Label.RIGHT)); p.add(new TextField(40)); setlayout(new BorderLayout()); add("north", p); d. Beskriv hur klassdefinitionen nedan ska ändras om lyssnargränssnittet ActionListener ska implementeras som en inre klass i stället för att implementeras i den egna klassen. (4p) public class Test extends Applet implements ActionListener private TextField resultat; private Button ok; public void init() ok = new Button("OK"); ok.addactionlistener(this); add(ok); resultat = new TextField(10); add(resultat); public void actionperformed(actionevent event) resultat.settext("ok"); 4. Applets och grafik (10p) a. Varför finns det ingen main-metod i en applet? (2p) b. Hur kan man anropa paint-metoden från programmet i en applet? Vilka metoder kommer att anropas i samband med detta anrop? (2p) c. Skriv kod för en komplett applet som ritar en kvadrat där kvadratens storlek kan varieras med ett textfält och en tillhörande knapp. (6p) 4
5. Trådar, exceptionella händelser och JDBC (10p) a. Följande klass som ska skapa och starta ett trådobjekt genom att ärva från klassen Thread innehåller två logiska fel. Ange och rätta felen. (2p) class MyThread extends Thread public void run()... // kod public static void main(string[] arg) Thread t = new Thread(); start();... // kod b. Behöver alla metoder i en s.k. monitor-klass vara synkroniserade? Motivera ditt svar. (2p) c. Följande run-metod ger ett fel vid kompileringen vid anropet till sleep-metoden. Föreslå två olika sätt att rätta detta kompileringsfel. (4p) public void run() while (clockthread!= null) repaint(); clockthread.sleep(1000); d. Ange tre olika typer av JDBC drivers som kan användas för att skapa databasprogram i Java. Vilket krav på drivern måste vara uppfyllt för att den ska vara fullt nedladdningsbar över Internet? (2p) 5
6. Skrivning och läsning till fil (10p) a) Följande program läser rader från tangentbordet och skriver ut dom på skärmen. Läsningen avbryts när användaren trycker <Ctrl-Z>. (5p) import java.io.*; public class Skrivare public static void main(string[] arg) throws IOException BufferedReader tangenterna = new BufferedReader( new InputStreamReader(System.in)); String rad = tangenterna.readline(); while (rad!= null) System.out.println(rad); rad = tangenterna.readline(); Ändra på programmet så raderna inte skrivs ut på skärmen utan i stället skrivs till textfilen "rader.txt". Varje gång programmet körs så ska det gamla innehållet i filen skrivas över. b) I deluppgift "a" skapades en textfil "rader.txt". Skriv ett program som läser och skriver ut innehållet i filen till datorns skärm. (5p) 7. Nätverkskommunikation (10p) Svara med maximalt tre till fyra rader per delfråga "a" t o m "c". a) Vad är TCP och IP? (1p) b) Vilka datorer kan en applet koppla upp förbindelser med, om den är laddad i en webbläsare via Internet? (1p) c) Nämn en viktig skillnad mellan "CORBA" och "RMI"? (1p) d) En server exekverar på datorn "sun-hem.du.se". Serverns funktion är följande. Efter att en klient anslutit sig till servern via en socket på port 4321, så väntar servern helt tyst på att klienten ska sända. Skriv en klient som ansluter sig till servern. Klientens funktion är följande. Klienten sänder två heltal av typen "int" till servern vilken returnerar summan av talen, som ett heltal av typen "long". Klienten kopplar slutligen ned förbindelsen och skriver ut summan på skärmen. (7p). 6