Encapsulation is hiding piece of functionality and making it unavailable to the rest of the code base.
Encapsulation is used to restrict direct access to the states of an object.
To access and modify the state of an object, publicly accessible methods (generally getter and setter methods) are provided.
class Customer
def initialize(id, n, addr)
@id = id
@name = n
@address = addr
end
def display_details
puts "Customer id: #{id}"
puts "Customer name: #{name}"
puts "Customer address: #{address}"
end
private
attr_reader :id, :name, :address
end
josh = Customer.new('0001', 'Josh', '26 ave Grand Marnier')
josh.display_details
In the example above, the states of the object josh
instantiated from Customer
class are private, i.e., cannot be accessed directly. However, the object has one behavior publicly available: instance method display_details
.
Advantages of Encapsulation
- Data Hiding: from outside, the implementation of the class is hidden and code only interacts with setter/getter methods.
- Reusability: as long as the public interfaces are still public, the implementation is of no concern and therfore, the reusability is improved.
- Testing: encapsulated codes are easy to test with unit testing.