Apstrakcija i enkapsulacija osnovni su objektno orijentirani programiranje (OOP), koji vam omogućuju implementaciju objekata iz stvarnog svijeta u programe i kodove. Dok oboje idu ruku pod ruku, oni se međusobno jako razlikuju. Iako je svaka metoda inkapsulacija, to je i apstrakcija. Jednostavno rečeno, kada sastavljate različite stvari da biste stvorili entitet, zapravo stvarate koncept - sažetak. Iako su oboje tehnički nerazdvojni, oni nemaju doslovno ništa zajedničko. Gotovo je istina da je svaka enkapsulacija apstrakcija, jer obojica nešto kriju, međutim, oni imaju pravičan udio razlika.
Apstrakcija je osnovni OOP koncept koji se usredotočuje na samo relevantne podatke o objektu i skriva sve nebitne detalje koji mogu biti, a ne moraju biti generički ili specijalizirani. Sakriva pozadinske detalje i naglašava ključne točke za smanjenje složenosti i povećanje učinkovitosti. U osnovi, apstrakcija je programski alat za upravljanje složenošću. Apstrakcija se fokusira na ideje, a ne na događaje. Sakriva detalje na razini dizajna pružajući korisnicima funkcionalnost. Rezultirajući objekt također se može nazvati apstrakcijom. Programer osigurava da će imenovani entitet imati sve bitne aspekte i nijedan nebitan.
Uzmimo primjer stvarnog svijeta apstrakcije. Razmotrimo slučaj vozila, što je u ovom slučaju vaše vozilo. Mehaničar pokušava popraviti vaš automobil ili recimo određeni dio vašeg automobila. Evo, vi ste korisnik i ne želite ulaziti u detalje vašeg automobila ili onog dijela koji se zapravo pokvario. Te stvari zapravo ne zanimaju; samo želite da se vaše vozilo vrati u prvobitnom stanju bez brige o detaljima. Dakle, zapravo ste rekli mehaničaru što želite razdvajajući dio za implementaciju. Ovo je apstrakcija. Usredotočili ste se na ono najvažnije, a to je popravljanje vašeg automobila, umjesto da se usredotočite na specifičnosti.
Inkapsulacija je još jedan OOP koncept koji povezuje podatke i funkcije u jednu komponentu, ograničavajući pristup nekim komponentama. To je jedan od glavnih temeljnih koncepata OOP-a koji podatke i informacije spaja u jednu cjelinu. Tehnički gledano, enkapsulacija znači skrivanje atributa kako bi se štitile varijable od vanjskog pristupa kako promjena u jednom dijelu aplikacije neće utjecati na ostale dijelove. Naprotiv, čineći podatke otvorenijim riskirate zlouporabu podataka. Daje osnovni integritet podacima štiteći ih od vanjskog svijeta. Jednostavno rečeno, ona skriva dodatne detalje iz vanjskog svijeta.
Uzmimo primjer Bluetooth miša. Morate znati samo o ponašanju uređaja bez brige o detaljima implementacije poput vrsta senzora koji ima miš, je li bežični ili ne itd. Svaki pojedini detalj opisuje miš, ali bez obzira na pojedinosti, to je samo miš. Trebate samo sučelje za upotrebu miša, što je u ovom slučaju pokazivač miša. Ovo je enkapsulacija.
Iako su oba temeljna koncepta povezana s OOP-om i tehnički su nerazdvojna, još uvijek imaju svoje razlike u mnogim aspektima.
Apstrakcija | ovijanje |
Bavi se samo relevantnim detaljima sakrivanjem nebitnih da bi se smanjila složenost i povećala učinkovitost. | Povezuje podatke i informacije zajedno u jedan entitet radi zaštite podataka od vanjskih izvora. |
Odnosi se na ideju o skrivanju podataka koja nije potrebna u svrhu prezentacije. | Sakriva podatke i kôd da ograniči neželjeni pristup. |
Usredotočuje se na ono što radije nego na kako. | Skriva unutarnju mehaniku kako nešto radi. |
Skriva nepotrebne detalje na razini dizajna. | Također sakriva detalje, ali na razini implementacije. |
Informacije i podaci odvojeni su od relevantnih podataka. | Informacije su skrivene unutar kapsule za bliski pristup. |
Bavi se idejama, a ne događajima. | Ideja je zaštititi podatke iz vanjskog svijeta. |
Provodi se pomoću apstraktne klase i sučelja. | Provodi se pomoću zaštićenih, privatnih i paketno-privatnih modifikatora pristupa. |
Iako su oba koncepta OOP vezana za skrivanje podataka, oni se međusobno prilično razlikuju. Apstrakcija se također odnosi na skrivanje poput enkapsulacije, ali iako prvo sakriva složenost, ono drugo čuva podatke koje enkapsulira kontrolirajući pristup njima. Apstrakcija se odnosi na koncept predstavljanja samo neophodnih značajki sakrivanjem nebitnih detalja kako bi se smanjila složenost aplikacije i na taj način povećala učinkovitost. Inkapsulacija se, s druge strane, odnosi na koncept skrivanja svih unutarnjih mehanika programa kako bi se zaštitile informacije od neželjenog pristupa. Povezuje podatke i informacije u jednu komponentu ograničavajući pristup drugim komponentama.