Introduction

There are four major properties of Object Oriented Programming (OOPs) as you know. These are,

  1. Abstraction
  2. Encapsulation
  3. Inheritance
  4. Polymorphism

Among these four properties or features, we will discuss the first two (Abstraction and Encapsulation) in this post. It is one of the common interview questions for all level of C# developers irrespective of companies.

Often, we use a bookish example to learn the differences; however, that we forget easily. In this article, we will use a real-life example so that we can remember the difference forever.

Description

So, what actually are Abstraction and Encapsulation? Let us find out with an example.

Abstraction

Abstraction is a process to abstract or hide the functionality and provide users or other programmers to use it only. Like for the method Console.WriteLine(), no one knows what actually is happening behind the function call. We are just using it by calling and passing the arguments. This is the thing called Abstraction.

Encapsulation

Encapsulation means to encapsulate or put everything into one thing and provide others to use it. Like in a shaving kit, all the necessary things are available. And also, these products are available as loose in the market. But the shaving kit encapsulates every other item into a small bag and is provided to a user as a whole.

Difference

Hope you now have a basic idea of both of these properties. Let's see a real-world example of encapsulation and abstraction.

Let's assume you have to create a method to insert users’ data and pass that to other developers to use. First, create a class and add a method to insert the data into database with validation.

There are three fields.

  1. Name
  2. Email
  3. PhoneNo

So, these inputs have to be validated first and then, inserted into the database.

First, create a class with all methods.

  1. // Users class to add new users
  2. public class Users
  3. {
  4. #region Public methods
  5. // Add new user
  6. // Input takes Name & phone number
  7. public bool AddUser(UsersEnity userEntity)
  8. {
  9. var isSuccess = false;
  10. if (ValidateUser(userEntity))
  11. {
  12. if (Save(userEntity) > 0)
  13. {
  14. isSuccess = true;
  15. }
  16. }
  17. return isSuccess;
  18. }
  19. #endregion
  20. #region Private methods
  21. // Validate whether user data is perfect or not
  22. private bool ValidateUser(UsersEnity userEntity)
  23. {
  24. var isValidate = false;
  25. // do your validation for userEntity.Name
  26. // do your validation for userEntity.Email
  27. // do your validation for userEntity.PhoneNo
  28. return isValidate;
  29. }
  30. // add new users to DB
  31. private int Save(UsersEnity userEntity)
  32. {
  33. var rowsAffected = 0;
  34. // write the DB code to insert the data (Linq or ADO.NET)
  35. return rowsAffected;
  36. }
  37. #endregion
  38. }
  39. public class UsersEnity
  40. {
  41. public string Name {get;set;}
  42. public string Email {get;set;}
  43. public string PhoneNo {get;set;}
  44. }

As you can see, there are three methods that are written in this Users class.

Now, another user will just call the AddUser method with parameters. And, that user has no idea what is actually happening inside the method. I didn't write the code to validate and insert into DB, as you can get it from other examples. We will discuss it later.

To call the AddUser method, do as below.

  1. public class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. User objUser = new User();
  6. bool f = objUser.AddUser(new UsersEnity()
  7. {
  8. Name = "XYZ",
  9. Email = "[email protected]",
  10. PhoneNo = "9876543210"
  11. });
  12. }
  13. }

Now, come back to the main discussion.

Here, we are hiding the procedure of adding data into the database from other users. This is Abstraction. And putting all the three methods into one Users class and providing other users to use. It is called Encapsulation.

So, the procedure of hiding is Abstraction and putting every necessary thing into one is Encapsulation.

I hope I have cleared your doubts about the concepts of Encapsulation and Abstraction.