Högskolan Dalarna sid 1 av 6 DI-institutionen Hans-Edy Mårtensson Sten Sundin FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 1. Grunderna i Java (10p) a) En konstruktor används för att (1p) II. Initiera ett objekt i samband med att det skapas b) Ett program skrivet i Java kan exekvera på flera olika plattformar på grund av att (1p) II. Den virtuella Java maskinen tolkar programmet för den specifika plattformen c) En kommentar i Java-kod kan markeras enligt alternativ: (1p) IV. /*en kommentar*/ d) int, 32 bitar double, 64 bitar float, 32 bitar long, 64 bitar byte, 8 bitar char, 16 bitar e) x = 1 y = 9
f) //-Demo------------------------------------- public class Demo //Skapa och initiera variabel "tala" till 1.2 private static double tala = 1.2; //Skapa och initiera variabel "talb" till 2.3 private static double talb = 2.3; public static double add(double tal1, double tal2) //returnerar summan av de båda parametrarna return tal1 + tal2; public static void main(string[] arg) //Skapa variabel "resultat" double resultat; //Tilldela "resultat" resultatet från anropet add(tala, talb) resultat = add(tala, talb); //Skriv ut värdet på variabeln "resultat" till datorns bildskärm System.out.println("Resultat: " + resultat); //------------------------------------------ 2. Fält och Strängar. Arv och gränssnitt. (8p) a. Initiering av elementobjekten måste göras explicit med: for (int i = 0; i < cirklar.length; i++) cirklar[i] = new Cirkel(); b. Ett objekt kan omvandlas till en strängrepresentation med metoden tostring() som returnerar en sträng som representerar värdet av objektet. Metoden överskuggas i de klasser där den ska användas. Metoden equals(obect obj) jämför två objektreferenser. Returnerar som default "true" endast om referenserna går till samma objekt. Metoden bör överskuggas om likhet istället skall avgöras med avseend på objektens värden. c. Påstende 2 och 3 är sanna d. abstract - en abstrakt klass är en klass där en eller flera metoder är deklarerade, men inte definierade. Detta innebär att man inte kan skapa en instans av klassen utan en subklass måste ärva den abstrakta klassen och definiera de abstrakta metoderna för att subklassen skall kunna instansieras. final - om man deklarerar en klass som final, innebär att inga klasser kan ärva från klassen som är deklarerad final. Det är även möjligt att deklarera metoder som final och då går det inte att överskugga dessa metoder i subklasser. 2
3. Användargränssnitt, Händelsehantering, Grafik och Applets (8p) a. I ett traditionellt (procedurellt) program bestämmer programmet när det är dags att läsa indata eller skriva utdata, programmets exekvering är programstyrd. I ett händelsestyrt program skriver programmeraren metoder som anropas när en händelse inträffar. Programmet känner inte till i vilken ordning som händelserna inträffar. I programmet initieras först gränssnittskomponenterna och därefter väntar det på att hantera någon händelse som inträffar. b. 1. Registrera händelselyssnare ok.addactionlistener(this); 2. Skapa en lyssnare och implementera gränssnittet ActionListener i den händelselyssnare som registrerats public void actionperformed(actionevent event) resultat.settext("ok"); c. Canvas är en enkel rityta som bl.a används för att hindra kollision mellan gränssnittskomponenter och grafik. Figurerna kan isoleras från grafikkomponenterna med hjälp av ett Canvasobjekt. Canvas har en egen paintmetod som oftast överskuggas för att rita grafik på objektet. d. Antalet pixlar är oförändrat men appletens storlek på skärmytan kommer att minska eftersom totala antalet pixlar på skärmen ökar när upplösningen ökar. 4. Dataströmmar (10p) import java.io.*; public class Kvadrerare public static void main(string[] arg) throws IOException BufferedReader fråntangenterna = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Skriv ett tal"); String rad = fråntangenterna.readline(); fråntangenterna.close(); double tal = Double.parseDouble(rad); double kvadrat = tal * tal; PrintWriter tillfil = new PrintWriter( new FileWriter("resultat.txt")); tillfil.println(tal); tillfil.print(kvadrat); tillfil.close(); 3
5. RMI (10p) a) Förklara begreppet "marshaling" (2p) Marshaling kallas den process som innebär att ett metodanrop översätts till en binär ström. Med hjälp av den binära strömmen så kan metodanropet förmedlas till en server via ett nätverk. På servern översätts den binära strömmen tillbaka till det ursprungliga metodanropet igen, vilket kallas för unmarshaling. Därefter exekveras metoden på servern. Metodens eventuella resultat returneras till klienten på liknade sätt som metodanropet förmedlades. b) Vad är "skeleton"? (2p) Serverns skeletonobjekt unmarshals metodanrop som den tar imot via nätverket från klienten. Skeletonobjektet marshals eventuella resultat som ska sändas tillbaka till klienten. c) Beskriv en viktig skillnad mellan RMI och CORBA. (2p) Om man använder RMI så är man begränsad till Java som programmeringsspråk. Om man använder CORBA så kan det distribuerade systemet olika delar kodas i olika språk. d) Vad är "rmiregistry"? (2p) rmiregestry är ett register som exekverar på servermaskinen. I registret registreras referenser till alla distribuerade objekt och deras URL-adresser. Klienter kan därefter via serverns rmiregister ansluta sig mot ett eller flera objekt på servern. e) Vad är "rmic"? (2p) rmic är ett program med vilket man kan generera bytekodsfiler för stub och skeleton. 4
6. JSP (10p) a) Beskriv hur en begäran av en JSP-sida hanteras av webservern. (5p) Webläsaren sänder en begäran om en JSP-sida till servern. Om den begärda JSP-sidans servlet inte är laddad i webservern så kommer JSP-sidan att översättas till motsvarande servlet. Servleten kompileras och därefter kommer den laddas i webservern och exekveras. Om den begärda sidan redan har exekverats tidigare och därmed har sin servlet laddad i webservern så kommer webservern att först att kontrollera om JSP-sidan har förändrats sen föregående anrop exekverades. Om sidan är förändrad så kommer den att behandlas som om det vore en ny JSP-sida som inte har anropats tidigare. Om JSP-sidan inte är förändrad så kommer JSP-sidans servlet att anropas direkt. b) <html> <head><title>intresseanmälan</title></head> <body> <center> <% %> String namnet = request.getparameter("namn"); String elposten = request.getparameter("elpost"); </body> </html> <h1>tack för din intresseanmälan <%=namnet%>!</h1> Information kommer att sändas till adress: <%=elposten%><br> 5
7. Trådar (10p) a) public class Bagare extends Thread private Burk kakburken; public Bagare(Burk kakburk) kakburken = kakburk; public void run() int bakplåt = 0; try while (bakplåt < 10) kakburken.läggtillkakor(20); bakplåt++; sleep(1000); catch(interruptedexception exception) System.out.println(exception); b) public class Burk private int antalkakor = 0; public synchronized void läggtillkakor(int antal) antalkakor += antal; notify(); public synchronized void tabortkaka() try while (antalkakor < 1) wait(); antalkakor--; catch (InterruptedException exception) System.out.println(exception); 6