In [[software engineering]], and [[computer science]],an '''abstraction''' isprovides theaccess processwhile ofhiding [[generalization|generalizing]]details [[abstractthat andotherwise concrete|concrete]]might details,make access more challenging.<ref name=":1">{{Cite journal |last1=Colburn |first1=Timothy |last2=Shute |first2=Gary |date=5 June 2007 |title=Abstraction in Computer Science |journal=Minds and Machines |language=en |volume=17 |issue=2 |pages=169–184 |doi=10.1007/s11023-007-9061-7 |issn=0924-6495 |s2cid=5927969}}</ref> suchIt as [[Attribute (computing)|attributes]], away from the study of [[object (computer science)|objects]] and [[system]]s to focusfocuses attention on details of greater importance.<ref name=":0">{{Cite journal |last1=Kramer |first1=Jeff |date=1 April 2007 |title=Is abstraction the key to computing? |journal=Communications of the ACM |volume=50 |issue=4 |pages=36–42 |doi=10.1145/1232743.1232745 |issn=0001-0782 |s2cid=12481509}}</ref> [[Abstraction]] is a fundamental concept in computer science and [[software engineering]], especially within the [[object-oriented programming]] paradigm.<ref>{{Cite journal |last1=Ben-Ari |first1=Mordechai |date=1 March 1998 |title=Constructivism in computer science education |journal=ACM SIGCSE Bulletin |volume=30 |issue=1 |pages=257, 257–261 |doi=10.1145/274790.274308 |issn=0097-8418 |doi-access=free}}</ref> Examples include the [[abstract data type]] which separates use from the representation of this[[data include:(computer science)|data]]<ref>{{Cite book |last1=Liskov |first1=Barbara |chapter=Keynote address - data abstraction and hierarchy |s2cid=14219043 |date=1 May 1988 |title=Addendum to the proceedings on Object-oriented programming systems, languages and applications (Addendum) - OOPSLA '87 |journal=ACM SIGPLAN Notices |publisher=ACM |volume=23 |pages=17–34 |doi=10.1145/62138.62141 |isbn=0897912667}}</ref> and [[Function (computer programming)|functions]] that form a call tree that is more general at the base and more specific towards the leaves.
* the usage of [[abstract data type]]s to separate usage from working representations of [[data (computer science)|data]] within [[Computer program|programs]];<ref>{{Cite book |last1=Liskov |first1=Barbara |chapter=Keynote address - data abstraction and hierarchy |s2cid=14219043 |date=1 May 1988 |title=Addendum to the proceedings on Object-oriented programming systems, languages and applications (Addendum) - OOPSLA '87 |journal=ACM SIGPLAN Notices |publisher=ACM |volume=23 |pages=17–34 |doi=10.1145/62138.62141 |isbn=0897912667}}</ref>
* the concept of [[Function (computer programming)|functions]] or subroutines which represent a specific way of implementing [[control flow]];
* the process of reorganizing common behavior from groups of non-abstract [[Class (computer programming)|classes]] into abstract classes using [[Inheritance (object-oriented programming)|inheritance]] and [[Inheritance (object-oriented programming)#Subclasses and superclasses|sub-classes]], as seen in [[object-oriented programming]] languages.