Object Oriented Programming

General C#

Interview Questions

What is Encapsulation

Encapsulation is considered as the first pillar of Object Oriented Programming(OOP).

Encapsulation is the process of hiding complexities of an object from its consumers.Encapsulation
hides all the secrets of an object as well as implementation details.

The object exposes its capabilities through an interface to the consumer. How exactly the object
implement those capabilities are not the business of consumers. Consider the example of a an automobile.
A driver can control the direction of the car using the steering wheel. Control the speed with gas pedal and
gears unless its automatic. And most importantly stop the car using the break. Gas pedal, steering wheel,
gear stick and brakes are the interface. How they function is encapsulated from the driver.Look at
the CarEngine class below.

The consumer of the CarEngine, which is a car, would use only Start() and Stop() methods. All others methods
and the internal implementation are not the concern of the consumer here. Please note that encapsulation does
not mean that you cannot see the private methods. You can see the code. But when an object is created out of
this class, it can access only public methods.

For example in C#

Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());

will spawn two threads and execute the function DoSomeWork. Parallel class encapsulate all the details
of how threads are implemented, how thread pools are implemented etc fro you.

So how does it help?

Encapsulation helps to implement objects which got independent, specilized and fine grained
responsibility. You can design your software anyway you want to. There is more than one way to
skin a cat. If you follow OOP, you can design code which is scalable, maintainable and extensible.
OOP is discipline which will help you do that. Encapsulation is a big part of that discipline which works
in hand with another concept call abstraction helps to design better software.

Encapsulation may be mistaken for abstraction. But they are two different vital concepts. Abstraction is the observable behavior of an object. Encapsulation is about implementing that behavior.

So in the above example, the observable behaviors are Start and Stop. We encapsulated all other stuff with proper access specifiers.