Prin acest test am urmărit verificarea înțelegerii conceptelor de bază studiate la laborator, în special cum se aplică conceptele OOP în Java (polimorfism, moștenire, agregare, constructori, abstractizare), structurile de date cu care puteți lucra în Java și utilitatea design patterns.
Au fost 10 de întrebări, 4 variante de răspuns, un singur răspuns corect. Cele 2 serii CA și CD au dat testul în serii diferite și au avut subiecte diferite.
Metoda de evaluare: grilă franceză, -1/10 din punctajul unei întrebări la răspuns greșit, 0 dacă nu este marcat niciun răspuns.
1. Care dintre urmatoarele afirmații sunt adevarate despre pachete în Java? 1) Orice clasă aparține unui pachet 2) Toate clasele dintr-un fișier aparțin aceluiași pachet 3) Daca nu se specifică niciun pachet, clasele vor aparține unui pachet special făra nume 4) Daca nu se specifică niciun pachet, se creează un nou pachet cu numele folderului în care se află clasa, iar aceasta va aparține acestui pachet
2. Care este rezultatul programului?
public class Fruit { Fruit() { System.out.print(" Fruit "); } public static void main(String[] args) { Fruit cherry = new Cherry(" Sour "); } } class Cherry extends Fruit { Cherry() { System.out.print(" Cherry "); } Cherry(String type) { this(); System.out.print(type + " Cherry "); } }
3. Câte interfețe poate extinde o interfață în Java?
4. De câte ori se realizează method overriding (suprascriere) și de câte ori method overloading (supraîncarcare)?
class Dog { void bark() { System.out.println("This dog is barking..."); } } class Husky extends Dog { void bark() { System.out.println("Husky is barking..."); } void bark(int time) { System.out.println("Husky is barking for "+time+" minutes"); } int bark(String food) { System.out.println("Husky wants " + food); return 0; } }
5. Ce afișează următorul program?
public class Coffee { public static void main(String[] args) { CoffeeMaker coffeemaker = new StarbucksCoffeeMaker(); Coffee espresso = new Espresso(); Cappuccino cappuccino = new Cappuccino(); coffeemaker.makeCoffee(espresso); coffeemaker.makeCoffee(cappuccino); } } class Espresso extends Coffee { } class Cappuccino extends Coffee { } class CoffeeMaker { public void makeCoffee(Coffee coffee) { System.out.println("Making coffee"); } public void makeCoffee(Espresso coffee) { System.out.println("Making espresso"); } public void makeCoffee(Cappuccino coffee) { System.out.println("Making cappuccino"); } } class StarbucksCoffeeMaker extends CoffeeMaker { public void makeCoffee(Espresso coffee) { System.out.println("Making sugar espresso"); } public void makeCoffee(Cappuccino coffee) { System.out.println("Making sugar cappuccino"); } }
Making sugar cappuccino
6. Care este valoarea de adevar a următoarelor afirmații? Clasele interne îmbunătățesc încapsularea. Clasele interne anonime trebuie să definească explicit constructorul fără parametri.
7. Care dintre următoarele colecții nu sunt iterabile (nu implementează patternul Iterable oferit în Java prin interfața Iterable)?
8. Ce afișează următorul program?
class Test { public static void main(String[] args) { System.out.println(breakingStuff()); } public static int breakingStuff() { try { try { throw new Exception(); } catch (Exception e) { return 1; } finally { return 2; } } catch (Exception e) { return 3; } finally { return 4; } } }
9. Visitor Pattern si Observer Pattern, din punct de vedere al clasificării Gang of Four, sunt:
10. Stabiliți valoarea de adevăr a următoarelor propoziții: Metodele statice nu pot fi suprascrise. Clasele interne statice nu pot fi extinse.
1. Ce va afișa următorul program?
class Test { public static void main(String args[]) { String s1 = "Wow, am luat 10 la grila la POO!"; String s2 = new String(s1); System.out.println((s1 == s2) + " " + s1.equals(s2)); } }
2. Care dintre urmatoarele afirmații este corectă?
3. Care dintre urmatoarele afirmații despre clase abstracte în Java sunt FALSE: 1) Daca derivăm o clasa abstractă și nu implementam toate metodele abstracte, atunci clasa derivată trebuie de asemenea sa fie abstractă 2) Clasele abstracte pot avea constructori 3) O clasă nu poate fi abstractă făra o metoda abstractă 4) O clasă abstractă poate moșteni de la mai multe clase abstracte
4. Se dau următoarele clase:
class Lion {} class LionKing extends Lion {} class SimulateAnimal { protected Lion roar(char a) { //do stuff } } class Game extends SimulateAnimal { // TODO suprascriere roar }
Care dintre următoarele reprezintă o suprascriere corectă a metodei roar?
5. Ce afișează următorul program?
class Dacia { String model = "duster"; public Dacia() { printModel(); } void printModel() { System.out.print(model); } } public class Ferrari extends Dacia { String series = "f40"; void printModel() { System.out.print(series); } public static void main(String[] args) { Ferrari myCar = new Ferrari(); } }
6. Care este valoarea de adevar a următoarelor afirmații? O clasa internă anonimă poate extinde o singură clasă sau poate implementa o singură interfață. O clasă internă metodelor nu poate fi abstractă.
7. Care afirmație despre LinkedHashSet din API-ul Java pentru colecții este adevarată?
8. Fie:
class A { public int x = 0; } public A foo() { A a = new A(); try { a.x = 1; throw new NullPointerException(); } catch (Exception e) { a.x = 2; return a; } finally { a.x = 3; } }
Ce se întâmplă la:
A a = foo(); System.out.println(a.x);
9. Observer Pattern si Singleton Pattern, din punct de vedere al clasificării Gang of Four, sunt:
10. Care dintre urmatoarele afirmații sunt adevarate? 1. Metodele dintr-o interfață pot avea specificatorii de acces public sau default 2. String și Integer sunt clase imutabile (immutable) 3. Clasele abstracte nu pot fi instanțiate 4. Constructorii sunt folosiți pentru a inițializa un obiect nou creat