Sunteți pe pagina 1din 22

Structuri de Date n JAVA (I)

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

Fazele dezvoltrii software


structuri de date colecii organizate dup o regul general exemple array care este regula ?

Fazele de dezvoltare specificarea problemei proiectarea soluiei implementarea

analiza soluiei gsite testarea i depanarea ntreinerea i evoluia

Fazele se confund ntr-un proces iterativ


3

Originea limbajului JAVA


Sun Microsistems, 1991 (James Gosling)

lists.java (fiier text)


clas s lists { protected int i; public s tatic void main (String[] args) { // code follows here // ... } // ... }

lists.class (JAVA bytecodes)


3A 25 00 45 34 98 ... 34 55 76 FE D5 3A ...

Java Runtime Environment (JRE) Hardware de calculator 4

Specificaii, design, implementare


specificaii = descrierea exact a problemei de rezolvat (concret) Realizarea unui convertor de temperatur Celsius - Farenheit CELSIUS FARENHEIT ------------------------------- 30.00 Temperatura - 20.00 echivalent 9 - 10.00 va fi afiat Farenheit = Celsius 32 5 0.00 aici 10.00 20.00 30.00 ------------------------------5

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:

Analiza timpului de rulare

analiza de timp = descrierea calitativ a 'vitezei' algoritmului

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

Fie n numrul de trepte ale turnului. Cu n notm de regul mrimea cazului.

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

Fie n numrul de trepte ale turnului. Cu n notm de regul mrimea cazului.

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

Fie n numrul de trepte ale turnului. Cu n notm de regul mrimea cazului.

Metoda 3: scrie 4 cifre (4 operaii)

14

Exprimm cte operaii se fac n funcie de mrimea cazului f(n)

Metoda 1: Metoda 2: Metoda 3:

f n =3n
f n = n 2n
2

ordin de timp liniar ordin ptratic ordin logaritmic

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

Exemplu citire i scriere la consol


import java.io.*; public class Additive { public static void main (String[] args) { System.out.println ("Calculul sumei a doua numere"); InputStreamReader stdin = new InputStreamReader (System.in); BufferedReader console = new BufferedReader (stdin); String s; float a = 0, b = 0;

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

Java 2 Standard Edition (J2SE) API

19

Reguli de scriere a codului


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

Documentarea codului (JavaDoc)


/** Exemplu de aruncare a unei exceptii */ public class SampleThrow { /** Verifica daca un intreg este negativ @param x intregul respectiv @throws IllegalArgumentException daca numarul este negativ @return 1 in cazul in care reuseste */ public int test (int x) { if( x < 0 ) throw new IllegalArgumentException ("x < 0"); } return 1;

// comentariile de genul acesta nu se proceseaza in JavaDoc // ...

21

22

S-ar putea să vă placă și