Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna Återlämningstillfälle: fredag den 6/4 kl 12.00 i S200. Max: 66 poäng, för godkänt krävs 50%. Skriv tydliga och kortfattade svar! 1. Grunderna i Java (10p) a) En konstruktor används för att (1p) I. Återlämna allokerat minne II. Initiera ett objekt i samband med att det skapas III. Importera paket IV. Skapa en virtuell Java maskin för applets b) Ett program skrivet i Java kan exekvera på flera olika plattformar på grund av att (1p) I. Språket Java utvecklades ursprungligen från C++ II. Den virtuella Java maskinen tolkar programmet för den specifika plattformen III. Kompilatorn är identisk med C++ kompilatorn IV. "Application Programming Interface" utför nödvändigt arbete c) En kommentar i Java-kod kan markeras enligt alternativ: (1p) I. (*en kommentar*) II. /**en kommentar III. en kommentar IV. /*en kommentar*/
d) Vilka krav på minnesutrymme uttryckt i antal bitar (bit), har följande datatyper: (2p) int, double, float, long, byte, char e) Betrakta följande kod: class Test int x = 1; void skriv() int y = 2; for (int i=0; i<10; i++) int x = 0; x += i; y = i; System.out.println("x = " + x); System.out.println("y = " + y); Vilken utskrift genererar metoden "skriv()"? (2p) f) Här följer en skiss till ett program //-Demo------------------------------------- Skapa och initiera variabel "tala" till 1.2 Skapa och initiera variabel "talb" till 2.3 add returnerar summan av de båda parametrarna main Skapa variabel "resultat" Tilldela "resultat" resultatet från anropet add(tala, talb) Skriv ut värdet på variabeln "resultat" till datorns bildskärm //------------------------------------------ Skriv ett fullständigt program som fungerar enligt ovanstående skiss. (3p) 2
2. Fält och Strängar. Arv och gränssnitt. (8p) a. Följande sats deklarerar och skapar ett fält cirklar med tre referenser till objekt av typen Cirkel. (Alla element är referenser som initieras till null) (2p) Cirkel[] cirklar = new Cirkel[3]; Skriv koden för att initiera elementobjekten i fältet cirklar. b. Klassen Object innehåller bl.a metoderna equals() och tostring() som kan användas eller omdefinieras i samtliga klasser. Vad gör dessa metoder? (2p) c. Betrakta följande klasser public class Base public void print(int num) System.out.println(num); public class Derived extends Base public void print(string s) System.out.println(s); Vilka av följande påståenden är sanna? (2p) 1. printmetoden i klassen Base överskuggas (override) i klassen Derived. 2. printmetoden i klassen Base överlagras (overload) i klassen Derived. 3. Båda printmetoderna kan anropas på ett objekt av klassen Derived. 4. Båda printmetoderna kan anropas på ett objekt av klassen Base. d. I Java sammanhang använder man nyckelorden abstract och final i samband med att man deklarerar klasser. Beskriv vad dessa nyckelord innebär. (2p) 3
3. Användargränssnitt, Händelsehantering, Grafik och Applets (8p) a. Vad är den stora skillnaden mellan en traditionell procedurell programmering och en händelsestyrd programmering? (2p) b. Vad behöver en Java-programmerare göra för att hantera en händelse som initierats av användaren? Beskriv med kod de steg som krävs för att hantera en händelse, t.ex. att användaren klickar på en knapp. (3p) c. Vad används klassen Canvas till? Vilken metod överskuggas oftast i en klass som ärver från klassen Canvas? (2p) d. Vad händer med appletens storlek på skärmen om vi ökar bildskärmens upplösning? (1p) 4. Dataströmmar (10p) Skriv ett program som frågar användaren om ett tal. Talet läses in från tangentbordet. Därefter beräknar programmet kvadraten av talet, d v s multiplicerar talet med sig själv. Slutligen så skriver programmet ut det inlästa talet och dess kvadrat till en textfil med namnet "resultat.txt". (10p) 5. RMI (10p) a) Förklara begreppet "marshaling" (2p) b) Vad är "skeleton"? (2p) c) Beskriv en viktig skillnad mellan RMI och CORBA. (2p) d) Vad är "rmiregistry"? (2p) e) Vad är "rmic"? (2p) 4
6. JSP (10p) a) Beskriv hur en begäran av en JSP-sida hanteras av webservern. (5p) b) Här följer en HTML-sida <html> <head><title>intresseanmälan</title></head> <body> <center> <h1>intresseanmälan</h1> Anmäl ditt intresse och få fortlöpande information<br> via e-post genom att fylla i formuläret nedan:<br><br><br> </body> </html> <form action="intresse.jsp" method="get"> Ditt namn: <input type="text" name="namn" size="30"><br> Din E-post: <input type="text" name="elpost" size="30"><br><br> <input type="submit" value="skicka in!"> <input type="reset" value="radera!"> </form> Skriv den JSP-sida som formuläret anropar. (5p) JSP-sidan ska bekräfta att den har tagit i mot informationen, genom att sända tillbaka en ny htmlsida till klienten i vilket användarens namn och elpost-adress förekommer. 5
7. Trådar (10p) Den här uppgiften består av två deluppgifter. Deluppgift b bygger på deluppgift a. Därför bör du lösa deluppgift a innan du löser deluppgift b. Studera följande kod public class Burk private int antalkakor = 0; public void läggtillkakor(int antal) antalkakor += antal; public void tabortkaka() antalkakor--; public class Bagare extends Thread private Burk kakburken; public Bagare(Burk kakburk) kakburken = kakburk; public void run() int bakplåt = 0; while (bakplåt < 10) kakburken.läggtillkakor(20); bakplåt++; public class Bageri public static void main(string[] arg) Burk burken = new Burk(); Bagare erik = new Bagare(burken); erik.start(); a) Modifiera koden i klass Bagare så tråden sover 1 sekund efter varje gång som kakburken har fyllts med 20 stycken kakor. Observera att all kod inte behöver upprepas i din lösning förutsatt att det tydligt framgår var dina ändringar förekommer i den ursprungliga koden. (5p) 6
b) Förutsätt att följande klass även förekommer. public class Kund extends Thread Burk kakburken; public Kund(Burk kakburk) kakburken = kakburk; public void run() int antal = 0; while (antal < 200) kakburken.tabortkaka(); antal++; System.out.println("Jag mår inte riktigt bra..."); Samt att main-metoden i klassen Bageri är ändrad enligt följande: public class Bageri public static void main(string[] arg) Burk burken = new Burk(); Bagare erik = new Bagare(burken); erik.start(); Kund sara = new Kund(burken); sara.start(); Kunden "sara" tar bort kakor ur burken, bagaren "erik" fyller på kakor. Efter varje påfyllning så sover bagarens tråd 1 sekund i enlighet med deluppgift a. Modifiera koden så att kunden väntar till dess att bagaren har fyllt på burken, om burken är tom när kunden ska ta nästa kaka. Observera att all kod inte behöver upprepas i din lösning förutsatt att det tydligt framgår var dina ändringar förekommer i den ursprungliga koden. (5p) 7