Intrebari/exercitii recapitulative la POO
1 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
Întrebări recapitulative Notă. Întrebările numerotate cu verde se referă la examenul parțial. Întrebările pentru examenul final încep aici 1. Explicați termenul abstractizarea datelor. 2. Care sunt beneficiile date de tipurile de date abstracte? 3. Ce face operatorul Java <<< ? 4. În ce constă paradigma orientării pe obiecte? 5. Explicați punctele tari ale orientării pe obiecte. 6. Ce este o abstracțiune? 7. Ce sunt obiectele software? 8. Ce sunt capabilitățile unui obiect? 9. Ce feluri de capabilități se pot defini? 10. Ce sunt proprietățile unui obiect? 11. Ce feluri de proprietăți se pot defini? 12. Cum se poate obține o aplicație Java de sine stătătoare? 13. Ce constituie starea unui obiect? 14. Explicați termenul de clasă a obiectului. 15. Care este rolul încapsulării? 16. Explicați termenii vedere publică și vedere privată în legătură cu notiunea de clasă. 17. Explicații abstracțiunea compoziție. 18. Explicați cum se poate ajunge de la un TDA la cod în Java. 19. Explicați pașii necesari pentru a ajunge la cod sursă Java la execuția programului corespunzător. 20. Ce este o aplicație Java de sine stătătoare? 21. Ce este un applet Java? 22. Ce rol îndeplinește încărcătorul de clase Java? 23. Explicați efectul modificatorilor de acces asupra variabilelor/metodelor. 24. Dați exemple de nume de variabile, metode, clase și constante care se supun convenției de nume prezentate la curs. 25. Care sunt tipurile primitive în Java? 26. Detaliați compatibilitatea la atribuire pentru tipuri primitive în Java. 26. Ce este conversia de tip explicită (type casting)? Furnizați 2-3 exemple relevante. 27. Ce tipuri au clasele învelitoare (wrapper) și care sunt numele corespunzătoare claselor primitive? 28. Ce este boxing și un-boxing? 29. Ce feluri de comentarii se pot folosi în programele Java? 30. Ce trebuie folosit la compararea conținutului obiectelor?
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
2 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
31. Dați un exemplu de eroare de depășire de capacitate în Java. 32. Care este efectul lui break cu etichetă? 33. Care este efectul lui continue cu etichetă? 34. Explicați și exemplificați termenul de constructor în Java. 35. Explicați și exemplificați termenul de method în Java. 36. Ce constituie intrarea și ieșirea pentru o metodă? 37. Prezentați un model de folosit la scrierea unei clase. 38. De ce este util să se supraîncarce (overload) constructorii? 39. Ce poate fi un operand într-o expresie Java? 40. Ce fel de expresie poate fi folosită într-o instrucțiune if? 41. Care sunt operatorii relaționali? 42. Scrieți o expresie de relație care să se evalueze la adevărat dacă suma variabilelor x și y este egală cu valoarea variabilei z. 43. Puneți paranteze în expresiile logice care urmează pentru a indica ordinea de evaluare a operatorilor. Dacă a e 5, b e 10, c e 15 și d e 0, care sunt valorile de adevăr ale expresiilor? c == a+b a != 7 b <= a a > 5 a+d >= c-b d/a < c*b 44. Puneți paranteze în expresiile logice care urmează pentru a indica ordinea de evaluare a operatorilor. Dacă a e 5, b e 10, c e 15 și d e 0, care sunt valorile de adevăr ale expresiilor? c == a+b || c == d a != 7 && c >= 6 || a+c <= 20 !(b <= 12) && a % 2 == 0 !(a >5) || c < a+b
45. La ce se evaluează următoarele expresii? 17/3 17%3 1/2 1/2*(x+y) 46. Date fiind declarațiile: float x; int k, i = 5, j = 2; Ce valori vor avea x și k în urma atribuirilor următoare: k = i/j; x = i/j; k = i%j; x = 5.0/j; 47. Dacă x are valoarea 3.5, atunci la execuția următoarei porțiuni de cod, ce se atribuie lui y? if (x + 1 <= 3.6) y = 1.0; else y = 2.0; 48. Exprimați în cuvinte care credeți că este efectul intenționat al următoarei secvențe de cod? De ce nu este corect sintactic? Cum se poate modifica pentru a fi corect? Ceea ce ați modificat are efectul pe care l-ați declarat? if (x >= y) sum += x; System.out.println("x is bigger"); else sum += y; System.out.println("y is bigger"); 49. Scrieți o instrucțiune if-else care să adune variabila x la variabila possum dacă x e pozitiv și la negsum dacă x este negativ. 50. Extindeți soluția întrebării precedente astfel încât, dacă x este pozitiv atunci să se incrementeze variabila poscount, iar dacă x este negativ, să
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
3 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
se incrementeze variabila negcount. Dacă aceasta ar fi parte a unui program, ce inițializări ar trebui făcute? 51. S-a decis să se bazeze amenda pentru depășirea limitei de viteză într-o zonă locuită după cum urmează - 50 RON pentru viteze între 55 și 70 km/h, 75 RON pentru viteze între 71 și 80 km/h, și 100 RON pentru viteze peste 80 km/h. Un programator a scris următorul cod pentru a implementa ideea:: if (speed > 55) amenda = 50; else if (speed > 70) amenda = 75; else if (speed > 100) amenda = 100; Este corect? Ce amendă s-ar da pentru 102km/h? Dacă nu e corect, cum ar trebui scris? 52. Scrieți o instrucțiune if-else imbricată care să atribuie o literă reprezentând evaluarea pentru o notă exprimată în procente, după cum urmează 70 sau peste: A, 60-69: B, 50-59: C, 40-49: D, 30-39: E, mai puțin de 30: F. 53. Care este diferența esențială între o buclă while și una do-while? 54. Ce scrie următorul segment de cod Java? int i; i = -12; do { System.out.println( i ); i = i - 1; } while (i > 0) 55. Ce scrie următorul segment de cod Java? int i; for ( i = 1; i <= 12; i *= 2 ) System.out.println( i ); 56. Ce tipărește următorul segment de cod Java? int i; for (i=1; i<20; i = i+3) System.out.println( i ); 57. Ce s-ar întâmpla dacă i+3 din expresia de actualizare ar fi înlocuit prin i-3?
58. Întregul x are valoarea binară (stocată pe 1 octet/byte) 10011100. Ce valoare binara va avea z după executarea instrucțiunilor: int y = 1 << 7; int z = x & y; 59. Ce se intâmplă dacă compilăm și executăm aplicația care conține fragmentul de cod următor în metoda sa main(): String s = new String( "Computer" ); if( s == "Computer" ) System.out.println( "Equal A" ); if( s.equals( "Computer" ) ) System.out.println( "Equal B" ); 60. Fie clasa: class MyPoint { void myMethod() { int x, y; x = 5; y = 3; System.out.print( " ( " + x + ", " + y + " ) " ); switchCoords( x, y ); System.out.print( " ( " + x + ", " + y + " ) " ); } void switchCoords( int x, int y ) { int temp; temp = x; x = y; y = temp; System.out.print( " ( " + x + ", " + y + " ) " ); }
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
4 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
} Ce se tipărește la execuția metodei myMethod()? 61. Dacă arr[] conține doar valori întregi pozitive, ce face funcția următoare? public int guessWhat( int arr[] ) { int x= 0; for( int i = 0; i < arr.length; i++ ) x = x < arr[i] ? arr[i] : x; return x; } 62. Fie fragmentul: arr[0] = arr[1] = arr[2] = arr[3] = for( int
new new new new n =
int[4]; int[3]; int[2]; int[1]; 0; n < 4; n++ )
System.out.println( /* what goes here? */ ); Cu ce expresie trebuie înlocuit /* what goes here? */ pentru a tipări numărul de elemente din fiecare rând? 63. Dacă size = 4, carătați conținutul rând cu rând al tabloului triArray: int[][] makeArray( int size) { int[][] triArray = new int[size] []; int val=1; for( int i = 0; i < triArray.length; i++ ) { triArray[i] = new int[i+1]; for( int j=0; j < triArray[i].length; j++ ) triArray[i][j] = val++; } return triArray; }
64. Fie fragmentul de cod: public static void main( String args[] ) { int a = 5; System.out.println( cube( a ) ); } int cube( int theNum ) { return theNum * theNum * theNum; } Ce se întâmplă dacă încercați să compilați și să executați codul dat? 65. Ce va tipări codul care urmează dacă val = 1? switch( val ) { case 1: System.out.print( "P" ); case 2: case 3: System.out.print( "Q" ); break; case 4: System.out.print( "R" ); default: System.out.print( "S" ); } 66. Ce se va tipări la executarea fragmentului de cod următor? outer: for(int i = 1; i <3; i++ ) { inner: for( j = 1; j < 3; j++ ) { if( j==2 ) continue outer; System.out.println( "i = " +i + ", j = " + j ); } } 67. Ce expresie se folosește în Java pentru a reprezenta numărul de elemente dintr-un tablou numit arr ?
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
5 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
68. Ce va returna metoda substring(2, 4) invocată pe obiectul String "exemplu"? Puneți rezultatul între ghilimele întrucât este de tipul String.. 69. Ce va fi tipărit la execuția următoarei secvențe de cod Java? public static void main(String args[]) { int i, j=1; i = (j > 1)? 2: 1; switch(i) { case 0: System.out.println(0); break; case 1: System.out.println(1); case 2: System.out.println(2); break; case 3: System.out.println(3); break; } } } 70. Ce se întâmplă la apelul unei metode Java? 71. Ce se întâmplă la invocarea operatorului Java new? 72. Ce se întâmplă la execuția porțiunii de cod Java care urmează? BigDecimal big1 = new BigDecimal("1"); BigDecimal big2 = new BigDecimal("2"); big1 = big2; 73. Codul următor este corect și complet? De ce? public int sum2(int[] data) { int sum = 0; for (int i = 0; i <= data.length; i++) sum += data[i]; } 74. Prin ce diferă un String de un tablou de caractere? 75. Ce este o interfață Java? 76. Prin ce diferă o interfață (interface) de o clasă (class)? 77. Descrieți cele două componente ale definiției unei interfețe. 78. Descrieți restricțiile care se aplică interfețelor Java. 79. În ce scopuri este indicat a se folosi interfețe în Java? 80. Care este scopul pachetelor Java? 81. Ce sunt variabilele locale în Java? 82. Ce sunt variabilele instanță în Java? 83. Ce sunt variabilele la nivel de clasă în Java?
84. La ce valoare se evaluează expresia următoare? -4 >>> 26 85. Care sunt diferențele între metode și constructori ? 86. Explicați de ce secvența următoare este corectă sau incorectă short s = 20; char c = s; 87. Explicați de ce secvența următoare este corectă sau incorectă byte b = 20; char c = b; 88. Explicați de ce secvența următoare este corectă sau incorectă short s1 = 10; short s2 = 20; short result = s1*s2;
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
6 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
89. Fiind dată declarația de clasă public class MyClass { public static void main(String arg) { MyClass mc = new MyClass( ); System.out.println("First Argument is : "+arg[0]); } } Ce se întâmplă la încercarea de a compila și rula MyClass? 90. Ce se întâmplă dacă încercați să compilați și să executați codul care urmează: public class MyClass{ static int i = 10; public static void main(String[] arg){ static int i = 20; System.out.println("i is :"+i); } } 91. Câte obiecte String sunt create la execuția fragmentului următor? Motivați răspunsul dat. String s1,s2,s3,s4; s1 = "Hello"; s2 = s1; s3 = s2 + "Pal"; s4 = s3; 92. Ce se tipărește la execuția fragmentului de cod care urmează? De ce? int i = 10; long l = 10L; if( i == l ) System.out.println("We are Equal"); 93. Ce se tipărește la execuția fragmentului de cod care urmează? De ce? int i = 10; char c = 10; if( c == i) System.out.println("We are Equal"); 94. Ce se tipărește la execuția fragmentului de cod care urmează? De ce? String s1 = "Null"; String s2 = "Null"; if( s1 == s2) System.out.println("We are Equal"); 95. Ce se tipărește la execuția fragmentului de cod care urmează? De ce? String s1 = "Null"; String s2 = new String(s1); if( s1 == s2) System.out.println("We are Equal"); 96. Ce se tipărește la execuția fragmentului de cod care urmează? De ce? String s1 = "OK"; String s2 = new String(s1); if( s1.equals(s2)) System.out.println("We are Equal"); 97. Ce se tipărește la execuția fragmentului de cod care urmează? De ce? Boolean b1 = new Boolean(true); Boolean b2 = new Boolean(true); if(b1.equals(b2)) System.out.println("We are Equal"); 98. La ce valori se inițializează variabilele locale? 99. Ce se întâmplă dacă încercați să compilați și să executați codul care urmează, folosind comanda:
java test 2
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
7 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
public class test { public static void main(String args[]) { Integer intObj=Integer.valueOf(args[args.length-1]); int i = intObj.intValue(); if(args.length > 1) System.out.println(i); if(args.length > 0) System.out.println(i - 1); else System.out.println(i - 2); } } 100. Ce număr de octeți este folosit la stocarea tipului primitiv Java long? 101. Ce număr de octeți este folosit la stocarea tipului primitiv Java char? 102. Ce număr de octeți este folosit la stocarea tipului primitiv Java double? 103. Care este rezultatul evaluării expresiei 14 ^ 23? 104. Ce se întâmplă dacă încercați să compilați și să executați codul care urmează: public class test { public static void main(String args[]) { int i, j=1; i = (j>1)?2:1; switch(i) { case 0: System.out.println(0); break; case 1: System.out.println(1); case 2: System.out.println(2); break; case 3: System.out.println(3); break; } } } 105. Ce se întâmplă dacă încercați să compilați și să executați codul care urmează: public class test { public static void main(String args[]) { int i=0, j=2; do { i=++i; j--; } while(j>0); System.out.println(i); } } 106. Ce se întâmplă dacă încercați să compilați și să executați codul care urmează: public class test { public static void main(String args[]) { String s1 = "abc"; String s2 = "abc"; if(s1 == s2) System.out.println(1); else System.out.println(2); if(s1.equals(s2)) System.out.println(3); else System.out.println(4); } } 107. Cum ne putem asigura că memoria alocata unui obiect va li eliberată? 108. Ce se întâmplă dacă încercați să compilați și să executați codul care urmează: public class test { public static void main(String args[]) { String str1="abc"; String str2="def"; String str3=str1.concat(str2);
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
8 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
str1.concat(str2); System.out.println(str1); } } 109. Ce metodă din clasa Integer se poate folosi pentru a converti un obiect Integer la tipul primitiv int? 110. Ce se întâmplă dacă încercați să compilați și să executați codul care urmează: public class Test { static int age; public static void main (String args []) { age = age + 1; System.out.println("The age is " + age); } } 111. Ce se întâmplă la încercarea de compilare și execuție a codului de mai jos ? public class Test { static int total = 10; public static void main (String args []) { new Test(); } public Test () { System.out.println("In test"); System.out.println(this); int temp = this.total; if (temp > 5) System.out.println(temp); } } 112. Scrieți o instrucțiune care să inițializeze tabloul de String temp cu șirurile "a", "x", "axe". 113. În ce situații se obține un constructor implicit? 114. Pentru fragmentul următor, care este efectul faptului că a este 5: public class Test { public void add(int a) { loop: for (int i = 1; i < 3; i++) { for (int j = 1; j < 3; j++) { if (a == 5) { break loop; } System.out.println(i * j); } } } } 115. Pentru fragmentul următor, care este efectul faptului că a este 5: public class Test { public void add(int a) { loop: for (int i = 1; i < 3; i++) { for (int j = 1; j < 3; j++) { if (a == 5) { continue loop; } System.out.println(i * j); }
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
9 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
} } } 116. Care este rezultatul execuției următorului fragment de cod Java atunci când valoarea lui x este 2: switch (x) { case 1: System.out.println(1); case 2: case 3: System.out.println(3); case 4: System.out.println(4); } 117. Care este rezultatul execuției următorului fragment de cod Java: boolean flag = false; if (flag = true) { System.out.println("true"); } else { System.out.println("false"); } 118. Potrivit recomandărilor, câte clase publice se pot declara într-un fișier sursă? 119. La ce se referă termenul ascunderea informației? 120. Scrieți o metodă care să aloce un tablou de 3 pe 5 de valori reale în dublă precizie și să initializeze elementele tabloului la o zecime din valoarea rândului înmulțită cu coloana pentru fiecare element.
Întrebări/exerciţii pentru examenul final
1. Care sunt diferențele între compoziție și moștenire? 2. Ce este polimorfsmul. Dați un exemplu scurt. 3. Care este diferența între suprascriere (overriding) și supraîncărcare (overloading). Dați exemple scurte. 4. Fiind date clasele A, B și C, unde B extends A și C extends B, și unde toate clasele implementează metoda de instanță void doIt() . Cum se poate invoca dintr-o metodă de instanță din C metoda doIt() din A? De ce? 5. Care va fi rezultatul compilării și executării următorului program? // Filename: MyClass. java public class MyClass { public static void main(String[] args) { C c = new C(); System.out.println(c. max(13, 29)); } } class A { int max(int x, int y) { if (x>y) return x; else return y; } } class B extends A{ int max(int x, int y) { return super.max(y, x) - 10; } } class C extends B { int max(int x, int y) { return super.max(x+10, y+10); } } 6. Scrieți cea mai simplă expresie care, inserată în zona marcată cu (1), șa facă programul să tipărească câmpul text din clasa Message? // Filename: MyClass.java class Message { // The message that should be printed: String text = "Hello, world! "; }
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
10 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
class MySuperclass { Message msg = new Message() ; } public class MyClass extends MySuperclass { public static void main(String[] args) { MyClass object = new MyClass(); object.print(); } public void print() { System.out.println( /* (1) WRITE THIS COMPLETED STATEMENT */ ) ; } } 7. Scrieți declarațiile de metode care trebuie puse în zona (7), astfel încât programul să se compileze. class MySuperclass { public Integer step1(int i) { return 1; } // (1) protected String step2(String str1, String str2) { return str1; } // (2) public String step2(String str1) { return str1; } // (3) public static String step2() { return "Hi "; } // (4) public MyClass makeIt() { return new MyClass(); } // (5) public MySuperclass makeIt2() { return new MyClass(); } // (6) } public class MyClass extends MySuperclass { // (7) WRITE THIS METHOD DECLARATION } 8. Care va fi rezultatul compilării și executării următorului program? class Vehicle { static public String getModelName() { return "Volvo"; } public long getRegNo() { return 12345; } } class Car extends Vehicle { static public String getModelName() { return "Toyota"; } public long getRegNo() { return 54321; } } public class TakeARi de { public static void main(String args[]) { Car c = new Car(); Vehi cle v = c; System.out.printl n("| " + v.getModelName() + "| " + c. getModel Name() + "| " + v.getRegNo() + "| " + c. getRegNo() + "| "); } }
9. Care va fi rezultatul compilării și executării următorului program? final class Item { Integer size; Item(Integer size) { this. size = size; } public boolean equals(Item item2) { if (this == item2) return true; return this.size.equals(item2.size); } } public class SkepticRide { public static void mai n(String[] args) { Item itemA = new Item(10); Item itemB = new Item(10); Object itemC = itemA; System.out.printl n("| " + itemA.equal s(itemB) + "| " + itemC.equal s(itemB) + "| ") ; } } 10. Ce constructori trebuie inserați in zona marcată cu (1) în MySub astfel ca programul să se compileze? class MySuper { int number; MySuper(int i) { number = i ; } } class MySub extends MySuper { int count; MySub(int count, int num) { super(num); this.count = count; }
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
11 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
// (1) WRITE CONSTRUCTOR NEEDED At THIS POINT } 11. Ce va tipări la execuție următorul program? // Filename: MyClass.java public class MyClass { public static void main(String[] args) { B b = new B("Test"); } } class A { A() { this("1", "2"); } A(String s, String t) { this(s + t); } A(String s) { System.out.printl n(s); } } class B extends A { B(String s) { System.out.printl n(s); } B(String s, String t) { this(t + s + "3"); } B() { super("4"); }; } 12. Considerați următoarele definiții de clase class X { public double g(double x) { return f(x) * f(x); } public double f(double x) { return x + 1.0; } } class Y extends X { public double f(double x) { return x + 2.0; } } Ce va tipări următoarea secvență de instrucțiuni? Y y = new Y(); X x = y; System.out.println(y.f(2.0)); System.out.println(x.f(2.0)); System.out.println(x.g(2.0)); 13. Presupuneți ca cineva execută metoda run() următoare și introduce numerele 5 și 22. public static void run() { int a = IO.readInt(); int b = IO.readInt(); int m = 0; int n = b; while(m < n) { m += a; n -= a; } System.out.println(m - n); } Arătați toate valorile asumate de variabilele programului. a b m n Ce tipărește metoda?
14. Completați metoda la nivel de clasă de mai jos astfel încât să citească două șiruri introduse de către utilizator și să afișeze "yes"' dacă al doilea șir conține doar caractere din primul și "no" în caz contrar. Spre exemplu, să se poată executa metoda cu următorul rezultat (literele aldine arată ce tastează utilizatorul) : brillig glib yes Sau, pentru o altă intrare: brillig broil no public static void run() {
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
12 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
} Pentru a scrie, puteți găsi ca folositoare următoarele metode de instanță din clasa String. int length() Returnează numărul de caractere din șirul țintă. char charAt(int i) Returnează caracterul aflat la indexul i. Spre exemplu, dacă str conține șirul brillig, str.charAt(2) returnează caracterul 'i'. int indexOf(String s) Returnează indexul unde apare prima dată s oîn șirul a cărui metodă este invocată. Dacă s nu apare nicăieri în șirul țintă, metoda returnezaă -1. 15. Scrieți definiția unui nou tip , numit IntRange, care reprezintă un interval de numere întregi. Clasa trebuie să suporte următoarele metode de instanță: IntRange(int start, int end) (Constructor) Construiește un nou obiect IntRange care reprezintă setul de întregi cuprinși între start și end, interval închis. Metoda poate rpesupune că primul parametru este <= cu cel de al doilea. int getSize() Returnează numărul de întregi din interval. boolean contains(int i) Returnează true dacă i se află în interval Metoda exemplu următoare, care folosește clasa IntRange, ilustrează cum funcționează clasa de definit. public static void run() { IntRange range = new IntRange(2, 4); System.out.println(range.getSize()); // this prints ``3'' System.out.println(range.contains(1)); // this prints ``false'' System.out.println(range.contains(3)); // this prints ``true'' System.out.println(range.contains(4)); // this prints ``true'' System.out.println(range.contains(5)); // this prints ``false'' } public class IntRange {
}
16. Presupunem că avem următoarele definiții de clase class A { class B extends A { public int f(int x) { public int f(int x) { return 2 * x; return 5 * x; } } public int g(int x) { public int h(int x) { return f(x * 3); return f(7 * x); } } } } Și că executăm metoda următoare: public static void run() { B b = new B(); System.out.println(b.f(1) + " " + b.g(1) + " " + b.h(1)); A a = b; System.out.println(a.f(1) + " " + a.g(1)); } Ce se va tipări?
17. Definiți o clasă numită PassCount care să țină evidența studenților dintr-o grupă, care au trecut un test. Sunt necesare metodele: PassCount() (Constructor) Construiește un obiect reprezentând o grupă goală. void addGrade(double grade) Adaugă grade in grupă. boolean isAnyFailing() Returnează true doar dacă cineva din grupă a primit un procentaj sub 60. De exemplu, dacă ați definit clasa în mod corespunzător, atunci se poate scrie următoarea clasă pentru a testa: public class PassCountTest { public static void run() { PassCount a = new PassCount(); addGrade(45.0); addGrade(76.0); System.out.println(a.isAnyFailing()); // should print "true" PassCount b = new PassCount(); addGrade(60.0);
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
13 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
System.out.println(b.isAnyFailing()); // should print "false" } } Observați că, pentru a realiza acest lucru, un obiect PassCount nu are nevoie să păstreze fiecare procentaj --- adică nu e nevoie de tablouri: doar trebuie să știe dacă cineva a luat sub 60.
18. Definiți clasa NumberIterator care să itereze peste o secvență de numere. Trebuie să aibă următoarele metode: NumberIterator(int start, int stop) (Constructor) Construiește un obiect pentru a itera peste întregii crescători de la start la stop. Constructorul presupune că start < stop. boolean hasMoreNumbers() Returnează true dacă mai există numere în secvență. int nextNumber() Returneză numărul curent din secvență și avansează iteratorul, astfel că următorul apel de metodă returnează următorul număr din secvență. Metoda aruncă o NoSuchElementException dacă nu mai sunt elemente în secvență. Exemplu de utilizare a clasei – la execuția metodei run() se va tipări "5 6 7 8". public class NumberIteratorTest { public static void run() { NumberIterator it = new NumberIterator(5, 8); System.out.print(it.nextNumber()); while(it.hasMoreNumbers()) { int i = it.nextNumber(); System.out.print(" " + i); } } }
19. Presupunem că avem următoarele definiții de clase class P { class Q extends P { public int f(int x) { public int f(int x) { return x + 1; return x + 4; } } public int g(int x) { public int h(int x) { return f(x + 2); return f(x + 8); } } } } Și că executăm metoda următoare: public static void run() { P a = new P(); Q b = new Q(); P c = b; System.out.println(a.f(0) + " " + a.g(0)); System.out.println(b.f(0) + " " + b.g(0) + " " + b.h(0)); System.out.println(c.f(0) + " " + c.g(0)); } Ce va tipări metoda?
20. Presupunem că avem clasa definită mai jos: class C { static int y = 0; int z; public class Example { public static void run() { C() { z = 0; C a = new C(); C b = new C(); } a.incrX(); void incrX() { int x = 0; a.incrX(); b.incrX(); x++; a.incrY(); IO.println(x); } a.incrY(); b.incrY(); void incrY() { a.incrZ(); y++; a.incrZ(); IO.println(y); } b.incrZ(); void incrZ() { } z++; } IO.println(z); } }
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
14 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
Ce va tipări calculatorul la execuția metodei run() din clasa Example?
21. O matrice sete simetrică dacă pentru oricare i și j, ai,j = aj,i. Un exemplu de matrice simetrică: 0 23 45 23 10 36 46 36 20 Alt mod de definire: o matrice simetrică poate fi reflectată peste diagonală principală și se obține aceeași matrice. Completați metoda care urmează astfel ca să returneze true doar dacă parametul său mat reprezintă o matrice simetrică. Soluția poate presupune că matricea este pătrată. public static boolean isSymmetric(int[][] mat) {
} (Soluția nu trebuie să fie chiar atât de lungă!)
22. Definiți clasa PigPen care să țină evidența porcilor dintr-o cocină. Trebuie să suporte următoarele metode: PigPen(int pigs) (Constructor) Constructiește un obiect care reprezintă o cocină cu pigs porci. boolean isEmpty() Returnează true dacă nu sunt porci în cocină. void pigEnters() Adaugă un porc în cocină. void pigExits() Scade unu din numărul de porci din cocină. Dacă ați definit corect clasa, atunci urmatorul cod este corect: public class PigPenTest { public static void run() { PigPen pen = new PigPen(2); pen.pigExits(); System.out.println(pen.isEmpty()); // prints "false" pen.pigExits(); System.out.println(pen.isEmpty()); // prints "true" pen.pigEnters(); System.out.println(pen.isEmpty()); // prints "false" } }
23. Scrieți o metodă la nivelul clasei, numită mode, care ia ca parametru un tablou de int și returnează întregul care apare cel mai frecvent. De exemplu, codul care urmează folosește metoda mode și ar trebui să tipărească 23. int[] a = { 23, 34, 45, 23, 0, 23 }; System.out.println(mode(a)); Metoda nu trebuie să folosească alte metode pentru a-și îndeplini sarcina. Va avea nevoie de mai mult de o buclă pentru a număra aparițiile fiecărui număr în tablou
24. Considerați programul următor: class A { int f() { return 1; } } class B extends A { int f() { return 0; } } class Main { public static void main(String[] args) { A a = new B(); System.out.println(a.f()); } } Ce tipărește?
25. Considerați programul următor: class Ident { int f(int x) { return x; } int g(int x) { return f(f(x)); } }
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
15 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
class Square extends Ident { int f(int x) { return x * x; } } class Main { public static void main(String[] args) { Ident a = new Ident(); Ident b = new Square(); Square c = new Square(); System.out.println(a.g(3) + " " + b.g(3) + " " + c.g(3)); } } Ce tipărește? 26. Scrieți o expresie care să extragă subșirul "kap", dată fiind declarația: String str = "kakapo"; 27. Ce se va întâmpla la tentativa de compilare și execuție a codului care urmează? class MyClass { public static void main(String[] args) { String str1 = "str1"; String str2 = "str2"; String str3 = "str3"; str1.concat(str2) ; System.out.println(str3.concat(str1)); } } 28. Ce se va întâmpla la tentativa de compilare și execuție a codului care urmează? public class RefEq { public static void mai n(String[] args) { String s = "ab" + "12"; String t = "ab" + 12; String u = new String("ab12"); System.out.println((s==t) + " " + (s==u)); } } 29. ce este o excepție Java? 30. Cum se pot trata situațiile excepționale în Java? Dați un scurt exemplu. 31. Descrieți mecanismul thry-throw-catch. 32. Enunțați regula prinde-sau-declară. 33. Cum se propagă excepțiile? Dați un exemplu scurt. 34. Ce trebuie să conțină minimal o clasă excepție definită de utilizator? Dați un exemplu scurt. 35. Ce este o clasă interioară (inner) ? 36. Ce este an anonymous inner class? Dați un exemplu scurt. 37. Ce este o clasă locală? Dați un exemplu scurt. 38. Ce este o componentă Java? Dați un exemplu scurt. 39. Ce este un container Java? Dați un exemplu scurt. 40. Care sunt pașii principali la afișarea graficii în Java? 41. Ce este un ascultător (listener) in Java? 42. Care este scopul call-back-urilor? 43. Care este rolul modelului în arhitectura MVC? 44. Care este rolul controlorului în arhitectura MVC? 45. Care este rolul vederii în arhitectura MVC?
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
16 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
46. Descrieți pe scurt arhitectura cu model separabil din Swing. 47. Ce este o Java Enumeration? Dați un exemplu scurt. 48. Ce este un tip generic in Java? Dați un exemplu scurt. 49. Scrieți o metodă generică care să tipărească toate valorile stocate într-o colecție. 50. Ce este un iterator in Java? Dați un exemplu scurt. 51. Cum se pot include valori primitive într-o colecție Java (Collection)? Dați un exemplu scurt. 52. Ce este o Java Collection? 53. Care sunt principalele diferențe între clasele Vector și ArrayList? 54. Care este scopul testării software? 55. Ce este testarea funcțională? 56. Ce definește un caz de test? 57. Ce trebuie considerat la dezvoltarea unui plan de teste? 58. Ce este testarea unitară (a unităților)? 59. Ce este un test harness? 60. Ce este testarea regresivă? 61. Ce reprezintă acoperirea în testare? 62. Cum se poate trasa execuția unui program? (Sunt cel puțin 2 metode) 63. Care sunt beneficiile jurnalizării (logging)? 64. Care sunt costurile jurnalizării (logging)? 65. Ce va tipări la execuție următorul program? public class UppTurn { public static void mai n(String[] args) { String str1 = "l ower", str2 = "LOWER", str3 = "UPPER"; str1.toUpperCase(); str1.replace("LOWER", "UPPER"); System.out.printl n((str1. equals(str2)) + " " + (str1. equals(str3))) ; } } 66. Descrieți pașii necesari pentru a citi șiruri dintr-un fișier secvențial formatat. 67. Ce returnează metoda length() din clasa File? 68. Dacă se apelează write(0x01234567) pe o instanță de OutputStream, ce se va scrie în stream? 69. Fiind dat programul: import java.io.DataInputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Endings { public static void main(String[] args) { try { FileInputStream fos = new FileInputStream("info.dat") ; DataInputStream dis = new DataInputStream(fos); int i= dis.readByte(); while (i != -1) { System.out.print((byte)i + "| "); i= dis.readByte(); } } catch (FileNotFoundException fnf) {
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
17 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
System.out.println("File not found"); } catch (EOFException eofe) { System.out.println("End of stream"); } catch (IOException ioe) { System.out.println("Input error"); } } } Ce se va întâmpla la tentativa de compilare și execuție a codului dat? 70. Câte metode sunt definite în interfața Serializable? Why? 71. Fiind dat codul sursă: public class Person { protected String name; Person() { } Person(String name) { this. name = name; } } ____________________________________________________________________ import java.io. Serializable; public class Student extends Person implements Serializable { private long studNum; Student(String name, long studNum) { super(name); this. studNum = studNum; } public String toString() { return "(" + name + ", " + studNum + ") "; } } ________________________________________________________________________ import java.io.*; public class RQ800_10 { public static void main(String args[]) throws IOException, ClassNotFoundException { FileOutputStream outputFile = new FileOutputStream("storage. dat"); ObjectOutputStream outputStream = new ObjectOutputStream(outputFile); Student stud1 = new Student("Aesop", 100); System.out.print(stud1); outputStream. writeObject(stud1); outputStream. flush(); outputStream. close(); FileInputStream inputFile = new FileInputStream("storage. dat"); ObjectInputStream inputStream = new ObjectInputStream(inputFile); Student stud2 = (Student) inputStream.readObject(); System.out.println(stud2); inputStream. close(); } } Ce se va întâmpla la tentativa de compilare și execuție a codului dat? 72. Ce se va întâmpla la tentativa de compilare și execuție a codului următor: import java.util. ArrayList; import java.util. Collections; import java.util. List; public class WhatIsThis { public static void main(String[] args) { List list = new ArrayList(); list.add("B"); list.add("A"); list.add("C"); Collections.sort(list, Collections.reverseOrder()); System.out.println(list.subList(1, 2)); } } 73. Cum se poate obține persistența obiectelor în Java? 74. Ce este un Buffer Java? 75. Care sunt beneficiile aduse de vederile (views ) unui Buffer? 76. Care este scopul unui Buffer direct? Dați un exemplu scurt. 77. Ce este un Java Channel?
30/06/2015 20:27
Intrebari/exercitii recapitulative la POO
18 of 18
http://users.utcluj.ro/~jim/OOPR/Resources/Lectures/ReviewQuestions....
78. Când se termină execuția unui fir de lucru? 79. Cum se poate stabili prioritatea unui fir de lucru? 80. Descrieți ciclul de viață al unui fir de lucru. 81. Cum se poate termina corect un fir de lucru în Java? 82. Ce este o Java Collection? 83. Care sunt restricțiile principale pentru applet? 84. Care sunt principalele diferențe între o aplicație de sine stătătoare și un applet? 85. Descrieți ciclul de viață al unui applet. 86. Care sunt metodele predefinite ale unui applet și ce se pune în ele? 87. Care sunt containere de nivel înalt în GUI Java? 88. Ce sunt firele de lucru Java? 89. Prin ce diferă firele de lucru de taskurile sistemului de operare? 90. Ce este o metodă de fabricare? Dați un exemplu scurt.
Last revisited on 12/07/2010 13:58:32
30/06/2015 20:27