Abstrakcija in enkapsulacija sta osnovna pojma objektno usmerjeno programiranje (OOP), ki vam omogočata, da v programe in kode implementirate predmete iz resničnega sveta. Medtem ko gresta oba z roko v roki, se med seboj zelo razlikujeta. Medtem ko je vsaka metoda enkapsulacija, je to tudi abstrakcija. Preprosto povedano, ko sestavite različne stvari, da ustvarite entiteto, dejansko ustvarite koncept - povzetek. Čeprav sta oba tehnično nerazdružljiva, nista dobesedno nič skupnega. Skoraj res je, da je vsaka kapsulacija abstrakcija, ker oba nekaj skrivata, vendar imata svoj pravičen delež razlik.
Abstrakcija je osnovni koncept OOP, ki se osredotoča na samo ustrezne podatke predmeta in skriva vse nepomembne podrobnosti, ki so lahko ali ne za splošno ali specializirano vedenje. Skriva podrobnosti o ozadju in poudarja bistvene točke za zmanjšanje zahtevnosti in povečanje učinkovitosti. V bistvu je abstrakcija programsko orodje za upravljanje kompleksnosti. Abstrakcija se osredotoča na ideje in ne na dogodke. Skriva podrobnosti na ravni zasnove, tako da uporabnikom zagotavlja funkcionalnost. Nastali objekt lahko imenujemo tudi abstrakcija. Programer zagotavlja, da bo imenovani subjekt vključil vse bistvene vidike in nobenega od nepomembnih.
Vzemimo primer resničnega primera abstrakcije. Razmislimo o primeru vozila, ki je v tem primeru vaše vozilo. Mehanik poskuša popraviti vaš avto ali recimo določen del vašega avtomobila. Tu ste uporabnik in nočete vnesti se v podrobnosti vašega avtomobila ali na kakšen del. Te stvari dejansko ne zanimajo; preprosto želite, da se vaše vozilo vrne v prvotnem stanju, ne da bi vas skrbelo za podrobnosti. Torej, mehaniku ste dejansko povedali, kaj želite, tako da ločite izvedbeni del. To je abstrakcija. Osredotočili ste se na najpomembnejše, kar je popravljanje vašega avtomobila, namesto da bi se osredotočali na posebnosti.
Inkapsulacija je še en koncept OOP, ki povezuje podatke in funkcije v eno komponento, hkrati pa omeji dostop do nekaterih komponent. To je eden glavnih temeljnih konceptov OOP, ki podatke in informacije zajema pod eno enoto. Tehnično gledano enkapsulacija pomeni skrivanje atributov za zaščito spremenljivk pred zunanjim dostopom, tako da sprememba v enem delu aplikacije ne bo vplivala na druge dele. Nasprotno, če naredite podatke bolj odprte, tvegate zlorabo podatkov. Podatkom zagotavlja osnovno celovitost tako, da jih ščiti pred zunanjim svetom. Preprosto povedano, skriva dodatne podrobnosti iz zunanjega sveta.
Vzemimo primer Bluetooth miške. Vedeti morate le o obnašanju naprave, ne da bi skrbeli za podrobnosti o izvedbi, na primer, katere senzorje ima miška, ali je brezžična ali ne itd. Vsaka posamezna podrobnost opisuje miško, ne glede na podrobnosti pa je le miška. Za uporabo miške potrebujete samo vmesnik, ki je v tem primeru kazalec miške. To je kapsulacija.
Čeprav sta oba temeljna pojma, povezana z OOP, in sta tehnično nerazdružljiva, se v številnih vidikih še vedno razlikujeta.
Abstrakcija | Kapsulacija |
Obravnava le ustrezne podrobnosti tako, da skrije nepomembne, da zmanjša kompleksnost in s tem poveča učinkovitost. | Podatke in informacije veže v eno celoto, da podatke zaščiti pred zunanjimi viri. |
Nanaša se na idejo o skrivanju podatkov, ki za predstavitev niso potrebni. | Skriva podatke in kodo, da omeji neželen dostop. |
Osredotoča se na to, kaj namesto kako. | Skriva notranjo mehaniko, kako nekaj naredi. |
Skriva nepotrebne podrobnosti na ravni oblikovanja. | Skriva tudi podrobnosti, vendar na ravni izvajanja. |
Informacije in podatki so ločeni od ustreznih podatkov. | Informacije so skrite znotraj kapsule za tesnejši dostop. |
Ukvarja se z idejami in ne z dogodki. | Ideja je zaščititi podatke pred zunanjim svetom. |
Izvaja se z uporabo abstraktnega razreda in vmesnika. | Izvaja se z zaščitenimi, zasebnimi in paketno-zasebnimi modifikatorji dostopa. |
Medtem ko sta oba koncepta OOP, povezana s skrivanjem podatkov, se med seboj precej razlikujeta. Abstrakcija se nanaša tudi na skrivanje podobne kapsulacije, vendar čeprav prvi skriva kompleksnost, drugi hrani podatke, ki jih zajema, z nadzorom dostopa do njih. Abstrakcija se nanaša na koncept predstavljanja samo potrebnih lastnosti s skrivanjem nepomembnih podrobnosti, da se zmanjša kompleksnost aplikacije in s tem poveča učinkovitost. Po drugi strani pa se enkapsulacija nanaša na koncept skrivanja vseh notranjih mehanizmov programa, da se informacije zaščitijo pred neželenim dostopom. Podatke in informacije veže v eno komponento, tako da omeji dostop do drugih komponent.