curs1 13 java cc

Upload: gabriel-cosmin

Post on 25-Feb-2018

256 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Curs1 13 Java CC

    1/453

    PROGRAMARE ORIENTAT PEOBIECTE

    l.ing. Carmen ODUB#&TEANU

  • 7/25/2019 Curs1 13 Java CC

    2/453

    CUPRINS

    l INTRODUCERE N LIMBAJUL JAVA

    l PROGRAMARE ORIENTAT#PE OBIECTE CONCEPTE GENERALE

    l PROGRAMARE ORIENTAT#PE OBIECTE NLIMBAJUL JAVA

    l EXCEP(IIl FLUXURI (INTR#RI-IE&IRI)l INTERFE(El CLASE ABSTRACTE

    l CLASE INCLUSE

    l COLEC(IIl INTERFETE GRAFICE (AWT, SWING)

    l APPLET-uril DESENARE

  • 7/25/2019 Curs1 13 Java CC

    3/453

    BIBLIOGRAFIE

    l Curs practic de Java, Cristian Fr)sinaru

    l Programare orientat) pe obiecte in Java,Florian Moraru, Carmen Odub)teanu

    l Java de la 0 la Expert, &tefan Tanasa, s.a.l Java - o perspectiva pragmatic), Irina

    Athanasiu, s.a.

    l Java Tutorial,www.java.sun.com/docs/books/tutorial

    l Thinking in Java, Bruce Eckel,www.bruceckel.com

    http://www.java.sun.com/docs/books/tutorialhttp://www.bruceckel.com/http://www.bruceckel.com/http://www.java.sun.com/docs/books/tutorial
  • 7/25/2019 Curs1 13 Java CC

    4/453

    Introducere n Java

    l Tehnologia Java

    l Primul programl Structura lexical)l Tipuri de datel Variabilel Instruc+iunil Ce este un pachet ?

    l Pachetele standard (J2SDK)l Importul unei clase sau interfe+el Importul la cererel Importul staticl Crearea unui pachetl Organizarea fiierelor

    l Vectoril &iruri de caracterel Argumente de la linia de comand)l Arhive JAR

  • 7/25/2019 Curs1 13 Java CC

    5/453

    Limbajul de programare Java

    l Simplitate

    l Uurin+)n crearea de aplica+ii complexel Robuste+e nu exist)pointeri,

    administrarea automat)a memoriei, GCl Complet orientat pe obiecte

    l Securitate

    l Neutralitate arhitectural)l Portabililtate

    l Compilat i interpretatl Performan+)

    l Modelat dup)C i C++

  • 7/25/2019 Curs1 13 Java CC

    6/453

    Platforme de lucru Java

    l J2SE (Standard Edition)

    Aplica+ii independente, appleturi, JavaWeb Start

    l J2ME (Micro Edition)

    Programarea dispozitivelor mobile

    l J2EE (Enterprise Edition) Aplica+ii complexe, pe mai multe nivele pentrusisteme eterogene, cu baze de date distribuite,etc.

    Aplica+ii i servicii Web: servleturi, pagini JSP,etc.

    l Distribu+iile Java sunt oferite gratuit http://java.sun.com

    J2SE 1.6 SDK

    http://java.sun.com/http://java.sun.com/
  • 7/25/2019 Curs1 13 Java CC

    7/453

    Compilat #i interpretat

    Limbajele de programare, n func+ie de modul de

    execu+ie a aplica+iilor: Interpretate+ : simplitate, portabilitate- : viteza de execu+ie redus)

    Compilate+ : execu+ia extrem de rapid)

    - : lipsa portabilit)+ii

    Java: compilat + interpretatCompilator: surs)- cod de octe+iInterpretor: execut)codul de octe+i

    Cod octe+i , Cod main)

    Cod main)- procesorCod octe+i - JVM

    JVM = Java Virtual Machine (mediul de execu+ieal aplica+iilor Java)

  • 7/25/2019 Curs1 13 Java CC

    8/453

    Primul program

    1. Scriererea codului surs)classFirstApp

    {

    public static void main( Stringargs[])

    {

    System.out.println("Hello world!");}

    }

    Definire clas) class numeclasal Func+ia principal)a unei aplica+ii Java

    propriu-zise -public static void main( Stringargs[])

    l Afiare - System.out.println

  • 7/25/2019 Curs1 13 Java CC

    9/453

    Primul program

    2. Salvarea fiierelor surs)

    C:\intro\FirstApp.java

    3. Compilarea aplica+ieijavac FirstApp.javava rezulta: FirstApp.class

    4. Rularea aplica+ieijava FirstApp

    l Se poate folosi un IDE (mediu integrat de

    dezvoltare) pentru a realiza to+i paiianteriori (JCreator, Eclipse, NetBeans, etc.)

  • 7/25/2019 Curs1 13 Java CC

    10/453

    Structura lexical&

    Setul de caractere: Unicodel nlocuiete ASCIIl un caracter se reprezint)pe 2 octe+il con+ine 65536 de semnel compatibil ASCII : primele 256 caractere

    sunt cele din ASCII

    l structurat n blocuri:Basic, Latin, Greek, Arabic, Gothic,Currency, Mathematical, Arrows, Musical,etc.

    l referire prin cod hexa:\ uxxxx\u03B1 -\u03C9: - -

    l http://www.unicode.org

    http://www.unicode.org/http://www.unicode.org/
  • 7/25/2019 Curs1 13 Java CC

    11/453

    Cuvinte cheie

    l Cuvintele rezervate sunt, cu cteva excep+ii,

    cele din C++. abstract, double, int, strictfp

    boolean, else, interface, super

    break, extends, long, switch

    byte, final, native, synchronized

    case, finally, new, this catch, float, package, throw

    char, for, private, throws

    class, goto*, protected, transient

    const*, if, public, try

    continue, implements, return, void

    default, import, short, volatile do, instanceof, static, while

    Incepnd cu 1.5: enum.

  • 7/25/2019 Curs1 13 Java CC

    12/453

    Identificatori

    l Sunt secven+e nelimitate de litere i cifre

    Unicode plus simbolul _, ce ncep cu o liter)sau _.l Identificatorii nu au voie s)fie identici cu

    cuvintele rezervate.Exemple: a1, FirstApp, factorial, etc.

    Conven+ie:l Nume de clasa: prima liter)mare ( Complex)l Nume de metod): prima liter)mic)( aduna,

    adunaComplex)l Nume variabil): prima liter)mic)(var1)l Nume constant): prima liter)mare sau tot

    numele cu litere mari (Pi, PI)

    Obs: dacidentificatorul este format din mai mul#iatomi lexicali, atunci primele litere ale celorlal#iatomi se scriu cu majuscule.

  • 7/25/2019 Curs1 13 Java CC

    13/453

    Constante

    l Intregi (10, 16 -0x, 8-0) normali - se reprezint) pe 4 octe+i (32 bi+i) lungi - se reprezint) pe 8 octe+i (64 bi+i) i se

    termin) cu caracterul L (sau l).

    l Flotan+i: 1.0, 2e2, 3f, 4D s)aib)cel pu+in o zecimal)dup)virgul) s)fie n nota+ie exponen+ial) s)aib)sufixul F sau f pentru valorile

    normale - reprezentate pe 32 bi+i, respectivD sau d pentru valorile duble - reprezentatepe 64 bi+i.

    l Logici: true, false

  • 7/25/2019 Curs1 13 Java CC

    14/453

    Constante

    l Caracter: J, a, v, a, \n

    Caracter sau secven+e escape (permitspecificarea caracterelor care nu aureprezentare grafic)i reprezentarea unorcaractere speciale precum backslash,apostrof, etc.)

    Secven+ele escape predefinite n Java sunt:

    \b : Backspace (BS) \t : Tab orizontal (HT) \n : Linie nou)(LF) \f : Pagin)nou)(FF) \r : Inceput de rnd (CR) \" : Ghilimele

    \ : Apostrof \\ : Backslash

  • 7/25/2019 Curs1 13 Java CC

    15/453

    Constante

    . &iruri de caractere: Text format din zero sau mai multe caracterentre ghilimele. Caracterele care formeaz)irul pot fi caractere grafice sau secven+eescape.

    l Separatori: indic)sfritul unei unit)+ilexicale i nceputul alteia.( ) [ ] ; , .

    Observa+ie: instruc+iunile sunt separate prin ;

  • 7/25/2019 Curs1 13 Java CC

    16/453

    Operatori

    atribuirea:

    = matematici:

    +, -, *, /, %, ++, --lval op= rval: x += 2 n -= 3x++, ++x, n--, --n

    logici:&&(and), ||(or), !(not) rela+ionali: =, ==, != pe bi+i:

    &(and), |(or), ^ (xor),~ (not) de transla+ie: , >>> (shift la dreapta f)r)

    semn) if-else:

    expresie-logica ? val-true: val-false

  • 7/25/2019 Curs1 13 Java CC

    17/453

    Operatori

    l operatorul , (virgul)) folosit pentru evaluarea

    secven+ial)a opera+iilor:int x=0, y=1, z=2;

    l operatorul + pentru concatenarea irurilorString s1="Ana";String s2="mere";

    int x=10;System.out.println(s1 + " are " + x + " " + s2);

    l operatori pentru conversii (cast) : (tip-de-data)int a = (int)a;char c = (char)96;

    int i = 200;long l = (long)i; //widening conversionlong l2 = (long)200;int i2 = (int)l2; //narrowing conversion

  • 7/25/2019 Curs1 13 Java CC

    18/453

    Comentarii

    Exist)trei feluri de comentarii:

    l Comentarii pe mai multe linii, nchise ntre /*i */.

    l Comentarii pe mai multe linii care +in de

    documenta+ie, nchise ntre /** i */. Textul dintre cele dou)secven+e este

    automat mutat n documenta+ia aplica+ieide c)tre generatorul automat dedocumenta+ie javadoc.

    l Comentarii pe o singur)linie, care incep cu//.

  • 7/25/2019 Curs1 13 Java CC

    19/453

    Tipuri de date

    Tipurile primitive:

    l aritmetice ntregi: byte (1 octet), short(2), int (4), long

    (8) reale: float (4), double (8)

    l caracter: char (2)l logic: boolean (true i false)

    Tipul referin+):l Vectorii, clasele i interfe+elel Valoarea unei variabile de acest tip este, spre

    deosebire de tipurile primitive, o referin+)

    (adres)de memorie) c)tre valoarea saumul+imea de valori reprezentat)de variabilarespectiv).

    Nu exist): pointer, struct i union.

  • 7/25/2019 Curs1 13 Java CC

    20/453

    Variabile

    l Declararea variabilelor:

    Tip numeVariabila;

    l Ini+ializarea variabilelor:Tip numeVariabila = valoare;

    l Declararea constantelor:

    final Tip numeVariabila;

    final double PI = 3.14;

    int valoare = 100;

    long numarElemente = 12345678L;String bauturaMeaPreferata = "apa";

  • 7/25/2019 Curs1 13 Java CC

    21/453

    Categorii variabile

    a. Variabile membre ale unei clase, declarate

    n interiorul unei clase, vizibile pentru toatemetodele clasei respective ct i pentru alteclase n func+ie de nivelul lor de acces

    b. Parametrii metodelor, vizibili doar n metodarespectiv)

    c. Variabile locale, declarate ntr-o metod),vizibile doar n metoda respectiv)

    d. Variabile locale, declarate ntr-un bloc,

    vizibile doar n blocul respectiv.

    e. Parametrii de la tratarea excep+iilor

  • 7/25/2019 Curs1 13 Java CC

    22/453

    Categorii variabile

    class Exemplu {

    int a;

    public void metoda(int b) {

    a = b;

    int c = 10;

    for(int d=0; d < 10; d++) {

    c --;}

    try {

    a = b/c;

    } catch(ArithmeticException e) {

    System.err.println(e.getMessage());

    }

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    23/453

    Instruc(iuni

    Instruc+iuni de decizie:

    if-else, switch-case

    Instruc+iuni de salt:for, while, do-while

    Instruc+iuni pentru tratarea excep+iilor:try-catch-finally, throw

    Alte instruc+iuni:

    break, continue, return, label:

  • 7/25/2019 Curs1 13 Java CC

    24/453

    Instruc(iuni de decizie

    l if-else

    if (expresie-logica) {...

    }

    Sau:

    if (expresie-logica) {

    ...

    } else {

    ...

    }l switch-caseswitch (variabila) {

    case valoare1:

    ...

    break;

    case valoare2:

    ...

    break;default:

    ...

    }

  • 7/25/2019 Curs1 13 Java CC

    25/453

    Instruc(iuni de salt

    l for

    for(initializare; expresie-logica; pas-iteratie) {//Corpul buclei

    }

    Exemplu:for(int i=0, j=100 ; i < 100 && j > 0; i++, j--) {

    ...

    }l while

    while (expresie-logica) {...

    }l do-while

    do {...

    } while (expresie-logica);

  • 7/25/2019 Curs1 13 Java CC

    26/453

    Alte instruc(iuni

    l break: p)r)sete for+at corpul unei structuri

    repetitive.l continue: termin)for+at itera+ia curent)a

    unui ciclu i trece la urm)toarea itera+ie.

    l return [valoare]: termin)o metod)i,eventual, returneaz

    )o valoare.

    l numeEticheta: definete o etichet).l Nu exist)gotol Pot fi definite etichete folosite astfel:

    break numeEticheata continue numeEticheta

  • 7/25/2019 Curs1 13 Java CC

    27/453

    Exemplu de folosire a etichetelor

    i=0;

    eticheta:while (i < 10) {

    System.out.println("i="+i);

    j=0;

    while (j < 10) {j++;

    if (j==5) continue eticheta;

    //sau: if (j==5) break eticheta;

    System.out.println("j="+j);

    }i++;

    }

  • 7/25/2019 Curs1 13 Java CC

    28/453

    Ce este un pachet ?

    Pachet = Colec+ie de clase i interfe+e

    Scopul:

    l Organizarea lucrului

    l G)sirea i utilizarea mai uoar)a claselorl Evitarea conflictelor de nume

    l Controlul accesului

  • 7/25/2019 Curs1 13 Java CC

    29/453

    Pachetele standard (J2SDK)

    java.lang- clasele de baz)ale limbajului Java

    java.io- intr)ri/ieiri, lucrul cu fiierejava.util - clase i interfe+e utilejava.applet - dezvoltarea de appleturijava.awt - interfa+a grafic)cu utilizatoruljava.awt.event - tratare evenimentejava.beans - scrierea de componente reutilizabile

    java.net - programare de re+eajava.sql - lucrul cu baze de datejava.rmi - execu+ie la distan+)java.security - mecanisme de securitatejava.math - opera+ii matematice cu numere marijava.text - lucrul cu texte, date i numere

    independent de limb)java.lang.reflect - introspec+iejavax.swing - interfa+a grafic)cu utilizatorul, mult

    mbog)+it)fa+)de AWT.

  • 7/25/2019 Curs1 13 Java CC

    30/453

    Folosirea membrilor unui pachet

    1. specificarea numelui complet:

    numePachet.NumeClasa.Button - numele scurt al clasei

    java.awt - pachetul din care face parte

    java.awt.Button - numele complet al clasei

    Exemplu:

    java.awt.Button b1 = new java.awt.Button("OK");

    java.awt.Button b2 = new java.awt.Button("Cancel");

    java.awt.TextField tf1 =

    new java.awt.TextField("Neplacut");java.awt.TextField tf2 =

    new java.awt.TextField("Tot neplacut");

  • 7/25/2019 Curs1 13 Java CC

    31/453

    Importul unei clase sau interfe(e

    2. importul clasei respective

    import numePachet.numeClasa;//Pentru exemplul nostru:import java.awt.Button;import java.awt.TextField;...Button b1 = new Button("OK");

    Button b2 = new Button("Cancel");TextField tf1 = new TextField("Placut");TextField tf2 = new TextField("Foarte placut");

    //Problema:import java.awt.Button;import java.awt.TextField;

    import java.awt.Rectangle;import java.awt.Line;import java.awt.Point;import java.awt.Polygon;

  • 7/25/2019 Curs1 13 Java CC

    32/453

    Importul la cerere

    3. importul ntregului pachet

    import numePachet.*;

    //Pentru exemplul nostru:import java.awt.*;...

    Button b = new Button("OK");Point p = new Point(0, 0);

    import java.awt.C*; = eroareImportate automat:

    pachetul java.lang pachetul curent pachetul implicit (f)r)nume)

  • 7/25/2019 Curs1 13 Java CC

    33/453

    Ambiguit&(i

    import java.awt.*;

    // Contine clasa Listimport java.util.*;

    // Contine interfata List

    ...

    List x; //Declaratie ambiguajava.awt.List a = new java.awt.List(); //corect

    java.util.List b = new ArrayList(); //corect

  • 7/25/2019 Curs1 13 Java CC

    34/453

    Importul static

    l Referirea constantelor statice ale unei clase:

    import static numePachet.NumeClasa.*;

    // Inainte de versiunea 1.5import java.awt.BorderLayout.*;

    ...

    fereastra.add(new Button(), BorderLayout.CENTER);

    // Incepand cu versiunea 1.5import java.awt.BorderLayout.*;

    import static java.awt.BorderLayout.*;

    ...

    fereastra.add(new Button(), CENTER);

  • 7/25/2019 Curs1 13 Java CC

    35/453

    Crearea unui pachet

    package numePachet;

    //Fisierul Graf.javapackage grafuri;class Graf {...}class GrafPerfect extends Graf {...}

    //Fisierul Arbore.javapackage grafuri;class Arbore {...}class ArboreBinar extends Arbore {...}

    Pachetul implicit = directorul curent

  • 7/25/2019 Curs1 13 Java CC

    36/453

    Organizarea fi#ierelor surs&

    Organizarea surselor = foarte important)

    Recomand)ri:l clasa - fiierl sursa clasei C - fiierul C.java obligatoriu

    pentru clase publice

    l pachet - director

    l clasele pachetului - fiierele directorului

  • 7/25/2019 Curs1 13 Java CC

    37/453

    Organizarea fi#ierelor surs&

    /matematica

    /surse/geometrie

    /planPoligon.javaCerc.java

    /spatiuPoliedru.javaSfera.java

    /algebraGrup.java

    /analizaFunctie.javaMatematica.java

  • 7/25/2019 Curs1 13 Java CC

    38/453

    Organizarea fi#ierelor surs&

    // Poligon.java

    package geometrie.plan;

    public class Poligon { . . . }

    // Cerc.java

    package geometrie.plan;

    public class Cerc { . . . }

    // Poliedru.java

    package geometrie.spatiu;

    public class Poliedru{ . . . }

    // Sfera.java

    package geometrie.spatiu;public class Sfera { . . . }

    // Grup.java

    package algebra;

    public class Grup { . . . }

    // Functie.java

    package analiza;

    public class Functie { . . . }

  • 7/25/2019 Curs1 13 Java CC

    39/453

    Vectori

    Declararea

    Tip[] numeVector; sauTip numeVector[];

    Instan+ierea

    numeVector = new Tip[nrElemente];

    Ini+ializarea (op+ional)String culori[] ={"Rosu", "Galben"};

    v = new int[10];

    //aloca spatiu pentru 10 intregi: 40 octetic = new char[10];

    //aloca spatiu pentru 10 caractere: 20 octeti

  • 7/25/2019 Curs1 13 Java CC

    40/453

    Vectori

    l Declararea i instan+ierea pot fi f)cute

    simultan:Tip[] numeVector = new Tip[nrElemente];

    l Primul indice al unui vector este 0, decipozi+iile unui vector cu n elemente vor fi

    cuprinse ntre 0 i n - 1.l Nu sunt permise construc+ii de genul Tip

    numeVector[nrElemente], alocareamemoriei f)cndu-se doar prin intermediuloperatorului new.

    int v[10]; //ilegalint v[] = new int[10]; //corect

  • 7/25/2019 Curs1 13 Java CC

    41/453

    Tablouri multidimensionale

    Tablou multidimensional = vector de vectori.

    Tip mat[][] = new Tip[nrLinii][nrColoane];

    l mat[i]este linia i a matricii i reprezint)unvector cu nrColoane elemente iar mat[i][j]

    este elementul de pe linia i i coloana j.

    l Dimensiunea unui vectorVariabila length:int []a = new int[5];

    // a.length are valoarea 5int m[][] = new int[5][10];// m[0].length are valoarea 10

  • 7/25/2019 Curs1 13 Java CC

    42/453

    Copierea vectorilor

    int a[] = {1, 2, 3, 4};

    int b[] = new int[4];

    // Varianta 1

    for(int i=0; i

  • 7/25/2019 Curs1 13 Java CC

    43/453

    Sortarea vectorilor - clasa Arrays

    Metode din java.util.Arrays:

    sort - (QuickSort -O(n log(n)))int v[]={3, 1, 4, 2};

    java.util.Arrays.sort(v);// Sorteaza vectorul v

    // Acesta va deveni {1, 2, 3, 4}

    binarySearch equals fill

    Vectori cu dimensiune variabil) i eterogeni:l Vector, ArrayList, etc. din pachetul java.util.

  • 7/25/2019 Curs1 13 Java CC

    44/453

    )iruri de caractere

    l char[]l String

    String s = "abc";String s = new String("abc");char data[] = {a, b, c};String s = new String(data);

    l StringBufferUn ir de caractere constant (nu se dorescschimb)ri n por+iuni din con+inutul s)u peparcursul execu+iei programului) va fideclarat de tipul String, altfel va fi declaratde tip StringBuffer. StringBuffer pune la

    dispozi+ie metode pentru modificareacon+inutului irului, cum ar fi: append, insert,delete, reverse.

  • 7/25/2019 Curs1 13 Java CC

    45/453

    )iruri de caractere

    l Uzual, cea mai folosit)modalitate de a lucra

    cu iruri este prin intermediul clasei String.l Clasa StringBuffer va fi utilizat)predominant

    n aplica+ii dedicate proces)rii textelor cumar fi editoarele de texte.

    String s1="asd",s2="";s1=s2+"a";System.out.println(s1+" "+s2);

    l Testarea egalit)+ii: equalsif (nume.equals("duke")) { ... }

  • 7/25/2019 Curs1 13 Java CC

    46/453

    )iruri de caractere

    l Concatenarea: +

    String s1 = "ab" + "cd";String s2 = s1 + 123 + "xyz"l extrem de flexibil, permite concatenarea irurilor

    cu obiecte de orice tip care au o reprezentarede tip ir de caractere.

    Exemple:System.out.print("Vectorul v are" + v.length + "elem.");String x = "a" + 1 + "b;De fapt:String x = new StringBuffer().append("a").append(1).append("b").toString()

    l Obs: irul s=1+2+"a"+1+2 va avea valoarea"3a12", primul + fiind operatorul matematic deadunare iar al doilea +, cel de concatenare airurilor.

  • 7/25/2019 Curs1 13 Java CC

    47/453

    Argumente de la linia de comand&

    l Trimiterea argumentelor

    java NumeAplicatie [arg0 arg1 . . .]java Test Java "Hello Duke" 1.5

    l Primirea argumentelor:public static void main (String args[]){

    /* args[0] va fi Javaargs[1] va fi "Hello Dukes.a.m.d.*/

    }

    l Num)rul argumentelor:public static void main (String args[]) {

    int numarArgumente = args.length ;}

  • 7/25/2019 Curs1 13 Java CC

    48/453

    Exemplu

    public class Salut {

    public static void main (String args[]) {if (args.length == 0) {

    System.out.println( "Numar insuficient deargumente!");System.exit(-1); //termina aplicatia

    }String nume = args[0]; //exista sigurString prenume;if (args.length >= 1)

    prenume = args[1];else

    prenume = ""; //valoare implicitaSystem.out.println("Salut " + nume + " " +prenume);

    }

  • 7/25/2019 Curs1 13 Java CC

    49/453

    Afi#area argumentelor

    public class Afisare {

    public static void main (String[] args) {for (int i = 0; i < args.length; i++)

    System.out.println(args[i]);

    }

    }

    java Afisare Hello Java

    Hello

    Java

    java Afisare Hello Java

    Hello Java

  • 7/25/2019 Curs1 13 Java CC

    50/453

    Argumente numerice

    l Argumentele de la linia de comand)sunt siruri de

    caracterel Transformarea ir - num)r se face cu metode de

    tipul: Integer.parseInt Double.parseDouble Float.parseFloat, etc.

    public class Power {

    public static void main(String args[]) {

    double numar = Double.parseDouble(args[0]);

    int putere = Integer.parseInt(args[1]);

    System.out.println("Rezultat=" + Math.pow(numar,

    putere));}

    }

  • 7/25/2019 Curs1 13 Java CC

    51/453

    Adrese utile

    www.java.com

    Toat)lumea www.java.net

    Comunitate

    java.sun.com

    Dezvoltatori

    jguru.comCursuri

    jars.com

    Resurse

    javaworld.com, javareport.com

    Articole javaalmanac.com

    Exemple de cod

    google:java

    http://www.java.com/http://www.java.net/http://www.java.net/http://www.java.com/
  • 7/25/2019 Curs1 13 Java CC

    52/453

    Arhive JAR

    Java Archive = arhive ZIP + META-INF

    Crearea unei arhive:

    Utilitarul jar

    Clase suport din java.util.jar

    Beneficii:

    compresare

    portabilitate

    minimizarea timpului de ncarcare din re+ea

    securitate - semnare electronic) parte integrata a platformei Java

  • 7/25/2019 Curs1 13 Java CC

    53/453

    Folosirea utilitarului jar

    l Crearea unei arhive:jar cf arhiva.jar

    fiier(e)-intrare

    l Vizualizare con+inutului:jar tf nume-arhiva

    l Extragerea con+inutului: jar xf arhiva.jar

    l Extragerea doar a unor fiierejar xf arhiva.jar fiier(e)-arhivate

    l Executarea unei aplica+ii: java -jar arhiva.jar

    l Deschiderea unui applet arhivat

  • 7/25/2019 Curs1 13 Java CC

    54/453

    Exemple

    Exemple:

    l Arhivarea a dou)fiiere class:jar cf classes.jar A.class B.class

    l Arhivarea tuturor fiierelor din directorul curent:jar cvf allfiles.jar *

    l Crearea unui fisier manifest

    //manifest.txtMain-Class: Matematica

    l Crearea arhivei

    jar cvfm mate.jar manifest.txt geometrie analizaalgebra Matematica.class

    l Executiajava -jar mate.jar

  • 7/25/2019 Curs1 13 Java CC

    55/453

    Curs 2

    Principiile Programrii Orientate peObiecte

    Programare Orientatpe Obiecte

  • 7/25/2019 Curs1 13 Java CC

    56/453

    Tehnici de programareProgramarea procedural

    l Modul n care este abordatprogramarea, din punctde vedere al descompunerii programelor

    l Paradigme

    Programarea procedural

    l prima modalitate de programare, nc frecventfolosit

    l descompunerea programului n proceduri (func#ii)care sunt apelate n ordinea de desf$urare aalgoritmului

    l sunt prevzute posibilit#i de transfer aargumentelor ctre func#ii $i de returnare a valorilorrezultate

    l limbajul Fortran: primul limbaj de programare

    procedural.l au urmat Algol60, Algol68, Pascal, iar C este unul

    din ultimele inven#ii n acest domeniu.

  • 7/25/2019 Curs1 13 Java CC

    57/453

    Programarea modular(structurat)

    l accentul s-a deplasat de la proiectarea

    procedurilor ctre organizarea datelor, datoritcre$terii dimensiunii programelor.l stilul de programare este n continuare

    procedurall datele $i procedurile sunt grupate n module,

    nu implic ns $i o asociere strict ntreacestea

    l Modul: o mul#ime de proceduri corelate,mpreuncu datele pe care le manevreaz

    l tehnic de ascundere a datelor (data-hiding):posibilitatea de ascundere a unor informa#iidefinite ntr-un modul fa# de celelalte module.

    l modularitatea $i ascunderea informa#iilor sunt

    caracteristici implicite n programarea orientatpe obiecte.

  • 7/25/2019 Curs1 13 Java CC

    58/453

    Programarea orientatpe obiecte

    l

    programarea procedural$i structurat:descriere a algoritmilor ca o secven#depa$i care duc de la datele ini#iale larezultatul cutat.

    l limbaje de programare orientate la o clasconcretde probleme: sisteme de dirijare cubaze de date, modelare $.a.

    l a aprut necesitatea sporirii siguran#eiprogramelor - interzicerea accesului

    neautorizat la date.

  • 7/25/2019 Curs1 13 Java CC

    59/453

    Programarea orientatpe obiecte

    l dezvoltarea sistemelor orientate pe

    obiecte, bazate peprogramarea orientatpe obiectea cunoscut o amploaredeosebitn anii 90

    l programarea orientatpe obiecte

    presupune:1. determinarea $i descrierea claselor

    utilizate n program

    2. crearea exemplarelor de obiectenecesare

    3. determinarea interac#iunii dintre ele.

  • 7/25/2019 Curs1 13 Java CC

    60/453

    Modelul obiect

    l Reprezint aplicarea n domeniul programrii aunei metode din tehnic (tehnologia orientat

    pe obiecte, care se bazeazpe modelul obiect)l Primele aplica#ii: limbajul Simula (a stat la baza

    Smaltalk), Object Pascal, C++, Clos, Ada, Eiffel

    l Modelul obiect al unei aplica#ii implic patruprincipii importante:

    abstractizare;ncapsulare;

    modularitate;

    ierarhizare.

    l Modelul obiect: un concept unificator n $tiin#a

    calculatoarelor, aplicabil nu numai nprogramare, ci $i n arhitectura calculatoarelor,n proiectarea interfe#elor utilizator, n baze dedate.

  • 7/25/2019 Curs1 13 Java CC

    61/453

    Programarea orientatpe obiecte

    l Ob jec t-o rien ted p rogr amm ing: metod deprogramare n care programele sunt organizate

    ca #i colec&ii de obiecte cooperante, fiecaredintre ele reprezentnd o instan&a unei clase,iar clasele sunt membre ale unei ierarhii declase, corelate ntre ele prin rela&ii de mo#tenire.

    l Se folosesc obiecte, nu algoritmi, ca unit#iconstructive de baz.

    l Fiecare obiect este o instan# (un exemplar) alunei clase.

    l Clasele sunt componente ale unei ierarhii detip, fiind corelate ntre ele prin rela#ii demo$tenire.

    Obs: Dac lipse$te una din aceste caracteristici:programare pr in abstract izarea datelor (oclaseste un tip de date abstract)

  • 7/25/2019 Curs1 13 Java CC

    62/453

    Limbaj de programare orientatpeobiecte

    l Cerin#e:

    1. Suportobiecte (instan#e ale unorclase), clasele fiind tipuri definite deutilizator (numite $i tipuri abstracte dedate)

    2. Tipurile (clasele) pot mo$teni atribute de

    la alte clase, numite clase de baz

    l Dacun limbaj nu suportdirectmo$tenirea ntre clase se nume$te limbajde programare bazat pe obiecte (object-

    based), cum este, de exemplu, limbajulAda.

  • 7/25/2019 Curs1 13 Java CC

    63/453

    Principii POO: Abstractizarea

    l ignorarea unor aspecte ale informa#ieimanipulate, adicposibilitatea de a se

    concentra asupra esen#ialuluil identificarea similitudinilor ntre diferite entit#i,

    situa#ii sau procese din lumea real,concentrarea aten#iei asupra acestor aspectecomune $i ignorarea pentru nceput a detaliilor

    l

    identificarea trsturilor caracteristice esen#ialeale unui obiect, care l deosebesc de toatecelelalte feluri de obiecte

    l fiecare obiect n sistem are rolul unui actorabstract, care poate executa ac#iuni, $i poatemodifica $i comunica starea $i poate comunica

    cu alte obiecte din sistem fra dezvlui cumau fost implementate acele facilita#i

    l procesele, func#iile sau metodele pot fi deasemenea abstracte

  • 7/25/2019 Curs1 13 Java CC

    64/453

    Principii POO: ncapsularea

    l ascunderea de informa#ii (data-hiding)l obiectele nu pot schimba starea interna

    altor obiecte n mod direct (ci doar prinmetode puse la dispozi#ie de obiectulrespectiv)

    l doar metodele proprii ale obiectului potaccesa starea acestuia

    l

    procesul de compartimentare a elementelorunei abstractizri n doupr#i: structura $icomportarea

    l ncapsularea separcomportarea (accesatprin interfa#) de structur, definitprinimplementare

    l fiecare tip de obiect expune o interfa#pentru celelalte obiecte care specificmodulcum acele obiecte pot interac#iona cu el

  • 7/25/2019 Curs1 13 Java CC

    65/453

    Principii POO: Modularizarea

    l este procesul de parti#ionare a unui program

    n componente individuale (module)l permite reducerea complexit#ii programului

    prin definirea unor grani#e bine stabilite $idocumentate n program.

    modularizarea constn parti#ionarea

    programului n module care pot ficompilate separat, dar care au conexiunicu alte module ale programului.

    modulele servesc ca $i containere n caresunt declarate clasele $i obiecteleprogramului.

  • 7/25/2019 Curs1 13 Java CC

    66/453

    Principii POO: Ierarhizarea

    l Modalitatea de a ordona abstractizrile(tipurile abstracte de date).

    l Ierarhiile pot sdenote rela#ii de tip saurela#ii de agregare.

    l Rela#iile de tip sunt definite prin mo$tenirilentre clase, prin care o clas(clasa derivat)mo$tene$te structura sau comportarea

    definitn altclas(clasa de baz)l Rela#iile de agregarespecificcompunerea

    unui obiect din mai multe obiecte maisimple.

    l Obs: n limbajele de programare

    proceduralagregarea se realiza prinstructuri de tip nregistrare (record n Pascal,struct n C, etc).

  • 7/25/2019 Curs1 13 Java CC

    67/453

    Principii POO: Mo#tenirea

    l permite definirea $i crearea unor clasespecializate plecnd de la clase (generale)

    care sunt deja definitel permite construirea unor clase noi, care

    pstreaz caracteristicile $i comportarea,deci datele $i func#iile membru, de la unasau mai multe clase definite anterior, numiteclase de baz, fiind posibil redefinirea sau

    adugarea unor date $i func#ii noi.l o clas ce mo$tene$te una sau mai multe

    clase de baz se nume$te clasa derivat.l posibilitatea refolosirii lucrurilor care

    func#ioneazl

    organizeaz $i faciliteaz polimorfismul $incapsulareal Anumite obiecte sunt similare dar n

    acela$i timp diferite.

  • 7/25/2019 Curs1 13 Java CC

    68/453

    Principii POO: Mo#tenirea

    l Proprietatea de mo#tenire: proprietatea

    claselor prin care o clasnou construitpoate prelua datele $i metodele clasei maivechi.

    l Clasa derivat se aflntotdeauna pe un

    nivel imediat inferior celui corespunztorclasei de baz.

    l n Java existdoar mo#tenire simpl, oierarhie de clase n care fiecare clas

    derivat are o singur clas de baz.

  • 7/25/2019 Curs1 13 Java CC

    69/453

  • 7/25/2019 Curs1 13 Java CC

    70/453

    Principii POO:Polimorfismul, suprancrcarea

    l Mai multe func#ii pot avea acela$i nume nacela$i domeniu de defini#ie, dacse pot

    diferen#ia prin numrul sau tipulargumentelor de apel.

    l O func#ie este polimorficdacse poateexecuta cu acela$i efect asupra unor valoride tipuri diferite (ex. operatorul & din C)

    l Un alt mecanism este suprancrcareafunc#iilor( function overloading).

    l O func#ie este suprancrcatdacexecutopera#ii diferite n contexte diferite (ex.operatorul + din Java)

    l Se poate aplica doar func#iilor.

    l Supradefinirea (overriding) oferposibilitatea de a redefini metode pentruclasele derivate, metodele au acela$i tip $iaceea$i parametri.

  • 7/25/2019 Curs1 13 Java CC

    71/453

    Principii POO:Polimorfismul, suprancrcarea

    l Dacn acela$i domeniu sunt definite mai multefunc#ii cu acela$i nume, la fiecare apel se

    selecteazfunc#ia corectprin comparareatipurilor argumentelor reale de apel cu tipurileargumentelor formale ale func#iei.

    l double abs(double);

    l int abs(int);

    l abs(1); // apeleaza abs(int)l abs(1.0); // apeleaza abs(double)

    l Nu este adm is ca funci i le s!di fere doar pr int ipul returnat!

    l

    Doufunc#ii declarate cu acela$i nume sereferla aceea$i func#ie dacsunt n acela$idomeniu $i au numr $i tipuri identice deargumente.

  • 7/25/2019 Curs1 13 Java CC

    72/453

    Concluzii POO

    l Programele: o colec#ie de obiecte, unit#i

    individuale de cod care interac#ioneazunele cu altele, n loc de simple liste deinstruc#iuni sau de apeluri de proceduri

    l Obiectele POO sunt de obicei reprezentri

    ale obiectelor din via#a real

    l Programele sunt mai u$or de n#eles, dedepanat $i de extins dect programeleprocedurale (mai ales n cazul proiectelor

    software complexe $i de dimensiuni mari,care se gestioneazfcnd apel la ingineriaprogramrii).

  • 7/25/2019 Curs1 13 Java CC

    73/453

    Tip abstract de date

    mul#ime de date care au aceea$ireprezentare $i pentru care este definit setulde opera#ii care se pot executa asupraelementelor mul#imii respective.

    are doupr#i:

    o parte care define$te reprezentareadatelor o parte care define$te opera#iile asupra

    datelor respective.

  • 7/25/2019 Curs1 13 Java CC

    74/453

    No&iunea de clas

    l O clas! define#te un tip abstract de date.

    Defini&ie clas:c lass nume{

    l ista_elementelor_membru

    }

    Lista elementelor membru poate con&ine:

    declara&ii de date; implementri de func&ii; prototipuri de func&ii abstracte.

    Datele declarate printr-o defini&ie de classenumesc date membru

    Func&iile definite sau pentru care este prezent

    numai prototipul n defini&ia clasei, se numescfunci i memb ru sau metode.

    Att datele ct #i metodele pot avea modificatoride acces

  • 7/25/2019 Curs1 13 Java CC

    75/453

    Modificatorii de acces

    l Mod if icato r i i de accessunt cuvinte

    rezervate ce controleazaccesul celorlalteclase la membrii unei clase. Specificatorii deacces pentru variabilele $i metodele unei clasesunt: public, protected, private $i cel implicit (lanivel de pachet).

    Specificator Clasa Subcls Pachet Oriunde

    Private X

    Protected X X*

    Public X X X X

    Implicit X X

  • 7/25/2019 Curs1 13 Java CC

    76/453

    Clas

    Exemplu:

    class Complex {

    // date membru

    float real;

    float imag;

    // func ti i membru pub lice

    public void atribuire(float x, float y) {

    real = x; imag=y;}

    public double retreal() {

    return real;

    }

    public void afiscomplex(){

    System.out.println(real+++imag+*i);

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    77/453

    Obiecte

    l Un obiecteste o dat de un tip definit printr-o clas. Se spune c obiectul este oinstan&iere a clasei respective.

    l Formatul declaratiei unui obiect:nume_clas nume_obiect;

    l Instan#ierea obiectelor se face folosindoperatorul new.

    nume_obiect = new nume_clas(..);

  • 7/25/2019 Curs1 13 Java CC

    78/453

  • 7/25/2019 Curs1 13 Java CC

    79/453

    Obiecte

    l Exemplu de instan#ieri pentru clasa

    complex:Complex z;

    z=new Complex();

    l Atunci:

    z.atribuire(0,0);z.afiscomplex();

    afi$eaznumrul complex z (n cazul defa# 0+0i).

  • 7/25/2019 Curs1 13 Java CC

    80/453

    Constructori

    Obiectele se genereaz$i se pot ini#ializa lainstan#iere cu ajutorul constructorilor Func#ii membru ce au acela$i nume cu

    numele clasei Func#ii apelate automat la crearea

    obiectelor.

    Valorile de ini#ializare se transfer

    constructorului $i ele joacacela$i rol caparametrii efectivi de la apelurile func#iilorobi$nuite.

    Se pot defini mai mul#i constructori pentru oclas. n acest caz ei au acela$i nume, dar

    diferprin numrul $i/sau tipurileparametrilor.

  • 7/25/2019 Curs1 13 Java CC

    81/453

    Constructori

    Dac exist mai mul#i constructori, atunci la

    ini#ializare se utilizeaz regulile de laapelurile func#iilor suprancrcate.

    Func#iile constructor nu ntorc valori, dar nusunt preceda#i de cuvntul void.

    Dacclasa nu con#ine constructori, segenereaz un constructor fr parametri,adic un constructor implicit. El are rolulnumai de alocare a obiectelor claseirespective, fr a le ini#ializa.

  • 7/25/2019 Curs1 13 Java CC

    82/453

    Constructori

    Exemplu:

    class Complex {double real;

    double imag;

    public Complex(double x, double y)

    {real = x; imag = y;}

    public Complex ( ){real = 0; imag = 0;}

    }

    Exemple de instan#iere:

    Complex z= new Complex(); // z = 0 + 0*i

    Complex z1= new Complex(1,0); // z1 = 1 + 0*

  • 7/25/2019 Curs1 13 Java CC

    83/453

    Realizarea ncapsulrii datelor

    l accesul la datele sau func#iile membre ale

    unei clase din orice punct al domeniului dedefini#ie al clasei s-ar putea rezolva simpluprin declararea de tip public a acestora

    l o astfel de implementare nu respectprincipiul ncapsulrii datelor $i serecomandsfie evitat

    l din punct de vedere al dreptului de acces lamembrii clasei, o clasbine definitpermite

    ncapsularea (sau ascunderea informa#iilor),prin care un obiect poate ascunde celorcare-l folosesc modul de implementare, prin

    interzicerea accesului la datele $i func#iileprivate sau protected.

  • 7/25/2019 Curs1 13 Java CC

    84/453

    Realizarea ncapsulrii datelor

    l n general, respectnd principiulncapsulrii, datele membre sunt declarateprivate sau protected $i nu pot fi accesatedirect (pentru citire sau scriere) din func#iinemembre ale clasei.

    l Pentru citirea sau modificarea unora dintredatele membre protejate n clasa respectiv

    se pot prevedea func#ii membre de tippublic, care pot fi apelate din orice punct aldomeniului de defini#ie al clasei $i fac partedin interfa#a clasei.

    l De exemplu, pentru clasa Complex , o

    implementare care respectprincipiulncapsulrii, dar, n acela$i timp permiteaccesul la datele private ale clasei poatearta astfel:

  • 7/25/2019 Curs1 13 Java CC

    85/453

    Realizarea ncapsulrii datelor

    class Complex {

    private double real;private double imag;

    public Complex(double x, double y)

    {real = x; imag = y;}

    public Complex ( )

    {real = 0; imag = 0;}

    public void set(double x, double y){ re = x; im = y; }

    public void setre(double x)

    { re = x;}

    public void setim(double y)

    { im = y; }

    public double getre(){return re;}

    public double getim() {

    return im;}

  • 7/25/2019 Curs1 13 Java CC

    86/453

    Realizarea ncapsulrii datelor

    public void display(){System.out.println(re+++im+i);}

    }

    class test{

    public static void main(String arg[]){

    Complex c1=new Complex(), c2=newComplex(1,1);

    c1.set(7.2, 9.3);

    c1.display(); // afiseaza 7.2 9.3

    c1.setre(1.3);

    c1.setim(2.8);

    c1.display(); // afiseaza 1.3 2.8 }

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    87/453

    Clase abstracte

    l clasele pentru care programatorul nuinten#ioneaz s instan#ieze obiecte.

    l clase de baz in ierarhii

    l se mai numesc c lase abs trac te de baz!

    l o clas devine abstract dac con#ine unasau mai multe declara#ii de func#ii abstracte

    l

    daco clas ce mo$tene$te o clas cecon#ine o func#ie abstractnuimplementeaz acea func#ie abstractmo$tenit, devine ea ns$i o clasabstract.

    OBS: clasele pentru care se pot instan#iaobiecte se numesc c lase conc rete.

  • 7/25/2019 Curs1 13 Java CC

    88/453

    CLASA String

    Metode i exemple

  • 7/25/2019 Curs1 13 Java CC

    89/453

    Crearea unui ir

    l Constructorul implicit creaz# un ir vid:

    String s = new String();l String str = "abc";

    este echivalent cu:

    char data[] = {'a', 'b', 'c'};

    String str = new String(data);OBS. Dac#elementele din vectorul data suntmodificate dup#crearea irului str, atunciaceste modific#ri nu apar n acest ir.

    l Construirea unui ir pe baza altui ir:

    String str2 = new String(str);

  • 7/25/2019 Curs1 13 Java CC

    90/453

    Opera#ii cu iruri

    l Metoda length() returneaz# lungimea unui ir

    Ex: System.out.println(Hello.length()); // afieaz# 5

    l Operatorul + este utilizat pentru concatenarea adou#sau mai multe iruri

    Ex: String myname = Harry;

    String str = My name is + myname+ .;

    l Caracterele dintr-un ir pot fi accesate astfel:

    public char charAt(int index);

    Returneaz# caracterul din pozi&ia index. Domeniulde indexare este de la 0 la length() - 1.

    Ex. char ch;ch = abc.charAt(1); // ch = b

  • 7/25/2019 Curs1 13 Java CC

    91/453

    Opera#ii cu iruri

    l getChars() - Copiaz# caracterele din irul surs#n

    irul destina&iepublic void getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin)

    srcBegin indexul primului caracter din surs#

    srcEnd indexul ultimului caracter din surs#

    dst vectorul destina&ie

    dstBegin pozi&ia de la care ncepe copierea nvectorul destina&ie

    l equals() Compar#dou#iruri la egalitate

    public booleanequals(String s2)

    l equalsIgnoreCase()- Compar#dou#iruri laegalitate f#r#s#&in#cont de litere mici sau mari

    public booleanequalsIgnoreCase(String s2)

  • 7/25/2019 Curs1 13 Java CC

    92/453

    Opera#ii cu iruri

    l startsWith() Testeaz#dac#irul ncepe cu prefixul

    specificat (la nceput sau dintr-o anumit#pozi&ie)public booleanstartsWith(String prefix)Ex.Figure.startsWith(Fig); // true

    public booleanstartsWith(String prefix, int toffset)Ex.figure.startsWith(gure, 2); // true

    l endsWith() - Testeaz#dac#irul se termin#cu sufixulspecificatpublic booleanendsWith(String suffix)Ex. Figure.endsWith(re); // true

    l compareTo() Compar#dou#iruri din punct devedere lexicograficRezultatul este Negativ, dac#irul precede irul primit ca argument Zero, dac#irurile sunt egale Pozitiv, dac#irul urmeaz#irului primit ca argumentpublic intcompareTo(String anotherString)public intcompareToIgnoreCase(String str)

  • 7/25/2019 Curs1 13 Java CC

    93/453

    Opera#ii cu iruri

    l indexOf Caut#prima apari&ie a unui caracter sau

    ir ntr-un alt ir. Returneaz# -1 dac#nu l g#sete.public intindexOf(int ch)public intindexOf(String str)

    Ex. String str = How was your day today?;str.indexOf(o); // 1str.indexOf(was); //4

    l c#utare ncepnd de la o pozi&ie specificat#:public intindexOf(int ch, int fromIndex)public intindexOf(String str, int fromIndex)

    Ex. String str = How was your day today?;str.indexOf(a, 6); //14str.indexOf(was, 2); //4

    l lastIndexOf() - Caut#ultima apari&ie a unui caractersau ir ntr-un alt ir, similar lui indexOf.

  • 7/25/2019 Curs1 13 Java CC

    94/453

    Opera#ii cu iruri

    l substring() Returneaz# un nou ir care este un

    subir al irului surs#.public Stringsubstring(int beginIndex)Ex: "unhappy".substring(2); // returneaz# "happy"public Stringsubstring(int beginIndex,int endIndex)Ex: "smiles".substring(1, 5); // returneaz# "mile

    l

    concat() Concateneaz# irul specificat la irulsurs#public Stringconcat(String str)"to".concat("get").concat("her"); // returneaz#"together"

    l replace()- Returneaz# un nou ir n care toateapari&iile caracterului oldChar sunt nlocuite cu

    caracterul newChar.public Stringreplace(char oldChar, char newChar)Ex. "mesquite in your cellar".replace('e', 'o');returneaz# "mosquito in your collar"

  • 7/25/2019 Curs1 13 Java CC

    95/453

  • 7/25/2019 Curs1 13 Java CC

    96/453

    Opera#ii cu iruri

    l toLowerCase(): Convertete toate caracterele la

    litere micipublic StringtoLowerCase()

    l toUpperCase(): Convertete toate caracterele lalitere mari

    public StringtoUpperCase()

    Ex: HELLO THERE.toLowerCase();hello there.toUpperCase();

  • 7/25/2019 Curs1 13 Java CC

    97/453

    Opera#ii cu iruri

    public String[] split(Stringregex)

    mparte sirul in subsiruri folosind un sir dedelimitatori (expresie regulata) regex expresia regulata de delimitare returneaza un vector de String-uri

    Exemplu: pentru sirul "boo:and:foo avem

    urmatoarele rezultate:

    regex rezultat: { "boo", "and", "foo" }o { "b", "", ":and:f" }

    public String[] split(Stringregex, int limit)- Limit: de cate ori se aplica expresia regulata

  • 7/25/2019 Curs1 13 Java CC

    98/453

    StringBuffer

    l Este asem#n#tor unui obiect String doar c#este

    modificabil n sensul c#exist#metode pentrumodificarea lungimii i a con&inutului s#u append,insert.

    l Crearea unui obiectStringBuffer:

    StringBuffer()

    StringBuffer(int size)

    StringBuffer(String str)l Principalele opera&ii sunt ad#ugarea, inserarea i

    tergerea.l Ad#ugarea:

    StringBuffer append(String str)StringBuffer append(int num)

    l

    Inserarea se face ntr-o anumit#pozi&ie.StringBuffer insert(int index, String str)StringBuffer append(int index, char ch)

  • 7/25/2019 Curs1 13 Java CC

    99/453

    Opera#ii cu StringBuffer

    l delete() - terge un subir. Subirul ncepe n

    pozi&ia specificat#i se termin#n pozi&ia index definal - 1 sau pn#la sfritul irului dac#nu sespecific#pozi&ie de final.

    public StringBufferdelete(int start, int end)public StringBufferdelete(int start)l replace() nlocuiete un subir din irul surs#cu

    un alt ir

    public StringBufferreplace(int start, int end, Stringstr)

    l substring()

    public String substring(int start)l reverse() reversul irului (ordine invers#a

    caracterelor)

    public StringBufferreverse()l length()

    public intlength()

  • 7/25/2019 Curs1 13 Java CC

    100/453

    Opera#ii cu StringBuffer

    l capacity() Returneaz#capacitatea curent#a

    StringBuffer-ului. Capacitatea este dimensiuneadisponibil#pentru ad#ugarea de noi elemente

    public intcapacity()

    l charAt()

    public char charAt(int index)

    l getChars()

    public void getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin)

    l setLength() Seteaz# lungimea pentru obiectul detip StringBuffer.

    public void setLength(int newLength)

  • 7/25/2019 Curs1 13 Java CC

    101/453

    Exemple: StringBuffer

    StringBuffer sb = new StringBuffer(Hello);

    sb.length(); // 5sb.capacity(); // 21 (16 caractere sunt ad#ugate

    dac#nu se specific#o dimensiune)

    sb.charAt(1); // e

    sb.setCharAt(1,i); // Hillo

    sb.setLength(2); // Hisb.append(l).append(l); // Hill

    sb.insert(0, Big ); // Big Hill

    sb.replace(3, 11, ); // Big

    sb.reverse(); // giB

  • 7/25/2019 Curs1 13 Java CC

    102/453

    Clasa StringTokenizer

    l Utilizat# pentru mp#r&irea n atomi lexicali (tokens):

    public StringTokenizer(String str, String delim)public booleanhasMoreTokens()public StringnextToken()

    Exemplu:StringTokenizer st = new StringTokenizer("this, is a

    test., ,.);while (st.hasMoreTokens()) {

    System.out.println(st.nextToken());}

    Are urm#torul rezultat:

    thisisatest

  • 7/25/2019 Curs1 13 Java CC

    103/453

    Curs 3

    Programare Orientat pe Obiecten limbajul Java

    Programare Orientatpe Obiecte

  • 7/25/2019 Curs1 13 Java CC

    104/453

  • 7/25/2019 Curs1 13 Java CC

    105/453

  • 7/25/2019 Curs1 13 Java CC

    106/453

    Folosirea obiectelor (1)

    Aflarea unor informa#ii

    Schimbarea strii Executarea unor ac#iuni

    l obiect.variabilaRectangle patrat = new Rectangle(0, 0, 10, 200);

    System.out.println(patrat.width);

    patrat.x = 10;patrat.y = 20;

    patrat.origin = new Point(10, 20);

    l obiect.metoda([parametri])Rectangle patrat = new Rectangle(0, 0, 10, 200);

    patrat.setLocation(10, 20);patrat.setSize(200, 300);

  • 7/25/2019 Curs1 13 Java CC

    107/453

  • 7/25/2019 Curs1 13 Java CC

    108/453

  • 7/25/2019 Curs1 13 Java CC

    109/453

  • 7/25/2019 Curs1 13 Java CC

    110/453

    Declararea claselor

    [public][abstract][final] class NumeClasa

    [extends NumeSuperclasa][implements Interfata1 [, Interfata2 ...]]{

    // Corpul clasei}

    l Mo#tenire simplclass B extends A {...}

    // A este superclasa clasei B// B este o subclasa a clasei A

    class C extends A,B // Incorect !

    l Object este rdcina ierarhiei claselor Java.

  • 7/25/2019 Curs1 13 Java CC

    111/453

  • 7/25/2019 Curs1 13 Java CC

    112/453

    Constructorii unei clase

    class NumeClasa {

    [modificatori] NumeClasa([argumente]) {// Constructor

    }}

    l this apeleaz explicit un constructor al clasei.class Dreptunghi {

    double x, y, w, h;Dreptunghi(double x1, double y1, double w1, double

    h1) {// Implementam doar constructorul cel mai generalx=x1; y=y1; w=w1; h=h1;System.out.println("Instantiere dreptunghi");

    }Dreptunghi(double w1, double h1) {this(0, 0, w1, h1);// Apelam constructorul cu 4 argumente

    }

  • 7/25/2019 Curs1 13 Java CC

    113/453

  • 7/25/2019 Curs1 13 Java CC

    114/453

  • 7/25/2019 Curs1 13 Java CC

    115/453

    super

    class B extends A {B() {

    this(0);

    }

    B(int x) {

    super(x);}

    void metoda() {

    super.metoda();

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    116/453

    Constructorul implicit

    class Dreptunghi {

    double x, y, w, h;// Nici un constructor

    }class Cerc {

    double x, y, r;// Constructor cu 3 argumenteCerc(double x, double y, double r) { ... };

    }...Dreptunghi d = new Dreptunghi();// Corect (a fost generat constructorul implicit)Cerc c;c = new Cerc();

    // Eroare la compilare !c = new Cerc(0, 0, 100);// Varianta corect

  • 7/25/2019 Curs1 13 Java CC

    117/453

  • 7/25/2019 Curs1 13 Java CC

    118/453

  • 7/25/2019 Curs1 13 Java CC

    119/453

  • 7/25/2019 Curs1 13 Java CC

    120/453

    Declararea metodelor

    [modificatori] TipReturnat numeMetoda ([argumente])

    [throws TipExceptie1, TipExceptie2, ...]{// Corpul metodei

    }unde un modificator poate fi : public, protected, private static, abstract, final, native, synchronizedclass Student {

    ...final float calcMedie(float note[]) {

    ...}

    }class StudentInformatica extends Student {

    float calcMedie(float note[]) {return 10.00;

    }}// Eroare la compilare !

  • 7/25/2019 Curs1 13 Java CC

    121/453

  • 7/25/2019 Curs1 13 Java CC

    122/453

    Tip - Subtip

    l int metoda() { return 1.2;} // Eroarel int metoda() { return (int)1.2;} // Corectl double metoda() {return (float)1;} // Corect

    Clas - Subclas

    Poligon metoda1( ) {Poligon p = new Poligon();Patrat t = new Patrat();

    if (...)return p; // Corectelse

    return t; // Corect}Patrat metoda2( ) {

    Poligon p = new Poligon();Patrat t = new Patrat();

    if (...)return p; // Eroare

    elsereturn t; // Corect

    }

  • 7/25/2019 Curs1 13 Java CC

    123/453

  • 7/25/2019 Curs1 13 Java CC

    124/453

    Trimiterea parametrilor (1)

    TipReturnat metoda([Tip1 arg1, Tip2 arg2, ...])

    l Argumentele sunt trimise doar prin valoare(pass-by-value).

    void metoda(StringBuffer sir, int numar) {// StringBuffer este tip referinta

    // int este tip primitivsir.append("abc");numar = 123;

    }...StringBuffer s=new StringBuffer();

    int n=0;metoda(s, n);System.out.println(s + ", " + n);

    // s va fi "abc", dar n va fi 0

  • 7/25/2019 Curs1 13 Java CC

    125/453

  • 7/25/2019 Curs1 13 Java CC

    126/453

  • 7/25/2019 Curs1 13 Java CC

    127/453

  • 7/25/2019 Curs1 13 Java CC

    128/453

    Polimorfism (1)

    l Suprancrcarea (overloading)

    l Supradefinirea (overriding)

    class A {void metoda() {

    System.out.println("A: metoda fara parametru");}// Suprancrcarevoid metoda(int arg) {

    System.out.println("A: metoda cu unparametru");

    }}class B extends A {

    // Supradefinirevoid metoda() {

    System.out.println("B: metoda fara parametru");}

    }

  • 7/25/2019 Curs1 13 Java CC

    129/453

    Polimorfism (2)

    O metod supradefinit poate :

    s ignore codul metodei printe:B b = new B();b.metoda();// Afi%eaz "B: metoda fara parametru"

    s extind codul metodei printe:class B extends A {// Supradefinire prin extensie

    void metoda() {super.metoda();System.out.println("B: metoda fara parametru");

    }}. . .B b = new B();b.metoda();/* Afi%eaz ambele mesaje:"A: metoda fara parametru""B: metoda fara parametru" */

    l n Java nu este posibil suprancrcarea operatorilor.

  • 7/25/2019 Curs1 13 Java CC

    130/453

    Variabile de instan& #i variabile declas

    class Exemplu {

    int x ; //variabila de instanta}l variabilde instan&: la fiecare creare a unui

    obiect al clasei Exemplu sistemul alocozonde memorie separatpentrumemorarea valorii lui x.

    class Exemplu {static int sx ; //variabila de clas

    }l Pentru variabilele de clas(statice) sistemul

    aloco singurzonde memorie la care au

    acces toate instan&ele clasei respective,ceea ce nseamncdacun obiectmodificvaloarea unei variabile statice ease va modifica #i pentru toate celelalteobiecte.

  • 7/25/2019 Curs1 13 Java CC

    131/453

  • 7/25/2019 Curs1 13 Java CC

    132/453

    Variabile de instan& #i variabile declas

    class Exemplu {

    int x ; // Variabila de instantastatic long n; // Variabila de clasa}

    ...

    Exemplu o1 = new Exemplu();

    Exemplu o2 = new Exemplu();

    o1.x = 100;

    o2.x = 200;System.out.println(o1.x); // Afiseaza 100

    System.out.println(o2.x); // Afiseaza 200

    o1.n = 100;

    System.out.println(o2.n); // Afiseaza 100

    o2.n = 200;

    System.out.println(o1.n); // Afiseaza 200

    System.out.println(Exemplu.n); // Afiseaza 200// o1.n, o2.n si Exemplu.n sunt referinte la aceeasi

    // valoare

  • 7/25/2019 Curs1 13 Java CC

    133/453

    Metode de instan& #i metode declas

    l metodele de instan#opereazatt pe

    variabilele de instan#ct %i pe cele statice aleclasei;l metodele de clasopereazdoar pe variabilele

    statice ale clasei.class Exemplu {

    int x ; // Variabil de instan#static long n; // Variabil de clasvoid metodaDeInstanta() {

    n ++; // Corectx --; // Corect

    }static void metodaStatica() {

    n ++; // Corectx --; // Eroare la compilare !

    }}

  • 7/25/2019 Curs1 13 Java CC

    134/453

  • 7/25/2019 Curs1 13 Java CC

    135/453

    Utilitatea membrilor de clas

    l folosi#i pentru a pune la dispozi#ie valori %i metode

    independente de starea obiectelor dintr-o anumitclas.

    l Declararea eficient a constantelorclass Exemplu {

    static final double PI = 3.14;// Variabila finala de clasa

    }

    l Numrarea obiectelor unei claseclass Exemplu {

    static long nrInstante = 0;Exemplu() {

    // Constructorul este apelat la fiecare instantierenrInstante ++;

    }}

    l Implementarea func#iilor globale

  • 7/25/2019 Curs1 13 Java CC

    136/453

    Blocuri statice de ini&ializare

    static {

    // Bloc static de initializare;...

    }

    public class Test {

    // Declaratii de variabile statice

    static int x = 0, y, z;

    // Bloc static de initializarestatic {

    System.out.println("Initializam...");

    int t=1;

    y = 2;

    z = x + y + t;

    }Test() { ... }

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    137/453

  • 7/25/2019 Curs1 13 Java CC

    138/453

    Clasa Object

    Object este superclasa tuturor claselor.

    class Exemplu {}class Exemplu extends Object {}

    clone

    equals

    finalize toString.

    Exemplu obj = new Exemplu();

    System.out.println("Obiect=" + obj);

    //echivalent cu

    System.out.println("Obiect=" + obj.toString());

  • 7/25/2019 Curs1 13 Java CC

    139/453

    Exemplu

    public class Complex {private double a, b;...public Complex aduna(Complex comp) {

    return new Complex(a + comp.a, b + comp.b);}public boolean equals(Object obj) {

    if (obj == null) return false;if (!(obj instanceof Complex)) return false;

    Complex comp = (Complex) obj;return ( comp.a==a && comp.b==b);}public String toString() {

    if (b > 0) return a + + + b + *i;return a + + b + *i";

    }}

    ...Complex c1 = new Complex(1,2);Complex c2 = new Complex(2,3);System.out.println(c1.aduna(c2)); // 3.0 + 5.0iSystem.out.println(c1.equals(c2)); // false

  • 7/25/2019 Curs1 13 Java CC

    140/453

    Conversii automate ntre tipuri

    Integer obi = new Integer(1);int i = obi.intValue();Boolean obb = new Boolean(true);boolean b = obb.booleanValue();

    // Doar de la versiunea 1.5 !

    Integer obi = 1;int i = obi;Boolean obb = true;boolean b = obb;

  • 7/25/2019 Curs1 13 Java CC

    141/453

  • 7/25/2019 Curs1 13 Java CC

    142/453

  • 7/25/2019 Curs1 13 Java CC

    143/453

  • 7/25/2019 Curs1 13 Java CC

    144/453

    Clase imbricate

    l o clasmembra unei alte clase, numit

    #i clasde acoperire.class ClasaDeAcoperire{

    class ClasaImbricata1 {// Clasa membru// Acces la membrii clasei de acoperire

    }

    void metoda() {class ClasaImbricata2 {// Clasa locala metodei// Acces la mebrii clasei de acoperire si// la variabilele finale ale metodei

    }}

    }l Identificare claselor imbricate

    ClasaDeAcoperire.classClasaDeAcoperire$ClasaImbricata1.classClasaDeAcoperire$ClasaImbricata2.class

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    145/453

  • 7/25/2019 Curs1 13 Java CC

    146/453

  • 7/25/2019 Curs1 13 Java CC

    147/453

  • 7/25/2019 Curs1 13 Java CC

    148/453

    Excep&ii

    Ce sunt excep&iile

    Prinderea #i tratarea excep&iilor Aruncarea excep&iilor

    Avantajele tratrii excep&iilor

    Ierarhia claselor ce descriu excep&ii

    Excep&ii la execu&ie Crearea propriilor excep&ii

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    149/453

  • 7/25/2019 Curs1 13 Java CC

    150/453

    Prinderea #i tratarea excep&iilor

    try - catch - finally

    try { // Instruc&iuni care pot genera excep&ii

    }

    catch (TipExceptie1 variabila) { // Tratarea excep&iilor de tipul 1

    }

    catch (TipExceptie2 variabila) { // Tratarea excep&iilor de tipul 2

    }

    . . .

    finally { // Cod care se execut indiferent

    // dac apar sau nu excep&ii

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    151/453

  • 7/25/2019 Curs1 13 Java CC

    152/453

    Citirea unui fi#ier (2)

    public static void citesteFisier(String fis) {

    FileReader f = null;try {// Deschidem fisierul

    f = new FileReader(fis);// Citim si afisam fisierul caracter cu caracter

    int c;while ( (c=f.read()) != -1)

    System.out.print((char)c);}catch (FileNotFoundException e) {

    //Tratam un tip de exceptieSystem.err.println("Fisierul nu a fost gasit");

    }

    catch (IOException e) {//Tratam alt tip de exceptieSystem.out.println("Eroare la citire");e.printStackTrace();

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    153/453

    Citirea unui fi#ier (3)

    finally {

    if (f != null) {// Inchidem fisierul

    try {

    f.close();

    }

    catch (IOException e) {System.err.println("Fisierul nu poate fiinchis!");

    e.printStackTrace(); }

    } // if

    } //finally

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    154/453

    Aruncarea excep&iilor (1)

    l A doua metodde lucru cu excep&iilel Se utilizeazclauza throws n antetul

    metodelor care pot genera excep&ii:

    [modific] TipReturnat metoda([argumente])throws TipExceptie1, TipExceptie2, ...

    {...}

    Atentie !!!

    l

    O metoda care nu trateaz o anumitaexceptie trebuie obligatoriu s o arunce.

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    155/453

  • 7/25/2019 Curs1 13 Java CC

    156/453

    Aruncarea excep&iilor (3)

    public static void main(String args[]) {

    if (args.length > 0) {try {

    citesteFisier(args[0]);

    }

    catch (FileNotFoundException e){

    System.err.println("Fisierul n-a fost gasit");}

    catch (IOException e) {

    System.out.println("Eroare la citire");

    }

    }

    elseSystem.out.println("Lipseste numele fisierului");

    } // main

    } // clasa

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    157/453

    try - finally

    public static void citesteFisier (String fis) throws

    FileNotFoundException, IOException{

    FileReader f = null;

    try {

    f = new FileReader (fis);

    int c;

    while ( (c=f.read()) != -1)

    System.out.print((char)c);}

    finally {

    if (f!=null)

    f.close();

    }

    }public static void main (String args[]) throwsFileNotFoundException, IOException {

    citesteFisier(args[0]);

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    158/453

    Instruc&iunea throw

    l Aruncarea explicit de excep&ii:

    Exemplu:throw new IOException("Exceptie I/O");

    Sau:

    if (index >= vector.length)throw newArrayIndexOutOfBoundsException();

    Sau:

    catch(Exception e) {System.out.println ("A aparut o exceptie);

    throw e;

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    159/453

  • 7/25/2019 Curs1 13 Java CC

    160/453

    Separarea codului (1)

    citesteFisier {

    deschide fi#ierul;

    determin dimensiunea fi#ierului;

    aloc memorie;

    cite#te fi#ierul n memorie;

    nchide fi#ierul;

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    161/453

  • 7/25/2019 Curs1 13 Java CC

    162/453

  • 7/25/2019 Curs1 13 Java CC

    163/453

  • 7/25/2019 Curs1 13 Java CC

    164/453

    Gruparea erorilor dup tipul lor

    l Fiecare tip de excep&ie este descris de o clas.

    l Clasele sunt organizate ierarhic.try {

    FileReader f = new FileReader("input.dat");// Exceptie posibil: FileNotFoundException

    }catch (FileNotFoundException e) {

    // Exceptie specific provocat de absen&a

    // fi#ierului input.dat} // saucatch (IOException e) {

    // Exceptie generic provocat de o operatie IO} // saucatch (Exception e) {

    // Cea mai generic excep&ie soft} //saucatch (Throwable e) {

    // Superclasa excep&iilor}

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    165/453

  • 7/25/2019 Curs1 13 Java CC

    166/453

  • 7/25/2019 Curs1 13 Java CC

    167/453

  • 7/25/2019 Curs1 13 Java CC

    168/453

    Crearea propriilor excep&ii (1)

    public class ExceptieProprie extends

    Exception {public ExceptieProprie(String mesaj) {

    super(mesaj);

    /* Apeleaza constructorul superclaseiException */

    }}

    Exemplu:

    class ExceptieStiva extends Exception {

    public ExceptieStiva(String mesaj) {

    super(mesaj);

    }

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    169/453

    Crearea propriilor excep&ii (2)

    class Stiva {

    int elemente[] = new int[100];int n=0; //numarul de elemente din stiva

    public void adauga(int x) throws ExceptieStiva {

    if (n==100)

    throw new ExceptieStiva("Stiva este plina!");

    elemente[n++] = x;}

    public int scoate() throws ExceptieStiva {

    if (n==0)

    throw new ExceptieStiva("Stiva estegoala!");

    return elemente[--n];}

    }

    PDF created with pdfFactory Pro trial version www.pdffactory.com

    http://www.pdffactory.com/http://www.pdffactory.com/
  • 7/25/2019 Curs1 13 Java CC

    170/453

  • 7/25/2019 Curs1 13 Java CC

    171/453

    Fluxuri

    Ce sunt fluxurile ?

    Clasificare, ierarhie

    Fluxuri primitive

    Fluxuri de procesare

    Intrri #i ie#iri formatate

    Fluxuri standard de intrare #i ie#ire

    Analiza lexical

    Clase independente

    (RandomAccessFile, File)

  • 7/25/2019 Curs1 13 Java CC

    172/453

    Ce sunt fluxurile? (1)

    l

    Schimb de informa&ii cu mediul externl Canal de comunica&ie ntre dou

    procese

    Seriale, pe 8 sau 16 bi&i

    Productor: proces care descrie o sursexternde date

    Consumator: proces care descrie odestina&ie externpentru date

    Unidirec&ionale, de la productor la

    consumator Un singur proces productor

    Un singur proces consumator

  • 7/25/2019 Curs1 13 Java CC

    173/453

  • 7/25/2019 Curs1 13 Java CC

    174/453

    Ce sunt fluxurile? (3)

    l Pachetul care ofersuport pentru opera&iile

    de intrare/ie#ire: java.io

    l Schema generalde utilizare a fluxurilor:

    deschide canal comunicatiewhile (mai sunt informatii) {

    citeste/scrie informatie;

    }

    inchide canal comunicatie;

  • 7/25/2019 Curs1 13 Java CC

    175/453

    Clasificarea fluxurilor

    Dupdirec&ia canalului de comunica&ie:

    fluxuri de intrare (citire)

    fluxuri de ie#ire (scriere)

    Duptipul de date:

    fluxuri de octe&i (8 bi&i) fluxuri de caractere (16 bi&i)

    Dupac&iunea lor:

    fluxuri primare (se ocupefectiv cu

    citirea/scrierea datelor)

    fluxuri pentru procesare

  • 7/25/2019 Curs1 13 Java CC

    176/453

    Ierarhia claselor pentru lucrul cu fluxuri

    Caractere:

    Reader FileReader, BufferedReader,...

    Writer FileWriter, BufferedWriter,...

    Octe&i:

    InputStream FileInputStream, BufferedInputStream..

    OutputStream

    FileOutputStream,BufferedOutputStream..

  • 7/25/2019 Curs1 13 Java CC

    177/453

    Metode comune fluxurilor

    l Metodele comune sunt definite n

    superclasele abstracte corespunztoare:

    ...

    void write(char buf[])int read(char buf[])

    void write()int read()

    WriterReader

    l Inchiderea oricrui flux: close.

    l Excep&ii: IOException sau derivate.

    void write(String str)

    void write(byte buf[])int read(byte buf[])

    void write()int read()

    OutputStreamInputStream

  • 7/25/2019 Curs1 13 Java CC

    178/453

    Fluxuri primitive

    In func&ie de tipul sursei datelor:

    l Fi#ier FileReader, FileWriter,

    FileInputStream, FileOutputStream

    l Memorie

    CharArrayReader, CharArrayWriter,

    ByteArrayInputStream, ByteArrayOutputStream,

    StringReader, StringWriter

    l Pipe

    PipedReader, PipedWriter,

    PipedInputStream, PipedOutputStream folosite pentru a canaliza ie#irea unui program

    sau fir de execu&ie ctre intrarea altui programsau fir de execu&ie.

  • 7/25/2019 Curs1 13 Java CC

    179/453

    Crearea unui flux primitiv

    FluxPrimitiv numeFlux =new FluxPrimitiv

    (dispozitivExtern);

    l crearea unui flux de intrare pe caractere

    FileReader in = new FileReader("fisier.txt");

    l

    crearea unui flux de iesire pe caractereFileWriter out = new FileWriter("fisier.txt");

    l crearea unui flux de intrare pe octeti

    FileInputStream in =new FileInputStream("fisier.dat");

    l crearea unui flux de iesire pe octeti

    FileOutputStream out =newFileOutputStream("fisier.dat");

  • 7/25/2019 Curs1 13 Java CC

    180/453

    Fluxuri de procesare (1)

    l responsabile cu preluarea datelor de la un

    flux primitiv #i procesarea acestora pentru ale oferi ntr-o altform, mai utildintr-unanumit punct de vedere.

    Bufferizare

    BufferedReader, BufferedWriter

    BufferedInputStream,BufferedOutputStream

    Conversie octe&i-caractere/caractere-octe&i InputStreamReader

    OutputStreamWriter

    Concatenare

    SequenceInputStream Serializare

    ObjectInputStream, ObjectOutputStream

  • 7/25/2019 Curs1 13 Java CC

    181/453

    Fluxuri de procesare (2)

    Conversie tipuri de date de tip primitiv ntr-un

    format binar, independent de ma#ina pecare se lucreaz

    DataInputStream, DataOutputStream

    Numrare

    LineNumberReader,

    LineNumberInputStream

    Citire n avans

    PushbackReader, PushbackInputStream

    Afi#are

    PrintWriter, PrintStream

  • 7/25/2019 Curs1 13 Java CC

    182/453

    Crearea unui flux de procesare

    FluxProcesare numeFlux = new

    FluxProcesare(fluxPrimitiv);

    l crearea unui flux de intrare printr-un buffer

    BufferedReader in = new BufferedReader(newFileReader("fisier.txt"));

    //echivalent cu:FileReader fr = new FileReader("fisier.txt");

    BufferedReader in = new BufferedReader(fr);

    l crearea unui flux de iesire printr-un buffer

    BufferedWriter out = new BufferedWriter(new

    FileWriter("fisier.txt")));

    //echivalent cu:

    FileWriter fo = new FileWriter("fisier.txt");

    BufferedWriter out = new BufferedWriter(fo);

  • 7/25/2019 Curs1 13 Java CC

    183/453

    Fluxuri pentru lucrul cu fi#iere

    FileReader, FileWriter - caractere

    FileInputStream, FileOutputStream - octeti

  • 7/25/2019 Curs1 13 Java CC

    184/453

    Citirea #i scrierea cu buffer

    l BufferedReader, BufferedWriter

    l BufferedInputStream, BufferedOutputStream

    l Introduc un buffer (zonde memorie) nprocesul de citire/scriere a informa&iilor.

    l BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("out.dat"), 1024);

    //1024 este dimensiunea bufferului

    l Scopul: eficien&a

    - Scade numrul de accesri ale dispozitivului

    extern- Cre#te viteza de execu&ie

  • 7/25/2019 Curs1 13 Java CC

    185/453

    Metoda flush

    - golete explicit bufferul

    BufferedWriter out = new BufferedWriter(new

    FileWriter("out.dat"), 1024);

    //am creat un flux cu buffer de 1024 octeti

    for(int i=0; i

  • 7/25/2019 Curs1 13 Java CC

    186/453

    Metoda readLine

    BufferedReader br = new

    BufferedReader(new FileReader("in"));

    String linie;

    while ((linie = br.readLine()) != null) {

    ...

    //proceseaza linie

    }

    br.close();

  • 7/25/2019 Curs1 13 Java CC

    187/453

    DataInputStream #iDataOutputStream

    l un flux nu mai este vzut ca o nsiruire de octe&i, ci

    de date primitive.l scrierea datelor se face n format binar, ceea ce

    nseamncun fi#ier n care au fost scrise informa&iifolosind metode writeX nu va putea fi citit dect prinmetode readX.

    l transformarea unei valori n format binar - serializare.

    l permit serializarea tipurilor primitive #i a #irurilor decaractere.

  • 7/25/2019 Curs1 13 Java CC

    188/453

    Intrri formatate: java.util.Scanner

    Scanner s=new Scanner(System.in);

    String nume = s.next();

    int varsta = s.nextInt();double salariu = s.nextDouble();

    s.close();

  • 7/25/2019 Curs1 13 Java CC

    189/453

    Ie#iri formatate

    PrintStream #i PrintWriter :

    print, println

    format, printf

    System.out.printf("%s %8.2f %2d %n", nume,

    salariu, varsta);

    l Formatarea #irurilor de caractere sebazeazpe clasa java.util.Formatter.

  • 7/25/2019 Curs1 13 Java CC

    190/453

    Fluxuri standard de intrare #i ie#ire

    System.in - InputStream

    System.out - PrintStream

    System.err - PrintStream

    l Afi#area informa&iilor pe ecran:

    System.out.print (argument);System.out.println(argument);

    System.out.printf (format, argumente...);

    System.out.format (format, argumente...);

    l Afi#area erorilor:catch(Exception e) {

    System.err.println("Exceptie:" + e);

    }

  • 7/25/2019 Curs1 13 Java CC

    191/453

    Citirea datelor de la tastatur (1)

    l Clasa BufferedReader

    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

    System.out.print("Introduceti o linie:");

    String linie = stdin.readLine()

    System.out.println(linie);

    l Clasa DataInputStreamDataInputStream stdin = new DataInputStream(

    System.in);

    System.out.print("Introduceti o linie:");

    String linie = stdin.readLine()

    System.out.println(linie);

    l Clasa java.util.Scanner (1.5)

    Scanner s=new Scanner(System.in);

  • 7/25/2019 Curs1 13 Java CC

    192/453

    Citirea datelor de la tastatur (2)

    l Redirectarea fluxurilor standard: stabilirea

    unei alte surse dect tastatura pentru citireadatelor, respectiv alte destina&ii dect ecranulpentru cele doufluxuri de ie#ire.

    l setIn(InputStream) - redirectare intrare

    l setOut(PrintStream) - redirectare ie#ire

    l setErr(PrintStream) - redirectare erori

    PrintStream fis = new PrintStream( newFileOutputStream("rezultate.txt")));

    System.setOut(fis);

    PrintStream fis = new PrintStream(newFileOutputStream("erori.txt")));

    System.setErr(fis);

  • 7/25/2019 Curs1 13 Java CC

    193/453

    Analiza lexicalpe fluxuri:StreamTokenizer

  • 7/25/2019 Curs1 13 Java CC

    194/453

    Clasa RandomAccessFile

    permite accesul nesecven&ial (direct) la

    con&inutul unui fi#ier; este o clasde sine stttoare, subclas

    directa clasei Object; se gse#te n pachetul java.io; ofermetode de tipul readX, writeX; permite att citirea ct #i scriere din/n fi#iere

    cu acces direct; permite specificarea modului de acces al

    unui fi#ier (read-only, read-write).

    RandomAccessFile f1 = newRandomAccessFile("fisier.txt", "r");

    //deschide un fisier pentru citire

    RandomAccessFile f2 =newRandomAccessFile("fisier.txt", "rw");

    //deschide un fisier pentru scriere si citire

  • 7/25/2019 Curs1 13 Java CC

    195/453

    Clasa RandomAccessFile (2)

    l Program pentru afi#area pe ecran a liniilor dintr-un fi#ier

    text, fiecare linie precedatde numrul liniei #i de unspa&iu.

    import java.io.*;

    class A{

    public static void main(String arg[]) throwsIOException{

    RandomAccessFile raf=new RandomAccessFile(arg[0],"r");

    String s;

    int i=1;

    while( (s=raf.readLine())!=null) {

    System.out.println(i+" "+s);

    i++;

    }raf.close();

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    196/453

  • 7/25/2019 Curs1 13 Java CC

    197/453

  • 7/25/2019 Curs1 13 Java CC

    198/453

    Clasa File (3)

    public void dirlist (File d, String sp) throws IOException

    {String [] files=d.list();//l ista numelor din obiectul d

    if (files ==null ) return;

    String path =d.getAbsolutePath();

    //calea completa spre obiectul d

    for(int i=0;i

  • 7/25/2019 Curs1 13 Java CC

    199/453

    Interfee

    Programare Orientat!pe Obiecte

  • 7/25/2019 Curs1 13 Java CC

    200/453

    Interfee

    Ce este o interfa!?

    Definirea unei interfee

    Implementarea unei interfee

    Interfee $i clase abstracte

    Mo$tenire multipl!prin interfee

    Utilitatea interfeelor

    Transmiterea metodelor ca parametri

    Compararea obiectelor

    Adaptori

  • 7/25/2019 Curs1 13 Java CC

    201/453

    Ce este o interfa!?

    Colecie de metode abstracte $i declaraii de

    constante Define$te un set de metode dar nu specific!

    nici o implementare pentru ele.

    Duce conceptul de clas!abstract!cu un pasnainte prin eliminarea oric!ror implement!ride metode

    Separarea modelului de implementare

    Protocol de comunicare

    O clas!care implementeaz!o interfa!trebuie obligatoriu s!specifice implement!ripentru toate metodele interfeei, supunndu-

    se a$adar unui anumit comportament. Define$te noi tipuri de date

    Clasele pot implementa interfee

  • 7/25/2019 Curs1 13 Java CC

    202/453

    Definirea unei interfee

    [public] interface NumeInterfata

    [extends SuperInterfata1, SuperInterfata2...]{

    /* Corpul interfetei:

    Declaraii de constanteDeclaraii de metode abstracte*/

    }

    Corpul unei interfee poate conine:l constante: acestea pot fi sau nu declarate cu

    modificatorii public, static $i final care suntimplicii, nici un alt modificator neputnd ap!rean declaraia unei variabile dintr-o interfa!.Constantele unei interfee trebuie obligatoriuiniializate.

    l metode f!r!implementare: acestea pot fi saunu declarate cu modificatorul public, care esteimplicit; nici un alt modificator nu poate ap!rean declaraia unei metode a unei interfee.

  • 7/25/2019 Curs1 13 Java CC

    203/453

    Definirea unei interfee

    Atenie!

    Variabilele unei interfee sunt implicit publice chiardac!nu sunt declarate cu modificatorul public. Variabilele unei interfee sunt implicit constante chiar

    dac!nu sunt declarate cu modificatorii static $i final. Metodele unei interfee sunt implicit publice chiar

    dac!nu sunt declarate cu modificatorul public.

    interface Exemplu {int MAX = 100; // echivalent cu:

    public static final int MAX = 100;

    int MAX; // Incorect, lipseste initializarea

    private int x = 1; // Incorect, modificator nepermis

    void metoda(); // Echivalent cu:

    public void metoda();

    protected void metoda2();// Incorect, modificator nepermis

    }

  • 7/25/2019 Curs1 13 Java CC

    204/453

    Implementarea unei interfee

    class NumeClasa implements NumeInterfata

    sau:

    class NumeClasa implements Interfata1, Interfata2, ...

    l O clas!care implementeaz!o interfa! trebuieobligatoriu s!specifice cod pentru toate metodeleinterfeei.

    l O clas!poate avea $i alte metode $i variabile

    membre n afar!de cele definite n interfa!.

    l Implementarea unei interfee poate s! fie $i o clas!abstract!.

    l Spunem c!un obiect are tipul X, unde X este ointerfa!, dac!acesta este o instan!a uneiclase ce implementeaz! interfaa X.

    l Atenie! Modificarea unei interfee implic!modificarea tuturor claselor care implementeaz!acea interfa!.

  • 7/25/2019 Curs1 13 Java CC

    205/453

    Exemplu: implementarea uneistive (1)

    l Interfaa ce descrie stiva:

    public interface Stack {void push ( Object item ) throws StackException ;

    void pop () throws StackException ;

    Object peek () throws StackException ;

    boolean empty ();

    String toString ();

    }

    l Clasa ce define$te o excepie proprie StackException:public class StackException extends Exception {

    public StackException () {

    super();

    }

    public StackException ( String msg) {super (msg);

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    206/453

    Exemplu: implementarea uneistive folosind un vector

    public class StackImpl1 implements Stack {

    private Object items []; // Vect. ce contine ob.private int n=0; // Nr. curent de elem. din stiva

    public StackImpl1 ( int max ) { // Constructor

    items = new Object [ max ];

    }

    public StackImpl1 () {

    this (100) ;}

    public void push ( Object item ) throwsStackException {

    if(n == items . length )

    throw new StackException (" Stiva eplina !");

    items [n++] = item ;

    }

  • 7/25/2019 Curs1 13 Java CC

    207/453

    Exemplu: implementarea uneistive folosind un vector (2)

    public void pop () throws StackException {

    if( empty ())throw new StackException (" Stiva e vida !");

    items [--n] = null ;

    }

    public Object peek () throws StackException {

    if( empty ())

    throw new StackException (" Stiva e vida !");

    return items [n -1];}

    public boolean empty () {

    return n ==0 ;

    }

    public String toString () {

    String s="";for (int i=n -1; i >=0; i --)

    s += items [i] + " ";

    return s;

    }

  • 7/25/2019 Curs1 13 Java CC

    208/453

    Exemplu: implementarea uneistive folosind o lista inlantuita (1)

    public class StackImpl2 implements Stack {

    class Node { // Clasa interna ce reprezinta un nod al listeiObject item ; // informatia din nod

    Node link ; // legatura la urmatorul nod

    Node ( Object item , Node link ) {

    this . item = item ;

    this . link = link ;

    }

    }

    private Node top= null ; // Referinta la varful stivei

    public void push ( Object item ) {

    Node node = new Node (item , top);

    top = node ;

    }

    public void pop () throws StackException {

    if ( empty ())

    throw new StackException (" Stiva este vida !");

    top = top . link ;

    }

  • 7/25/2019 Curs1 13 Java CC

    209/453

    Exemplu: implementarea uneistive folosind o lista inlantuita (2)

    public Object peek () throws StackException {

    if( empty ())throw new StackException (" Stiva este vida !");

    return top. item ;

    }

    public boolean empty () {

    return (top == null );

    }

    public String toString () {

    String s="";

    Node node = top;

    while ( node != null ) {

    s += node . item + " ";

    node = node . link ;

    }return s;

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    210/453

  • 7/25/2019 Curs1 13 Java CC

    211/453

    Folosirea stivei:

    public class TestStiva {

    public static void afiseaza ( Stack s) {System . out. println (" Continutul stivei este : " + s);

    }

    public static void main ( String args []){

    try {

    Stack s1 = new StackImpl1 ();

    s1. push ("a");

    s1. push ("b");afiseaza (s1);

    Stack s2 = new StackImpl2 ();

    s2. push ( new Integer (1));

    s2. push ( new Double (3.14) );

    afiseaza (s2);

    } catch ( StackException e) {System . err. println (" Eroare la lucrul cu stiva!");

    e. printStackTrace ();

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    212/453

    Interfee $i clase abstracte

    l O clas!abstract!nu ar putea nlocui o interfa!?

    l Unele clase sunt forate s!extind!o anumit!clas!(de exemplu orice applet trebuie s!fie subclasa aclasei Applet) $i nu ar mai putea sa extind!o alt!clas!. F!r!folosirea interfeelor nu am putea foraclasa respectiv!s!respecte diverse tipuri deprotocoale.

    l Extinderea unei clase abstracte foreaz!o relaientre clase;

    l Implementarea unei interfee specific!doarnecesitatea implement!rii unor anumite metode.

    l Interfeele $i clasele abstracte nu se exclud, fiindfolosite mpreun!:

    ListAbstractList

    LinkedList, ArrayList

  • 7/25/2019 Curs1 13 Java CC

    213/453

    Mo$tenire multipl!prin interfee

    l class NumeClasa extends ClasaUnica implements

    Interfata1, Interfata2, ...l interface NumeInterfata extends Interfata1, Interfata2,

    ...

    l Ierarhia interfeelor este independent!de ierarhiaclaselor care le implementeaz!.

    interface I1 {

    int a=1;

    void metoda1();}

    interface I2 {

    int b=2;

    void metoda2();

    }

    class C implements I1, I2 {public void metoda1() {...}

    public void metoda2() {...}

    }

  • 7/25/2019 Curs1 13 Java CC

    214/453

    Ambiguit!i

    interface I1 {

    int x=1;void metoda();

    }

    interface I2 {

    int x=2;

    void metoda(); //corect//int metoda(); //incorect

    }

    class C implements I1, I2 {

    public void metoda() {

    System.out.println(I1.x); //corect

    System.out.println(I2.x); //corect

    System.out.println(x); //ambiguitate

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    215/453

    Utilitatea interfeelor

    Definirea unor similarit!i ntre clase independente.

    Impunerea unor specificaii: asigur!c!toate claselecare implementeaz!o interfa!pun la dispoziiemetodele specificate n interfa!- de aici rezult!posibilitatea implement!rii unor clase prin mai multemodalit!i $i folosirea lor ntr-o manier!unitar!;

    Definirea unor grupuri de constante

    Transmiterea metodelor ca parametri

    l Crearea grupurilor de constante:

    public interface Luni {

    int IAN=1, FEB=2, ..., DEC=12;

    }

    ...

    if(luna < Luni.DEC)

    luna ++

    else

    luna = Luni.IAN;

  • 7/25/2019 Curs1 13 Java CC

    216/453

    Transmiterea metodelor caparametri

    interface Functie {

    void executa(Nod u);}

    class Graf {

    void explorare(Functie f) {

    ...

    if (explorarea a ajuns in nodul v) f.executa(v);

    }

    }

    //Definim diverse functii

    class AfisareRo implements Functie {

    public void executa(Nod v) {

    System.out.println("Nodul curent este: " + v);

    }

    }

    class AfisareEn implements Functie {

    public void executa(Nod v) {

    System.out.println("Current node is: " + v);

    }

    }

  • 7/25/2019 Curs1 13 Java CC

    217/453

    Transmiterea metodelor caparametri (2)

    public class TestCallBack {

    public static void main(String args[]) {

    Graf G = new Graf();

    Functie f1 = new AfisareRo();

    G.explorare(f1);

    Functie f2 = new AfisareEn();G.explorare(f2);

    /* sau mai simplu:

    G.explorare(new AfisareRo());

    G.explorare(new AfisareEn());

    */}

    }

  • 7/25/2019 Curs1 13 Java CC