U objektno orijentiranom programiranju, enkapsulacija ili čahurenje označava grupisanje podataka sa metodama koje radi s tim podacima, ili restrikciju direktnog pristupa nekim komponentama objekta.[1] Enkapsulacija se koristi za skrivanje vrijednosti ili stanja struktuiranog podatkovnog objekta unutar klase, sprečavajući direktan pristup njima od strane klijenta u smislu otkrivanja detalja skrivene implementacije ili narušavanja stanja nepromjenjivosti koju održavaju druge metode.
Javno dostupne metode se generalno daju u klasi za pristup ili izmjenu stanja na apstraktniji način. U praksi se ponekad zadaju tzv. getteri i setteri za pristup vrijednostima indirektno, ali, iako ne neophodno krše apstraktnu enkapsulaciju, često se smatraju putokazom potencijalno slabe dizajnerske prakse u objektno orijentiranom programiranju[2] (antiobrazac).
Ovaj mehanizam nije unikatan samo za OOP. Implementacije apstraktnih tipova podataka, npr. modula, nudi sličan oblik enkapsulacije. Sličnost je objašnjena od teoretičara programskih jezika u terminima egzistencijalnih tipova.[3]
Reference