Documente Academic
Documente Profesional
Documente Cultură
Inter Fete
Inter Fete
2016
Interfet, e
Scopul lucrrii
Ce este o interfat,
O interfat, a este o list de metode care trebuie denite de ctre orice clasa care implementeaz
interfat, a respectiv. O interfat, a poate deni i constante (public static nal).
are variabile instant, i statice (constantele static nal sunt permise), i fr corpuri pentru
metode.
Aceasta este n esent, a ceea ce face o clas complet abstract, dar clasele abstracte
permit denit, ii de metode statice, pe cnd interfet, ele nu permit acest lucru.
Obligat, ie contractual.
clasa trebuie s deneasc toate metodele respectivei interfet, e. O clas poate implementa mai
multe interfet, e diferite.
una care nu implementeaz toate metodele pe care le-a declarat.) Solut, ia pentru eroare este
aproape ntotdeauna s se implementeze metodele lips dininterfat, . Un nume de metod scris
greit sau o lista incorecta de parametri este cauza uzual, nu faptulc respectiva clas ar
trebuit s e abstract!
O utilizare foarte frecvent a interfet, elor este pentru asculttori (listeners). Un asculttor
(listener) este un obiect dintr-o clas care implementeaz metodele cerute pentru interfat, a
respectiv.
Putet, i crea asculttori interiori (inner) anonimi sau putet, i implementa interfat, a
ceruta n oricare clas. Interfet, ele sunt de asemenea folosite extensiv n pachetul de structuri
de date (Java Collections).
tele unui om (clas). Cineva este instalator pentru ca are abilitatea unui instalator (interfat, ).
Cineva poate ielectrician (interfat, ). Putet, i implementa multe interfet, e, dar obiectele pot
de o singur clas.
Aceast analogie nu merge, totui, ntr-un anume sens.
U.T. Cluj-Napoca
Interfet, e
instant, ele), pe cnd ndemnrile omeneti despre care vorbeam sunt dinamice i pot nvt, ate
sau uitate. Analogia are un defect, cum sunt toate analogiile de altfel, dar ofer o idee despre
cum se poate face o distinct, ie ntre clase i interfet, e.
instant, n cazul motenirii multiple poate deveni destul de ncurcat i duce la mai multe
probleme d.e., aa numitul "Diamant ucigtor al mort, ii" ("Deadly Diamond of Death")
dect solut, ii. Figura din stnga constituie o ilustrare a problemei ment, ionate. n gur sunt
prezentate patru clase aranjate ntr-o structur care creeaz nevoia motenirii virtuale. Att
clasa B ct i clasa C motenesc din clasa A. D motenete multiplu att din B ct i din C. De
aici apar doua probleme. Prima: ce implementare a metodei 'f ' s moteneasc D? Ar trebui
sa moteneasc f() din B sau f() din C? n C++ rspunsul se dovedete a nici una. Trebuie
declarat f() n D i trebuie implementat. Aceasta elimina ambiguitatea i cu sigurant, a aceasta
regul simpl ar putut adoptat n Java.
Totui, cea de a doua problem este un pic mai complicat. Clasa A are o variabila membru
numit i. Amndou clasele B i C motenesc aceasta variabila membru. Cum D o motenete
de la amndou, avem de-a face cu o ambiguitate. Pe de o parte am dori ca i din B i i din C
s e variabile separate n D, crend astfel dou copii ale lui A n D. Pe de alt parte am dori
s existe o singur copie a lui A n D astfel ca numai un i din A s existe n D.
Din acest motiv proiectant, ii limbajului Java au ales s permit doar o singura clas printe,
dar multiple interfet, e. Aceasta furnizeaz majoritatea funct, ionalitt, ii motenirii multiple, dar
fr dicultt, ile pe care le incumb.
U.T. Cluj-Napoca
Interfet, e
Sintaxa
7
8
2.3.2
1
2
3
4
5
2.3.3
Prin denitie, o
interfata nu poate avea constructori. DAR, putem declara o variabila de tipul NumeInterfata si
o putem instantia cu orice clasa concreta care implementeaza interfata respectiva. De exemplu:
1
polimorfismul.
in cazul nostru este o interfata, dar in general poate atat o clasa cat si o interfata.
U.T. Cluj-Napoca
2.3.4
Interfet, e
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
U.T. Cluj-Napoca
2.3.5
Interfet, e
5
6
7
8
9
10
11
12
13
14
15
// Nota :
// ActionListener are nevoie sa fie definita metoda
actionPerformed (..)
// MouseMotionListener are nevoie de definirea lui mouseMoved (..)
si mouseDragged (..) .
public class MyPanel extends JPanel implements ActionListener ,
MouseMotionListener {
public void actionPerformed ( ActionEvent e) {
/* Corpul metodei */
}
public void mouseDragged ( MouseEvent me ) {
/* Corpul metodei */
}
public void mouseMoved ( MouseEvent me ) {
/* Corpul metodei */
}
// Tot ce mai este in aceasta clasa .
}
Este obinuit ca un panou (panel) care folosete graca i rspunde la mouse s-i implementeze
asculttori pentru mouse proprii (dar nu asculttori pentru act, iuni action listeners) ca mai
sus.
java.awt.event.ActionListener.
U.T. Cluj-Napoca
Interfet, e
2.4.1
Interfat, a Clonable
Se folosete pentru a indica n ce mod trebuie folosit i redenit metoda clone (motenit
din clasa
Object)
Metoda
Dac toate datele sunt tipuri primitive sau clase care nu se schimb (cum este
Object.clone()
String),
Dac datele din obiectul de clonat include variabile instant, al cror tip este mutabil,
atunci simpla implementare a lui clone poate cauza o scurgere de informat, ii private (privacy leak)
La implementarea interfet, ei
Cloneable
Object
(sau ce alt
clas va extinde)
Apoi resetat, i valorile pentru orice alte variabile instant, noi ale cror valori sunt
tipuri de clase mutabile. Aceasta se face prin copierea variabilelor instant, a apelnd
metodele clone proprii
Cloneable
este im-
plementat corespunztor pentru clasele de care apart, in variabilele instant, respective i pentru clasele de care apart, in oricare dintre variabilele instant, a din clasele
ment, ionate i aa mai departe
2.4.2
Interfat, a Comparable
Interfat, a Comparable este denita in pachetul
java.lang,
Comparable atunci
other
U.T. Cluj-Napoca
other
other
Interfet, e
Dac parametrul other nu este de acelai tip cu clasa n curs de denire, atunci trebuie
aruncat except, ie de tipul
ClassCastException
Aproape orice not, iune rezonabil de "este nainte de" este acceptabil
In particular, toate relat, iile standard mai-mic-dect peste numere i ordonrile lexicograce peste irurile de caractere sunt potrivite
Relat, ia "urmeaz dup" este doar inversul lui "este nainte de"
Pot luate n considerare alte ordonri, atta vreme ct sunt relat, ii de ordine total. O
ordine total trebuie s satisfac urmtoarele condit, ii:
o1
este egal cu
2.4.3
este nainte de
o1
este nainte de
o2
o2
este nainte de
o3,
atunci
o1
este
compareTo
o1
o3
equals
o2
( Tranzitivitate ) Dac
nainte de
o, o
Double
ct i clasa
String
implementez interfat, a
Comparable
double)
Interfat, a Enumeration
Enumeration
un iterator
hasMoreElements()
nextElement()
U.T. Cluj-Napoca
2.4.4
Interfet, e
Vezi exemplul
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Mersul lucrrii
1. Studiat, i materialul i exemplele furnizate.
2. Creat, i o interfat,
Implementat, i s, i o clas
cele trei dou tipuri
main.
PiesaSah
ca interfata in
loc de clasa abstracta. Care dintre cele doua variante este mai ecienta in cazul acestei
probleme si de ce?
4. Extindeti problema cu s, ahul s, i adugati codul necesar pentru a putea compara doua piese
de sah.
Indicatii de implementare:
Pe langa
un
U.T. Cluj-Napoca
Interfet, e
Folosit functia
sort(...)
Implementati interfata
Comparable
in clasa
Arrays
Persoana
sortare
compareTo(Object other)
U.T. Cluj-Napoca
10