Sunteți pe pagina 1din 6

Lucrarea 5

Interfee
Cuprins
Interfee Java .......................................................................................................................................................... 1 Declararea unei interfee n Java............................................................................................................................. 1 Utilizarea interfeelor Java...................................................................................................................................... 2 Exemplu de lucru cu interfee Java......................................................................................................................... 3 Asocierea operaiilor cu obiectele .......................................................................................................................... 5 Tem ....................................................................................................................................................................... 5

Un obiect include date i metode (operaii) care permit modificarea datelor. Obiectul execut o operaie atunci cnd primete o cerere (un mesaj) de la un client. Mesajele reprezint singura cale prin care un obiect este determinat s execute o operaie, iar operaiile sunt singurul mod de a modifica datele interne ale obiectului. Din cauza acestor restricii, starea intern a obiectului se spune c este ncapsulat: ea nu poate fi accesat direct, iar reprezentarea ei este invizibil dinspre exteriorul obiectului. Pentru fiecare operaie declarat ntr-un obiect se precizeaz numele, parametrii i valoarea returnat. Aceste elemente formeaz semntura operaiei. Mulimea tuturor semnturilor corespunztoare operaiilor dintr-un obiect, accesibile clienilor, reprezint interfaa obiectului. Aceasta descrie complet setul mesajelor care pot fi trimise spre obiectul respectiv. Un tip este un nume utilizat pentru a referi o anumit interfa. Un obiect este de tipul T dac el accept toate mesajele corespunztoare operaiilor definite n interfaa numit T. Interfeele sunt elemente fundamentale n sistemele OO. Obiectele sunt cunoscute doar prin intermediul interfeelor lor. O interfaa nu d nici un detaliu relativ la implementarea unui obiect, iar obiecte distincte pot implementa diferit o aceeai cerere.

Interfee Java
Interfeele Java reprezint o colecie de metode abstracte (doar semntura, nu i implementarea acestora) i de constante. Utilizarea unei interfee este justificat n cazurile n care se dorete ca o clas s poat fi convertit n mai multe tipuri de baz ntre care nu exist relaie de motenire. Deoarece Java nu suport motenirea multipl, interfeele reprezint o variant de rezolvare a acestei situaii. La fel ca i o clas, nainte de a putea utiliza o interfa ea trebuie declarat. Deoarece conine metode abstracte, interfaa nu poate fi instaniat. Cu toate acestea, o variabil poate fi declarat ca fiind de tipul interfeei.

Declararea unei interfee n Java


O interfa Java este declarat prin cuvntul cheie interface. Structura general a declaraiei unei interfee este:
1

[modificator] interface ta_de_interfete] { lista_de_metode; list_de_constante; }

id_interfata

