curs1 13 java cc
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ⅈ 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