Objektorienterad programmering i Java Provmoment: Ladokkod: Tentamen ges för: Tentamen NOJ011 Systemarkitektprogrammet 7,5 högskolepoäng Tentamensdatum: 2014-08-22 Tid: 09:00 14:00 Hjälpmedel: Inga hjälpmedel Totalt antal poäng på tentamen: För att få respektive betyg krävs: G=25 VG=45 50 poäng Allmänna anvisningar: Tentan har en teoretisk och en praktisk del. Fyll i ditt namn, personnummer och dina svar på svarsblanketten på nästa sida. Kontot för den praktiska delen lämnas ut efter att svarsblanketten lämnats in till en tentamensvakt. Notera att frågor där alternativen inleds med alternativen inleds med kan 1 till alla alternative vara korrekta. endast har ett korrekt alternativ. Om Spara alla filer på F: om inte annat specifikt anges. Stäng ner samtliga applikationer och logga ut (via ikon) när du är klar med tentamen. Vid olösliga problem med datorkonto, ta ett nytt och lämna in även detta i tentamensmappen. Den praktiska delen rättas endast om minst 50% av svaren på den teoretiska delen är körrekta. Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvariga lärare: Rikard König Karl Jansson Telefonnummer: 033 435 5945 033 435 4399
Namn: (Ifylles av student) Personnummer: (Ifylles av student) Svarsblankett 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 A B C D E
Theory 1. A Java compiler translates Java source code into. a. Java bytecode b. machine code c. assembly code d. another high-level language code 2. Which of the following statements are true? a. A default constructor is provided automatically if no constructors are explicitly declared in the class. b. At least one constructor must always be defined explicitly. c. Every class has a default constructor. d. The default constructor is a no-arg constructor. 3. Which of the following alternatives is not a GRASP pattern a. Low coupling b. High Cohesion c. Polymorphism d. Facade 4. Which of the following statements are true? a. Information Expert regards which classes that should exist. b. Pure fabrication regards which classes that are allowed in an application. c. Creator regards how an object should be created. d. GRASP stands for General Responsibility Assignment Software Pattern 5. Which of the following statements are true? a. To override a method, the method must be defined in the subclass using the same signature and compatible return type as in its superclass. b. Overloading a method is to provide more than one method with the same name but with different signatures to distinguish them. c. It is a compilation error if two methods differ only in return type in the same class. d. A private method cannot be overridden. If a method defined in a subclass is private in its superclass, the two methods are completely unrelated. e. A static method cannot be overridden. If a static method defined in the superclass is redefined in a subclass, the method defined in the superclass is hidden.
6. Which of the following classes is a heavyweight component? a. JButton b. JTextField c. JPanel d. JFrame 7. Which of the following statements are true? a. Each GUI component contains a Graphics object that can be obtained using getgraphics() method. b. Once a GUI component is visible, getgraphics() returns the object. c. If a GUI component is not visible, getgraphics() returns null. d. The Graphics object is automatically created for each visible GUI component. 8. You should override the method to draw things on a Swing component. a. repaint() b. update() c. paintcomponent() d. init() 9. Which of the following statements regarding abstract methods are true? a. Abstract classes have constructors. b. A class that contains abstract methods must be abstract. c. It is possible to declare an abstract class that contains no abstract methods. d. An abstract method cannot be contained in a nonabstract class. 10. The interface should be implemented to listen for a button action event. a. MouseListener b. ActionListener c. FocusListener d. WindowListener e. ContainerListener
11. Which of the following statements are true? a. Inner classes can make programs simple and concise. b. An inner class can be declared public or private subject to the same visibility rules applied to a member of the class. c. An inner class can be declared static. A static inner class can be accessed using the outer class name. A static inner class cannot access nonstatic members of the outer class. d. An inner class supports the work of its containing outer class and is compiled into a class named OuterClassName$InnerClassName.class. 12. If your applet does not have the init() method, which of the following will happen? a. Your program will not compile. b. Your program will compile, but not execute. c. You must have a main method. d. Your program will run just fine since the init() method is defined in the Applet class. 13. Which of the following statements are true? a. Applets are not allowed to read from, or write to, the file system of the computer. b. Applets are not allowed to run programs on the browser's computer. c. Applets are not allowed to establish connections between the user s computer and any other computer, except for the server where the applets are stored. d. In general, an applet can be converted to an application without loss of functionality. e. An application can be converted to an applet as long as it does not violate the security restrictions imposed on applets. 14. Which of the following statements is not true? a. A static variable is not serialized. b. A transient variable is not serialized. c. An object must be an instance of Serializable or Externalizable for it to be serialized. d. The methods in an object are serialized. e. All of the above are true. 15. Fill in the code in Comparable c = new Date(); a. <String> b. <?> c. <Date> d. <E>
16. Which of the following expressions must be true if you create a thread using Thread = new Thread(object)? a. object instanceof Thread b. object instanceof Frame c. object instanceof Applet d. object instanceof Runnable 17. The client requests a connection to a server using the following statement: a. Socket s = new Socket(ServerName, port); b. Socket s = serversocket.accept(); c. Socket s = serversocket.getsocket(); d. Socket s = new Socket(ServerName); 18. To obtain an ObjectInputStream from a socket, use. a. socket.getinputstream() b. socket.getobjectstream() c. socket.getobjectinputstream() d. new ObjectInputStream(socket.getInputStream()); 19. Analyze the following code: ResultSet resultset = statement.executequery ("select firstname, mi, lastname from Student where lastname " + " = 'Smith'"); System.out.println(resultSet.getString(1)); a. If the SQL SELECT statement returns no result, resultset is null. b. The program will have a runtime error, because the cursor in resultset does not point to a row. You must use resultset.next() to move the cursor to the first row in the result set. Subsequently, resultset.next() moves the cursor to the next row in the result set. c. resultset.getstring(1) returns the firstname field in the result set. d. resultset.getstring(1) returns the mi field in the result set. 20. To create a statement on a Connection object conn, use: a. Statement statement = conn.statement(); b. Statement statement = Connection.createStatement(); c. Statement statement = conn.createstatement(); d. Statement statement = connection.create();
Practical assignments 21. På ett zoo för däggdjur finns två apor (Bertil 4år och Strutharald 12 år), en kamel (Gösta 82år) och två japanska giraffer (Greger 15år och Knut 2år). Alla däggdjur har namn och ålder, dessutom låter de på ett specifikt sätt: Apa: heeeheeyaeeya Kamel: uuuhre + (kamelens namn) uuuhre + (kamelens namn) Giraff: shiiiittate shiiiittate... (lika många gånger som giraffen är gammal) Konstruera en generell applikation som modellerar ovanstående beskrivning. Det är viktigt att ni skapar en metod public String dozoo() vars syfte är att alla djur i parken får chansen att uttrycka sig, dvs. alla djurs läten returneras i en sträng (m.h.a. polymorfism). Skapa även en metod public double avgage() som beräknar genomsnittsåldern för djuren i parken. Skapa därefter ett enkelt grafiskt gränssnitt som visar upp resultatet av avgage och dozoo när motsvarande knapp klickas. Notera att gränssnittet endast skall ta emot ett objekt av klassen Zoo. Hårdkoda till sist ovanstående scenario i Main och skapa ett objekt av gränssnittet. Gränssnittet behöver inte stödja skapandet av djuren utan detta hårdkodas enklast i main. (15p) 22. På zooet från föregående uppgift finns det även två djurskötare som ansvarar för att hålla djuren med foder och vatten. Det finns endast ett vattentråg och ett fodertråg som djuren får samsas om, och endast ett djur får plats vid respektive tråg på en och samma gång. Djurskötarna undersöker med jämna mellanrum tråget dom är ansvariga för och fyller på om det är tomt, resterande tid sitter dom och fikar i sitt fikarum. Den tid som djuren inte antingen äter eller dricker spenderar dom på en dedikerad uteplats. Konstruera en applikation som modellerar ovanstående beteende där varje djur och djurskötare representeras av en egen tråd och där trågen är delade integer-variabler som endast får modifieras av en tråd på en och samma gång (använd någon form av synkronisering för att lösa detta). Skapa en metod som startar upp alla trådar med djur och djurskötare som kör tills applikationen stängs. För att simulera väntetid kan ni använda Thread.sleep(<millisekunder>). Ni kan välja mellan att utöka koden från föregående uppgift med den nya funktionaliteten eller börja om på nytt. Om ni använder föregående uppgifts lösning så kopierar ni den koden och fortsätter på den kopierade koden. (15p)