Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.34 KB | None | 0 0
  1. [OPJJ] Recenzija DZ2
  2. MU
  3.  
  4. Marko Čupić <Marko.Cupic@fer.hr>
  5. Fri 3/17/2017 5:10 PM
  6. To:
  7. Damjan Vučina;
  8. Bok Damjane!
  9.  
  10. Kad sam već danas napravio recenziju Vaše zadaće, evo je mailom u nastavku.
  11.  
  12. Srdačan pozdrav,
  13.  
  14.  
  15. ArrayIndexedCollection:
  16. * remove(-1) očekivao bih da baci IndexOutOfBoundsException; baca
  17. IllegalArgumentException, a u javadocu se nigdje ne spominje koju će
  18. iznimku metoda baciti što je sa stanovišta korisnika te metode loše.
  19. Isti komentar ako je indeks prevelik te ako se zove insert(..., p) gdje
  20. je p nevaljao.
  21. * insert(x,p) uopće ne ažurira size! Isto tako, ne provjerava što se
  22. događa s kapacitetom pa se raspadne kad je kapacitet premali da bi se
  23. element umetnuo. To ste kroz testove morali detektirati!
  24. * konstruktor ArrayIndexedCollection(Collection collection, int
  25. initialCapacity) uopće ne ažurira size nakon kopiranja! Kolekcija tvrdi
  26. da je prazna!
  27. * javni setSize(...)??? Jao, jao, jao! Pa sada bilo tko izvana može
  28. postaviti to na bilo kakvu vrijednost (pozitivnu, negativnu, veću čak i
  29. od trenutnog kapaciteta polja)! Ne, ne i ne. Ne to raditi. Korisnik
  30. smije imati samo metodu za dohvat veličine - vaša implementacija mora
  31. time upravljati.
  32. * kapacitet kolekcije je interni detalj, korisnik ga ne smije vidjeti a
  33. posebno ga ne smije moći mijenjati kroz javni setter koji uz to ne
  34. održava nikakvu vezu između tog broja i stvarnog kapaciteta alociranog
  35. polja!
  36. * metoda getElements() a posebno u izvedbi koja vraća referencu na
  37. interno polje NE SMIJE postojati (jednako kao niti setElements).
  38. Zamislite da imate zločestog korisnika koji kaže: getElements() i potom
  39. sve reference u tom polju postavi na null! Koji je efekt? Vaša kolekcija
  40. odjednom sadrži null elemente za koje tvrdi da ne čini!
  41.  
  42. public void add(Object value) {
  43. if (value == null) {
  44. throw new IllegalArgumentException("Cannot add null value
  45. to the collection.");
  46. } else if (capacity == size) {
  47. capacity *= 2;
  48. elements = Arrays.copyOf(elements, capacity);
  49. }
  50. elements[size] = value;
  51. size++;
  52. }
  53.  
  54. ==> pričali smo o tome na prošlom satu:
  55.  
  56. public void add(Object value) {
  57. if (value == null) {
  58. throw new IllegalArgumentException("Cannot add null value
  59. to the collection.");
  60. }
  61. if (capacity == size) {
  62. int newCapacity = capacity * 2;
  63. elements = Arrays.copyOf(elements, newCapacity);
  64. capacity = newCapacity;
  65. }
  66. elements[size] = value;
  67. size++;
  68. }
  69. Obratite pažnju da je potrebno kapacitet ažurirati tek ako ste uspjeli
  70. realocirati polje.
  71.  
  72. * Indentacija koda (javadoc komentara) nad nekim metodama se razletila.
  73. * Duplicirate kod: contains se može trivijalno izvesti preko indexOf;
  74. indexOf bi trebao provjeriti je li vrijednost null i odmah vratiti -1
  75. (znate da takva ne može postojati u kolekciji).
  76. * metoda addAll uopće ne radi svoj posao: ona u trenutnu kolekciju treba
  77. nadodati sve iz predane kolekcije; ne izgubiti svoj vlastiti sadržaj i
  78. postati kopija predane!
  79. * ArrayIndexedCollection(Collection collection, int initialCapacity),
  80. ArrayIndexedCollection(Collection collection): što ako je collection==null?
  81.  
  82. Collection:
  83. * Želimo jasan i jednostavan kod. Umjesto:
  84. public boolean isEmpty() {
  85. if (this.size() > 0) {
  86. return false;
  87. } else {
  88. return true;
  89. }
  90. }
  91. pišite
  92. public boolean isEmpty() {
  93. return this.size() == 0;
  94. }
  95.  
  96. LinkedListIndexedCollection:
  97. * ne treba u konstruktoru first = null; last = null; Alokator memorije
  98. (new) će sve postaviti na inicijalne vrijednosti pri alokaciji objekta
  99. * LinkedListIndexedCollection(Collection collection) - što ako je
  100. collection==null?
  101. * setSize(int size)!!! Ali ovdje je to totalno besmisleno!
  102. * get/set First/Last !!!
  103. * Bravo za metodu fetchIndexedElement(...) i njenu uporabu u drugim
  104. metodama! Super ste to napravili i njome ste odlično pokušali riješiti
  105. druge metode!
  106. * Nažalost, insert(Object value, int position) nije dobro riješen -
  107. primjerice, kada dodajete čvor na kraj postojeće liste - taj kod ne radi
  108. dobro!
  109. * zbog toga, primjerice, addAll ne radi, kao niti insert(obj)
  110. * indexOf(null) treba vratiti -1, ne iznimku
  111. * remove(Object value): zašto lanac contains pa indexOf - ne radite li
  112. istu stvar dva puta?
  113. * kako dodavanje ne radi dobro, u jednom trenutku se i remove raspadne s
  114. NullPointerException, te niz drugih metoda, da ih sada ne navodim jednu
  115. po jednu.
  116.  
  117. ObjectStack
  118. * NE SMIJE naslijediti ArrayIndexedCollection; niste dobro shvatili zadatak.
  119.  
  120. ComplexNumber
  121. * getAngle() vraća negativne kuteve što ne smije prema opisu te metode
  122.  
  123. Damjane, ova zadaća je definitivno korak na gore u odnosu na prethodnu
  124. zadaću. Tamo ste se još kako tako snašli u proceduralnom kodu, no ovo
  125. ovdje je naprosto loše. S obzirom da, ajmo reći, imate rješenja svih
  126. zadataka (iako Vam ObjectStack formalno ne bih trebao priznati kao
  127. rješenje), dat ću Vam ocjenu 2. Međutim, trebate se ozbiljno uhvatiti
  128. posla ako želite ostati na ovoj vještini.
  129.  
  130. Za početak, da biste ostali na vještini, popravite ovu domaću i dođite
  131. do mene najkasnije sredinom sljedećeg tjedna pokazati mi tu verziju (na
  132. vlastitom laptopu).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement