Structuri de Date în JAVA (I) -...

22
1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele dezvoltării de software Originea limbajului Java Specificaţii, design, implementare Pe scurt despre excepţii Analiza timpului de rulare Citirea şi scrierea la consolă J2SE API (Application Programming Interface) Reguli de scriere a codului JavaDoc

Transcript of Structuri de Date în JAVA (I) -...

Page 1: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

1

Structuri de Date în JAVA (I)

● Prezentare curs şi laborator● Fazele dezvoltării de software● Originea limbajului Java● Specificaţii, design, implementare● Pe scurt despre excepţii● Analiza timpului de rulare● Citirea şi scrierea la consolă● J2SE API (Application Programming Interface)● Reguli de scriere a codului● JavaDoc

Page 2: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

2

PrezentareCurs:

● Honorius Gâlmeanu, [email protected]

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% prezenţa la curs● 40% laborator (notare la fiecare oră)● 50% colocviu final

Page 3: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

3

Fazele dezvoltării software

● structuri de date – colecţii organizate după o regulă generală

● exemple – array – care este regula ?

Fazele de dezvoltare● specificarea problemei● proiectarea soluţiei● implementarea

● analiza soluţiei găsite● testarea şi depanarea● întreţinerea şi evoluţia

Fazele se confundă într-un proces iterativ

Page 4: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

4

Originea limbajului JAVA

Sun Microsistems, 1991 (James Gosling)

lists.java (fişier text)class lists{

protected int i;public s tatic void main (String[]

args){

// code follows here// ...

}// ...

}

Java Runtime Environment (JRE)

Hardware de calculator

lists.class (JAVA bytecodes)3A 25 00 45 34 98 ...34 55 76 FE D5 3A ...

Page 5: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

5

Specificaţii, design, implementarespecificaţii = descrierea exactă a problemei de rezolvat

(concret) Realizarea unui convertor de temperatură Celsius - FarenheitCELSIUS FARENHEIT-------------------------------- 30.00 Temperatura- 20.00 echivalentă- 10.00 va fi afişată 0.00 aici 10.00 20.00 30.00-------------------------------

Farenheit=95⋅Celsius32

Page 6: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

6

● algoritm = procedură sau secvenţă de instrucţiuni cu ajutorul cărora se rezolvă o problemă dată

● exprimarea algoritmului se face de regulă în limbaj pseudocod

● descompunerea problemei (metode)➔ conversia de temperatură➔ tipărirea tabelului valorilor

procedure convertor (t, step)tipăreşte capul de tabelfor i = 1 to 7 do

c = t + (i – 1) * 10f = 9 * c / 5 + 32tipăreşte c, “C”, un spaţiu, f şi “F”

tipăreşte finalul de tabel

observaţi stilul de scriere

şialinierea

algoritmul

Page 7: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

7

● descompunerea problemei în subtask-uri➔ reutilizarea codului (metodă genrică de tipărire)➔ uşurinţa modificărilor➔ ascunderea informaţiei (ascunderea implementării)

● semnătura unei metode Java:

// conversia temperaturii din grade Celsius în Farenheitpublic static double celsiusToFarenheit (double c)

tip returnat numele metodei parametri

Page 8: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

8

● specificaţiile metodei

// converteşte 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ă decât cea mai mică// temperatură permisă – zero absolut, 273,16public static double celsiusToFarenheit (double c){

// ...}

Page 9: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

9

1: public class SampleThrow 2: { 3: public int test (int x) 4: { 5: if( x < 0 ) 6: throw new IllegalArgumentException (); 7: 8: return 1; 9: }10: 11: public static void main (String[] args)12: {13: //try14: //{15: SampleThrow st = new SampleThrow ();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:

1Exception in thread "main" java.lang.IllegalArgumentException at SampleThrow.test(int)

(SampleThrow.java:6) at SampleThrow.main

(java.lang.String[])(SampleThrow.java:17)

Rezultatele rulării:

Page 10: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

10

Analiza timpului de rulare● analiza de timp = descrierea calitativă a 'vitezei' algoritmului

Bob urcă în turnul Eiffel cu intenţia de a număra câte trepte are acesta. Se foloseşte de un creion şi o hârtie. Punerea unui semn pe hârtie sau acţiunea de a coborî / urca o singură treaptă se numeşte operaţie.

Trei variante:● Metoda 1:

➔ urcă până sus; pentru fiecare treaptă urcată sau coborâtă pune câte un semn;

Page 11: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

11

● Metoda 2:➔ lasă hârtia la baza turnului; pentru prima treaptă, o urcă,

îşi lasă şapca pe ea, o coboară; face un semn pe hârtie; apoi, de fiecare dată va urca până îşi găseşte şapca, mai urcă o treaptă, mută şapca aici, coboară; ajuns jos, pune un semn pe hârtie; repetă acţiunile până nu mai găseşte noi trepte;

● Metoda 3:➔ strigă către Pierre, care se află în turn, “Câte trepte are

turnul ?”, notează răspunsul pe hârtie – 2689 trepte, adică face 4 semne.

Pentru fiecare metodă, numără semnele pe care le-a pus pe hârtie.

Ne interesează efortul depus – câte operaţii a realizat.

Page 12: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

12

Fie n numărul de trepte ale turnului. Cu n notăm de regulă mărimea cazului.

● Metoda 1:➔ urcă n trepte➔ pune, la fiecare treaptă urcată, câte un semn, în total n

semne➔ coboară n treptetotal: n + n + n = 3n (operaţii)

Page 13: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

13

Fie n numărul de trepte ale turnului. Cu n notăm de regulă mărimea 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 semntotal:

1 + 2 + ... + n + n +(n-1) + ... + 1 + n ---------------------------(n+1)+(n+1) + ... +(n+1)+ n = n(n+2)

Page 14: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

14

Fie n numărul de trepte ale turnului. Cu n notăm de regulă mărimea cazului.

● Metoda 3:➔ scrie 4 cifre (4 operaţii)

Page 15: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

15

Exprimăm câte operaţii se fac în funcţie de mărimea cazului – f(n)

● Metoda 1:ordin de timp liniar

● Metoda 2: ordin pătratic

● Metoda 3:ordin logaritmic

Care metodă este mai rapidă ? / Care algoritm este mai eficient ?

Cazuri extreme (comparaţi):● un maratonist aplică metoda 1, un melc metoda 2● maratonistul metoda 1, melcul metoda 3 (răzbunarea

melcului)

f n=3n

f n=n22n

f n=[ log10 n]1

Page 16: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

16

Page 17: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

17

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;

Page 18: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

18

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); }}

Page 19: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

19

Java 2 Standard Edition (J2SE) API

Page 20: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

20

Reguli de scriere a codului● după modificare, neapărat testaţi programul● nu modificaţi mult fără a testa● impuneţi verificări a parametrilor primiţi● stabiliţi test cases pentru cât mai multe situaţii● după o modificare rulaţi toate test case-urile anterioare● metode cât mai scurte, descrise clar● comentaţi la fiecare început de operaţie● respectaţi alinierea codului (2 spaţii)● syntax highlighting● unit testing (testare pe bucăţele)● trataţi toate situaţiile particulare care pot apărea

Page 21: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

21

/** 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 // ...}

Documentarea codului (JavaDoc)

Page 22: Structuri de Date în JAVA (I) - vega.unitbv.rovega.unitbv.ro/~galmeanu/java/suport/curs-1/doc/java-curs-1.pdf · 1 Structuri de Date în JAVA (I) Prezentare curs şi laborator Fazele

22