Sunteți pe pagina 1din 8

Laborator 2 - Introducere in limbajul Java.Pachete.Interfete.Tratarea exceptiilor.

1. Pachete
2. Interfete
3. Tratarea exceptiilor
Pachete
Crearea unui pachet
Folosirea membrilor unui pachet
Importul unei clase
Importul unui pachet
Pachetele JDK
Crearea unui pachet
Un pachet este o colectie de clase si interfete nrudite. Sunt folosite pentru
gasirea si utilizarea mai usoara a claselor, pentru a evita conflictele de nume si pentru a
controla accesul la anumite clase. In alte limbaje de programare pachetele se numesc
librarii.
Toate clasele si interfetele Java apartin la diverse pachete, grupate dupa
functionalitatea lor: clasele de baza se gasesc n pachetul java.lang, clasele pentru
intrari/iesiri sunt n java.io, clasele pentru grafica n java.awt, cele pentru construirea
applet-urile n java.applet. Crearea unui pachet se realizeaza prin scriere la nceputul
fisierelor sursa ce contin clasele si interfetele pe care dorim sa le grupam ntr-un pachet, a
instructiunii:
package NumePachet;
Sa consideram un exemplu, presupunem ca avem doua fisiere sursa BubbleSort.java si
QuickSort.java
package sort;
class BubbleSort
{...}
package sort;
class QuickSort
{...}
Clasele BubbleSort si QuickSort vor face parte din acelasi pachet sort. Instructiunea
package actioneaza asupra ntregului fisier sursa la nceputul caruia apare. Cu alte cuvinte
nu putem specifica faptul ca anumite clase dintr-un fisier sursa apartin unui pachet iar
altele altui pachet.
Daca nu este specificat un anumit pachet, clasele unui fisier sursa vor face parte din
pachetul implicit (care nu are nici un nume). In general, pachetul implicit este format din
toate clasele si intefetele directorului curent. Este recomandabil ca toate clasele si
intefetele sa fie plasate n pachete. Pachetul implicit este folosit doar pentru aplicatii mici
sau la nceputul dezvoltarii unei aplicatii.

Folosirea membrilor unui pachet


Conform specificatiilor de acces ale unei clase si ale mebrilor ei doar clasele
publice si membrii declarati publici ai unei clase sunt accesibili n afara pachetului n care
acestea se gasesc. Pentru a folosi o clasa publica dintr-un pachet sau pentru a apela o
metoda publica a unei clase public a unui pachet exista trei solutii:
- specificarea numelui complet al clasei;
- importul clasei respective;
- importul ntregului pachet n care se gaseste clasa.
Specificarea numelui complet al calsei se face prin prefixarea numelui clasei cu numele
pachetului: numePachet.NumeClasa. Aceasta metoda este recomandata doar pentru cazul
n care folosirea acelei clase se face o singura data sau foarte rar. De exemplu ar fi extrem
de neplacut sa scriem de fiecare data cnd vrem sa declaram un sir de caractere sau sa
folosim un obiect grafic, secvente de forma:
java.lang.String str = "incomod";
java.awt.Color circle = new java.awt.Color(32,200,45);
In aceste situatii vom importa (include) clasa respective sau ntreg pachet din care face
parte in aplicatia noastra. Acest lucru se realizeaza prin instructiunea import, care trebuie
sa apara la nceputul fisierelor sursa, imediat dupa instructiunea package.
Importul unei clase
Se face printr-o instructiune import n care specificam numele clasei (interfetei) pe care
dorim sa o folosim dintr-un pachet:
import java.awt.Color;
Din acest moment vom putea folosi n clasele fisierului n care am plasat instructiunea de
import numele scurt al clasei Color:
Color c = new Color(30,40,50);
In situatia in care avem nevoie de mai multe clase din cadrul unui pachet, atunci este
recomandat importul ntregului pachet si nu al fiecarei clase n parte.
Importul unui pachet
Se face printr-o instructiune import n care specificam numele pachetului ale
carui clase si interfete dorim sa le folosim dintr-un pachet, urmat de simbolul '*'. Se mai
numeste import la cerere deoarece ncarcarea claselor se face dinamic n momentul
apelarii lor. Este cel mai uzual tip de import.
import java.awt.*;
Din acest moment vom putea folosi n clasele fisierului n care am plasat instructiunea de
import numele scurt al tuturor claselor pachetului importat:
Color color = new Color(23,78,90);
Circle c = new Circle(); ...
Obs:* nu are semnificatia uzuala de masca si nu poate fi folosit dect ca atare:
import java.awt.C*; // eroare de compilare