[extends

lis-

Modificatorul unei interfee poate fi public sau abstract. Avnd n vedere faptul c o interfa este abstract prin definiie, utilizarea modificatorului abstract este redundant. Spre deosebire de o clas, o interfa poate moteni mai multe interfee. Motenirea se face prin clauza extends urmat de lista interfeelor motenite (lista_de _interfete) separate prin virgul. Prin derivare, o interfa motenete de la interfaa de baz att metodele, ct i constantele acesteia. public interface Id1 extends Id2, Id3, Id4 n corpul interfeei pot exista o list de declaraii de metode i o list de declaraii de constante. Metodele declarate ntr-o interfa sunt implicit abstracte. Constantele declarate n interfa primesc atributele static i final. Unui cmp final, dup ce a fost iniializat, nu i se mai poate modifica valoarea. public interface Alergator { int lg_pista=1000; int timp_max=3; public void alearga(); public void accelereaz(); } Metodele dintr-o interfa nu pot fi statice. Referirea constantelor se va face astfel: Alergator.lg_pista; n urma compilrii unui fiier surs Java care conine o interfa, va rezulta un fiier cu extensia .class ataat interfeei respective.

Utilizarea interfeelor Java


Interfeele Java pot fi utilizate n declaraia unei clase, oblignd clasa respectiv s implementeze metodele declarate n interfa. n Java, acest lucru e realizat prin folosirea cuvntului cheie implements: class Sportiv extends Om implements Alergator, Saritor { //implementarea metodelor din interfaa Alergator; //implementarea metodelor din interfaa Saritor; \ } Aa cum se poate observa, o clas poate implementa mai multe interfee. Dac o clas care implementeaz o interfa nu implementeaz toate metodele declarate n interfaa respectiv, va trebui s fie declarat abstract, altfel se va semnala eroare la compilare. Dac o clas A implementeaz o interfa X, un obiect al clasei A este de tip X, el putnd s fie atribuit unui
2

alt obiect de tip X. Numele unei interfee poate fi utilizat la fel ca i numele unui clase, mai puin la instanierea prin operatorul new.

Exemplu de lucru cu interfee Java


Pentru a mai bun nelegere a conceptelor prezentate n lucrare, vom recurge, n continuare, la un exemplu. interface Cititor { public void citeste(); } interface Scriitor { public void scrie(); } interface Profesor extends Cititor, Scriitor { int nota_max=10; int nota_medie=5; int nota_min=1; public void apreciere(); } interface Scufundator { int h=10; public void scufundare(); } class Inotator implements Scufundator { static final int l=50; public void inot() { System.out.println("Inoata " + l + "metri "); } public void scufundare() { System.out.println("Scufunda " + h + "metri "); } } class ProfesorInot extends Inotator implements Profesor { public void citeste() { System.out.println("Citeste PRO Sport "); } public void scrie() { System.out.println("Nu scrie nimic!"); }
3

public void apreciere() { System.out.println("Slab. nota_medie); }

Primeti

nota

"

} class ProfesorJava implements Profesor { public void citeste() { System.out.println("Citeste Thinking in Java "); } public void scrie() { System.out.println("Scrie programe Java"); } public void apreciere() { System.out.println("Excelent. Primeti nota " + nota_max); } } public class TestInterfata { public static void main(String [] args) { ProfesorInot pi = new ProfesorInot(); ProfesorJava pj = new ProfesorJava(); ceCiteste(pi); ceScrie(pi); ceCiteste(pj); ceScrie(pj); cumApreciaza(pi); cumApreciaza(pj); pi.inot(); pi.scufundare(); //corect pj.inot(); pj.scufundare(); //incorect } public static void ceCiteste( Cititor c) { c.citeste(); } public static void ceScrie( Scriitor s) { s.scrie(); } public static void cumApreciaza( Profesor p) { p.apreciere(); } }

Folosind referina de interfa se pot apela metodele enumerate n interfa, iar ceea ce se execut va fi codul corespunztor clasei "implementatoare", la care aparine obiectul concret indicat de referin

Asocierea operaiilor cu obiectele


Cnd o cerere este trimis unui obiect, operaia care se va executa depinde de: cerere; obiectul care recepioneaz cererea. Obiecte diferite, care pot recepiona cereri identice, pot avea implementri diferite ale operaiilor care vor satisface cererile respective. Practic, prin cerere se identific serviciul dorit, iar prin obiectul receptor se alege o anume implementare a acelui serviciu. Asocierea dintre o operaie solicitat i obiectul care va pune la dispoziie implementarea concret a operaiei se numete legare (binding). n funcie de momentul n care ea se realizeaz, legarea poate fi: static: asocierea se realizeaz la compilare; dinamic: asocierea se realizeaz la execuie. n programele Java, majoritatea apelurilor de metode presupun legare dinamic. Asocierea dinamic permite scrierea de programe n care: la emiterea unei cereri s nu ne preocupe ce obiect o va recepiona, stiindu-se c orice obiect a crui interfa include o semntur potrivit va fi bun; obiecte avnd interfee identice pot fi substituite unul altuia, la execuie; aceast substituire se mai numete polimorfism.

Tem
Se cere s se modeleze activitatea unui ghieu bancar. Sistemul este format din urmtoarele entiti, cu atributele corespunztoare: Banca clienti (tablou de elemente de tip Client) codBanca (sir de caractere) ContBancar numarCont (String) suma(float) Client nume (String) adresa (String) conturi (tablou de elemente de tip ContBancar; un client trebuie s aib cel puin un cont, dar nu mai mult de cinci conturi)
5

Conturile bancare pot fi n RON i n EUR. Pentru conturile in RON, dobnda se calculeaz astfel: 0,3 RON pe zi pentru sume sub 500 RON si 0,8 RON pe zi pentru sume mai mari. Conturile in EUR au o dobnd de 0,1 EUR pe zi. Operaiunile posibile asupra unui cont sunt depunere sau extragere a unei sume specificate. Transferuri se pot efectua doar intre conturile in RON. public void transfer(ContBancar contDest, float suma). Toate conturile implementeaz o interfaa Operatiuni care are metodele public float getSumaTotala() la suma existent n cont se adaug dobnda aferent public float getDobanda() public void depunere(ContBancar contDest, float suma) public void extragere (ContBancar contDest, float suma) Toate clasele vor avea constructori i metode de prelucrare i de afiare a datelor membru. De asemenea, se va crea o clas ClientBanca pentru instanierea de obiecte ale celor trei clase specificate.

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