Data Abstraction:
Object Oriented Programming has a special Feature called Data Abstraction. Data abstraction refers to, providing only essential information to the outside world and hiding their background details, i.e, to represent the needed information in program without presenting the details.
Abstraction shows only important things to the user and hides the internal details. For Example: When we using our Laptop, We only know how to use it, but we don't know Exactly how it's work. on another side, when our Laptop is Locked, the user can't see our personal Information on the laptop. so when he will put the password and unlock the window then he'll be able to access the information. so this window password work like Abstraction.
Let's take another real-life example of Data Abstraction to clear the concept. Let's take an example of a Laptop, Which we can Turn on and shutdown, we can use the internet, or watch Movies and listen to the song. We can add external components, like extra keyboard, USB Drive, or Extra Hard disk, We can Increase and decrease the volume while listening music. and most important, we are coding/Programming using our Laptop. But we don't know how exactly the Laptop Works, we don't know it's Internal Phenomenon. we don't know how it connects us to the Internet using wifi or DSL. And you don't know how you actually access infobrother through just Cable or wifi. This is all about Data Abstraction. Laptop Abstract it's Internal Information form user.
In our Array Tutorial we used Sort() Function. (Check Example here... ) Without Knowing what algorithm the function actually uses to sort the given values. In fact, the Underlying implementation of the sorting functionality could change between releases of the library, and as long as the interface stays the same, our function call will still work.
Data Abstraction in C++:
In C++, Classes provides great level of Data Abstraction. They provide Sufficient public methods to the outside world to play with the functionality of the object and to manipulate object data, i.e. state without actually knowing how class has been implemented internally.
In C++, we use classes to define our own abstract data types (ADT). we can use the cout object of class Ostream to stream data to standard output like this:
#include<iostream>
using namespace std;
main()
{
cout<<" Info Brother !"<<endl;
return 0;
}
Here, we don't need to understand how cout displays the text on the user's screen. We need to know only the public interface and the underlying Implementation of cout is free to change.
Access Labels Enforce Abstraction:
In C++, We use access labels to define the abstract interface to the class. A Class may contain zero or more access labels:
There are no restrictions on how often an access label may appear. Each access label specifies the access level of the succeeding member definitions. The specified access level remains in effect until the next access label is encountered or the closing right brace of the class body is seen.
“
Abstraction separates code into interface and implementation. So while designing your component, you must keep interface independent of the implementation so that if you change underlying implementation then interface would remain intact. In this case whatever programs are using these interfaces, they would not be impacted and would just need a recompilation with the latest implementation.
Let's take an example to show, how abstraction work. and how we can use abstraction concept to hide our data from outside the class.
/* Data Abstraction: Example. InfoBrother*/
#include<iostream>
using namespace std;
class hide //simple class.
{
private: //private member. (abstraction)
int x, y;
public: //public member.
hide() //constructor.
{
x=10;
y=20;
}
void show() //simple function to display values.
{
cout<<" The value of x is: "<<x<<endl;
cout<<" The value of y is: "<<y;
}
};
main()
{
hide obj; //object creation of type hide.
obj.show(); //public member called using object.
return 0;
}
Data Abstraction
The value of x is: 10
The value of y is: 20
The first Occurrence of the keyword Public or Private / Protected before a member data or a member function makes the compiler assume the type of accesses of all the members following this to be of the first occurrence type. however, if the types of access of member data and member function are different, then the access type should be explicitly mentioned in each case.
Let's remove the Public keyword from above example and check how the program work.
/* Data Abstraction: Example. InfoBrother*/
#include<iostream>
using namespace std;
class hide //simple class.
{
private: //private member. (abstraction)
int x, y;
hide() //constructor.
{
x=10;
y=20;
}
void show() //simple function to display values.
{
cout<<" The value of x is: "<<x<<endl;
cout<<" The value of y is: "<<y;
}
};
main()
{
hide obj; //object creation of type hide.
obj.show(); //public member called using object.
return 0;
}
While Compiling the code, following Errors Occur.
infobrother.cpp In function 'int main()':
infobrother.cpp [Error] 'hide::hide()' is private
infobrother.cpp [Error] 'void hide::show()' is private
Oops !! after removing the Keyword Public , we got some errors while execution of program. Because in example, we was trying to access Private members of class from outside the class. as we can't access any private member or function of class from outside. so this error occur and our program didn't execute.