In cazul n care sunt importate doua pachete care contin o clasa cu acelasi nume atunci
referirea la ea trebuie facuta folosind numele complet al clasei respective.
//Vector.java
package my_package;
class Vector { ... }
//alt fisier sursa
import java.util.*;
import my_package.*;
...
Vector v = new Vector(); //ilegal -> conflict de nume
java.util.Vector v1 = new java.util.Vector(); //corect
my_package.Vector v2 = new my_package.Vector();//corect
Mediul Java importa automat trei pachete pentru toate fisierele sursa:
- pachetul java.lang
- pachetul curent
- pachetul implicit (fara nume)
Pachetele JDK
Limbajul Java se bazeaza pe o serie de biblioteci (pachete) cu ajutorul carora se
pot construi aplicatiile. Exista deci un set de clase deja implementate, ceea ce reduce
timpul de dezvoltare a unui program. Cele mai importante sunt:
java.applet - suport pentru scrierea de appleturi;
java.awt - suport pentru grafica(Abstract Windowing Toolkit);
java.beans - suport pentru scrierea de componente reutilizabile ;
java.io - suport pentru tratarea fluxurilor de date;
java.lang - suport pentru clasele de baza ale limbajului Java corespunzatoare
tipurilor de baza (int Integere, char Character, ...);
java.math - suport pentru clase corespunzatoare operatiilor matematice;
java.net - asigura suportul pentru acces-ul la retea;
java.rmi - executie la distanta (Remote Message Interface);
java.security - mecanisme de securitate : criptare/decriptare, autentificare;
java.sql - lucru cu baze de date (interogari SQL);
java.text - suport pentru formatarea textelor;
java.util - clase utile : Vector, Stack, Random, ...
Interfete
Definitia unei interfete.
Definirea unei interfete
Implementarea unei interfete
Comparatia interfata - clasa abstracta
Mostenire multipla prin intermediul interfetelor
Concluzii

Definitia unei interfete.


Prin folosirea interfetelor, conceptul de clasa abstracta poate fi mai bine implementatcu ,
odata cu eliminarea oricarei implementari a metodelor, punndu-se n practica unul din
conceptele paradigmei POO de separare a modelului unui obiect (interfata) de
implementarea sa. Asadar, o interfata poate fi privita ca un protocol de comunicare ntre
obiecte.
O interfata Java defineste un set de metode dar nu specifica nici o implementare pentru
ele. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari
pentru toate metodele interfetei, supunndu-se asadar unui anumit comportament.
Definirea unei interfete
Definirea unei interfete se face prin intermediul cuvntului cheie interface:
[public] interface NumeInterfata
[extends SuperInterfata1 [,extends SuperInterfata2...]]
{
//corpul interfetei:constane si metode abstracte
}
O interfata poate avea un singur modificator: public. O interfata publica este accesibila
tuturor claselor indiferent de pachetul din care fac parte. O interfata care nu este publica
este accesibila doar claselor din pachetul din care face parte interfata.
O clasa poate extinde oricte interfete. Acestea se numesc superinterfete, iat numele lor
este prin virgula.
Implementarea unei interfete
Se face prin intermediul cuvntului cheie implements:
class NumeClasa implements NumeInterfata sau
class NumeClasa implements Interfata1, Interfata2...
O clasa poate implementa oricte interfete. O clasa care implementeaza o interfata trebuie
obligatoriu sa specifice cod pentru toate metodele interfetei. Din acest motiv, odata creata
si folosita la implementarea unor clase, o interfata nu mai trebuie modificata , n sensul ca
adaugarea unor metode noi sau schimbarea semnaturii metodelor existente va duce la
erori n compilarea claselor care o implementeaza. Modificarea unei interfete implica
modificarea tuturor claselor care implementeaza acea interfata! Implementarea unei
interfete poate sa fie si o clasa abstracta.
Comparatia interfata - clasa abstracta
La prima vedere o interfata nu este altceva dect o clasa abstacta n care toate
metodele sunt abstracte (nu au nici o implementare). Deosebirea dintre o clasa abstracta
si o interfata consta n faptul ca unele clase sunt fortate sa extinda o anumita clasa (de
exemplu orice applet trebuie sa fie subclasa a clasei Applet sau JApplet) si nu ar mai

