title: Abstraction in OOPs
body: <p>I have come across few definitions over the years, and have never able to clearly understand what abstraction is.
  I have understood the 3 main concepts of Oops but have had difficulties with this particular concept which is engraved within these other concepts.</p>
  
  <p>Till now i have come to 2 conclusions, but not sure.</p>
  
  <ul>
  <li>It is the ability to hide the implementation details of a method(Behavior), and provide the user with just the interface.</li>
  <li>It is ability to define a method signatures(ie. only to declare them) without actually implementing them.</li>
  </ul>
  
  <p>Which is the correct definition of abstraction with context to Object oriented programming, and if not one of the above, then what is it?</p>
  
  <p>Would appreciate if supporting code is also provided :)</p>