structuri de date în java (i) -...

Post on 30-Jun-2018

244 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

2

PrezentareCurs:

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

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

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 ...

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

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

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

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){

// ...}

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:

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;

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.

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)

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)

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)

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

16

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;

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

19

Java 2 Standard Edition (J2SE) API

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

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)

22

top related