Clasă abstractă vs. interfață
Clasa abstractă (sau tip) este un tip dintr-un sistem de tip nominativ declarat de program. Deși numele implică astfel, o clasă abstractă poate sau nu poate include metode sau proprietăți abstracte. Clasa de distincție se referă la diferite construcții de limbi care pot fi folosite pentru a implementa tipuri abstracte. Clasele abstracte pot fi caracterizate de o problemă de design care se păstrează cu cea mai bună programare orientată spre obiect și prin natura lor neterminată.
O interfață este un tip abstract pe care clasele trebuie să le implementeze pentru a specifica o interfață (generic vorbind). Interfețele pot conține numai semnături de metode și declarații constante (atât statice, cât și finale), niciodată definiții de metode. Interfețele simulează moșteniri multiple și sunt folosite pentru a codifica asemănările împărțite între diferitele tipuri de clase.
Tipurile de abstracturi pot fi create, semnificate sau simulate în mai multe moduri diferite. Un programator poate semnifica tipuri abstracte folosind abstractul cuvintelor cheie explicit, prin includerea uneia sau mai multor metode în definiția clasei, moștenind dintr-un alt tip abstract fără a suprascrie caracteristicile lipsă necesare pentru a finaliza definiția clasei sau prin trimiterea unei anumite metode către orientarea obiectului limbajul de programare cunoscut ca aceasta, care nu implementează direct metoda.
Interfețele pot fi definite utilizând metode abstracte. Clasele pot fi de asemenea implementate în interfețe. Dacă o clasă implementează o interfață și nu implementează toate metodele sale, trebuie folosit un abstract al semnifiantului, în caz contrar semnificantul nu este necesar (deoarece toate interfețele sunt în mod inerent abstracte). Clasele pot implementa, de asemenea, mai multe interfețe.
În timp ce interfețele sunt folosite pentru a specifica interfețele generice, tipurile de abstracte pot fi folosite pentru a defini și impune protocolul (care este un set de operații pe care trebuie să le suporte toate obiectele care implementează protocolul dorit). Tipurile abstracte nu apar în limbile fără subtip. Deoarece astfel de subtipuri sunt forțate să implementeze toate funcționalitățile necesare, asigurând corectitudinea executării programului. Există mai multe moduri în care pot fi create tipuri abstracte: clasele de bază complete abstracte sunt clasele care fie sunt explicit declarate a fi abstracte, fie conțin metode abstracte (neimplementate); Common Lisp Object Systems include mixins bazate pe sistemul Flavors; Java, desigur; și Trăsături, care acționează ca o extensie la Smalltalk.
Rezumat:
1. clasele abstracte (sau tipurile) declară programele; interfețele sunt tipuri abstracte pe care toate clasele trebuie să le implementeze pentru a le specifica interfața.
2. Tipurile abstracte pot fi semnificative folosind cuvântul cheie explicit; interfețele sunt în mod inerent abstracte, prin urmare nu trebuie să fie semnificative folosind cuvântul cheie (cu excepția cazului în care o anumită clasă implementează o interfață, dar nu pune în aplicare toate metodele sale).