putea sa extinda o clasa abstracta deoarece n Java nu exista dect mostenire simpla. Fara
folosirea interfetelor nu am putea forta clasa respectiva sa respecte un anumit protocol.
La nivel conceptual diferenta consta n:
- extinderea unei clase abstracte forteaza o relatie ntre clase;
- implementarea unei interfete specifica doar necesitatea implementarii unor
anumie metode.
Mostenire multipla prin intermediul interfetelor
Interfetele nu au nici o implementare si nu ocupa spatiu de memorie la
instantierea lor. Din acest motiv nu reprezinta nici o problema ca anumite clase sa
implementeze mai multe interfete sau ca o interfata sa extinda mai multe interfete (sa aiba
mai multe superinterfete)
class NumeClasa implements Interfata1, Interfata2, ...
interface NumeInterfata extends Interfata1, Interfata2, ...
O interfata mosteneste att constantele ct si declaratiile de metode de la
superinterfetele sale. O clasa mosteneste doar constantele unei interfete.
Exemplu de clasa care implementeaza mai multe interfete:
interface Inotator {
void inoata();
}
interface Zburator {
void zboara();
}
class Luptator {
public void lupta() {}
}
class Erou extends Luptator implements Inotator, Zburator {
public void inoata() {}
public void zboara() {}
}
Exemplu de interfata care extinde mai multe interfete :
interface Monstru {
void ameninta();
}
interface MonstruPericulos extends Monstru {
void distruge();
}
interface Mortal {
void distrugeTotal();
}
interface Vampir extends MonstruPericulos, Mortal {
void beaSange();
}
class Dracula implements Vampir {

public void ameninta() {}


public void distruge() {}
public void distrugeTotal ();
public void beaSange() {}
}
Concluzii
O interfata defineste un protocol ce poate fi implementat de orice clasa, indiferent de
ierarhia de clase din care face parte. Interfetele sunt utile pentru:
- definirea unor similaritati ntre clase independente fara a forta artificial o
legatura ntre ele.;
- asigura ca toate clasele care implementeaza o interfata pun la dipozitie
metodele specificate n interfata; de aici rezulta posibilitatea implementarii unitare a unor
clase prin mai multe modalitati;
- specificarea metodelor unui obiect fara a deconspira implementarea lor
(aceste obiecte se numesc anonime si sunt folosite la livrarea unor pachete cu clase catre
alti programatori: acestia pot folosi clasele respective dar nu pot vedea implementarile lor
efective) ;
- definirea unor grupuri de constante;
- transmiterea metodelor ca parametri (tehnica Call-Back).
Exceptii
Pentru tratarea erorilor remediabile Java foloseste exceptiile. Exemple de
exceptii pot fi :
- IOException
- EOFException
- ArrayIndexOutOfBoundsException
- FileNotFoundException
- InterruptedException.
Aceste exceptii pot fi tratate n Java n mai multe moduri :
- pot fi ignorate ;
- pot fi tratate direct n codul n care apar;
- pot fi transmise codului ce a apelat metoda care a generat exceptia, n ideea ca
vor fi tratate de acesta.
Exceptiile sunt tratate ca obiecte. Codul de tratare a exceptiilor se afla n pachetul
java.lang. Exceptiile sunt tratate cu ajutorul a trei tipuri de instructiuni : try, catch si
finally.
Acestea sunt folosite n constructii de forma:
try {
instructiuni care pot genera o exceptie
}
catch (ExceptionType1 e) {
prelucrarea exceptiei de tipul 1
}

catch (ExceptionType2 e) {
prelucrarea exceptiei de tipul 2
}
finally {
prelucrarea tuturor celorlalte tipuri de exceptii
}
Exemplu de folosire a instructiunilor try catch:
public class ExException {
public static void main (String args[]) {
int[] myArray = new int[10];
try {
System.out.println("Inainte de o atribuire valida in
matrice...");
myArray[0] = 100;
System.out.println("Inainte de o atribuire invalida
in matrice...");
myArray[100] = 100;
System.out.println("Dupa o exceptie in matrice");
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Eroare de indice in matrice!");
}
}
}
Instructiunea throw determin generarea unei exceptii de ctre codul propriuzis, ramnnd n sarcina procedurii apelante sa trateze exceptia. Tipul exceptiei poate fi
predefinit (existent
n clasa java.lang.Exception) sau poate fi un tip definit special pentru o anume aplicatie.
Sintaxa instructiunii este :
throw (Obiect_Exceptie)
Personalizarea exceptiilor existente cat si crearea de noi exceptii se realizeaza prin
extinderea clasei de baza java.lang.Exception.
Exemplu:
public class MyException extends Exception {
public MyException () {
super();
}
public MyException (String s) {
super(s);
}
}
public class VerifyRange {
MyException e;

public void verifyIntRange(int val, int val_min,int val_max) throws


MyException {
if ((val < val_max ) || (val > val_max)) {
e = new MyException("number " + value + " out of
range");
throw(e);
}
}
}

TEMA:
Sa se implementeze un program care contine un pachet "citire" si care citeste de la tastatura un utilizator
numeric si o parola (sir de caractere), iar apoi le va compara cu unele predefinite.
1. In cazul in care corespund se afisaza un mesaj corespunzator
2. In cazul in care nu corespund, se asteapta 5 secunde si se va incerca din nou

Functii de care este posibil sa aveti nevoie:


1citirea unui string de la tastatura:
String line = null;
BufferedReader is = new BufferedReader( new InputStreamReader(System.in));
line = is.readLine();
2. conversia string-numar
val = Integer.parseInt(line)
3. afisarea unui mesaj:
System.out.println("Afisez acest mesaj");

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