Documente Academic
Documente Profesional
Documente Cultură
Prezentare curs i laborator Fazele dezvoltrii de software Originea limbajului Java Specificaii, design, implementare Pe scurt despre excepii Analiza timpului de rulare Citirea i scrierea la consol J2SE API (Application Programming Interface) Reguli de scriere a codului JavaDoc
Prezentare
Curs: Honorius Glmeanu, galmeanu@vega.unitbv.ro Bibliografie: Michael Main, Data Structcures and Other Objects using JAVA, Addison Wesley, 2003 Bruce Eckel, Thinking in Java, http://mindview.net/Books/TIJ4 Notare: 10% prezena la curs 40% laborator (notare la fiecare or) 50% colocviu final
2
algoritm = procedur sau secven de instruciuni cu ajutorul crora se rezolv o problem dat exprimarea algoritmului se face de regul n limbaj pseudocod descompunerea problemei (metode) conversia de temperatur tiprirea tabelului valorilor algoritmul procedure convertor (t, step) tiprete capul de tabel for i = 1 to 7 do observai c = t + (i 1) * 10 stilul de scriere f = 9 * c / 5 + 32 i tiprete c, C, un spaiu, f i F alinierea tiprete finalul de tabel
descompunerea problemei n subtask-uri reutilizarea codului (metod genric de tiprire) uurina modificrilor ascunderea informaiei (ascunderea implementrii) semntura unei metode Java:
// conversia temperaturii din grade Celsius n Farenheit public static double celsiusToFarenheit (double c)
tip returnat
numele metodei
parametri
specificaiile metodei
// convertete temperatura din Celsius n Farenheit // @params // double c temperatura n grade Celsius // @returns // temperatura convertit n grade Farenheit // @throws IllegalArgumentException // dac temperatura este mai mic dect cea mai mic // temperatur permis zero absolut, 273,16 public static double celsiusToFarenheit (double c) { // ... }
1: public class SampleThrow 2: { 3: public int test (int x) 4: { 5: if( x < 0 ) 6: throw new IllegalArgumentException (); 7: 8: return 1; 1 9: } Exception in thread "main" 10: java.lang.IllegalArgumentException 11: public static void main (String[] args) at SampleThrow.test(int) 12: { (SampleThrow.java:6) 13: //try at SampleThrow.main 14: //{ (java.lang.String[]) 15: SampleThrow st = new SampleThrow (); (SampleThrow.java:17) 16: System.out.println (st.test (0)); 17: System.out.println (st.test (-1)); 18: //} 19: //catch( IllegalArgumentException e) 20: //{ 21: // System.out.println ("argument invalid"); 22: //} 23: } 24: } 25:
Rezultatele rulrii:
Bob urc n turnul Eiffel cu intenia de a numra cte trepte are acesta. Se folosete de un creion i o hrtie. Punerea unui semn pe hrtie sau aciunea de a cobor / urca o singur treapt se numete operaie. Trei variante: Metoda 1: urc pn sus; pentru fiecare treapt urcat sau cobort pune cte un semn;
10
Metoda 2: las hrtia la baza turnului; pentru prima treapt, o urc, i las apca pe ea, o coboar; face un semn pe hrtie; apoi, de fiecare dat va urca pn i gsete apca, mai urc o treapt, mut apca aici, coboar; ajuns jos, pune un semn pe hrtie; repet aciunile pn nu mai gsete noi trepte; Metoda 3: strig ctre Pierre, care se afl n turn, Cte trepte are turnul ?, noteaz rspunsul pe hrtie 2689 trepte, adic face 4 semne.
Pentru fiecare metod, numr semnele pe care le-a pus pe hrtie. Ne intereseaz efortul depus cte operaii a realizat.
11
Metoda 1: urc n trepte pune, la fiecare treapt urcat, cte un semn, n total n semne coboar n trepte total: n + n + n = 3n (operaii)
12
Metoda 2: treapta 1: urc 1 treapt, coboar 1 treapt, pune 1 semn treapta 2: urc 2 trepte, coboar 2 trepte, pune 1 semn . . . treapta n: urc n trepte, coboar n trepte, pune 1 semn total:
1 + 2 + ... + n + n +(n-1) + ... + 1 + n --------------------------(n+1)+(n+1) + ... +(n+1)+ n = n(n+2)
13
14
f n =3n
f n = n 2n
2
f n =[ log10 n ]1
Care metod este mai rapid ? / Care algoritm este mai eficient ? Cazuri extreme (comparai): un maratonist aplic metoda 1, un melc metoda 2 maratonistul metoda 1, melcul metoda 3 (rzbunarea melcului) 15
16
17
try { System.out.print ("Introduceti a: "); s = console.readLine (); a = Float.parseFloat (s); System.out.print ("Introduceti b: "); s = console.readLine (); b = Float.parseFloat (s); } catch (IOException ioex) { System.out.println ("Input error"); System.exit (1); } catch (NumberFormatException nfex) { System.out.println ("\"" + nfex.getMessage () + "\"" + " is not numeric"); System.exit (1); } System.out.print (a + " + " + b + " = "); String result = String.format ("%1$07.3f", a+b); System.out.println (result);
18
19
dup modificare, neaprat testai programul nu modificai mult fr a testa impunei verificri a parametrilor primii stabilii test cases pentru ct mai multe situaii dup o modificare rulai toate test case-urile anterioare metode ct mai scurte, descrise clar comentai la fiecare nceput de operaie respectai alinierea codului (2 spaii) syntax highlighting unit testing (testare pe bucele) tratai toate situaiile particulare care pot aprea
20
21
22