Programare interfețe, tutoriale și exemple

Capitolul 3. Pachete și interfețe

interfețe

Este posibil să fi observat că puteți obține o extensie dintr-o singură clasă, fiecare clasă sau derivate din familii monoparentale, așa cum este prezentat în Fig. 3.4, de asemenea. Toate clasele au loc doar pe „Adam“ a obiectului de clasă. Dar, de multe ori este nevoie pentru a genera o clasă de două clase de agățat, așa cum este prezentat în Fig. 3.4 b. Aceasta se numește moștenire multiplă (moștenire multiplă). În moștenire multiplă, nu este nimic greșit. Dificultățile apar în cazul în care cursurile sunt generate de ele însele agățat de un singur clasa A, așa cum este prezentat în Fig. 3.4 * in. Această așa-numita moștenire „în formă de diamant“.







Fig. 3.4. Diferite versiuni de moștenire

De fapt, chiar și în clasă este definită o metodă f (), la care ne întoarcem de la o anumită metodă de clasă pe. Putem fi siguri că metoda lui f își îndeplinește ceea ce este scris în clasa A, adică. E. O metodă de A.f? Poate că a fost înlocuită în clasele B și C? Dacă da, ce opțiune folosim: B.f () sau C. F. ()? Desigur, puteți identifica cazuri de clase și metode de acces ale acestor cazuri, dar este destul de o altă problemă.

În alte limbaje de programare, această problemă este rezolvată în moduri diferite, specificând în principal numele metodei ft). Dar este principiul KISS rupt întotdeauna. În jurul moștenire multiplă este întotdeauna o mulțime de controverse, are susținătorii fervenți și adversarii la fel de înfocați. Noi nu se va amesteca în disputele afacerii noastre - cea mai bună utilizare a limbii înseamnă pentru a rezolva problemele lor.

Creatorii limbajului Java, după multe dezbateri și reflecție radicală a primit - interzis moștenire multiplă la toate. În cazul în care extinderea clasei după cuvântul se extinde puteți scrie doar un singur nume de superclasa. Cu super-rafinament se poate aplica numai pentru membrii superclasei imediat.

Dar dacă încă mai trebuie să utilizați câțiva strămoși în generație? De exemplu, avem o clasă comună de automobile auto. din care puteți genera clasa camion camion și clasa de autoturisme Sag. Dar aici este necesar pentru a descrie Pickup preluare. Această clasă trebuie să moștenească proprietățile și camioane și mașini.

În astfel de cazuri, utilizați o altă limbă construi interfață Java-. analizând cu atenție multiple teoreticienii moștenirea OOP a constatat că problema creează doar punerea în aplicare a metodelor, nu descrierile lor.

Interface (interfață), spre deosebire de clasa conține numai constante și metode de titluri, fără realizarea lor.

Interfețele sunt plasate în aceleași pachete și subpachetelor ca clase, și compilate în aceeași clasă-fișiere.

Descriere Interfața începe cu interfața cuvânt. care poate fi precedată modificator publică. ceea ce înseamnă, precum și pentru clasa că interfața este disponibil peste tot. Dacă modificatorul nu este public, interfața va fi vizibilă în pachetul numai.







După cuvântul de interfață este scris numele interfeței. atunci se poate, sta cuvântul și extinde lista strămoșii interfețelor cu virgule. Astfel, interfețele pot fi generate de interfețele, pentru a forma propria lor, indiferent de clasă, ierarhie, și pot exista moștenire multiplă de interfețe. În această ierarhie, nici rădăcină, un strămoș comun.

Apoi, bretelele sunt scrise în orice ordine și constant metodele titluri. Putem spune că în interfața toate metodele sunt abstracte, dar abstract cuvântul nu este necesar să se scrie. Constantele sunt întotdeauna statice, dar nu este necesar să se specifice cuvântul cheie statică și finală.

Toate constante și metode în interfețe sunt întotdeauna deschise, nici măcar nu .ukazyvat publice modificator.

Iată cum schema poate fi oferită pentru vehiculele ierarhie:

Interfața auto se extinde de automobile

Interfața camion se extinde de automobile

Interfața Pickup extinde masina, camion

Astfel, interfața - este doar o schiță, schiță. Aceasta precizează ce să facă, dar nu precizează cum să o facă.

Cum se utilizează aceeași interfață, în cazul în care acesta este complet abstract, nu există nici o metodă completă?

Nu folosiți interfața și punerea sa în aplicare (implementare). Implementarea unei interfețe - tehnicile pictate ale unuia sau mai multor interfețe o clasă în care. În antetul clasei, după numele acestuia sau dupa numele superclasa, dacă este cazul, cuvânt și pune în aplicare în scris, separate prin virgule, enumeră numele interfețelor.

Iată cum puteți implementa o ierarhie de vehicule:

Interfața auto se extinde de automobile.>

Clasa de camioane implementează automobile.>

clasă Pickup extinde camion implementează mașini

Interfața auto se extinde de automobile

Interfața camion se extinde de automobile

Clasa de Pickup pune în aplicare masina, camion

Punerea în aplicare a interfeței poate fi incompletă, unele metode de interfață sunt vopsite, în timp ce altele - nu. Aceasta realizare - o clasă abstractă, aceasta ar trebui să marcheze definitiv abstract modificator.

Cum să pună în aplicare în metoda clasă de preluare f (). descris în interfața epopeile și interfața camion cu aceeași semnătură? Răspunsul este simplu - nimic. Această situație nu poate fi realizat în clasa Pickup. Este necesar de a proiecta un program într-un mod diferit.

Astfel, interfața vă permit să pună în aplicare în Java de design pur orientat-obiect care este axat pe probleme de implementare a proiectului.

Putem începe elaborarea, scrie-l sub forma unei ierarhii de interfețe, fără să se gândească la punerea în aplicare, și apoi să se bazeze pe acest proiect de ierarhie de clase, având în vedere limitările de o singură moștenire și vizibilitatea membrilor clasei.

Listarea 3.3 arată cum puteți colecta folosind corul de interfață animale de companie în Listing 2.2.

3.3. Utilizarea interfeței pentru polimorfismul organizației

Dog clasă implementează Voice

voce public void ()

statice void main (String [] args) publice

pentru (int k = -0; k <10; k++)

caz Lights.RED: System.out.println ( "Stop!"); pauză;

caz Lights.YELLOW: System.out.println ( "Stai!"); pauză;

caz Lights.GREEN: System.out.println ( "Du-te!"); pauză;

caz Lights.ERROR: System.err.println ( "eroare de timp"); pauză;

default: System.err.println ( "lumină necunoscută."); return;

Aici, în interfața Lights. constantele comune întregului proiect.

Clasa Cronometrul implementează această interfață și utilizează constantele direct ca propria lor. schimbare a acestei metode de comutare clasa furnizează semnale cu diferite semafor întârziere în funcție de culoare. Clasa de fir efectuează metoda de întârziere de somn () din biblioteca standard, care este transmis timp de întârziere în milisecunde. Această metodă necesită o manipulare excepție încercare<> catch () <>. din care vom vorbi în capitolul 16.

clasa TrafficReguiator nu implementează interfața Lumini și utilizează numele complete Lights.RED etc. Acest lucru este posibil deoarece constanta roșu, galben și verde sunt statice în mod implicit.

Acum știm toate limbajul Java înseamnă a proiecta o soluție la problema. Concluzionând conversația cu privire la proiectare, să nu mai vorbim de colectare în continuă creștere de modele de design (modele de design).