Which OOP principle bundles data and methods that operate on that data within a single unit, restricting direct access from outside?