o interfață software se poate referi la o gamă largă de tipuri diferite de interfață la diferite „niveluri”: un sistem de operare poate interfața cu piese hardware. Aplicațiile sau programele care rulează pe sistemul de operare pot avea nevoie să interacționeze prin fluxuri de date, filtre și conducte; iar în programele orientate pe obiecte, obiectele dintr-o aplicație pot avea nevoie să interacționeze prin metode.
în practicăedit
un principiu cheie al proiectării este interzicerea accesului la toate resursele în mod implicit, permițând accesul numai prin puncte de intrare bine definite, adică interfețe. Interfețele Software oferă acces la resursele computerului (cum ar fi memoria, procesorul, stocarea etc.) a sistemului informatic de bază; Accesul direct (adică nu prin interfețe bine concepute) la astfel de resurse prin software poate avea ramificații majore-uneori dezastruoase—pentru funcționalitate și stabilitate.
interfețele dintre componentele software pot furniza constante, tipuri de date, Tipuri de proceduri, specificații de excepție și semnături ale metodei. Uneori, variabilele publice sunt, de asemenea, definite ca parte a unei interfețe.
interfața unui modul software A este definită în mod deliberat separat de implementarea acelui modul. Acesta din urmă conține codul real al procedurilor și metodelor descrise în interfață, precum și alte variabile, proceduri „private” etc. Un alt modul software B, de exemplu clientul la A, care interacționează cu A este obligat să facă acest lucru numai prin interfața publicată. Un avantaj practic al acestui aranjament este că înlocuirea implementării A cu o altă implementare a aceleiași interfețe nu ar trebui să provoace eșecul B—modul în care a îndeplinește intern cerințele interfeței nu este relevant pentru B, care se referă doar la specificațiile interfeței. (A se vedea, de asemenea, principiul substituției Liskov.)
în limbi orientate obiectedit
în unele limbaje orientate obiect, în special în cele fără moștenire multiplă completă, termenul interfață este utilizat pentru a defini un tip abstract care nu conține date, dar definește comportamentele ca semnături ale metodei. O clasă având cod și date pentru toate metodele corespunzătoare acelei interfețe și declarând astfel se spune că implementează acea interfață. Mai mult, chiar și în limbile cu moștenire unică, se pot implementa mai multe interfețe și, prin urmare, pot fi de diferite tipuri în același timp.
o interfață este astfel o definiție de tip; oriunde un obiect poate fi schimbat (de exemplu, într-o funcție sau apel de metodă) tipul obiectului care urmează să fie schimbat poate fi definit în termeni de una dintre interfețele sale implementate sau clase de bază, mai degrabă decât specificarea clasei specifice. Această abordare înseamnă că orice clasă care implementează acea interfață poate fi utilizată. De exemplu, o implementare fictivă poate fi utilizată pentru a permite dezvoltarea să progreseze înainte ca implementarea finală să fie disponibilă. Într-un alt caz, o implementare falsă sau simulată poate fi înlocuită în timpul testării. Astfel de implementări stub sunt înlocuite cu cod real mai târziu în procesul de dezvoltare.
de obicei, o metodă definită într-o interfață nu conține cod și, prin urmare, nu poate fi apelată; trebuie implementată prin cod non-abstract pentru a fi rulată atunci când este invocată. O interfață numită ” Stack
„ar putea defini două metode:push()
șipop()
. Poate fi implementat în moduri diferite, de exemplu, FastStack
și GenericStack
—primul fiind rapid, lucrând cu o structură de date de dimensiuni fixe, iar al doilea folosind o structură de date care poate fi redimensionată, dar cu costul unei viteze ceva mai mici.
deși interfețele pot conține multe metode, ele pot conține doar una sau chiar deloc. De exemplu, limbajul Java definește interfața Readable
care are metoda unicăread()
; diferite implementări sunt utilizate în scopuri diferite, inclusiv BufferedReader
FileReader
InputStreamReader
PipedReader
și StringReader
. Interfețele Marker precum Serializable
nu conțin deloc metode și servesc la furnizarea de informații în timpul rulării procesării generice folosind reflexia.
programare la interfațăedit
utilizarea interfețelor permite un stil de programare numit programare la interfață. Ideea din spatele acestei abordări este de a baza logica de programare pe interfețele obiectelor utilizate, mai degrabă decât pe detaliile de implementare internă. Programarea la interfață reduce dependența de specificul implementării și face Codul mai reutilizabil.
împingând această idee la extrem, inversarea controlului lasă contextul pentru a injecta codul cu implementările specifice ale interfeței care vor fi utilizate pentru a efectua lucrarea.