CINXE.COM
Abstraction (computer science) - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Abstraction (computer science) - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"40d3581b-b206-4f00-98d0-67b568be671b","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Abstraction_(computer_science)","wgTitle":"Abstraction (computer science)","wgCurRevisionId":1280024525,"wgRevisionId":1280024525,"wgArticleId":60491,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description matches Wikidata","Wikipedia pending changes protected pages","Use dmy dates from December 2019","Articles with example Java code","Articles with example Pascal code","Data management","Abstraction","Software engineering","Object-oriented programming"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Abstraction_(computer_science)","wgRelevantArticleId":60491,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgStableRevisionId":1280024525,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":30000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q224055","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false}; RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.flaggedRevs.advanced","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.flaggedRevs.basic%7Cext.pygments%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.20"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Abstraction (computer science) - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Abstraction_(computer_science)"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Abstraction_(computer_science)&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Abstraction_(computer_science)"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Abstraction_computer_science rootpage-Abstraction_computer_science skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" title="Main menu" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages"><span>Special pages</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Abstraction+%28computer+science%29" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Abstraction+%28computer+science%29" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Abstraction+%28computer+science%29" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Abstraction+%28computer+science%29" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Rationale" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Rationale"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Rationale</span> </div> </a> <ul id="toc-Rationale-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Abstraction_features" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Abstraction_features"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Abstraction features</span> </div> </a> <button aria-controls="toc-Abstraction_features-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Abstraction features subsection</span> </button> <ul id="toc-Abstraction_features-sublist" class="vector-toc-list"> <li id="toc-Programming_languages" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Programming_languages"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Programming languages</span> </div> </a> <ul id="toc-Programming_languages-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Specification_methods" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Specification_methods"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Specification methods</span> </div> </a> <ul id="toc-Specification_methods-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Specification_languages" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Specification_languages"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Specification languages</span> </div> </a> <ul id="toc-Specification_languages-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Control_abstraction" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Control_abstraction"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Control abstraction</span> </div> </a> <button aria-controls="toc-Control_abstraction-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Control abstraction subsection</span> </button> <ul id="toc-Control_abstraction-sublist" class="vector-toc-list"> <li id="toc-Structured_programming" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Structured_programming"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Structured programming</span> </div> </a> <ul id="toc-Structured_programming-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Data_abstraction" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Data_abstraction"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Data abstraction</span> </div> </a> <ul id="toc-Data_abstraction-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Manual_data_abstraction" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Manual_data_abstraction"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Manual data abstraction</span> </div> </a> <ul id="toc-Manual_data_abstraction-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Abstraction_in_object_oriented_programming" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Abstraction_in_object_oriented_programming"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Abstraction in object oriented programming</span> </div> </a> <button aria-controls="toc-Abstraction_in_object_oriented_programming-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Abstraction in object oriented programming subsection</span> </button> <ul id="toc-Abstraction_in_object_oriented_programming-sublist" class="vector-toc-list"> <li id="toc-Object-oriented_design" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Object-oriented_design"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.1</span> <span>Object-oriented design</span> </div> </a> <ul id="toc-Object-oriented_design-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Considerations" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Considerations"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Considerations</span> </div> </a> <ul id="toc-Considerations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Levels_of_abstraction" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Levels_of_abstraction"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Levels of abstraction</span> </div> </a> <button aria-controls="toc-Levels_of_abstraction-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Levels of abstraction subsection</span> </button> <ul id="toc-Levels_of_abstraction-sublist" class="vector-toc-list"> <li id="toc-Database_systems" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Database_systems"> <div class="vector-toc-text"> <span class="vector-toc-numb">8.1</span> <span>Database systems</span> </div> </a> <ul id="toc-Database_systems-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Layered_architecture" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Layered_architecture"> <div class="vector-toc-text"> <span class="vector-toc-numb">8.2</span> <span>Layered architecture</span> </div> </a> <ul id="toc-Layered_architecture-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Further_reading" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Further_reading"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Further reading</span> </div> </a> <ul id="toc-Further_reading-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" title="Table of Contents" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Abstraction (computer science)</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 32 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-32" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">32 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-af mw-list-item"><a href="https://af.wikipedia.org/wiki/Abstraksie_(rekenaarwetenskap)" title="Abstraksie (rekenaarwetenskap) – Afrikaans" lang="af" hreflang="af" data-title="Abstraksie (rekenaarwetenskap)" data-language-autonym="Afrikaans" data-language-local-name="Afrikaans" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%AA%D8%AC%D8%B1%D9%8A%D8%AF_(%D8%AD%D8%A7%D8%B3%D9%88%D8%A8)" title="تجريد (حاسوب) – Arabic" lang="ar" hreflang="ar" data-title="تجريد (حاسوب)" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%AC%E0%A6%BF%E0%A6%AE%E0%A7%82%E0%A6%B0%E0%A7%8D%E0%A6%A4%E0%A6%A8_(%E0%A6%95%E0%A6%AE%E0%A7%8D%E0%A6%AA%E0%A6%BF%E0%A6%89%E0%A6%9F%E0%A6%BE%E0%A6%B0_%E0%A6%AC%E0%A6%BF%E0%A6%9C%E0%A7%8D%E0%A6%9E%E0%A6%BE%E0%A6%A8)" title="বিমূর্তন (কম্পিউটার বিজ্ঞান) – Bangla" lang="bn" hreflang="bn" data-title="বিমূর্তন (কম্পিউটার বিজ্ঞান)" data-language-autonym="বাংলা" data-language-local-name="Bangla" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D1%8F_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8E%D1%82%D1%8A%D1%80%D0%BD%D0%B8_%D0%BD%D0%B0%D1%83%D0%BA%D0%B8)" title="Абстракция (компютърни науки) – Bulgarian" lang="bg" hreflang="bg" data-title="Абстракция (компютърни науки)" data-language-autonym="Български" data-language-local-name="Bulgarian" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Apstrakcija_(ra%C4%8Dunarstvo)" title="Apstrakcija (računarstvo) – Bosnian" lang="bs" hreflang="bs" data-title="Apstrakcija (računarstvo)" data-language-autonym="Bosanski" data-language-local-name="Bosnian" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Abstracci%C3%B3_(inform%C3%A0tica)" title="Abstracció (informàtica) – Catalan" lang="ca" hreflang="ca" data-title="Abstracció (informàtica)" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Abstraktion_(datalogi)" title="Abstraktion (datalogi) – Danish" lang="da" hreflang="da" data-title="Abstraktion (datalogi)" data-language-autonym="Dansk" data-language-local-name="Danish" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Abstraktion_(Informatik)" title="Abstraktion (Informatik) – German" lang="de" hreflang="de" data-title="Abstraktion (Informatik)" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Abstracci%C3%B3n_(inform%C3%A1tica)" title="Abstracción (informática) – Spanish" lang="es" hreflang="es" data-title="Abstracción (informática)" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A7%D9%86%D8%AA%D8%B2%D8%A7%D8%B9_(%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87)" title="انتزاع (رایانه) – Persian" lang="fa" hreflang="fa" data-title="انتزاع (رایانه)" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Abstraction_(informatique)" title="Abstraction (informatique) – French" lang="fr" hreflang="fr" data-title="Abstraction (informatique)" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81%ED%99%94_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)" title="추상화 (컴퓨터 과학) – Korean" lang="ko" hreflang="ko" data-title="추상화 (컴퓨터 과학)" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-io mw-list-item"><a href="https://io.wikipedia.org/wiki/Abstraktajo_(informatiko)" title="Abstraktajo (informatiko) – Ido" lang="io" hreflang="io" data-title="Abstraktajo (informatiko)" data-language-autonym="Ido" data-language-local-name="Ido" class="interlanguage-link-target"><span>Ido</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Abstraksi_(ilmu_komputer)" title="Abstraksi (ilmu komputer) – Indonesian" lang="id" hreflang="id" data-title="Abstraksi (ilmu komputer)" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Astrazione_(informatica)" title="Astrazione (informatica) – Italian" lang="it" hreflang="it" data-title="Astrazione (informatica)" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/%D7%90%D7%91%D7%A1%D7%98%D7%A8%D7%A7%D7%A6%D7%99%D7%94_(%D7%9E%D7%93%D7%A2%D7%99_%D7%94%D7%9E%D7%97%D7%A9%D7%91)" title="אבסטרקציה (מדעי המחשב) – Hebrew" lang="he" hreflang="he" data-title="אבסטרקציה (מדעי המחשב)" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Absztrakci%C3%B3_(sz%C3%A1m%C3%ADt%C3%A1stechnika)" title="Absztrakció (számítástechnika) – Hungarian" lang="hu" hreflang="hu" data-title="Absztrakció (számítástechnika)" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Peniskalaan_(sains_komputer)" title="Peniskalaan (sains komputer) – Malay" lang="ms" hreflang="ms" data-title="Peniskalaan (sains komputer)" data-language-autonym="Bahasa Melayu" data-language-local-name="Malay" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E5%8C%96_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6)" title="抽象化 (計算機科学) – Japanese" lang="ja" hreflang="ja" data-title="抽象化 (計算機科学)" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Abstrakcja_(programowanie)" title="Abstrakcja (programowanie) – Polish" lang="pl" hreflang="pl" data-title="Abstrakcja (programowanie)" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Abstra%C3%A7%C3%A3o_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)" title="Abstração (ciência da computação) – Portuguese" lang="pt" hreflang="pt" data-title="Abstração (ciência da computação)" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D1%8F_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)" title="Абстракция (информатика) – Russian" lang="ru" hreflang="ru" data-title="Абстракция (информатика)" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%D9%85%DB%95%D8%B9%D9%86%DB%95%D9%88%DB%8C%DA%A9%D8%B1%D8%AF%D9%86_(%D8%B2%D8%A7%D9%86%D8%B3%D8%AA%DB%8C_%DA%A9%DB%86%D9%85%D9%BE%DB%8C%D9%88%D8%AA%DB%95%D8%B1)" title="مەعنەویکردن (زانستی کۆمپیوتەر) – Central Kurdish" lang="ckb" hreflang="ckb" data-title="مەعنەویکردن (زانستی کۆمپیوتەر)" data-language-autonym="کوردی" data-language-local-name="Central Kurdish" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%90%D0%BF%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D1%98%D0%B0_(%D0%BE%D0%B1%D1%98%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D1%98%D0%B5%D0%BD%D1%82%D0%B8%D1%81%D0%B0%D0%BD%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D1%9A%D0%B5)" title="Апстракција (објектно-оријентисано програмирање) – Serbian" lang="sr" hreflang="sr" data-title="Апстракција (објектно-оријентисано програмирање)" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Kompjuterska_apstrakcija" title="Kompjuterska apstrakcija – Serbo-Croatian" lang="sh" hreflang="sh" data-title="Kompjuterska apstrakcija" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="Serbo-Croatian" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Abstraktio_(tietojenk%C3%A4sittelytiede)" title="Abstraktio (tietojenkäsittelytiede) – Finnish" lang="fi" hreflang="fi" data-title="Abstraktio (tietojenkäsittelytiede)" data-language-autonym="Suomi" data-language-local-name="Finnish" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Soyutlama_(bilgisayar_bilimi)" title="Soyutlama (bilgisayar bilimi) – Turkish" lang="tr" hreflang="tr" data-title="Soyutlama (bilgisayar bilimi)" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%B3%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F)" title="Абстрагування (програмування) – Ukrainian" lang="uk" hreflang="uk" data-title="Абстрагування (програмування)" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wikipedia.org/wiki/%D8%AA%D8%AC%D8%B1%DB%8C%D8%AF_(%DA%A9%D9%85%D9%BE%DB%8C%D9%88%D9%B9%D8%B1_%D8%B3%D8%A7%D8%A6%D9%86%D8%B3)" title="تجرید (کمپیوٹر سائنس) – Urdu" lang="ur" hreflang="ur" data-title="تجرید (کمپیوٹر سائنس)" data-language-autonym="اردو" data-language-local-name="Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Tr%E1%BB%ABu_t%C6%B0%E1%BB%A3ng_(c%C3%B4ng_ngh%E1%BB%87_ph%E1%BA%A7n_m%E1%BB%81m)" title="Trừu tượng (công nghệ phần mềm) – Vietnamese" lang="vi" hreflang="vi" data-title="Trừu tượng (công nghệ phần mềm)" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E5%8C%96_(%E9%9B%BB%E8%85%A6%E7%A7%91%E5%AD%B8)" title="抽象化 (電腦科學) – Cantonese" lang="yue" hreflang="yue" data-title="抽象化 (電腦科學)" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E5%8C%96_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8)" title="抽象化 (計算機科學) – Chinese" lang="zh" hreflang="zh" data-title="抽象化 (計算機科學)" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q224055#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Abstraction_(computer_science)" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Abstraction_(computer_science)" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Abstraction_(computer_science)"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Abstraction_(computer_science)&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Abstraction_(computer_science)"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Abstraction_(computer_science)&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Abstraction_(computer_science)" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Abstraction_(computer_science)" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Abstraction_(computer_science)&oldid=1280024525" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Abstraction_(computer_science)&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Abstraction_%28computer_science%29&id=1280024525&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAbstraction_%28computer_science%29"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAbstraction_%28computer_science%29"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Abstraction_%28computer_science%29&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Abstraction_(computer_science)&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q224055" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> <div id="mw-indicator-indicator-fr-review-status" class="mw-indicator"><indicator name="fr-review-status" class="mw-fr-review-status-indicator" id="mw-fr-revision-toggle"><span class="cdx-fr-css-icon-review--status--stable"></span><b>Checked</b></indicator></div> <div id="mw-indicator-pp-autoreview" class="mw-indicator"><div class="mw-parser-output"><span typeof="mw:File"><a href="/wiki/Wikipedia:Protection_policy#pending" title="All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users"><img alt="Page protected with pending changes" src="//upload.wikimedia.org/wikipedia/en/thumb/b/b7/Pending-protection-shackle.svg/20px-Pending-protection-shackle.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/b/b7/Pending-protection-shackle.svg/30px-Pending-protection-shackle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/b/b7/Pending-protection-shackle.svg/40px-Pending-protection-shackle.svg.png 2x" data-file-width="512" data-file-height="512" /></a></span></div></div> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"><div id="mw-fr-revision-messages"><div id="mw-fr-revision-details" class="mw-fr-revision-details-dialog" style="display:none;"><div tabindex="0"></div><div class="cdx-dialog cdx-dialog--horizontal-actions"><header class="cdx-dialog__header cdx-dialog__header--default"><div class="cdx-dialog__header__title-group"><h2 class="cdx-dialog__header__title">Page version status</h2><p class="cdx-dialog__header__subtitle">This is an accepted version of this page</p></div><button class="cdx-button cdx-button--action-default cdx-button--weight-quiet 							cdx-button--size-medium cdx-button--icon-only cdx-dialog__header__close-button" aria-label="Close" onclick="document.getElementById("mw-fr-revision-details").style.display = "none";" type="submit"><span class="cdx-icon cdx-icon--medium 							cdx-fr-css-icon--close"></span></button></header><div class="cdx-dialog__body">This is the <a href="/wiki/Wikipedia:Pending_changes" title="Wikipedia:Pending changes">latest accepted revision</a>, <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Special:Log&type=review&page=Abstraction_(computer_science)">reviewed</a> on <i>12 March 2025</i>.</div></div><div tabindex="0"></div></div></div></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Technique for arranging complexity of computer systems</div> <p class="mw-empty-elt"> </p><p>In <a href="/wiki/Software_engineering" title="Software engineering">software engineering</a> and <a href="/wiki/Computer_science" title="Computer science">computer science</a>, <b>abstraction</b> is the process of <a href="/wiki/Generalization" title="Generalization">generalizing</a> <a href="/wiki/Abstract_and_concrete" title="Abstract and concrete">concrete</a> details,<sup id="cite_ref-:1_1-0" class="reference"><a href="#cite_note-:1-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> such as <a href="/wiki/Attribute_(computing)" title="Attribute (computing)">attributes</a>, away from the study of <a href="/wiki/Object_(computer_science)" title="Object (computer science)">objects</a> and <a href="/wiki/System" title="System">systems</a> to focus attention on details of greater importance.<sup id="cite_ref-:0_2-0" class="reference"><a href="#cite_note-:0-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Abstraction" title="Abstraction">Abstraction</a> is a fundamental concept in computer science and <a href="/wiki/Software_engineering" title="Software engineering">software engineering</a>, especially within the <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a> paradigm.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Examples of this include: </p> <ul><li>the usage of <a href="/wiki/Abstract_data_type" title="Abstract data type">abstract data types</a> to separate usage from working representations of <a href="/wiki/Data_(computer_science)" title="Data (computer science)">data</a> within <a href="/wiki/Computer_program" title="Computer program">programs</a>;<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></li> <li>the concept of <a href="/wiki/Function_(computer_programming)" title="Function (computer programming)">functions</a> or subroutines which represent a specific way of implementing <a href="/wiki/Control_flow" title="Control flow">control flow</a>;</li> <li>the process of reorganizing common behavior from groups of non-abstract <a href="/wiki/Class_(computer_programming)" title="Class (computer programming)">classes</a> into abstract classes using <a href="/wiki/Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inheritance</a> and <a href="/wiki/Inheritance_(object-oriented_programming)#Subclasses_and_superclasses" title="Inheritance (object-oriented programming)">sub-classes</a>, as seen in <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a> languages.</li></ul> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Rationale">Rationale</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=1" title="Edit section: Rationale"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1224211176">.mw-parser-output .quotebox{background-color:#F9F9F9;border:1px solid #aaa;box-sizing:border-box;padding:10px;font-size:88%;max-width:100%}.mw-parser-output .quotebox.floatleft{margin:.5em 1.4em .8em 0}.mw-parser-output .quotebox.floatright{margin:.5em 0 .8em 1.4em}.mw-parser-output .quotebox.centered{overflow:hidden;position:relative;margin:.5em auto .8em auto}.mw-parser-output .quotebox.floatleft span,.mw-parser-output .quotebox.floatright span{font-style:inherit}.mw-parser-output .quotebox>blockquote{margin:0;padding:0;border-left:0;font-family:inherit;font-size:inherit}.mw-parser-output .quotebox-title{text-align:center;font-size:110%;font-weight:bold}.mw-parser-output .quotebox-quote>:first-child{margin-top:0}.mw-parser-output .quotebox-quote:last-child>:last-child{margin-bottom:0}.mw-parser-output .quotebox-quote.quoted:before{font-family:"Times New Roman",serif;font-weight:bold;font-size:large;color:gray;content:" “ ";vertical-align:-45%;line-height:0}.mw-parser-output .quotebox-quote.quoted:after{font-family:"Times New Roman",serif;font-weight:bold;font-size:large;color:gray;content:" ” ";line-height:0}.mw-parser-output .quotebox .left-aligned{text-align:left}.mw-parser-output .quotebox .right-aligned{text-align:right}.mw-parser-output .quotebox .center-aligned{text-align:center}.mw-parser-output .quotebox .quote-title,.mw-parser-output .quotebox .quotebox-quote{display:block}.mw-parser-output .quotebox cite{display:block;font-style:normal}@media screen and (max-width:640px){.mw-parser-output .quotebox{width:100%!important;margin:0 0 .8em!important;float:none!important}}</style><div class="quotebox pullquote floatright" style="width:25%; ;"> <blockquote class="quotebox-quote left-aligned" style=""> <p>The essence of abstraction is preserving information that is relevant in a given context, and forgetting information that is irrelevant in that context. </p> </blockquote> <div style="padding-bottom: 0; padding-top: 0.5em"><cite class="left-aligned" style="">– <a href="/wiki/John_Guttag" title="John Guttag">John V. Guttag</a><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup></cite></div> </div> <p>Computing mostly operates independently of the concrete world. The hardware implements a <a href="/wiki/Model_of_computation" title="Model of computation">model of computation</a> that is interchangeable with others.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> The software is structured in <a href="/wiki/Software_architecture" title="Software architecture">architectures</a> to enable humans to create the enormous systems by concentrating on a few issues at a time. These architectures are made of specific choices of abstractions. <a href="/wiki/Greenspun%27s_tenth_rule" title="Greenspun's tenth rule">Greenspun's tenth rule</a> is an <a href="/wiki/Aphorism" title="Aphorism">aphorism</a> on how such an architecture is both inevitable and complex. </p><p>Language abstraction is a central form of abstraction in computing: new artificial languages are developed to express specific aspects of a system. <i><a href="/wiki/Modeling_languages" class="mw-redirect" title="Modeling languages">Modeling languages</a></i> help in planning. <i><a href="/wiki/Computer_language" title="Computer language">Computer languages</a></i> can be processed with a computer. An example of this abstraction process is the generational development of <a href="/wiki/Programming_language" title="Programming language">programming language</a> from the <a href="/wiki/First-generation_programming_language" title="First-generation programming language">first-generation programming language</a> (<a href="/wiki/Machine_language" class="mw-redirect" title="Machine language">machine language</a>) to the <a href="/wiki/Second-generation_programming_language" title="Second-generation programming language">second-generation programming language</a> (<a href="/wiki/Assembly_language" title="Assembly language">assembly language</a>) and the <a href="/wiki/Third-generation_programming_language" title="Third-generation programming language">third-generation programming language</a> (<a href="/wiki/High-level_programming_language" title="High-level programming language">high-level programming language</a>). Each stage can be used as a stepping stone for the next stage. The language abstraction continues for example in <a href="/wiki/Scripting_language" title="Scripting language">scripting languages</a> and <a href="/wiki/Domain-specific_language" title="Domain-specific language">domain-specific languages</a>. </p><p>Within a programming language, some features let the programmer create new abstractions. These include <a href="/wiki/Subroutine" class="mw-redirect" title="Subroutine">subroutines</a>, <a href="/wiki/Modular_programming" title="Modular programming">modules</a>, <a href="/wiki/Polymorphism_(computer_science)" title="Polymorphism (computer science)">polymorphism</a>, and <a href="/wiki/Software_component" title="Software component">software components</a>. Some other abstractions such as <a href="/wiki/Software_design_pattern" title="Software design pattern">software design patterns</a> and <a href="/wiki/Software_architecture#Architectural_styles_and_patterns" title="Software architecture">architectural styles</a> remain invisible to a <a href="/wiki/Translator_(computing)" title="Translator (computing)">translator</a> and operate only in the design of a system. </p><p>Some abstractions try to limit the range of concepts a programmer needs to be aware of, by completely hiding the abstractions they are built on. The software engineer and writer <a href="/wiki/Joel_Spolsky" title="Joel Spolsky">Joel Spolsky</a> has criticized these efforts by claiming that all abstractions are <i><a href="/wiki/Leaky_abstraction" title="Leaky abstraction">leaky</a></i> – that they can never completely hide the details below;<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> however, this does not negate the usefulness of abstraction. </p><p>Some abstractions are designed to inter-operate with other abstractions – for example, a programming language may contain a <a href="/wiki/Foreign_function_interface" title="Foreign function interface">foreign function interface</a> for making calls to the lower-level language. </p> <div class="mw-heading mw-heading2"><h2 id="Abstraction_features">Abstraction features</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=2" title="Edit section: Abstraction features"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Programming_languages">Programming languages</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=3" title="Edit section: Programming languages"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Programming_language" title="Programming language">Programming language</a></div> <p>Different programming languages provide different types of abstraction, depending on the intended applications for the language. For example: </p> <ul><li>In <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a> languages such as <a href="/wiki/C%2B%2B" title="C++">C++</a>, <a href="/wiki/Object_Pascal" title="Object Pascal">Object Pascal</a>, or <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>, the concept of <i>abstraction</i> has become a declarative statement – using the <a href="/wiki/Syntax_(programming_languages)" title="Syntax (programming languages)">syntax</a> <code><i>function</i>(<i>parameters</i>) = 0;</code> (in <a href="/wiki/C%2B%2B" title="C++">C++</a>) or the <a href="/wiki/Reserved_word" title="Reserved word">reserved words</a> (keywords) <i><code>abstract</code></i><sup id="cite_ref-Oracle_Java_abstract_8-0" class="reference"><a href="#cite_note-Oracle_Java_abstract-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> and <i><code>interface</code></i><sup id="cite_ref-Oracle_Java_interface_9-0" class="reference"><a href="#cite_note-Oracle_Java_interface-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> (in <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>). After such a declaration, it is the responsibility of the programmer to implement a <a href="/wiki/Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a> to instantiate the <a href="/wiki/Object_(computer_science)" title="Object (computer science)">object</a> of the declaration.</li> <li><a href="/wiki/Functional_programming" title="Functional programming">Functional programming</a> languages commonly exhibit abstractions related to functions, such as <a href="/wiki/Lambda_abstraction" class="mw-redirect" title="Lambda abstraction">lambda abstractions</a> (making a term into a function of some variable) and <a href="/wiki/Higher-order_function" title="Higher-order function">higher-order functions</a> (parameters are functions).<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li> <li>Modern members of the <a href="/wiki/List_of_Lisp-family_programming_languages" title="List of Lisp-family programming languages">Lisp programming language family</a> such as <a href="/wiki/Clojure" title="Clojure">Clojure</a>, <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> and <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a> support <a href="/wiki/Macro_(computer_science)#Syntactic_macros" title="Macro (computer science)">macro systems</a> to allow syntactic abstraction. Other programming languages such as <a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a> also have macros, or very similar <a href="/wiki/Metaprogramming" title="Metaprogramming">metaprogramming</a> features (for example, <a href="/wiki/Haskell" title="Haskell">Haskell</a> has <a href="/wiki/Template_Haskell" title="Template Haskell">Template Haskell</a>, <a href="/wiki/OCaml" title="OCaml">OCaml</a> has <a href="/wiki/MetaOCaml" class="mw-redirect" title="MetaOCaml">MetaOCaml</a>). These can allow programs to omit <a href="/wiki/Boilerplate_code" title="Boilerplate code">boilerplate code</a>, abstract away tedious function call sequences, implement new <a href="/wiki/Control_flow" title="Control flow">control flow</a> structures, and implement <a href="/wiki/Domain-specific_language" title="Domain-specific language">domain-specific languages</a> (DSLs), which allow domain-specific concepts to be expressed in concise and elegant ways. All of these, when used correctly, improve both the programmer's efficiency and the clarity of <a href="/wiki/Source_code" title="Source code">source code</a> by making the intended purpose more explicit. A consequence of syntactic abstraction is also that any Lisp dialect, and almost any programming language, can in principle, be implemented in any modern Lisp with significantly reduced (but still non-trivial in most cases) effort when compared to "more traditional" programming languages such as <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> or <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Specification_methods">Specification methods</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=4" title="Edit section: Specification methods"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Formal_specification" title="Formal specification">Formal specification</a></div> <p>Analysts have developed various methods to formally specify software systems. Some known methods include: </p> <ul><li>Abstract-model based method (VDM, Z);</li> <li>Algebraic techniques (Larch, CLEAR, OBJ, ACT ONE, CASL);</li> <li>Process-based techniques (LOTOS, SDL, Estelle);</li> <li>Trace-based techniques (SPECIAL, TAM);</li> <li>Knowledge-based techniques (Refine, Gist).</li></ul> <div class="mw-heading mw-heading3"><h3 id="Specification_languages">Specification languages</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=5" title="Edit section: Specification languages"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Specification_language" title="Specification language">Specification language</a></div> <p>Specification languages generally rely on abstractions of one kind or another, since specifications are typically defined earlier in a project, (and at a more abstract level) than an eventual implementation. The <a href="/wiki/Unified_Modeling_Language" title="Unified Modeling Language">Unified Modeling Language</a> (UML) specification language, for example, allows the definition of <i>abstract</i> classes, which in a waterfall project, remain abstract during the architecture and specification phase of the project. </p> <div class="mw-heading mw-heading2"><h2 id="Control_abstraction">Control abstraction</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=6" title="Edit section: Control abstraction"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Control_flow" title="Control flow">Control flow</a></div> <p>Programming languages offer control abstraction as one of the main purposes of their use. Computer machines understand operations at the very low level such as moving some bits from one location of the memory to another location and producing the sum of two sequences of bits. Programming languages allow this to be done in the higher level. For example, consider this statement written in a <a href="/wiki/Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a>-like fashion: </p> <dl><dd><code>a := (1 + 2) * 5</code></dd></dl> <p>To a human, this seems a fairly simple and obvious calculation (<i>"one plus two is three, times five is fifteen"</i>). However, the low-level steps necessary to carry out this evaluation, and return the value "15", and then assign that value to the variable "a", are actually quite subtle and complex. The values need to be converted to binary representation (often a much more complicated task than one would think) and the calculations decomposed (by the compiler or interpreter) into assembly instructions (again, which are much less intuitive to the programmer: operations such as shifting a binary register left, or adding the binary complement of the contents of one register to another, are simply not how humans think about the abstract arithmetical operations of addition or multiplication). Finally, assigning the resulting value of "15" to the variable labeled "a", so that "a" can be used later, involves additional 'behind-the-scenes' steps of looking up a variable's label and the resultant location in physical or virtual memory, storing the binary representation of "15" to that memory location, etc. </p><p>Without control abstraction, a programmer would need to specify <i>all</i> the register/binary-level steps each time they simply wanted to add or multiply a couple of numbers and assign the result to a variable. Such duplication of effort has two serious negative consequences: </p> <ol><li>it forces the programmer to constantly repeat fairly common tasks every time a similar operation is needed</li> <li>it forces the programmer to program for the particular hardware and instruction set</li></ol> <div class="mw-heading mw-heading3"><h3 id="Structured_programming">Structured programming</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=7" title="Edit section: Structured programming"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Structured_programming" title="Structured programming">Structured programming</a></div> <p>Structured programming involves the splitting of complex program tasks into smaller pieces with clear flow-control and interfaces between components, with a reduction of the complexity potential for side-effects. </p><p>In a simple program, this may aim to ensure that loops have single or obvious exit points and (where possible) to have single exit points from functions and procedures. </p><p>In a larger system, it may involve breaking down complex tasks into many different modules. Consider a system which handles payroll on ships and at shore offices: </p> <ul><li>The uppermost level may feature a menu of typical end-user operations.</li> <li>Within that could be standalone executables or libraries for tasks such as signing on and off employees or printing checks.</li> <li>Within each of those standalone components there could be many different source files, each containing the program code to handle a part of the problem, with only selected interfaces available to other parts of the program. A sign on program could have source files for each data entry screen and the database interface (which may itself be a standalone third party library or a statically linked set of library routines).</li> <li>Either the database or the payroll application also has to initiate the process of exchanging data with between ship and shore, and that data transfer task will often contain many other components.</li></ul> <p>These layers produce the effect of isolating the implementation details of one component and its assorted internal methods from the others. Object-oriented programming embraces and extends this concept. </p> <div class="mw-heading mw-heading2"><h2 id="Data_abstraction">Data abstraction</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=8" title="Edit section: Data abstraction"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Abstract_data_type" title="Abstract data type">Abstract data type</a></div> <p>Data abstraction enforces a clear separation between the <i>abstract</i> properties of a <a href="/wiki/Data_type" title="Data type">data type</a> and the <i>concrete</i> details of its implementation. The abstract properties are those that are visible to client code that makes use of the data type—the <i>interface</i> to the data type—while the concrete implementation is kept entirely private, and indeed can change, for example to incorporate efficiency improvements over time. The idea is that such changes are not supposed to have any impact on client code, since they involve no difference in the abstract behaviour. </p><p>For example, one could define an <a href="/wiki/Abstract_data_type" title="Abstract data type">abstract data type</a> called <i>lookup table</i> which uniquely associates <i>keys</i> with <i>values</i>, and in which values may be retrieved by specifying their corresponding keys. Such a lookup table may be implemented in various ways: as a <a href="/wiki/Hash_table" title="Hash table">hash table</a>, a <a href="/wiki/Binary_search_tree" title="Binary search tree">binary search tree</a>, or even a simple linear <a href="/wiki/List_(computing)" class="mw-redirect" title="List (computing)">list</a> of (key:value) pairs. As far as client code is concerned, the abstract properties of the type are the same in each case. </p><p>Of course, this all relies on getting the details of the interface right in the first place, since any changes there can have major impacts on client code. As one way to look at this: the interface forms a <i>contract</i> on agreed behaviour between the data type and client code; anything not spelled out in the contract is subject to change without notice. </p> <div class="mw-heading mw-heading2"><h2 id="Manual_data_abstraction">Manual data abstraction</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=9" title="Edit section: Manual data abstraction"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>While much of data abstraction occurs through computer science and automation, there are times when this process is done manually and without programming intervention. One way this can be understood is through data abstraction within the process of conducting a <a href="/wiki/Systematic_review" title="Systematic review">systematic review</a> of the literature. In this methodology, data is abstracted by one or several abstractors when conducting a <a href="/wiki/Meta-analysis" title="Meta-analysis">meta-analysis</a>, with errors reduced through dual data abstraction followed by independent checking, known as <a href="/wiki/Adjudication" title="Adjudication">adjudication</a>.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Abstraction_in_object_oriented_programming">Abstraction in object oriented programming</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=10" title="Edit section: Abstraction in object oriented programming"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Object_(computer_science)" title="Object (computer science)">Object (computer science)</a></div> <p>In <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a> theory, <i>abstraction</i> involves the facility to define objects that represent abstract "actors" that can perform work, report on and change their state, and "communicate" with other objects in the system. The term <a href="/wiki/Encapsulation_(object-oriented_programming)" class="mw-redirect" title="Encapsulation (object-oriented programming)">encapsulation</a> refers to the hiding of <a href="/wiki/State_(computer_science)" title="State (computer science)">state</a> details, but extending the concept of <i>data type</i> from earlier programming languages to associate <i>behavior</i> most strongly with the data, and standardizing the way that different data types interact, is the beginning of <i>abstraction</i>. When abstraction proceeds into the operations defined, enabling objects of different types to be substituted, it is called <a href="/wiki/Polymorphism_(computer_science)" title="Polymorphism (computer science)">polymorphism</a>. When it proceeds in the opposite direction, inside the types or classes, structuring them to simplify a complex set of relationships, it is called <a href="/wiki/Delegation_(object-oriented_programming)" title="Delegation (object-oriented programming)">delegation</a> or <a href="/wiki/Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inheritance</a>. </p><p>Various object-oriented programming languages offer similar facilities for abstraction, all to support a general strategy of <a href="/wiki/Polymorphism_(computer_science)" title="Polymorphism (computer science)">polymorphism</a> in object-oriented programming, which includes the substitution of one <a href="/wiki/Data_type" title="Data type">data type</a> for another in the same or similar role. Although not as generally supported, a <a href="/wiki/Computer_configuration" title="Computer configuration">configuration</a> or image or package may predetermine a great many of these <a href="/wiki/Name_binding" title="Name binding">bindings</a> at <a href="/wiki/Compile_time" title="Compile time">compile time</a>, <a href="/wiki/Linker_(computing)" title="Linker (computing)">link time</a>, or <a href="/wiki/Loader_(computing)" title="Loader (computing)">load time</a>. This would leave only a minimum of such bindings to change at <a href="/wiki/Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">run-time</a>. </p><p><a href="/wiki/Common_Lisp_Object_System" title="Common Lisp Object System">Common Lisp Object System</a> or <a href="/wiki/Self_(programming_language)" title="Self (programming language)">Self</a>, for example, feature less of a class-instance distinction and more use of delegation for <a href="/wiki/Polymorphism_(computer_science)" title="Polymorphism (computer science)">polymorphism</a>. Individual objects and functions are abstracted more flexibly to better fit with a shared functional heritage from <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>. </p><p>C++ exemplifies another extreme: it relies heavily on <a href="/wiki/Generic_programming" title="Generic programming">templates</a> and <a href="/wiki/Method_overloading" class="mw-redirect" title="Method overloading">overloading</a> and other static bindings at compile-time, which in turn has certain flexibility problems. </p><p>Although these examples offer alternate strategies for achieving the same abstraction, they do not fundamentally alter the need to support abstract nouns in code – all programming relies on an ability to abstract verbs as functions, nouns as data structures, and either as processes. </p><p>Consider for example a sample <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a> fragment to represent some common farm "animals" to a level of abstraction suitable to model simple aspects of their hunger and feeding. It defines an <code>Animal</code> class to represent both the state of the animal and its functions: </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Animal</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">LivingThing</span> <span class="p">{</span> <span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">Location</span><span class="w"> </span><span class="n">loc</span><span class="p">;</span> <span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">energyReserves</span><span class="p">;</span> <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">isHungry</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">energyReserves</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mf">2.5</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">eat</span><span class="p">(</span><span class="n">Food</span><span class="w"> </span><span class="n">food</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Consume food</span> <span class="w"> </span><span class="n">energyReserves</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">food</span><span class="p">.</span><span class="na">getCalories</span><span class="p">();</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">moveTo</span><span class="p">(</span><span class="n">Location</span><span class="w"> </span><span class="n">location</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Move to new location</span> <span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">loc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">location</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> </pre></div> <p>With the above definition, one could create objects of type <samp style="padding-left:0.4em; padding-right:0.4em; color:var( --color-subtle, #666666);">Animal</samp> and call their methods like this: </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">thePig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Animal</span><span class="p">();</span> <span class="n">theCow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Animal</span><span class="p">();</span> <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">thePig</span><span class="p">.</span><span class="na">isHungry</span><span class="p">())</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">thePig</span><span class="p">.</span><span class="na">eat</span><span class="p">(</span><span class="n">tableScraps</span><span class="p">);</span> <span class="p">}</span> <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">theCow</span><span class="p">.</span><span class="na">isHungry</span><span class="p">())</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">theCow</span><span class="p">.</span><span class="na">eat</span><span class="p">(</span><span class="n">grass</span><span class="p">);</span> <span class="p">}</span> <span class="n">theCow</span><span class="p">.</span><span class="na">moveTo</span><span class="p">(</span><span class="n">theBarn</span><span class="p">);</span> </pre></div> <p>In the above example, the class <i><code>Animal</code></i> is an abstraction used in place of an actual animal, <i><code>LivingThing</code></i> is a further abstraction (in this case a generalisation) of <i><code>Animal</code></i>. </p><p>If one requires a more differentiated hierarchy of animals – to differentiate, say, those who provide milk from those who provide nothing except meat at the end of their lives – that is an intermediary level of abstraction, probably DairyAnimal (cows, goats) who would eat foods suitable to giving good milk, and MeatAnimal (pigs, steers) who would eat foods to give the best meat-quality. </p><p>Such an abstraction could remove the need for the application coder to specify the type of food, so they could concentrate instead on the feeding schedule. The two classes could be related using <a href="/wiki/Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inheritance</a> or stand alone, and the programmer could define varying degrees of <a href="/wiki/Polymorphism_(computer_science)" title="Polymorphism (computer science)">polymorphism</a> between the two types. These facilities tend to vary drastically between languages, but in general each can achieve anything that is possible with any of the others. A great many operation overloads, data type by data type, can have the same effect at compile-time as any degree of inheritance or other means to achieve polymorphism. The class notation is simply a coder's convenience. </p> <div class="mw-heading mw-heading3"><h3 id="Object-oriented_design">Object-oriented design</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=11" title="Edit section: Object-oriented design"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Object-oriented_design" class="mw-redirect" title="Object-oriented design">Object-oriented design</a></div> <p>Decisions regarding what to abstract and what to keep under the control of the coder become the major concern of object-oriented design and <a href="/wiki/Domain_analysis" title="Domain analysis">domain analysis</a>—actually determining the relevant relationships in the real world is the concern of <a href="/wiki/Object-oriented_analysis_and_design" title="Object-oriented analysis and design">object-oriented analysis</a> or <a href="/w/index.php?title=Legacy_analysis&action=edit&redlink=1" class="new" title="Legacy analysis (page does not exist)">legacy analysis</a>. </p><p>In general, to determine appropriate abstraction, one must make many small decisions about scope (domain analysis), determine what other systems one must cooperate with (legacy analysis), then perform a detailed object-oriented analysis which is expressed within project time and budget constraints as an object-oriented design. In our simple example, the domain is the barnyard, the live pigs and cows and their eating habits are the legacy constraints, the detailed analysis is that coders must have the flexibility to feed the animals what is available and thus there is no reason to code the type of food into the class itself, and the design is a single simple Animal class of which pigs and cows are instances with the same functions. A decision to differentiate DairyAnimal would change the detailed analysis but the domain and legacy analysis would be unchanged—thus it is entirely under the control of the programmer, and it is called an abstraction in object-oriented programming as distinct from abstraction in domain or legacy analysis. </p> <div class="mw-heading mw-heading2"><h2 id="Considerations">Considerations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=12" title="Edit section: Considerations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>When discussing <a href="/wiki/Formal_semantics_of_programming_languages" class="mw-redirect" title="Formal semantics of programming languages">formal semantics of programming languages</a>, <a href="/wiki/Formal_methods" title="Formal methods">formal methods</a> or <a href="/wiki/Abstract_interpretation" title="Abstract interpretation">abstract interpretation</a>, <i>abstraction</i> refers to the act of considering a less detailed, but safe, definition of the observed program behaviors. For instance, one may observe only the final result of program executions instead of considering all the intermediate steps of executions. Abstraction is defined to a <i>concrete</i> (more precise) model of execution. </p><p>Abstraction may be <i>exact</i> or <i>faithful</i> with respect to a property if one can answer a question about the property equally well on the concrete or abstract model. For instance, if one wishes to know what the result of the evaluation of a mathematical expression involving only integers +, -, ×, is worth <a href="/wiki/Modular_arithmetic" title="Modular arithmetic">modulo</a> <i>n</i>, then one needs only perform all operations modulo <i>n</i> (a familiar form of this abstraction is <a href="/wiki/Casting_out_nines" title="Casting out nines">casting out nines</a>). </p><p>Abstractions, however, though not necessarily <i>exact</i>, should be <i>sound</i>. That is, it should be possible to get sound answers from them—even though the abstraction may simply yield a result of <a href="/wiki/Undecidable_problem" title="Undecidable problem">undecidability</a>. For instance, students in a class may be abstracted by their minimal and maximal ages; if one asks whether a certain person belongs to that class, one may simply compare that person's age with the minimal and maximal ages; if his age lies outside the range, one may safely answer that the person does not belong to the class; if it does not, one may only answer "I don't know". </p><p>The level of abstraction included in a programming language can influence its overall <a href="/wiki/Usability" title="Usability">usability</a>. The <a href="/wiki/Cognitive_dimensions" class="mw-redirect" title="Cognitive dimensions">Cognitive dimensions</a> framework includes the concept of <i>abstraction gradient</i> in a formalism. This framework allows the designer of a programming language to study the trade-offs between abstraction and other characteristics of the design, and how changes in abstraction influence the language usability. </p><p>Abstractions can prove useful when dealing with computer programs, because non-trivial properties of computer programs are essentially <a href="/wiki/Undecidable_problem" title="Undecidable problem">undecidable</a> (see <a href="/wiki/Rice%27s_theorem" title="Rice's theorem">Rice's theorem</a>). As a consequence, automatic methods for deriving information on the behavior of computer programs either have to drop termination (on some occasions, they may fail, crash or never yield out a result), soundness (they may provide false information), or precision (they may answer "I don't know" to some questions). </p><p>Abstraction is the core concept of <a href="/wiki/Abstract_interpretation" title="Abstract interpretation">abstract interpretation</a>. <a href="/wiki/Model_checking" title="Model checking">Model checking</a> generally takes place on abstract versions of the studied systems. </p> <div class="mw-heading mw-heading2"><h2 id="Levels_of_abstraction">Levels of abstraction</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=13" title="Edit section: Levels of abstraction"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Abstraction_layer" title="Abstraction layer">Abstraction layer</a></div> <p>Computer science commonly presents <i>levels</i> (or, less commonly, <i>layers</i>) of abstraction, wherein each level represents a different model of the same information and processes, but with varying amounts of detail. Each level uses a system of expression involving a unique set of objects and compositions that apply only to a particular domain. <sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> Each relatively abstract, "higher" level builds on a relatively concrete, "lower" level, which tends to provide an increasingly "granular" representation. For example, gates build on electronic circuits, binary on gates, machine language on binary, programming language on machine language, applications and operating systems on programming languages. Each level is embodied, but not determined, by the level beneath it, making it a language of description that is somewhat self-contained. </p> <div class="mw-heading mw-heading3"><h3 id="Database_systems">Database systems</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=14" title="Edit section: Database systems"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Database_management_system" class="mw-redirect" title="Database management system">Database management system</a></div> <p>Since many users of database systems lack in-depth familiarity with computer data-structures, database developers often hide complexity through the following levels: </p> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:Data_abstraction_levels.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/0/09/Data_abstraction_levels.png/220px-Data_abstraction_levels.png" decoding="async" width="220" height="145" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/09/Data_abstraction_levels.png/330px-Data_abstraction_levels.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/09/Data_abstraction_levels.png/440px-Data_abstraction_levels.png 2x" data-file-width="461" data-file-height="304" /></a><figcaption>Data abstraction levels of a database system</figcaption></figure> <p><i>Physical level</i> – The lowest level of abstraction describes <i>how</i> a system actually stores data. The physical level describes complex low-level data structures in detail. </p><p><i>Logical level</i> – The next higher level of abstraction describes <i>what</i> data the database stores, and what relationships exist among those data. The logical level thus describes an entire database in terms of a small number of relatively simple structures. Although implementation of the simple structures at the logical level may involve complex physical level structures, the user of the logical level does not need to be aware of this complexity. This is referred to as <a href="/wiki/Physical_data_independence" class="mw-redirect" title="Physical data independence">physical data independence</a>. <a href="/wiki/Database_administrator" title="Database administrator">Database administrators</a>, who must decide what information to keep in a database, use the logical level of abstraction. </p><p><i>View level</i> – The highest level of abstraction describes only part of the entire database. Even though the logical level uses simpler structures, complexity remains because of the variety of information stored in a large database. Many users of a database system do not need all this information; instead, they need to access only a part of the database. The view level of abstraction exists to simplify their interaction with the system. The system may provide many <a href="/wiki/View_(database)" class="mw-redirect" title="View (database)">views</a> for the same database. </p> <div class="mw-heading mw-heading3"><h3 id="Layered_architecture">Layered architecture</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=15" title="Edit section: Layered architecture"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951" /><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="/wiki/Abstraction_layer" title="Abstraction layer">Abstraction layer</a></div> <p>The ability to provide a <a href="/wiki/Design" title="Design">design</a> of different levels of abstraction can </p> <ul><li>simplify the design considerably</li> <li>enable different role players to effectively work at various levels of abstraction</li> <li>support the portability of <a href="/wiki/Software_artifact" class="mw-redirect" title="Software artifact">software artifacts</a> (model-based ideally)</li></ul> <p><a href="/wiki/Systems_design" title="Systems design">Systems design</a> and <a href="/wiki/Business_process_modeling" title="Business process modeling">business process design</a> can both use this. Some <a href="/wiki/Software_modeling" class="mw-redirect" title="Software modeling">design processes</a> specifically generate designs that contain various levels of abstraction. </p><p>Layered architecture partitions the concerns of the application into stacked groups (layers). It is a technique used in designing computer software, hardware, and communications in which system or network components are isolated in layers so that changes can be made in one layer without affecting the others. </p> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=16" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Abstraction_principle_(computer_programming)" title="Abstraction principle (computer programming)">Abstraction principle (computer programming)</a></li> <li><a href="/wiki/Abstraction_inversion" title="Abstraction inversion">Abstraction inversion</a> for an anti-pattern of one danger in abstraction</li> <li><a href="/wiki/Abstract_data_type" title="Abstract data type">Abstract data type</a> for an abstract description of a set of data</li> <li><a href="/wiki/Algorithm" title="Algorithm">Algorithm</a> for an abstract description of a computational procedure</li> <li><a href="/w/index.php?title=Bracket_abstraction&action=edit&redlink=1" class="new" title="Bracket abstraction (page does not exist)">Bracket abstraction</a> for making a term into a function of a variable</li> <li><a href="/wiki/Data_modeling" title="Data modeling">Data modeling</a> for structuring data independent of the processes that use it</li> <li><a href="/wiki/Encapsulation_(object-oriented_programming)" class="mw-redirect" title="Encapsulation (object-oriented programming)">Encapsulation</a> for abstractions that hide implementation details</li> <li><a href="/wiki/Greenspun%27s_Tenth_Rule" class="mw-redirect" title="Greenspun's Tenth Rule">Greenspun's Tenth Rule</a> for an aphorism about an (the?) optimum point in the space of abstractions</li> <li><a href="/wiki/Higher-order_function" title="Higher-order function">Higher-order function</a> for abstraction where functions produce or consume other functions</li> <li><a href="/wiki/Lambda_abstraction" class="mw-redirect" title="Lambda abstraction">Lambda abstraction</a> for making a term into a function of some variable</li> <li><a href="/wiki/List_of_abstractions_(computer_science)" title="List of abstractions (computer science)">List of abstractions (computer science)</a></li> <li><a href="/wiki/Program_refinement" class="mw-redirect" title="Program refinement">Refinement</a> for the opposite of abstraction in computing</li> <li><a href="/wiki/Integer_(computer_science)" title="Integer (computer science)">Integer (computer science)</a></li> <li><a href="/wiki/Heuristic_(computer_science)" title="Heuristic (computer science)">Heuristic (computer science)</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=17" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-:1-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-:1_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite id="CITEREFColburnShute2007" class="citation journal cs1">Colburn, Timothy; Shute, Gary (5 June 2007). "Abstraction in Computer Science". <i>Minds and Machines</i>. <b>17</b> (2): <span class="nowrap">169–</span>184. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs11023-007-9061-7">10.1007/s11023-007-9061-7</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0924-6495">0924-6495</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:5927969">5927969</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Minds+and+Machines&rft.atitle=Abstraction+in+Computer+Science&rft.volume=17&rft.issue=2&rft.pages=%3Cspan+class%3D%22nowrap%22%3E169-%3C%2Fspan%3E184&rft.date=2007-06-05&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A5927969%23id-name%3DS2CID&rft.issn=0924-6495&rft_id=info%3Adoi%2F10.1007%2Fs11023-007-9061-7&rft.aulast=Colburn&rft.aufirst=Timothy&rft.au=Shute%2C+Gary&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-:0-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-:0_2-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFKramer2007" class="citation journal cs1">Kramer, Jeff (1 April 2007). "Is abstraction the key to computing?". <i>Communications of the ACM</i>. <b>50</b> (4): <span class="nowrap">36–</span>42. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1232743.1232745">10.1145/1232743.1232745</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0001-0782">0001-0782</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:12481509">12481509</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=Is+abstraction+the+key+to+computing%3F&rft.volume=50&rft.issue=4&rft.pages=%3Cspan+class%3D%22nowrap%22%3E36-%3C%2Fspan%3E42&rft.date=2007-04-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A12481509%23id-name%3DS2CID&rft.issn=0001-0782&rft_id=info%3Adoi%2F10.1145%2F1232743.1232745&rft.aulast=Kramer&rft.aufirst=Jeff&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFBen-Ari1998" class="citation journal cs1">Ben-Ari, Mordechai (1 March 1998). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F274790.274308">"Constructivism in computer science education"</a>. <i>ACM SIGCSE Bulletin</i>. <b>30</b> (1): 257, <span class="nowrap">257–</span>261. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F274790.274308">10.1145/274790.274308</a></span>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0097-8418">0097-8418</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM+SIGCSE+Bulletin&rft.atitle=Constructivism+in+computer+science+education&rft.volume=30&rft.issue=1&rft.pages=257%2C+%3Cspan+class%3D%22nowrap%22%3E257-%3C%2Fspan%3E261&rft.date=1998-03-01&rft_id=info%3Adoi%2F10.1145%2F274790.274308&rft.issn=0097-8418&rft.aulast=Ben-Ari&rft.aufirst=Mordechai&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F274790.274308&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFLiskov1988" class="citation journal cs1">Liskov, Barbara (1 May 1988). "Keynote address – data abstraction and hierarchy". <i>ACM SIGPLAN Notices</i>. <b>23</b>. ACM: <span class="nowrap">17–</span>34. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F62138.62141">10.1145/62138.62141</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0897912667" title="Special:BookSources/0897912667"><bdi>0897912667</bdi></a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14219043">14219043</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM+SIGPLAN+Notices&rft.atitle=Keynote+address+%E2%80%93+data+abstraction+and+hierarchy&rft.volume=23&rft.pages=%3Cspan+class%3D%22nowrap%22%3E17-%3C%2Fspan%3E34&rft.date=1988-05-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14219043%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1145%2F62138.62141&rft.isbn=0897912667&rft.aulast=Liskov&rft.aufirst=Barbara&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFGuttag2013" class="citation book cs1">Guttag, John V. (18 January 2013). <i>Introduction to Computation and Programming Using Python</i> (Spring 2013 ed.). Cambridge, Massachusetts: The MIT Press. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0262519632" title="Special:BookSources/978-0262519632"><bdi>978-0262519632</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Introduction+to+Computation+and+Programming+Using+Python&rft.place=Cambridge%2C+Massachusetts&rft.edition=Spring+2013&rft.pub=The+MIT+Press&rft.date=2013-01-18&rft.isbn=978-0262519632&rft.aulast=Guttag&rft.aufirst=John+V.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFFloridi2008" class="citation journal cs1">Floridi, Luciano (September 2008). <a rel="nofollow" class="external text" href="http://link.springer.com/10.1007/s11023-008-9113-7">"The Method of Levels of Abstraction"</a>. <i>Minds and Machines</i>. <b>18</b> (3): <span class="nowrap">303–</span>329. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs11023-008-9113-7">10.1007/s11023-008-9113-7</a>. <a href="/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/2299%2F2998">2299/2998</a></span>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0924-6495">0924-6495</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:7522925">7522925</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Minds+and+Machines&rft.atitle=The+Method+of+Levels+of+Abstraction&rft.volume=18&rft.issue=3&rft.pages=%3Cspan+class%3D%22nowrap%22%3E303-%3C%2Fspan%3E329&rft.date=2008-09&rft_id=info%3Ahdl%2F2299%2F2998&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A7522925%23id-name%3DS2CID&rft.issn=0924-6495&rft_id=info%3Adoi%2F10.1007%2Fs11023-008-9113-7&rft.aulast=Floridi&rft.aufirst=Luciano&rft_id=http%3A%2F%2Flink.springer.com%2F10.1007%2Fs11023-008-9113-7&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFSpolsky" class="citation web cs1"><a href="/wiki/Joel_Spolsky" title="Joel Spolsky">Spolsky, Joel</a>. <a rel="nofollow" class="external text" href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">"The Law of Leaky Abstractions"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Law+of+Leaky+Abstractions&rft.aulast=Spolsky&rft.aufirst=Joel&rft_id=http%3A%2F%2Fwww.joelonsoftware.com%2Farticles%2FLeakyAbstractions.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-Oracle_Java_abstract-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-Oracle_Java_abstract_8-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html">"Abstract Methods and Classes"</a>. <i>The Java Tutorials</i>. Oracle<span class="reference-accessdate">. Retrieved <span class="nowrap">4 September</span> 2014</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=The+Java+Tutorials&rft.atitle=Abstract+Methods+and+Classes&rft_id=http%3A%2F%2Fdocs.oracle.com%2Fjavase%2Ftutorial%2Fjava%2FIandI%2Fabstract.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-Oracle_Java_interface-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-Oracle_Java_interface_9-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html">"Using an Interface as a Type"</a>. <i>The Java Tutorials</i>. Oracle<span class="reference-accessdate">. Retrieved <span class="nowrap">4 September</span> 2014</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=The+Java+Tutorials&rft.atitle=Using+an+Interface+as+a+Type&rft_id=http%3A%2F%2Fdocs.oracle.com%2Fjavase%2Ftutorial%2Fjava%2FIandI%2FinterfaceAsType.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1041539562">.mw-parser-output .citation{word-wrap:break-word}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}</style><span class="citation foldoc">This article is based on material taken from <a rel="nofollow" class="external text" href="https://foldoc.org/Abstraction">Abstraction</a> at the <i><a href="/wiki/Free_On-line_Dictionary_of_Computing" title="Free On-line Dictionary of Computing">Free On-line Dictionary of Computing</a></i>  prior to 1 November 2008 and incorporated under the "relicensing" terms of the <a href="/wiki/GNU_Free_Documentation_License" title="GNU Free Documentation License">GFDL</a>, version 1.3 or later.</span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFESaldanhaCannerSchmid2020" class="citation journal cs1">E, Jian‐Yu; Saldanha, Ian J.; Canner, Joseph; Schmid, Christopher H.; Le, Jimmy T.; Li, Tianjing (2020). "Adjudication rather than experience of data abstraction matters more in reducing errors in abstracting data in systematic reviews". <i>Research Synthesis Methods</i>. <b>11</b> (3): <span class="nowrap">354–</span>362. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1002%2Fjrsm.1396">10.1002/jrsm.1396</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1759-2879">1759-2879</a>. <a href="/wiki/PMID_(identifier)" class="mw-redirect" title="PMID (identifier)">PMID</a> <a rel="nofollow" class="external text" href="https://pubmed.ncbi.nlm.nih.gov/31955502">31955502</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:210829764">210829764</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Research+Synthesis+Methods&rft.atitle=Adjudication+rather+than+experience+of+data+abstraction+matters+more+in+reducing+errors+in+abstracting+data+in+systematic+reviews&rft.volume=11&rft.issue=3&rft.pages=%3Cspan+class%3D%22nowrap%22%3E354-%3C%2Fspan%3E362&rft.date=2020&rft.issn=1759-2879&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A210829764%23id-name%3DS2CID&rft_id=info%3Apmid%2F31955502&rft_id=info%3Adoi%2F10.1002%2Fjrsm.1396&rft.aulast=E&rft.aufirst=Jian%E2%80%90Yu&rft.au=Saldanha%2C+Ian+J.&rft.au=Canner%2C+Joseph&rft.au=Schmid%2C+Christopher+H.&rft.au=Le%2C+Jimmy+T.&rft.au=Li%2C+Tianjing&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><a href="/wiki/Luciano_Floridi" title="Luciano Floridi">Luciano Floridi</a>, <a rel="nofollow" class="external text" href="http://www.cs.ox.ac.uk/activities/ieg/research_reports/ieg_rr221104.pdf"><i>Levellism and the Method of Abstraction</i></a> IEG – Research Report 22.11.04</span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=18" title="Edit section: Further reading"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239549316">.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}</style><div class="refbegin" style=""> <ul><li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFAbelsonSussmanSussman1996" class="citation book cs1"><a href="/wiki/Hal_Abelson" title="Hal Abelson">Abelson, Harold</a>; <a href="/wiki/Gerald_Jay_Sussman" title="Gerald Jay Sussman">Sussman, Gerald Jay</a>; <a href="/wiki/Julie_Sussman" class="mw-redirect" title="Julie Sussman">Sussman, Julie</a> (25 July 1996). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090226050622/http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html"><i>Structure and Interpretation of Computer Programs</i></a> (2 ed.). MIT Press. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-262-01153-2" title="Special:BookSources/978-0-262-01153-2"><bdi>978-0-262-01153-2</bdi></a>. Archived from <a rel="nofollow" class="external text" href="http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html">the original</a> on 26 February 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">22 June</span> 2012</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Structure+and+Interpretation+of+Computer+Programs&rft.edition=2&rft.pub=MIT+Press&rft.date=1996-07-25&rft.isbn=978-0-262-01153-2&rft.aulast=Abelson&rft.aufirst=Harold&rft.au=Sussman%2C+Gerald+Jay&rft.au=Sussman%2C+Julie&rft_id=http%3A%2F%2Fmitpress.mit.edu%2Fsicp%2Ffull-text%2Fbook%2Fbook-Z-H-10.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFSpolsky2002" class="citation web cs1"><a href="/wiki/Joel_Spolsky" title="Joel Spolsky">Spolsky, Joel</a> (11 November 2002). <a rel="nofollow" class="external text" href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">"The Law of Leaky Abstractions"</a>. <i>Joel on Software</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Joel+on+Software&rft.atitle=The+Law+of+Leaky+Abstractions&rft.date=2002-11-11&rft.aulast=Spolsky&rft.aufirst=Joel&rft_id=http%3A%2F%2Fwww.joelonsoftware.com%2Farticles%2FLeakyAbstractions.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></li> <li><a rel="nofollow" class="external text" href="http://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-abstraction/08_abstraction.html">Abstraction/information hiding</a> – CS211 course, Cornell University.</li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFRoberts1997" class="citation book cs1">Roberts, Eric S. (1997). <i>Programming Abstractions in C A Second Course in Computer Science</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Programming+Abstractions+in+C+A+Second+Course+in+Computer+Science&rft.date=1997&rft.aulast=Roberts&rft.aufirst=Eric+S.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFPalermo2008" class="citation web cs1">Palermo, Jeffrey (29 July 2008). <a rel="nofollow" class="external text" href="http://jeffreypalermo.com/blog/the-onion-architecture-part-1/">"The Onion Architecture"</a>. <i>Jeffrey Palermo</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Jeffrey+Palermo&rft.atitle=The+Onion+Architecture&rft.date=2008-07-29&rft.aulast=Palermo&rft.aufirst=Jeffrey&rft_id=http%3A%2F%2Fjeffreypalermo.com%2Fblog%2Fthe-onion-architecture-part-1%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222" /><cite id="CITEREFVishkin2011" class="citation journal cs1">Vishkin, Uzi (January 2011). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1866739.1866757">"Using simple abstraction to reinvent computing for parallelism"</a>. <i>Communications of the ACM</i>. <b>54</b> (1): <span class="nowrap">75–</span>85. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1866739.1866757">10.1145/1866739.1866757</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Communications+of+the+ACM&rft.atitle=Using+simple+abstraction+to+reinvent+computing+for+parallelism&rft.volume=54&rft.issue=1&rft.pages=%3Cspan+class%3D%22nowrap%22%3E75-%3C%2Fspan%3E85&rft.date=2011-01&rft_id=info%3Adoi%2F10.1145%2F1866739.1866757&rft.aulast=Vishkin&rft.aufirst=Uzi&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F1866739.1866757&rfr_id=info%3Asid%2Fen.wikipedia.org%3AAbstraction+%28computer+science%29" class="Z3988"></span></li></ul> </div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Abstraction_(computer_science)&action=edit&section=19" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="https://sites.google.com/site/simulationarchitecture/">SimArch</a> example of layered architecture for distributed simulation systems.</li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Software_engineering318" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374" /><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Software_engineering" title="Template:Software engineering"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Software_engineering" title="Template talk:Software engineering"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Software_engineering" title="Special:EditPage/Template:Software engineering"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Software_engineering318" style="font-size:114%;margin:0 4em"><a href="/wiki/Software_engineering" title="Software engineering">Software engineering</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Fields</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Computer_programming" title="Computer programming">Computer programming</a></li> <li><a href="/wiki/DevOps" title="DevOps">DevOps</a></li> <li><a href="/wiki/Empirical_software_engineering" title="Empirical software engineering">Empirical software engineering</a></li> <li><a href="/wiki/Experimental_software_engineering" title="Experimental software engineering">Experimental software engineering</a></li> <li><a href="/wiki/Formal_methods" title="Formal methods">Formal methods</a></li> <li><a href="/wiki/Requirements_engineering" title="Requirements engineering">Requirements engineering</a></li> <li><a href="/wiki/Search-based_software_engineering" title="Search-based software engineering">Search-based software engineering</a></li> <li><a href="/wiki/Site_reliability_engineering" title="Site reliability engineering">Site reliability engineering</a></li> <li><a href="/wiki/Social_software_engineering" title="Social software engineering">Social software engineering</a></li> <li><a href="/wiki/Software_deployment" title="Software deployment">Software deployment</a></li> <li><a href="/wiki/Software_design" title="Software design">Software design</a></li> <li><a href="/wiki/Software_maintenance" title="Software maintenance">Software maintenance</a></li> <li><a href="/wiki/Software_testing" title="Software testing">Software testing</a></li> <li><a href="/wiki/Systems_analysis" title="Systems analysis">Systems analysis</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Concepts</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a class="mw-selflink selflink">Abstraction</a></li> <li><a href="/wiki/CI/CD" title="CI/CD">CI/CD</a></li> <li><a href="/wiki/Computer_compatibility" title="Computer compatibility">Compatibility</a> <ul><li><a href="/wiki/Backward_compatibility" title="Backward compatibility">Backward compatibility</a></li> <li><a href="/wiki/Compatibility_layer" title="Compatibility layer">Compatibility layer</a></li> <li><a href="/wiki/Compatibility_mode" title="Compatibility mode">Compatibility mode</a></li> <li><a href="/wiki/Forward_compatibility" title="Forward compatibility">Forward compatibility</a></li> <li><a href="/wiki/Software_incompatibility" title="Software incompatibility">Software incompatibility</a></li></ul></li> <li><a href="/wiki/Component-based_software_engineering" title="Component-based software engineering">Component-based software engineering</a></li> <li><a href="/wiki/Data_modeling" title="Data modeling">Data modeling</a></li> <li><a href="/wiki/Enterprise_architecture" title="Enterprise architecture">Enterprise architecture</a></li> <li><a href="/wiki/Functional_specification" title="Functional specification">Functional specification</a></li> <li><a href="/wiki/Modeling_language" title="Modeling language">Modeling language</a></li> <li><a href="/wiki/Programming_paradigm" title="Programming paradigm">Programming paradigm</a></li> <li><a href="/wiki/Software" title="Software">Software</a></li> <li><a href="/wiki/Software_archaeology" title="Software archaeology">Software archaeology</a></li> <li><a href="/wiki/Software_architecture" title="Software architecture">Software architecture</a></li> <li><a href="/wiki/Software_configuration_management" title="Software configuration management">Software configuration management</a></li> <li><a href="/wiki/Software_development_process" title="Software development process">Software development process/methodology</a></li> <li><a href="/wiki/Software_quality" title="Software quality">Software quality</a></li> <li><a href="/wiki/Software_quality_assurance" title="Software quality assurance">Software quality assurance</a></li> <li><a href="/wiki/Software_system" title="Software system">Software system</a></li> <li><a href="/wiki/Software_verification_and_validation" title="Software verification and validation">Software verification and validation</a></li> <li><a href="/wiki/Structured_analysis" title="Structured analysis">Structured analysis</a> <ul><li><a href="/wiki/Essential_systems_analysis" title="Essential systems analysis">Essential analysis</a></li></ul></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Orientations</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Agile_software_development" title="Agile software development">Agile</a></li> <li><a href="/wiki/Aspect-oriented_programming" title="Aspect-oriented programming">Aspect-oriented</a></li> <li><a href="/wiki/Object-oriented_programming" title="Object-oriented programming">Object orientation</a></li> <li><a href="/wiki/Ontology_(information_science)" title="Ontology (information science)">Ontology</a></li> <li><a href="/wiki/Systems_development_life_cycle" title="Systems development life cycle">SDLC</a></li> <li><a href="/wiki/Service-oriented_architecture" title="Service-oriented architecture">Service orientation</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Models</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;">Developmental</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Agile_software_development" title="Agile software development">Agile</a></li> <li><a href="/wiki/Enterprise_unified_process" title="Enterprise unified process">EUP</a></li> <li><a href="/wiki/Executable_UML" title="Executable UML">Executable UML</a></li> <li><a href="/wiki/Incremental_build_model" title="Incremental build model">Incremental model</a></li> <li><a href="/wiki/Iterative_and_incremental_development" title="Iterative and incremental development">Iterative model</a></li> <li><a href="/wiki/Software_prototyping" title="Software prototyping">Prototype model</a></li> <li><a href="/wiki/Rapid_application_development" title="Rapid application development">RAD</a></li> <li><a href="/wiki/Scrum_(software_development)" title="Scrum (software development)">Scrum</a></li> <li><a href="/wiki/Spiral_model" title="Spiral model">Spiral model</a></li> <li><a href="/wiki/Unified_process" title="Unified process">UP</a></li> <li><a href="/wiki/V-model_(software_development)" title="V-model (software development)">V-model</a></li> <li><a href="/wiki/Waterfall_model" title="Waterfall model">Waterfall model</a></li> <li><a href="/wiki/Extreme_programming" title="Extreme programming">XP</a></li> <li><a href="/wiki/Model-driven_engineering" title="Model-driven engineering">Model-driven engineering</a></li> <li><a href="/wiki/Round-trip_engineering" title="Round-trip engineering">Round-trip engineering</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;">Other</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Capability_Maturity_Model_Integration" title="Capability Maturity Model Integration">CMMI</a></li> <li><a href="/wiki/Data_model" title="Data model">Data model</a></li> <li><a href="/wiki/Entity%E2%80%93relationship_model" title="Entity–relationship model">ER model</a></li> <li><a href="/wiki/Function_model" title="Function model">Function model</a></li> <li><a href="/wiki/Information_model" title="Information model">Information model</a></li> <li><a href="/wiki/Metamodeling" title="Metamodeling">Metamodeling</a></li> <li><a href="/wiki/Object_model" title="Object model">Object model</a></li> <li><a href="/wiki/ISO/IEC_15504" title="ISO/IEC 15504">SPICE</a></li> <li><a href="/wiki/Systems_modeling" title="Systems modeling">Systems model</a></li> <li><a href="/wiki/View_model" title="View model">View model</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%;font-weight:normal;">Languages</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/IDEF" title="IDEF">IDEF</a></li> <li><a href="/wiki/Systems_modeling_language" title="Systems modeling language">SysML</a></li> <li><a href="/wiki/Unified_Modeling_Language" title="Unified Modeling Language">UML</a></li> <li><a href="/wiki/Universal_Systems_Language" title="Universal Systems Language">USL</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Related fields</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Computer_engineering" title="Computer engineering">Computer engineering</a></li> <li><a href="/wiki/Computer_science" title="Computer science">Computer science</a></li> <li><a href="/wiki/Information_science" title="Information science">Information science</a></li> <li><a href="/wiki/Project_management" title="Project management">Project management</a></li> <li><a href="/wiki/Risk_management" title="Risk management">Risk management</a></li> <li><a href="/wiki/Systems_engineering" title="Systems engineering">Systems engineering</a></li></ul> </div></td></tr><tr><td class="navbox-abovebelow" colspan="2" style="font-weight:bold;"><div> <ul><li><span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <a href="/wiki/Category:Software_engineering" title="Category:Software engineering">Category</a></li> <li><span class="noviewer" typeof="mw:File"><span title="Commons page"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/20px-Commons-logo.svg.png" decoding="async" width="12" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/40px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></span></span> <a href="https://commons.wikimedia.org/wiki/Category:Software_engineering" class="extiw" title="commons:Category:Software engineering">Commons</a></li></ul> </div></td></tr></tbody></table></div></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=0" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Abstraction_(computer_science)&oldid=1280024525">https://en.wikipedia.org/w/index.php?title=Abstraction_(computer_science)&oldid=1280024525</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Data_management" title="Category:Data management">Data management</a></li><li><a href="/wiki/Category:Abstraction" title="Category:Abstraction">Abstraction</a></li><li><a href="/wiki/Category:Software_engineering" title="Category:Software engineering">Software engineering</a></li><li><a href="/wiki/Category:Object-oriented_programming" title="Category:Object-oriented programming">Object-oriented programming</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_matches_Wikidata" title="Category:Short description matches Wikidata">Short description matches Wikidata</a></li><li><a href="/wiki/Category:Wikipedia_pending_changes_protected_pages" title="Category:Wikipedia pending changes protected pages">Wikipedia pending changes protected pages</a></li><li><a href="/wiki/Category:Use_dmy_dates_from_December_2019" title="Category:Use dmy dates from December 2019">Use dmy dates from December 2019</a></li><li><a href="/wiki/Category:Articles_with_example_Java_code" title="Category:Articles with example Java code">Articles with example Java code</a></li><li><a href="/wiki/Category:Articles_with_example_Pascal_code" title="Category:Articles with example Pascal code">Articles with example Pascal code</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 12 March 2025, at 00:35<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Abstraction_(computer_science)&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/static/images/footer/wikimedia-button.svg" width="84" height="29"><img src="/static/images/footer/wikimedia.svg" width="25" height="25" alt="Wikimedia Foundation" lang="en" loading="lazy"></picture></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/w/resources/assets/poweredby_mediawiki.svg" width="88" height="31"><img src="/w/resources/assets/mediawiki_compact.svg" alt="Powered by MediaWiki" lang="en" width="25" height="25" loading="lazy"></picture></a></li> </ul> </footer> </div> </div> </div> <div class="vector-header-container vector-sticky-header-container"> <div id="vector-sticky-header" class="vector-sticky-header"> <div class="vector-sticky-header-start"> <div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true"> <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" tabindex="-1" data-event-name="ui.vector-sticky-search-form.icon"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </button> </div> <div role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box"> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail"> <form action="/w/index.php" id="vector-sticky-search-form" class="cdx-search-input cdx-search-input--has-end-button"> <div class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia"> <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <div class="vector-sticky-header-context-bar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc vector-button-flush-left" > <input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-sticky-header-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div class="vector-sticky-header-context-bar-primary" aria-hidden="true" ><span class="mw-page-title-main">Abstraction (computer science)</span></div> </div> </div> <div class="vector-sticky-header-end" aria-hidden="true"> <div class="vector-sticky-header-icons"> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-talk-sticky-header" tabindex="-1" data-event-name="talk-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-subject-sticky-header" tabindex="-1" data-event-name="subject-sticky-header"><span class="vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-history-sticky-header" tabindex="-1" data-event-name="history-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-history mw-ui-icon-wikimedia-wikimedia-history"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only mw-watchlink" id="ca-watchstar-sticky-header" tabindex="-1" data-event-name="watch-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-star mw-ui-icon-wikimedia-wikimedia-star"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-edit-sticky-header" tabindex="-1" data-event-name="wikitext-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-wikiText mw-ui-icon-wikimedia-wikimedia-wikiText"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-ve-edit-sticky-header" tabindex="-1" data-event-name="ve-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-edit mw-ui-icon-wikimedia-wikimedia-edit"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-viewsource-sticky-header" tabindex="-1" data-event-name="ve-edit-protected-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-editLock mw-ui-icon-wikimedia-wikimedia-editLock"></span> <span></span> </a> </div> <div class="vector-sticky-header-buttons"> <button class="cdx-button cdx-button--weight-quiet mw-interlanguage-selector" id="p-lang-btn-sticky-header" tabindex="-1" data-event-name="ui.dropdown-p-lang-btn-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>32 languages</span> </button> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive" id="ca-addsection-sticky-header" tabindex="-1" data-event-name="addsection-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbleAdd-progressive mw-ui-icon-wikimedia-speechBubbleAdd-progressive"></span> <span>Add topic</span> </a> </div> <div class="vector-sticky-header-icon-end"> <div class="vector-user-links"> </div> </div> </div> </div> </div> <div class="mw-portlet mw-portlet-dock-bottom emptyPortlet" id="p-dock-bottom"> <ul> </ul> </div> <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.eqiad.main-b98c64bff-sqj8v","wgBackendResponseTime":225,"wgPageParseReport":{"limitreport":{"cputime":"0.686","walltime":"1.036","ppvisitednodes":{"value":1706,"limit":1000000},"postexpandincludesize":{"value":57752,"limit":2097152},"templateargumentsize":{"value":1707,"limit":2097152},"expansiondepth":{"value":12,"limit":100},"expensivefunctioncount":{"value":16,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":69921,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 904.866 1 -total"," 28.65% 259.203 1 Template:Reflist"," 21.92% 198.367 7 Template:Cite_journal"," 16.26% 147.093 1 Template:Software_engineering"," 15.82% 143.174 2 Template:Navbox"," 14.16% 128.129 1 Template:Short_description"," 7.36% 66.558 2 Template:Pagetype"," 6.61% 59.855 11 Template:Further"," 5.64% 51.000 1 Template:Pp-pc"," 4.64% 42.003 6 Template:Main_other"]},"scribunto":{"limitreport-timeusage":{"value":"0.422","limit":"10.000"},"limitreport-memusage":{"value":5383265,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-79cd87d5f8-t72h2","timestamp":"20250319180553","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Abstraction (computer science)","url":"https:\/\/en.wikipedia.org\/wiki\/Abstraction_(computer_science)","sameAs":"http:\/\/www.wikidata.org\/entity\/Q224055","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q224055","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2002-07-04T21:10:08Z","headline":"technique for arranging complexity of computer systems"}</script> </body> </html>