A. Wrapping data fields with methods
B. Hiding data and internal methods using access modifiers in a class
C. Using Interfaces
D. All of the above