CINXE.COM

Olio-ohjelmointi – 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-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="fi" dir="ltr"> <head> <meta charset="UTF-8"> <title>Olio-ohjelmointi – 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-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )fiwikimwclientpreferences=([^;]+)/);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":[",\t."," \t,"],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "fi normal","wgMonthNames":["","tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"wgRequestId":"bbf9d462-c6c5-468b-8e8c-c41c9089afd3","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Olio-ohjelmointi","wgTitle":"Olio-ohjelmointi","wgCurRevisionId":22929254,"wgRevisionId":22929254,"wgArticleId":10093,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Kielenhuoltoa kaipaavat sivut","Tarkistettava","Lähteettömät artikkelit","Käännetyt artikkelit","Lähdeviitteet puuttuvat","Seulonnan keskeiset artikkelit","Sivut, jotka käyttävät ISBN-taikalinkkejä","Olio-ohjelmointi"],"wgPageViewLanguage":"fi","wgPageContentLanguage":"fi","wgPageContentModel":"wikitext","wgRelevantPageName":"Olio-ohjelmointi","wgRelevantArticleId":10093,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true, "wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":3}}},"wgStableRevisionId":22929254,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"fi","pageLanguageDir":"ltr","pageVariantFallbacks":"fi"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":80000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q79872","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false, "wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.hidePersonalSandboxEdits":"ready","ext.gadget.fiwiki_flaggedrevs_css_rcfix":"ready","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","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","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.flaggedRevs.advanced", "ext.gadget.publicarttablesort","ext.gadget.ViikonKilpailu","ext.gadget.WikiLovesMonunmets","ext.gadget.ProtectionIndicator","ext.gadget.frwiki_infobox_v3","ext.gadget.linkeddata","ext.gadget.perustiedotwikidatassa","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","oojs-ui.styles.icons-media","oojs-ui-core.icons"];</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=fi&amp;modules=ext.cite.styles%7Cext.flaggedRevs.basic%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=fi&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=fi&amp;modules=ext.gadget.fiwiki_flaggedrevs_css_rcfix%2ChidePersonalSandboxEdits&amp;only=styles&amp;skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=fi&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.16"> <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="Olio-ohjelmointi – 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="//fi.m.wikipedia.org/wiki/Olio-ohjelmointi"> <link rel="alternate" type="application/x-wiki" title="Muokkaa" href="/w/index.php?title=Olio-ohjelmointi&amp;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 (fi)"> <link rel="EditURI" type="application/rsd+xml" href="//fi.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://fi.wikipedia.org/wiki/Olio-ohjelmointi"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fi"> <link rel="alternate" type="application/atom+xml" title="Wikipedia-Atom-syöte" href="/w/index.php?title=Toiminnot:Tuoreet_muutokset&amp;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-Olio-ohjelmointi rootpage-Olio-ohjelmointi skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Siirry sisältöön</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="Sivusto"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" title="Päävalikko" > <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="Päävalikko" > <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">Päävalikko</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">Päävalikko</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">piilota</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Valikko </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Wikipedia:Etusivu" title="Siirry etusivulle [z]" accesskey="z"><span>Etusivu</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:Tietoja"><span>Tietoja Wikipediasta</span></a></li><li id="n-allarticles" class="mw-list-item"><a href="/wiki/Wikipedia:Selaa_luokittain"><span>Kaikki sivut</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Toiminnot:Satunnainen_sivu" title="Avaa satunnainen sivu [x]" accesskey="x"><span>Satunnainen artikkeli</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/Toiminnot:Toimintosivut"><span>Toimintosivut</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Osallistuminen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Ohje:Sis%C3%A4llys" title="Ohjeita"><span>Ohje</span></a></li><li id="n-Kahvihuone" class="mw-list-item"><a href="/wiki/Wikipedia:Kahvihuone"><span>Kahvihuone</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Wikipedia:Ajankohtaista" title="Taustatietoa tämänhetkisistä tapahtumista"><span>Ajankohtaista</span></a></li><li id="n-Tuoreet-odottavat-muutokset" class="mw-list-item"><a href="//fi.wikipedia.org/wiki/Toiminnot:Tuoreet_muutokset?damaging=&amp;goodfaith=&amp;hideliu=0&amp;hideanons=0&amp;userExpLevel=&amp;hidemyself=0&amp;hidebyothers=0&amp;hidebots=1&amp;hidehumans=0&amp;hidepatrolled=1&amp;hideunpatrolled=0&amp;hideminor=0&amp;hidemajor=0&amp;hidepageedits=0&amp;hidenewpages=0&amp;hidecategorization=1&amp;hideWikibase=1&amp;hidelog=0&amp;highlight=1&amp;goodfaith__verylikelybad_color=c5&amp;goodfaith__likelybad_color=c4&amp;goodfaith__maybebad_color=c3&amp;damaging__verylikelybad_color=c5&amp;damaging__likelybad_color=c4&amp;damaging__maybebad_color=c3"><span>Tuoreet odottavat muutokset</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Toiminnot:Tuoreet_muutokset" title="Luettelo tuoreista muutoksista [r]" accesskey="r"><span>Tuoreet muutokset</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Wikipedia:Etusivu" 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="" src="/static/images/mobile/copyright/wikipedia-tagline-fi.svg" width="120" height="13" style="width: 7.5em; 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/Toiminnot:Haku" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Hae Wikipediasta [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Haku</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="Hae Wikipediasta" aria-label="Hae Wikipediasta" autocapitalize="sentences" title="Hae Wikipediasta [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Toiminnot:Haku"> </div> <button class="cdx-button cdx-search-input__end-button">Hae</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Henkilökohtaiset työkalut"> <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="Ulkoasu"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Muuta sivun kirjainkokoa, leveyttä ja väriä" > <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="Ulkoasu" > <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">Ulkoasu</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&amp;wmf_medium=sidebar&amp;wmf_campaign=fi.wikipedia.org&amp;uselang=fi" class=""><span>Lahjoitukset</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=Toiminnot:Luo_tunnus&amp;returnto=Olio-ohjelmointi" title="On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista." class=""><span>Luo tunnus</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=Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n&amp;returnto=Olio-ohjelmointi" title="On suositeltavaa kirjautua sisään. Se ei kuitenkaan ole pakollista. [o]" accesskey="o" class=""><span>Kirjaudu sisään</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="Lisää valintoja" > <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="Henkilökohtaiset työkalut" > <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">Henkilökohtaiset työkalut</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Käyttäjävalikko" > <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&amp;wmf_medium=sidebar&amp;wmf_campaign=fi.wikipedia.org&amp;uselang=fi"><span>Lahjoitukset</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Toiminnot:Luo_tunnus&amp;returnto=Olio-ohjelmointi" title="On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista."><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Luo tunnus</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n&amp;returnto=Olio-ohjelmointi" title="On suositeltavaa kirjautua sisään. Se ei kuitenkaan ole pakollista. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Kirjaudu sisään</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"> Sivut kirjautumattomille muokkaajille <a href="/wiki/Wikipedia:Tervetuloa_Wikipediaan" aria-label="Lue lisää muokkaamisesta"><span>lue lisää</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/Toiminnot:Omat_muokkaukset" title="Luettelo tästä IP-osoitteesta tehdyistä muokkauksista [y]" accesskey="y"><span>Muokkaukset</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Toiminnot:Oma_keskustelu" title="Keskustelu tämän IP-osoitteen muokkauksista [n]" accesskey="n"><span>Keskustelu</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="Sivusto"> <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="Sisällysluettelo" 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">Sisällysluettelo</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">piilota</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">Johdanto</div> </a> </li> <li id="toc-Käsitteitä" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Käsitteitä"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Käsitteitä</span> </div> </a> <ul id="toc-Käsitteitä-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Esimerkki" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Esimerkki"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Esimerkki</span> </div> </a> <ul id="toc-Esimerkki-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Historia" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Historia"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Historia</span> </div> </a> <button aria-controls="toc-Historia-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>Vaihda alaosio Historia</span> </button> <ul id="toc-Historia-sublist" class="vector-toc-list"> <li id="toc-Ensimmäiset_kielet" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Ensimmäiset_kielet"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Ensimmäiset kielet</span> </div> </a> <ul id="toc-Ensimmäiset_kielet-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Läpimurto" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Läpimurto"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Läpimurto</span> </div> </a> <ul id="toc-Läpimurto-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Nykypäivä" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Nykypäivä"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Nykypäivä</span> </div> </a> <ul id="toc-Nykypäivä-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Periaatteita" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Periaatteita"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Periaatteita</span> </div> </a> <ul id="toc-Periaatteita-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Menetelmiä" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Menetelmiä"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Menetelmiä</span> </div> </a> <ul id="toc-Menetelmiä-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Polymorfismi_-_monimuotoisuus" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Polymorfismi_-_monimuotoisuus"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Polymorfismi - monimuotoisuus</span> </div> </a> <ul id="toc-Polymorfismi_-_monimuotoisuus-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Kapselointi" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Kapselointi"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Kapselointi</span> </div> </a> <ul id="toc-Kapselointi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Luokka-_vs._Prototyyppipohjainen" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Luokka-_vs._Prototyyppipohjainen"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Luokka- vs. Prototyyppipohjainen</span> </div> </a> <ul id="toc-Luokka-_vs._Prototyyppipohjainen-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Agenttiohjelmointi" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Agenttiohjelmointi"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>Agenttiohjelmointi</span> </div> </a> <ul id="toc-Agenttiohjelmointi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Avoin_rekursio" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Avoin_rekursio"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>Avoin rekursio</span> </div> </a> <ul id="toc-Avoin_rekursio-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Konstruktori" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Konstruktori"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Konstruktori</span> </div> </a> <ul id="toc-Konstruktori-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Roolisuuntautunut_ohjelmointi" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Roolisuuntautunut_ohjelmointi"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>Roolisuuntautunut ohjelmointi</span> </div> </a> <ul id="toc-Roolisuuntautunut_ohjelmointi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Sovellusalueita" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Sovellusalueita"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>Sovellusalueita</span> </div> </a> <button aria-controls="toc-Sovellusalueita-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>Vaihda alaosio Sovellusalueita</span> </button> <ul id="toc-Sovellusalueita-sublist" class="vector-toc-list"> <li id="toc-Olio-ohjelmoinnin_käyttö_verkkoprotokollassa" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Olio-ohjelmoinnin_käyttö_verkkoprotokollassa"> <div class="vector-toc-text"> <span class="vector-toc-numb">13.1</span> <span>Olio-ohjelmoinnin käyttö verkkoprotokollassa</span> </div> </a> <ul id="toc-Olio-ohjelmoinnin_käyttö_verkkoprotokollassa-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Olio-ohjelmoinnin_käyttö_pelien_kehittämisessä" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Olio-ohjelmoinnin_käyttö_pelien_kehittämisessä"> <div class="vector-toc-text"> <span class="vector-toc-numb">13.2</span> <span>Olio-ohjelmoinnin käyttö pelien kehittämisessä</span> </div> </a> <ul id="toc-Olio-ohjelmoinnin_käyttö_pelien_kehittämisessä-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Ongelmia" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Ongelmia"> <div class="vector-toc-text"> <span class="vector-toc-numb">14</span> <span>Ongelmia</span> </div> </a> <ul id="toc-Ongelmia-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Olion_ja_luokan_ero" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Olion_ja_luokan_ero"> <div class="vector-toc-text"> <span class="vector-toc-numb">15</span> <span>Olion ja luokan ero</span> </div> </a> <ul id="toc-Olion_ja_luokan_ero-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Tukevia_kieliä" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Tukevia_kieliä"> <div class="vector-toc-text"> <span class="vector-toc-numb">16</span> <span>Tukevia kieliä</span> </div> </a> <ul id="toc-Tukevia_kieliä-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lähteet" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Lähteet"> <div class="vector-toc-text"> <span class="vector-toc-numb">17</span> <span>Lähteet</span> </div> </a> <button aria-controls="toc-Lähteet-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>Vaihda alaosio Lähteet</span> </button> <ul id="toc-Lähteet-sublist" class="vector-toc-list"> <li id="toc-Viitteet" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Viitteet"> <div class="vector-toc-text"> <span class="vector-toc-numb">17.1</span> <span>Viitteet</span> </div> </a> <ul id="toc-Viitteet-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Kirjallisuutta" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Kirjallisuutta"> <div class="vector-toc-text"> <span class="vector-toc-numb">18</span> <span>Kirjallisuutta</span> </div> </a> <ul id="toc-Kirjallisuutta-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Aiheesta_muualla" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Aiheesta_muualla"> <div class="vector-toc-text"> <span class="vector-toc-numb">19</span> <span>Aiheesta muualla</span> </div> </a> <ul id="toc-Aiheesta_muualla-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="Sisällysluettelo" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" title="Sisällysluettelo" > <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="Vaihda sisällysluettelo" > <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">Vaihda sisällysluettelo</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">Olio-ohjelmointi</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="Mene artikkeliin toisella kielellä. Saatavilla 78 kielellä" > <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-78" 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">78 kieltä</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/Objekgeori%C3%ABnteerde_programmering" title="Objekgeoriënteerde programmering — afrikaans" lang="af" hreflang="af" data-title="Objekgeoriënteerde programmering" 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%A8%D8%B1%D9%85%D8%AC%D8%A9_%D9%83%D8%A7%D8%A6%D9%86%D9%8A%D8%A9_%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%87" title="برمجة كائنية التوجه — arabia" lang="ar" hreflang="ar" data-title="برمجة كائنية التوجه" data-language-autonym="العربية" data-language-local-name="arabia" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/Programaci%C3%B3n_empobinada_a_oxetos" title="Programación empobinada a oxetos — asturia" lang="ast" hreflang="ast" data-title="Programación empobinada a oxetos" data-language-autonym="Asturianu" data-language-local-name="asturia" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Obyekt_y%C3%B6n%C3%BCml%C3%BC_proqramla%C5%9Fd%C4%B1rma" title="Obyekt yönümlü proqramlaşdırma — azeri" lang="az" hreflang="az" data-title="Obyekt yönümlü proqramlaşdırma" data-language-autonym="Azərbaycanca" data-language-local-name="azeri" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Pemrograman_berorientasi_objek" title="Pemrograman berorientasi objek — indonesia" lang="id" hreflang="id" data-title="Pemrograman berorientasi objek" data-language-autonym="Bahasa Indonesia" data-language-local-name="indonesia" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Pengaturcaraan_berorientasi_objek" title="Pengaturcaraan berorientasi objek — malaiji" lang="ms" hreflang="ms" data-title="Pengaturcaraan berorientasi objek" data-language-autonym="Bahasa Melayu" data-language-local-name="malaiji" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%85%E0%A6%AC%E0%A6%9C%E0%A7%87%E0%A6%95%E0%A7%8D%E0%A6%9F_%E0%A6%93%E0%A6%B0%E0%A6%BF%E0%A6%AF%E0%A6%BC%E0%A7%87%E0%A6%A8%E0%A7%8D%E0%A6%9F%E0%A7%87%E0%A6%A1_%E0%A6%AA%E0%A7%8D%E0%A6%B0%E0%A7%8B%E0%A6%97%E0%A7%8D%E0%A6%B0%E0%A6%BE%E0%A6%AE%E0%A6%BF%E0%A6%82" title="অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং — bengali" lang="bn" hreflang="bn" data-title="অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং" data-language-autonym="বাংলা" data-language-local-name="bengali" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/Bu%CC%8Dt-ki%C4%81%E2%81%BF_t%C5%8D-hi%C3%B2ng_th%C3%AAng-sek_s%C3%A8-k%C3%A8" title="Bu̍t-kiāⁿ tō-hiòng thêng-sek sè-kè — min nan -kiina" lang="nan" hreflang="nan" data-title="Bu̍t-kiāⁿ tō-hiòng thêng-sek sè-kè" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="min nan -kiina" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/%D0%90%D0%B1%E2%80%99%D0%B5%D0%BA%D1%82%D0%BD%D0%B0-%D0%B0%D1%80%D1%8B%D0%B5%D0%BD%D1%82%D0%B0%D0%B2%D0%B0%D0%BD%D0%B0%D0%B5_%D0%BF%D1%80%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%B0%D0%B2%D0%B0%D0%BD%D0%BD%D0%B5" title="Аб’ектна-арыентаванае праграмаванне — valkovenäjä" lang="be" hreflang="be" data-title="Аб’ектна-арыентаванае праграмаванне" data-language-autonym="Беларуская" data-language-local-name="valkovenäjä" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-be-x-old mw-list-item"><a href="https://be-tarask.wikipedia.org/wiki/%D0%90%D0%B1%E2%80%99%D0%B5%D0%BA%D1%82%D0%BD%D0%B0-%D0%B0%D1%80%D1%8B%D0%B5%D0%BD%D1%82%D0%B0%D0%B2%D0%B0%D0%BD%D0%B0%D0%B5_%D0%BF%D1%80%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%B0%D0%B2%D0%B0%D0%BD%D1%8C%D0%BD%D0%B5" title="Аб’ектна-арыентаванае праграмаваньне — Belarusian (Taraškievica orthography)" lang="be-tarask" hreflang="be-tarask" data-title="Аб’ектна-арыентаванае праграмаваньне" data-language-autonym="Беларуская (тарашкевіца)" data-language-local-name="Belarusian (Taraškievica orthography)" class="interlanguage-link-target"><span>Беларуская (тарашкевіца)</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Objektno_orijentirano_programiranje" title="Objektno orijentirano programiranje — bosnia" lang="bs" hreflang="bs" data-title="Objektno orijentirano programiranje" data-language-autonym="Bosanski" data-language-local-name="bosnia" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/%D0%9E%D0%B1%D0%B5%D0%BA%D1%82%D0%BD%D0%BE_%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%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%D0%BD%D0%B5" title="Обектно ориентирано програмиране — bulgaria" lang="bg" hreflang="bg" data-title="Обектно ориентирано програмиране" data-language-autonym="Български" data-language-local-name="bulgaria" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Programaci%C3%B3_orientada_a_objectes" title="Programació orientada a objectes — katalaani" lang="ca" hreflang="ca" data-title="Programació orientada a objectes" data-language-autonym="Català" data-language-local-name="katalaani" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Objektov%C4%9B_orientovan%C3%A9_programov%C3%A1n%C3%AD" title="Objektově orientované programování — tšekki" lang="cs" hreflang="cs" data-title="Objektově orientované programování" data-language-autonym="Čeština" data-language-local-name="tšekki" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Objektorienteret_programmering" title="Objektorienteret programmering — tanska" lang="da" hreflang="da" data-title="Objektorienteret programmering" data-language-autonym="Dansk" data-language-local-name="tanska" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-ary mw-list-item"><a href="https://ary.wikipedia.org/wiki/%D8%A8%D8%B1%D9%85%D8%AC%D8%A9_%D8%B3%D8%AA%D9%88%D9%86%D9%8A%D8%A9" title="برمجة ستونية — marokonarabia" lang="ary" hreflang="ary" data-title="برمجة ستونية" data-language-autonym="الدارجة" data-language-local-name="marokonarabia" class="interlanguage-link-target"><span>الدارجة</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Objektorientierte_Programmierung" title="Objektorientierte Programmierung — saksa" lang="de" hreflang="de" data-title="Objektorientierte Programmierung" data-language-autonym="Deutsch" data-language-local-name="saksa" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Objektorienteeritud_programmeerimine" title="Objektorienteeritud programmeerimine — viro" lang="et" hreflang="et" data-title="Objektorienteeritud programmeerimine" data-language-autonym="Eesti" data-language-local-name="viro" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/%CE%91%CE%BD%CF%84%CE%B9%CE%BA%CE%B5%CE%B9%CE%BC%CE%B5%CE%BD%CE%BF%CF%83%CF%84%CF%81%CE%B5%CF%86%CE%AE%CF%82_%CF%80%CF%81%CE%BF%CE%B3%CF%81%CE%B1%CE%BC%CE%BC%CE%B1%CF%84%CE%B9%CF%83%CE%BC%CF%8C%CF%82" title="Αντικειμενοστρεφής προγραμματισμός — kreikka" lang="el" hreflang="el" data-title="Αντικειμενοστρεφής προγραμματισμός" data-language-autonym="Ελληνικά" data-language-local-name="kreikka" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming — englanti" lang="en" hreflang="en" data-title="Object-oriented programming" data-language-autonym="English" data-language-local-name="englanti" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" title="Programación orientada a objetos — espanja" lang="es" hreflang="es" data-title="Programación orientada a objetos" data-language-autonym="Español" data-language-local-name="espanja" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Objektema_programado" title="Objektema programado — esperanto" lang="eo" hreflang="eo" data-title="Objektema programado" data-language-autonym="Esperanto" data-language-local-name="esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Objektuetara_bideratutako_programazioa" title="Objektuetara bideratutako programazioa — baski" lang="eu" hreflang="eu" data-title="Objektuetara bideratutako programazioa" data-language-autonym="Euskara" data-language-local-name="baski" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D8%B4%DB%8C%D8%A1%DA%AF%D8%B1%D8%A7" title="برنامه‌نویسی شیءگرا — persia" lang="fa" hreflang="fa" data-title="برنامه‌نویسی شیءگرا" data-language-autonym="فارسی" data-language-local-name="persia" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet" title="Programmation orientée objet — ranska" lang="fr" hreflang="fr" data-title="Programmation orientée objet" data-language-autonym="Français" data-language-local-name="ranska" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_obxectos" title="Programación orientada a obxectos — galicia" lang="gl" hreflang="gl" data-title="Programación orientada a obxectos" data-language-autonym="Galego" data-language-local-name="galicia" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D" title="객체 지향 프로그래밍 — korea" lang="ko" hreflang="ko" data-title="객체 지향 프로그래밍" data-language-autonym="한국어" data-language-local-name="korea" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/%D5%95%D5%A2%D5%B5%D5%A5%D5%AF%D5%BF_%D5%AF%D5%B8%D5%B2%D5%B4%D5%B6%D5%B8%D6%80%D5%B8%D5%B7%D5%BE%D5%A1%D5%AE_%D5%AE%D6%80%D5%A1%D5%A3%D6%80%D5%A1%D5%BE%D5%B8%D6%80%D5%B8%D6%82%D5%B4" title="Օբյեկտ կողմնորոշված ծրագրավորում — armenia" lang="hy" hreflang="hy" data-title="Օբյեկտ կողմնորոշված ծրագրավորում" data-language-autonym="Հայերեն" data-language-local-name="armenia" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%91%E0%A4%AC%E0%A5%8D%E0%A4%9C%E0%A5%87%E0%A4%95%E0%A5%8D%E0%A4%9F_%E0%A4%93%E0%A4%B0%E0%A4%BF%E0%A4%8F%E0%A4%82%E0%A4%9F%E0%A5%87%E0%A4%A1_%E0%A4%AA%E0%A5%8D%E0%A4%B0%E0%A5%8B%E0%A4%97%E0%A5%8D%E0%A4%B0%E0%A4%BE%E0%A4%AE%E0%A4%BF%E0%A4%82%E0%A4%97" title="ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग — hindi" lang="hi" hreflang="hi" data-title="ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग" data-language-autonym="हिन्दी" data-language-local-name="hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hr mw-list-item"><a href="https://hr.wikipedia.org/wiki/Objektno_orijentirano_programiranje" title="Objektno orijentirano programiranje — kroatia" lang="hr" hreflang="hr" data-title="Objektno orijentirano programiranje" data-language-autonym="Hrvatski" data-language-local-name="kroatia" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-io mw-list-item"><a href="https://io.wikipedia.org/wiki/Objekt-orientizita_programifo" title="Objekt-orientizita programifo — ido" lang="io" hreflang="io" data-title="Objekt-orientizita programifo" data-language-autonym="Ido" data-language-local-name="ido" class="interlanguage-link-target"><span>Ido</span></a></li><li class="interlanguage-link interwiki-ilo mw-list-item"><a href="https://ilo.wikipedia.org/wiki/Panangprograma_a_naitaratar_iti_bambanag" title="Panangprograma a naitaratar iti bambanag — iloko" lang="ilo" hreflang="ilo" data-title="Panangprograma a naitaratar iti bambanag" data-language-autonym="Ilokano" data-language-local-name="iloko" class="interlanguage-link-target"><span>Ilokano</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/Hlutbundin_forritun" title="Hlutbundin forritun — islanti" lang="is" hreflang="is" data-title="Hlutbundin forritun" data-language-autonym="Íslenska" data-language-local-name="islanti" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Programmazione_orientata_agli_oggetti" title="Programmazione orientata agli oggetti — italia" lang="it" hreflang="it" data-title="Programmazione orientata agli oggetti" data-language-autonym="Italiano" data-language-local-name="italia" 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%AA%D7%9B%D7%A0%D7%95%D7%AA_%D7%9E%D7%95%D7%A0%D7%97%D7%94-%D7%A2%D7%A6%D7%9E%D7%99%D7%9D" title="תכנות מונחה-עצמים — heprea" lang="he" hreflang="he" data-title="תכנות מונחה-עצמים" data-language-autonym="עברית" data-language-local-name="heprea" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wikipedia.org/wiki/%E1%83%9D%E1%83%91%E1%83%98%E1%83%94%E1%83%A5%E1%83%A2%E1%83%96%E1%83%94_%E1%83%9D%E1%83%A0%E1%83%98%E1%83%94%E1%83%9C%E1%83%A2%E1%83%98%E1%83%A0%E1%83%94%E1%83%91%E1%83%A3%E1%83%9A%E1%83%98_%E1%83%9E%E1%83%A0%E1%83%9D%E1%83%92%E1%83%A0%E1%83%90%E1%83%9B%E1%83%98%E1%83%A0%E1%83%94%E1%83%91%E1%83%90" title="ობიექტზე ორიენტირებული პროგრამირება — georgia" lang="ka" hreflang="ka" data-title="ობიექტზე ორიენტირებული პროგრამირება" data-language-autonym="ქართული" data-language-local-name="georgia" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%96%D0%B3%D0%B5-%D0%B1%D0%B0%D2%93%D1%8B%D1%82%D1%82%D0%B0%D0%BB%D2%93%D0%B0%D0%BD_%D0%B1%D0%B0%D2%93%D0%B4%D0%B0%D1%80%D0%BB%D0%B0%D0%BC%D0%B0%D0%BB%D0%B0%D1%83" title="Объектіге-бағытталған бағдарламалау — kazakki" lang="kk" hreflang="kk" data-title="Объектіге-бағытталған бағдарламалау" data-language-autonym="Қазақша" data-language-local-name="kazakki" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wikipedia.org/wiki/%D0%9E%D0%B1%D0%B6%D0%B5%D0%BA%D1%82%D0%BA%D0%B5_%D0%B1%D0%B0%D0%B3%D1%8B%D1%82%D1%82%D0%B0%D0%BB%D0%B3%D0%B0%D0%BD_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D0%BB%D0%BE%D0%BE" title="Обжектке багытталган программалоо — kirgiisi" lang="ky" hreflang="ky" data-title="Обжектке багытталган программалоо" data-language-autonym="Кыргызча" data-language-local-name="kirgiisi" class="interlanguage-link-target"><span>Кыргызча</span></a></li><li class="interlanguage-link interwiki-sw mw-list-item"><a href="https://sw.wikipedia.org/wiki/Uprogramishaji_kiviumbile" title="Uprogramishaji kiviumbile — swahili" lang="sw" hreflang="sw" data-title="Uprogramishaji kiviumbile" data-language-autonym="Kiswahili" data-language-local-name="swahili" class="interlanguage-link-target"><span>Kiswahili</span></a></li><li class="interlanguage-link interwiki-la mw-list-item"><a href="https://la.wikipedia.org/wiki/Programmatura_ad_res_directa" title="Programmatura ad res directa — latina" lang="la" hreflang="la" data-title="Programmatura ad res directa" data-language-autonym="Latina" data-language-local-name="latina" class="interlanguage-link-target"><span>Latina</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Objektorient%C4%93t%C4%81_programm%C4%93%C5%A1ana" title="Objektorientētā programmēšana — latvia" lang="lv" hreflang="lv" data-title="Objektorientētā programmēšana" data-language-autonym="Latviešu" data-language-local-name="latvia" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Objektinis_programavimas" title="Objektinis programavimas — liettua" lang="lt" hreflang="lt" data-title="Objektinis programavimas" data-language-autonym="Lietuvių" data-language-local-name="liettua" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s" title="Objektumorientált programozás — unkari" lang="hu" hreflang="hu" data-title="Objektumorientált programozás" data-language-autonym="Magyar" data-language-local-name="unkari" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/%D0%9E%D0%B1%D1%98%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%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="Објектно-ориентирано програмирање — makedonia" lang="mk" hreflang="mk" data-title="Објектно-ориентирано програмирање" data-language-autonym="Македонски" data-language-local-name="makedonia" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%92%E0%B4%AC%E0%B5%8D%E0%B4%9C%E0%B4%95%E0%B5%8D%E0%B4%B1%E0%B5%8D%E0%B4%B1%E0%B5%8D_%E0%B4%93%E0%B4%B1%E0%B4%BF%E0%B4%AF%E0%B4%A8%E0%B5%8D%E0%B4%B1%E0%B4%A1%E0%B5%8D_%E0%B4%AA%E0%B5%8D%E0%B4%B0%E0%B5%8B%E0%B4%97%E0%B5%8D%E0%B4%B0%E0%B4%BE%E0%B4%AE%E0%B4%BF%E0%B4%99%E0%B5%8D_%E0%B4%AD%E0%B4%BE%E0%B4%B7" title="ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ് ഭാഷ — malajalam" lang="ml" hreflang="ml" data-title="ഒബ്ജക്റ്റ് ഓറിയന്റഡ് പ്രോഗ്രാമിങ് ഭാഷ" data-language-autonym="മലയാളം" data-language-local-name="malajalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mr mw-list-item"><a href="https://mr.wikipedia.org/wiki/%E0%A4%B5%E0%A4%B8%E0%A5%8D%E0%A4%A4%E0%A5%81%E0%A4%AD%E0%A4%BF%E0%A4%AE%E0%A5%81%E0%A4%96_%E0%A4%86%E0%A4%9C%E0%A5%8D%E0%A4%9E%E0%A4%BE%E0%A4%B5%E0%A4%B2%E0%A5%80" title="वस्तुभिमुख आज्ञावली — marathi" lang="mr" hreflang="mr" data-title="वस्तुभिमुख आज्ञावली" data-language-autonym="मराठी" data-language-local-name="marathi" class="interlanguage-link-target"><span>मराठी</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D1%85%D0%B0%D0%BD%D0%B4%D0%B0%D0%BB%D1%82%D0%B0%D1%82_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%87%D0%BB%D0%B0%D0%BB" title="Объект хандалтат программчлал — mongoli" lang="mn" hreflang="mn" data-title="Объект хандалтат программчлал" data-language-autonym="Монгол" data-language-local-name="mongoli" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wikipedia.org/wiki/%E1%80%A1%E1%80%B1%E1%80%AC%E1%80%B7%E1%80%97%E1%80%BA%E1%80%82%E1%80%BB%E1%80%80%E1%80%BA_%E1%80%A1%E1%80%AD%E1%80%AF%E1%80%9B%E1%80%AE%E1%80%9A%E1%80%84%E1%80%B7%E1%80%BA%E1%80%90%E1%80%80%E1%80%BA_%E1%80%95%E1%80%9B%E1%80%AD%E1%80%AF%E1%80%82%E1%80%9B%E1%80%99%E1%80%BA%E1%80%B8%E1%80%99%E1%80%84%E1%80%BA%E1%80%B8" title="အော့ဗ်ဂျက် အိုရီယင့်တက် ပရိုဂရမ်းမင်း — burma" lang="my" hreflang="my" data-title="အော့ဗ်ဂျက် အိုရီယင့်တက် ပရိုဂရမ်းမင်း" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="burma" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-nl badge-Q70894304 mw-list-item" title=""><a href="https://nl.wikipedia.org/wiki/Objectgeori%C3%ABnteerd_programmeren" title="Objectgeoriënteerd programmeren — hollanti" lang="nl" hreflang="nl" data-title="Objectgeoriënteerd programmeren" data-language-autonym="Nederlands" data-language-local-name="hollanti" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" title="オブジェクト指向プログラミング — japani" lang="ja" hreflang="ja" data-title="オブジェクト指向プログラミング" data-language-autonym="日本語" data-language-local-name="japani" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Objektorientert_programmering" title="Objektorientert programmering — norjan bokmål" lang="nb" hreflang="nb" data-title="Objektorientert programmering" data-language-autonym="Norsk bokmål" data-language-local-name="norjan bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-nn mw-list-item"><a href="https://nn.wikipedia.org/wiki/Objektorientert_programmering" title="Objektorientert programmering — norjan nynorsk" lang="nn" hreflang="nn" data-title="Objektorientert programmering" data-language-autonym="Norsk nynorsk" data-language-local-name="norjan nynorsk" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/Obyektga_yo%CA%BBnaltirilgan_dasturlash" title="Obyektga yoʻnaltirilgan dasturlash — uzbekki" lang="uz" hreflang="uz" data-title="Obyektga yoʻnaltirilgan dasturlash" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="uzbekki" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Programowanie_obiektowe" title="Programowanie obiektowe — puola" lang="pl" hreflang="pl" data-title="Programowanie obiektowe" data-language-autonym="Polski" data-language-local-name="puola" 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/Programa%C3%A7%C3%A3o_orientada_a_objetos" title="Programação orientada a objetos — portugali" lang="pt" hreflang="pt" data-title="Programação orientada a objetos" data-language-autonym="Português" data-language-local-name="portugali" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-kaa mw-list-item"><a href="https://kaa.wikipedia.org/wiki/Obyektke_ba%C7%B5darlan%C7%B5an_programmalast%C4%B1r%C4%B1w" title="Obyektke baǵdarlanǵan programmalastırıw — karakalpakki" lang="kaa" hreflang="kaa" data-title="Obyektke baǵdarlanǵan programmalastırıw" data-language-autonym="Qaraqalpaqsha" data-language-local-name="karakalpakki" class="interlanguage-link-target"><span>Qaraqalpaqsha</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Programare_orientat%C4%83_pe_obiecte" title="Programare orientată pe obiecte — romania" lang="ro" hreflang="ro" data-title="Programare orientată pe obiecte" data-language-autonym="Română" data-language-local-name="romania" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-rue mw-list-item"><a href="https://rue.wikipedia.org/wiki/%D0%9E%D0%B1%D1%94%D0%BA%D1%82%D0%BE%D0%B2%D0%BE_%D0%BE%D1%80%D1%8C%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D2%91%D1%80%D0%B0%D0%BC%D0%BE%D0%B2%D0%B0%D0%BD%D1%8F" title="Обєктово орьєнтоване проґрамованя — ruteeni" lang="rue" hreflang="rue" data-title="Обєктово орьєнтоване проґрамованя" data-language-autonym="Русиньскый" data-language-local-name="ruteeni" class="interlanguage-link-target"><span>Русиньскый</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Объектно-ориентированное программирование — venäjä" lang="ru" hreflang="ru" data-title="Объектно-ориентированное программирование" data-language-autonym="Русский" data-language-local-name="venäjä" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Programimi_i_orientuar_n%C3%AB_objekte" title="Programimi i orientuar në objekte — albania" lang="sq" hreflang="sq" data-title="Programimi i orientuar në objekte" data-language-autonym="Shqip" data-language-local-name="albania" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-scn mw-list-item"><a href="https://scn.wikipedia.org/wiki/Prugrammazzioni_vutata_a_l%27uggetti" title="Prugrammazzioni vutata a l&#039;uggetti — sisilia" lang="scn" hreflang="scn" data-title="Prugrammazzioni vutata a l&#039;uggetti" data-language-autonym="Sicilianu" data-language-local-name="sisilia" class="interlanguage-link-target"><span>Sicilianu</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wikipedia.org/wiki/%E0%B7%80%E0%B7%83%E0%B7%8A%E0%B6%AD%E0%B7%94_%E0%B6%B1%E0%B7%90%E0%B6%B9%E0%B7%94%E0%B6%BB%E0%B7%94_%E0%B6%9A%E0%B7%8A%E2%80%8D%E0%B6%BB%E0%B6%B8%E0%B6%BD%E0%B7%9A%E0%B6%9B%E0%B6%B1%E0%B6%BA" title="වස්තු නැඹුරු ක්‍රමලේඛනය — sinhala" lang="si" hreflang="si" data-title="වස්තු නැඹුරු ක්‍රමලේඛනය" data-language-autonym="සිංහල" data-language-local-name="sinhala" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming — Simple English" lang="en-simple" hreflang="en-simple" data-title="Object-oriented programming" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/Objektovo_orientovan%C3%A9_programovanie" title="Objektovo orientované programovanie — slovakki" lang="sk" hreflang="sk" data-title="Objektovo orientované programovanie" data-language-autonym="Slovenčina" data-language-local-name="slovakki" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%D9%BE%D8%B1%DB%86%DA%AF%D8%B1%D8%A7%D9%85%D8%B3%D8%A7%D8%B2%DB%8C%DB%8C_%D8%AA%DB%95%D9%86%D8%AE%D9%88%D8%A7%D8%B2" title="پرۆگرامسازیی تەنخواز — soranî" lang="ckb" hreflang="ckb" data-title="پرۆگرامسازیی تەنخواز" data-language-autonym="کوردی" data-language-local-name="soranî" 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%9E%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="Објектно оријентисано програмирање — serbia" lang="sr" hreflang="sr" data-title="Објектно оријентисано програмирање" data-language-autonym="Српски / srpski" data-language-local-name="serbia" 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/Objektno_orijentirano_programiranje" title="Objektno orijentirano programiranje — serbokroaatti" lang="sh" hreflang="sh" data-title="Objektno orijentirano programiranje" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="serbokroaatti" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Objektorienterad_programmering" title="Objektorienterad programmering — ruotsi" lang="sv" hreflang="sv" data-title="Objektorienterad programmering" data-language-autonym="Svenska" data-language-local-name="ruotsi" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%AA%E0%AF%8A%E0%AE%B0%E0%AF%81%E0%AE%B3%E0%AF%8D_%E0%AE%A8%E0%AF%8B%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%81_%E0%AE%A8%E0%AE%BF%E0%AE%B0%E0%AE%B2%E0%AE%BE%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AE%AE%E0%AF%8D" title="பொருள் நோக்கு நிரலாக்கம் — tamili" lang="ta" hreflang="ta" data-title="பொருள் நோக்கு நிரலாக்கம்" data-language-autonym="தமிழ்" data-language-local-name="tamili" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1%E0%B9%80%E0%B8%8A%E0%B8%B4%E0%B8%87%E0%B8%A7%E0%B8%B1%E0%B8%95%E0%B8%96%E0%B8%B8" title="การเขียนโปรแกรมเชิงวัตถุ — thai" lang="th" hreflang="th" data-title="การเขียนโปรแกรมเชิงวัตถุ" data-language-autonym="ไทย" data-language-local-name="thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/L%E1%BA%ADp_tr%C3%ACnh_h%C6%B0%E1%BB%9Bng_%C4%91%E1%BB%91i_t%C6%B0%E1%BB%A3ng" title="Lập trình hướng đối tượng — vietnam" lang="vi" hreflang="vi" data-title="Lập trình hướng đối tượng" data-language-autonym="Tiếng Việt" data-language-local-name="vietnam" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/%D0%91%D0%B0%D1%80%D0%BD%D0%BE%D0%BC%D0%B0%D0%BD%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%B8_%D1%88%D0%B0%D0%B9%D1%8A%D0%B3%D0%B0%D1%80%D0%BE" title="Барноманависии шайъгаро — tadžikki" lang="tg" hreflang="tg" data-title="Барноманависии шайъгаро" data-language-autonym="Тоҷикӣ" data-language-local-name="tadžikki" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Nesne_y%C3%B6nelimli_programlama" title="Nesne yönelimli programlama — turkki" lang="tr" hreflang="tr" data-title="Nesne yönelimli programlama" data-language-autonym="Türkçe" data-language-local-name="turkki" 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%9E%D0%B1%27%D1%94%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%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="Об&#039;єктно-орієнтоване програмування — ukraina" lang="uk" hreflang="uk" data-title="Об&#039;єктно-орієнтоване програмування" data-language-autonym="Українська" data-language-local-name="ukraina" 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%A7%D9%88%D8%A8%D8%AC%DB%8C%DA%A9%D9%B9_%D8%A7%D9%88%D8%B1%DB%8C%D8%A6%D9%86%D9%B9%DA%88_%D9%BE%D8%B1%D9%88%DA%AF%D8%B1%D8%A7%D9%85%D9%86%DA%AF" 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-wuu mw-list-item"><a href="https://wuu.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BC%8F%E7%BC%96%E5%88%B6" title="面向对象程式编制 — wu-kiina" lang="wuu" hreflang="wuu" data-title="面向对象程式编制" data-language-autonym="吴语" data-language-local-name="wu-kiina" class="interlanguage-link-target"><span>吴语</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E7%89%A9%E4%BB%B6%E5%B0%8E%E5%90%91%E7%B7%A8%E7%A8%8B" title="物件導向編程 — kantoninkiina" lang="yue" hreflang="yue" data-title="物件導向編程" data-language-autonym="粵語" data-language-local-name="kantoninkiina" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1" title="面向对象程序设计 — kiina" lang="zh" hreflang="zh" data-title="面向对象程序设计" data-language-autonym="中文" data-language-local-name="kiina" 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/Q79872#sitelinks-wikipedia" title="Muokkaa kieltenvälisiä linkkejä" class="wbc-editpage">Muokkaa linkkejä</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="Nimiavaruudet"> <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/Olio-ohjelmointi" title="Näytä sisältösivu [c]" accesskey="c"><span>Artikkeli</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Keskustelu:Olio-ohjelmointi" rel="discussion" title="Keskustele sisällöstä [t]" accesskey="t"><span>Keskustelu</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="Valitse kieliversio" > <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">suomi</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="Näkymät"> <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/Olio-ohjelmointi"><span>Lue</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit" title="Muokkaa tätä sivua [v]" accesskey="v"><span>Muokkaa</span></a></li><li id="ca-edit" class="collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit" title="Muokkaa tämän sivun lähdekoodia [e]" accesskey="e"><span>Muokkaa wikitekstiä</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=history" title="Sivun aikaisemmat versiot [h]" accesskey="h"><span>Näytä historia</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Sivutyökalut"> <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="Työkalut" > <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">Työkalut</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">Työkalut</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">piilota</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Lisää valintoja" > <div class="vector-menu-heading"> Toiminnot </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/Olio-ohjelmointi"><span>Lue</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit" title="Muokkaa tätä sivua [v]" accesskey="v"><span>Muokkaa</span></a></li><li id="ca-more-edit" class="collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit" title="Muokkaa tämän sivun lähdekoodia [e]" accesskey="e"><span>Muokkaa wikitekstiä</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=history"><span>Näytä historia</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Yleinen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Toiminnot:T%C3%A4nne_viittaavat_sivut/Olio-ohjelmointi" title="Lista sivuista, jotka viittaavat tänne [j]" accesskey="j"><span>Tänne viittaavat sivut</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Toiminnot:Linkitetyt_muutokset/Olio-ohjelmointi" rel="nofollow" title="Viimeisimmät muokkaukset sivuissa, joille viitataan tältä sivulta [k]" accesskey="k"><span>Linkitettyjen sivujen muutokset</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;oldid=22929254" title="Ikilinkki tämän sivun tähän versioon"><span>Ikilinkki</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=info" title="Enemmän tietoa tästä sivusta"><span>Sivun tiedot</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Toiminnot:Viittaus&amp;page=Olio-ohjelmointi&amp;id=22929254&amp;wpFormIdentifier=titleform" title="Tietoa tämän sivun lainaamisesta"><span>Viitetiedot</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Toiminnot:UrlShortener&amp;url=https%3A%2F%2Ffi.wikipedia.org%2Fwiki%2FOlio-ohjelmointi"><span>Lyhennä URL-osoite</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Toiminnot:QrCode&amp;url=https%3A%2F%2Ffi.wikipedia.org%2Fwiki%2FOlio-ohjelmointi"><span>Lataa QR-koodi</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"> Tulosta/vie </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=Toiminnot:DownloadAsPdf&amp;page=Olio-ohjelmointi&amp;action=show-download-screen"><span>Lataa PDF-tiedostona</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Olio-ohjelmointi&amp;printable=yes" title="Tulostettava versio [p]" accesskey="p"><span>Tulostettava versio</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"> Muissa hankkeissa </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Object-oriented_programming" hreflang="en"><span>Wikimedia Commons</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q79872" title="Linkki yhdistettyyn keskustietovaraston kohteeseen [g]" accesskey="g"><span>Wikidata-kohde</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="Sivutyökalut"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Ulkoasu"> <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">Ulkoasu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">piilota</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> <div id="siteSub" class="noprint">Wikipediasta</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="fi" dir="ltr"><table style="" class="metadata plainlinks ambox ambox-style"> <tbody><tr> <td class="ambox-image"><div style="width:52px;text-align:center"> <span typeof="mw:File"><a href="/wiki/Tiedosto:Acap.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/52/Acap.svg/30px-Acap.svg.png" decoding="async" width="30" height="33" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/5/52/Acap.svg/45px-Acap.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/52/Acap.svg/60px-Acap.svg.png 2x" data-file-width="45" data-file-height="50" /></a></span></div> </td> <td class="ambox-text"><b>Tämän artikkelin tai sen osan <a href="/wiki/Ohje:Kielioppi" title="Ohje:Kielioppi">kieliasua</a> on pyydetty parannettavaksi.</b><br /><small>Voit auttaa Wikipediaa <a class="external text" href="https://fi.wikipedia.org/w/index.php?title=Olio-ohjelmointi&amp;action=edit">parantamalla</a> artikkelin kieliasua.</small><br />Tarkennus: <i>käännöstä toisesta wikistä, teksti paikoin mitä sattuu</i> </td></tr></tbody></table> <table style="" class="metadata plainlinks ambox ambox-content"> <tbody><tr> <td class="ambox-image"><div style="width:52px;text-align:center"> <span typeof="mw:File"><a href="/wiki/Tiedosto:Gnome-searchtool.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Gnome-searchtool.svg/40px-Gnome-searchtool.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Gnome-searchtool.svg/60px-Gnome-searchtool.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Gnome-searchtool.svg/80px-Gnome-searchtool.svg.png 2x" data-file-width="64" data-file-height="64" /></a></span></div> </td> <td class="ambox-text"><b>Tämän artikkelin tai sen osan paikkansapitävyys on <a href="/wiki/Wikipedia:Tarkistettavuus" title="Wikipedia:Tarkistettavuus">kyseenalaistettu</a>.</b> Voit auttaa varmistamaan, että kyseenalaistetut väittämät ovat <a href="/wiki/Wikipedia:Tarkistettavuus#Luotettavat_lähteet" title="Wikipedia:Tarkistettavuus">luotettavasti lähteistettyjä</a>. Lisää tietoa saattaa olla <a href="/wiki/Keskustelu:Olio-ohjelmointi" title="Keskustelu:Olio-ohjelmointi">keskustelusivulla</a>.<br />Tarkennus: <i>käännöksiä toisesta wikistä, lähteet kadotettu</i><br /> </td></tr></tbody></table> <table align="right" class="toccolours nomobile" style="margin-left: 15px;"> <tbody><tr> <td align="center" bgcolor="#ccccff"><b><a href="/wiki/Ohjelmointiparadigma" title="Ohjelmointiparadigma">Ohjelmointiparadigmat</a></b> </td></tr> <tr> <td><a href="/wiki/Deklaratiivinen_ohjelmointi" title="Deklaratiivinen ohjelmointi">Deklaratiivinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Ep%C3%A4rakenteellinen_ohjelmointi" title="Epärakenteellinen ohjelmointi">Epärakenteellinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Funktionaalinen_ohjelmointi" title="Funktionaalinen ohjelmointi">Funktionaalinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Geneerinen_ohjelmointi" title="Geneerinen ohjelmointi">Geneerinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Imperatiivinen_ohjelmointi" title="Imperatiivinen ohjelmointi">Imperatiivinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Logiikkapohjainen_ohjelmointi" title="Logiikkapohjainen ohjelmointi">Logiikkapohjainen ohjelmointi</a> </td></tr> <tr> <td><a class="mw-selflink selflink">Olio-ohjelmointi</a> <ul><li><a href="/wiki/Luokkapohjainen_ohjelmointi" title="Luokkapohjainen ohjelmointi">Luokkapohjainen ohjelmointi</a></li> <li><a href="/wiki/Prototyyppipohjainen_ohjelmointi" title="Prototyyppipohjainen ohjelmointi">Prototyyppipohjainen ohjelmointi</a></li></ul> </td></tr> <tr> <td><a href="/wiki/Proseduraalinen_ohjelmointi" title="Proseduraalinen ohjelmointi">Proseduraalinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Rakenteinen_ohjelmointi" title="Rakenteinen ohjelmointi">Rakenteinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Reaktiivinen_ohjelmointi" title="Reaktiivinen ohjelmointi">Reaktiivinen ohjelmointi</a> </td></tr> <tr> <td><a href="/wiki/Rinnakkaisohjelmointi" title="Rinnakkaisohjelmointi">Rinnakkaisohjelmointi</a> </td></tr> </tbody></table> <p><b>Olio-ohjelmointi</b> (<a href="/wiki/Englannin_kieli" title="Englannin kieli">engl.</a> <span lang="en"><i>Object-oriented programming</i></span>, OOP) on <a href="/wiki/Ohjelmointi" title="Ohjelmointi">ohjelmoinnin</a> <a href="/wiki/Ohjelmointiparadigma" title="Ohjelmointiparadigma">ohjelmointiparadigma</a>, jossa ohjelmointiongelmien ratkaisut jäsennetään <a href="/wiki/Olio_(ohjelmointi)" title="Olio (ohjelmointi)">olioiden</a> yhteistoimintana. </p><p>Oliot sisältävät niiden oman sisäisen tilan (kapselointi) sekä julkisen rajapinnan.<sup id="cite_ref-raynp_1-0" class="reference"><a href="#cite_note-raynp-1"><span class="cite-bracket">&#91;</span>1<span class="cite-bracket">&#93;</span></a></sup> Olio-ohjelmointi voi olla:<sup id="cite_ref-raynp_1-1" class="reference"><a href="#cite_note-raynp-1"><span class="cite-bracket">&#91;</span>1<span class="cite-bracket">&#93;</span></a></sup> </p> <ul><li>luokkapohjaista: oliot saavat tilan ja toiminnallisuuden <a href="/wiki/Luokka_(ohjelmointi)" title="Luokka (ohjelmointi)">luokan</a> jäsenien mukaan</li> <li>prototyyppipohjaista: oliot saavat toiminnallisuuden prototyyppioliolta</li></ul> <p>Luokkapohjaisessa ohjelmoinnissa luokat määritellään etukäteen ja oliot luodaan näiden luokkien perusteella, jolloin oliot saavat tilan ja toiminnallisuuden luokan jäsenten mukaan. Esimerkiksi jos kaksi oliota, kuten kissa ja koira, toteutetaan luokasta Eläin, niin ne ovat luonnollisesti eläimiä ja niitä voidaan käsitellä samalla tavalla. Tämä tarkoittaa sitä, että näillä eläinolioilla on samat ominaisuudet. </p><p>Prototyyppipohjaisessa olio-ohjelmoinnissa oliot saavat toiminnallisuuden ja ominaisuudet prototyyppioliolta eikä luokkia ole edes olemassa. Olion prototyyppi on vain toinen olio, johon olio on linkitetty. Jokaisella oliolla on vain yksi prototyyppilinkki. Uusia olioja voidaan luoda niiden prototyypeiksi valittujen jo olemassa olevien oliojen perusteella. Kahta eri olioa, kissa ja koira, voi kutsua eläimeksi, jos eläin-olio on olemassa ja se on molempien kissan ja koiran prototyyppi. Voidaan sanoa eläin luokan olevan saman prototyypin jakavien oliojen ekvivalenssiluokka. Prototyypin ominaisuudet ja metodit delegoituvat kaikille tämän prototyypin määrittämän ekvivalenssiluokan olioille. Olion omistamia yksilöllisiä ominaisuuksia ja metodeja ei saa jakaa muiden saman ekvivalenssiluokan oliojen kanssa. Prototyypin kautta voidaan toteuttaa vain yksi perimä, joka tapahtuu prototyypin kautta. </p><p>Olio-ohjelma muodostuu kokoelmasta yhteistyössä toimivia olioita, kun taas perinteinen proseduraalinen tietokoneohjelma on lista suoritettavia ohjeita tietokoneelle. </p><p>Olio-ohjelmoinnissa tieto ja sitä käsittelevä toiminnallisuus tyypillisesti kootaan yhteen <a href="/wiki/Tietorakenne" title="Tietorakenne">tietorakenteeksi</a>, jota kutsutaan <i>olioksi</i>. Olio käsittelee sisältämäänsä tietoa ja voi vastaanottaa viestejä ja lähettää tietoa muille olioille. Jokainen olio voidaan nähdä itsenäisenä pienenä koneena, jolla on tietty rooli tai vastuu. </p><p>Olio-ohjelmointi on kehitetty helpottamaan ja selkeyttämään yhä monimutkaisemmiksi tullutta ohjelmistojen kehittämistä ja ylläpitoa. Olio-ohjelmoinnin yhtenä tavoitteena on tehdä ohjelmistojen laajentamisesta ja ylläpidosta helpompaa. Yksittäinen olio vastaa jostakin itsenäisestä osa-alueesta ohjelman kokonaisuudessa. Olio on merkityksellinen myös irrotettuna välittömästä asiayhteydestään, jolloin sitä voidaan käyttää myös uusissa asiayhteyksissä. Oliota käyttävän tarvitsee vain tietää mihin tarkoitukseen olio on suunniteltu ja miten sitä pitää käyttää. Koska yhden pienen olion sisäinen ohjelmakoodi on lyhyt, se on yleensä helpommin ymmärrettävissä ja ylläpidettävissä. </p><p>Tietokoneohjelmat voivat hyödyntää olioita monella tapaa. Puhtaissa oliokielissä kaikki kielen alkiot ovat olioita. Useat <a href="/wiki/Ohjelmointikieli" title="Ohjelmointikieli">ohjelmointikielet</a>, kuten <a href="/wiki/C%2B%2B" title="C++">C++</a> sallivat olioiden käyttämisen yhdessä perinteisen ohjelmointimallin sisällä. Oikein käytettynä olio-ohjelmointi nopeuttaa kehitystyötä, vähentää <a href="/wiki/Redundanssi" title="Redundanssi">redundanssia</a>, ohjelmointivirheitä ja helpottaa merkittävästi ohjelmistojen ylläpitoa. Nykyaikaisten tietokoneohjelmien kehittämisessä olio-ohjelmointi on yksi tärkeimmistä työkaluista. Suosittuja olio-ohjelmointia tukevia kieliä ovat muun muassa <a href="/wiki/C%2B%2B" title="C++">C++</a>, <a href="/wiki/C_sharp" title="C sharp">C#</a>, <a href="/wiki/Java" title="Java">Java</a>, <a href="/wiki/Python_(ohjelmointikieli)" title="Python (ohjelmointikieli)">Python</a> ja <a href="/wiki/Visual_Basic" title="Visual Basic">Visual Basic</a>. </p><p>Merkittäviä oliokieliä ovat: <a href="/wiki/Ada_(ohjelmointikieli)" title="Ada (ohjelmointikieli)">Ada</a>, <a href="/wiki/ActionScript" title="ActionScript">ActionScript</a>, <a href="/wiki/C%2B%2B" title="C++">C++</a>, <a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a>, <a href="/wiki/C_sharp" title="C sharp">C#</a>, <a href="/wiki/Dart_(ohjelmointikieli)" title="Dart (ohjelmointikieli)">Dart</a>, <a href="/wiki/Eiffel_(ohjelmointikieli)" title="Eiffel (ohjelmointikieli)">Eiffel</a>, <a href="/wiki/Haxe" title="Haxe">Haxe</a>, <a href="/wiki/Java" title="Java">Java</a>, <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>, <a href="/wiki/Kotlin_(ohjelmointikieli)" title="Kotlin (ohjelmointikieli)">Kotlin</a>, <a href="/wiki/Logo_(ohjelmointikieli)" title="Logo (ohjelmointikieli)">logo</a>, <a href="/wiki/MATLAB" title="MATLAB">MATLAB</a>, <a href="/wiki/Objective-C" title="Objective-C">Objective-C</a>, <a href="/wiki/Object_Pascal" title="Object Pascal">Object Pascal</a>, <a href="/wiki/Perl" title="Perl">Perl</a>, <a href="/wiki/PHP" title="PHP">PHP</a>, <a href="/wiki/Python_(ohjelmointikieli)" title="Python (ohjelmointikieli)">Python</a>, <a href="/wiki/R_(ohjelmointikieli)" title="R (ohjelmointikieli)">R</a>, <a href="/wiki/Ruby" title="Ruby">Ruby</a>, <a href="/wiki/Scala_(ohjelmointikieli)" title="Scala (ohjelmointikieli)">Scala</a>, <a href="/wiki/Simula" title="Simula">Simula</a>, <a href="https://en.wikipedia.org/wiki/Pharo" class="extiw" title="en:Pharo">Pharo</a>, <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a> ja <a href="/wiki/Swift_(ohjelmointikieli)" title="Swift (ohjelmointikieli)">Swift</a>. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Käsitteitä"><span id="K.C3.A4sitteit.C3.A4"></span>Käsitteitä</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=1" title="Muokkaa osiota Käsitteitä" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=1" title="Muokkaa osion lähdekoodia: Käsitteitä"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Olio_(ohjelmointi)" title="Olio (ohjelmointi)">Olio</a> (<a href="/wiki/Englannin_kieli" title="Englannin kieli">engl.</a> <span lang="en"><i>object</i></span>) on ohjelmiston rakenteellinen perusyksikkö. Se ei ole puhtaasti toiminnallinen tai puhtaasti tietoa säilyttävä, vaan se sisältää kummankin aspektin.<sup id="cite_ref-koskimies30_2-0" class="reference"><a href="#cite_note-koskimies30-2"><span class="cite-bracket">&#91;</span>2<span class="cite-bracket">&#93;</span></a></sup> </p><p>Olio-ohjelmointi jakautuu kahteen pääsuuntaukseen. <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalkin</a> sanastossa oliot kommunikoivat keskenään lähettämällä ja vastaanottamalla <i>viestejä</i>. Viestin vastaanottaminen suorittaa määritellyn toiminnon vastaanottavassa oliossa. <a href="/wiki/Simula" title="Simula">Simulan</a> tai C++:n sanastossa oliot kutsuvat toisensa <i>jäsenfunktioita</i>. </p><p>Oliota käytetään ohjelmistosuunnittelussa esittämään jonkun abstraktin tai reaalimaailman käsitteen ilmentymää ohjelmistossa. Oliokielillä laaditut ohjelmat koostuvat tavallisesti lukuisista olioista, joiden yhteistoiminnan tuloksena on ratkaisu ohjelmointiongelmaan. (kts. myös <a href="/wiki/Oliomalli" title="Oliomalli">oliomalli</a>) </p><p>Olio pystyy pyydettäessä tekemään sille ominaiset toiminnot, joita kutsutaan <i><a href="/wiki/Metodi_(ohjelmointi)" class="mw-redirect" title="Metodi (ohjelmointi)">metodeiksi</a></i> tai <i>jäsenfunktioiksi</i> kielestä riippuen. Metodi koostuu nimestä, mahdollisista <a href="/wiki/Parametri_(tietotekniikka)" title="Parametri (tietotekniikka)">parametreista</a> ja toiminnan määrittelevästä rungosta. Olio tallettaa tietoja attribuutteihin.<sup id="cite_ref-koskimies30_2-1" class="reference"><a href="#cite_note-koskimies30-2"><span class="cite-bracket">&#91;</span>2<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Luokka_(ohjelmointi)" title="Luokka (ohjelmointi)">Luokka</a> (<i>class</i>) on määritelmä, joka kuvaa samanlaisten olioiden yhteisen rakenteen ja yhteisen käytöksen. Toisin sanoin luokka on ohje olion luomiselle ja sitä voidaan pitää olion tyyppinä. Olio on siten luokan ilmentymä, instanssi.<sup id="cite_ref-koskimies37_3-0" class="reference"><a href="#cite_note-koskimies37-3"><span class="cite-bracket">&#91;</span>3<span class="cite-bracket">&#93;</span></a></sup> Esimerkiksi henkilörekisteriohjelmassa määritellään luokka Henkilö, joka määrittelee millaista tietoa henkilöistä halutaan esittää ja millä tavalla näitä tietoja voidaan käsitellä. Ohjelman ajon aikana luokasta Henkilö luodaan olioita esittämään yksittäisiä henkilöitä. Olioiden toiminnallisuus määritellään useimmiten luokkien jäsenfunktioissa, jolloin kaikki saman luokan oliot sisältävät täsmälleen saman toiminnallisuuden tiedon käsittelyyn. On olemassa myös vähemmän tunnettuja prototyyppipohjaisia kieliä, jotka eivät tunne luokkakäsitettä. </p><p>Sidonta (<i>binding</i>) tarkoittaa sitä, miten symbolinen nimi yhdistetään dataan tai koodiin. Kaksi tapaa ovat <a href="/wiki/My%C3%B6h%C3%A4inen_ja_varhainen_sidonta" title="Myöhäinen ja varhainen sidonta">myöhäinen ja varhainen sidonta</a>. Joko kääntäjä tekee sen käännöksen yhteydessä, jolloin puhutaan staattisesta (<i>varhainen</i>) sidonnasta, tai se tapahtuu ajonaikana, jolloin kyseessä on dynaaminen (<i>myöhäinen</i>) sidonta. Jossain tilanteissa objektin tyyppi ei ole tiedossa vielä käännösaikana, jolloin on käytettävä dynaamista eli myöhäistä sidontaa. </p><p><a href="/wiki/Perint%C3%A4_(ohjelmointi)" title="Perintä (ohjelmointi)">Perintä</a> (<i>inheritance</i>) mahdollistaa uusien luokkamääritysten tekemisen vanhojen määritysten pohjalta. Periyttämisen ansiosta on mahdollista käyttää uudestaan jo tehtyä ohjelmakoodia uusien luokkien pohjana. Periyttäminen mahdollistaa myös abstraktien perus-/kantaluokkien, joista periytetään useita luokkia, joita kaikkia voidaan käyttää samannimisillä funktioilla ja samoilla parametreilla kuin abstraktia kantaluokkaa, käytön. Itse abstraktista kantaluokasta ei voi luoda omia instansseja eli olioita new-operaattoria käyttäen. Oliot on luotava tässä tapauksessa abstraktin luokan lapsiluokista. Esimerkkinä abstrakti luokka voisi olla ajoneuvot-luokka, jolla olisi vuosimalli jäsenmuuttujana ja funktiona/metodina "rekisteröi"-toiminto. Lapsiluokkia voisivat olla esimerkiksi auto- ja laiva-lapsiluokat, jotka perivät ajoneuvoluokan jäsenmuuttujat ja funktiot. Perinnässä tärkeä huomionarvo on myös kantaluokan näkyvyysmääreiden asettaminen. Tämä johtunee siitä, että kantaluokan "private"-nimikkeellä määritetyt jäsenmuuttujat ja funktiot eivät periydy alempiin luokkiin. Näkyvyysmääreeksi on asetettava vähintään "protected", jotta lapsiluokka perii kyseisen jäsenmuuttujan tai funktion onnistuneesti. Periyttäminen ja abstraktien perusluokkien käyttö ovat oliopohjaisten kielien vahvimpia mutta myös vaikeimpia ominaisuuksia. Periyttäminen mahdollistaa abstraktit rajapinnat, joiden kautta voidaan käsitellä tuntemattomien tahojen rakentamia olioita ennalta määritellyllä tavalla. </p><p><a href="/wiki/Moniperint%C3%A4" title="Moniperintä">Moniperintä</a> (<i>multiple inheritance</i>), mahdollistaa uuteen luokkaan periyttämisen useista kantaluokista. Moniperintä on hyödyllistä tilanteessa, jossa "lepakko" sisältää "lentävä eläin"- ja "nisäkäs"-luokkien ominaisuudet. Moniperintä on tuettu kielissä kuten <a href="/wiki/C%2B%2B" title="C++">C++</a>, <a href="/wiki/Eiffel_(ohjelmointikieli)" title="Eiffel (ohjelmointikieli)">Eiffel</a>, <a href="/wiki/OCaml" title="OCaml">OCaml</a> ja <a href="/wiki/Scala_(ohjelmointikieli)" title="Scala (ohjelmointikieli)">Scala</a>. <a href="/wiki/C%2B%2B" title="C++">C++</a> tukee <i>virtuaalista moniperintää</i>, jonka avulla periytyy vain yksi toteutus yhteisen kantaluokan jäsenistä.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">&#91;</span>4<span class="cite-bracket">&#93;</span></a></sup> Kaikissa oliokielissä moniperintä ei ole mahdollista. Eräissä kielissä moniperintä on vain rajatusti mahdollista. Rajattua moniperintää (<i>interface</i> eli rajapintaperintää) tukevat kielet kuten <a href="/wiki/Ada_(ohjelmointikieli)" title="Ada (ohjelmointikieli)">Ada</a>, <a href="/wiki/C_sharp" title="C sharp">C#</a> ja <a href="/wiki/Java" title="Java">Java</a>. JavaScript käyttää perimisen toteuttamiseen <i>prototyyppejä</i>.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">&#91;</span>5<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Kapselointi" title="Kapselointi">Kapselointi</a> <i>(encapsulation)</i> -termiä käytetään kahdessa merkityksessä. Ensimmäisen merkityksen mukaan kapseloinnin ideana on datan ja käyttäytymisen kokoaminen yhteen yksikköön, olioon. Toinen merkitys lisää tähän vielä tiedonpiilotuksen: olion sisäisiin <a href="/wiki/Muuttuja" class="mw-disambig" title="Muuttuja">muuttujiin</a> ei (pääsääntöisesti) päästä suoraan käsiksi olion ulkopuolelta, jolloin ohjelmointivirheiden määrä vähenee. Olion käyttäjän ei tarvitse tietää enää käyttövaiheessa sitä, miten olio toimii sisäisesti: riittää, kun tietää, miten oliota itseään käytetään ja miten olio <i>käyttäytyy</i>. Olion käyttäjät voivat käyttää oliota sen julkisen <a href="/wiki/Rajapinta" class="mw-disambig" title="Rajapinta">rajapinnan</a> kautta (public interface). Olion luokkakuvauksessa voi olla myös yksityisiä muuttujia tai funktiota (private interface), jotka ovat vain olion itsensä käytettävissä. </p><p><a href="/wiki/Konstruktori" title="Konstruktori">Konstruktori</a><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">&#91;</span>6<span class="cite-bracket">&#93;</span></a></sup> (<i>constructor</i>, rakentaja) on metodi, joka alustaa luokan ilmentymät.<sup id="cite_ref-Nimetön-rF5s-1_7-0" class="reference"><a href="#cite_note-Nimetön-rF5s-1-7"><span class="cite-bracket">&#91;</span>7<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/RAII" class="mw-redirect" title="RAII">RAII</a>-konseptissa konstruktori myös varaa resurssit, jotka vapautetaan destruktorissa.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">&#91;</span>8<span class="cite-bracket">&#93;</span></a></sup> </p><p>Destruktori (<i>destructor</i>, hajottaja tai purkaja) on metodi, joka vapauttaa olion varaamat resurssit.<sup id="cite_ref-Nimetön-rF5s-1_7-1" class="reference"><a href="#cite_note-Nimetön-rF5s-1-7"><span class="cite-bracket">&#91;</span>7<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Polymorfismi" title="Polymorfismi">Polymorfismi</a> eli monimuotoisuus tarkoittaa sitä, että yhtä rajapintaa käytetään eri tyyppien käsittelyyn, tai yksi symboli edustaa monia tyyppejä. Esimerkiksi funktio tai datatyyppi voidaan kirjoittaa siten, että se voi käsitellä dataa riippumatta sen tyypistä. </p><p><a href="/wiki/Virtuaalimetodi" title="Virtuaalimetodi">Virtuaalimetodi</a> on ominaisuus, jolla perintää käyttävä olio voi korvata yliluokassa olevan metodin toteutuksen toisella. </p><p>Luokkafunktiot esittävät luokan palveluja sekä operaatioita, jotka eivät kohdistu yksittäiseen olioon. Jos jäsenfunktiot ovat samankaltaiset määrittelyn kanssa lisätään static-avainsana, ei voida käyttää olemassa olevan olion jäsenmuuttujia eikä this-avainsanaa ja voi käyttää <a href="/wiki/Luokkamuuttuja" title="Luokkamuuttuja">luokkamuuttujia</a>. Luokalla voi olla useampi luokkafunktio, eikä luokkamuuttujan tarvitse aina olla julkinen. </p><p>Abstrakti luokka (Abstract class) on yksi olio-ohjelmoinnin peruskäsitteistä, joka mahdollistaa yleisten ominaisuuksien ja toimintojen jakamisen eri luokkien välillä. Abstrakti luokka ei pysty luomaan olioita, mutta se voi sisältää yhden tai useamman abstraktin metodin. Abstrakti metodi on määritelty luokassa, mutta sille ei ole toteutusta. Abstrakti luokka toimii pohjana lapsiluokille, joissa ne pitää toteuttaa. </p><p>Singleton (ainokainen) on suunnittelumalli, joka varmistaa että tietyn luokan oliolla on vain yksi instanssi ja että kaikkilla osilla on pääsy tähän samaan instanssiin. Singleton toteutetaan yleensä staattisella metodilla, joka palauttaa saman instanssin jokaiselle kutsujalle. Singleton on hyödyllinen erityisesti silloin, jos halutaan varmistaa että luokalla on vain yksi käyttötapaus. </p><p>Perintö (inheritance) on keskeinen olio-ohjelmoinnin käsite, joka tarkoittaa sitä, että uusi luokka voi periä vanhemman luokan toimintoja tai ominaisuuksia. Perintö auttaa koodin järjestelyssä ja ylläpitämisessä ja mahdollistaa sen uudelleenkäytön, jos niin halutaan. </p><p>Rajapinta (interface) on määritelmä siitä, miten luokka kommunikoi ja toimii muiden luokkien kanssa. Rajapinta määrittelee, mitä toimintoja ja ominaisuuksia luokka tarjoaa muille luokille. Rajapinta mahdollistaa erilaisten luokkien yhteensopivuuden ja helpottaa koodin ylläpitoa. Rajapinta ei siis ole itse toteutus vaan kertoo pelkästään, mitä toimintoja luokalla on. Rajapinnan toiminnot täytyy määritellä erikseen niissä luokissa, jotka käyttävät tätä pintaa. </p> <div class="mw-heading mw-heading2"><h2 id="Esimerkki">Esimerkki</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=2" title="Muokkaa osiota Esimerkki" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=2" title="Muokkaa osion lähdekoodia: Esimerkki"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Pseudokoodi" title="Pseudokoodi">Pseudokielinen</a> esimerkki luokkakuvauksesta luokalle "Oppilas": </p> <div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span> // Aloitetaan kantaluokan määrittely class Henkilö { protected: String nimi; // yhteinen jäsenmuuttuja kaikille henkilöille public: function asetaNimi( String nimi) { this.nimi = nimi; } } // Periytetään luokka Opettaja kantaluokasta. class Opettaja inherits Henkilö { public: function haeTitteli() { return &quot;prof. &quot; + this.nimi; } } // Periytetään luokka Opiskelija kantaluokasta class Opiskelija inherits Henkilö { private: int arvosana; // sisäinen muuttuja, jota ainoastaan olio itse voi käsitellä // tästä eteenpäin kirjoitetut julkiset tiedot ovat kaikkien käytettävissä public: function asetaArvosana(int uusiArvosana) { this.arvosana = uusiArvosana; // laitetaan parametri &quot;uusiArvosana&quot; sisäiseen muuttujaan &quot;arvosana&quot; } function haeArvosana() { return this.arvosana; // palautetaan sisäisen muuttujan &quot;arvosana&quot; arvo } function haeTitteli() { return &quot;tekn. yo. &quot; + this.nimi; } } </pre></div> <p>Esimerkki olion käytöstä: </p> <div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span> // Tehdään kaksi oliota &quot;harri&quot; ja &quot;pekka&quot; // HUOM! Jokaisella uudella oliolla on omat yksityiset muuttujansa harri = new Opiskelija(); pekka = new Opiskelija(); prof = new Opettaja(); prof.asetaNimi(&quot;Tuumivainen&quot;); harri.asetaArvosana(5); harri.asetaNimi( &quot;Harri Hakkeri&quot; ); pekka.asetaArvosana(4); // Tulostaa: Harrin arvosana on 5 ja Pekan on 4 print &quot;Harrin arvosana on &quot; + harri.haeArvosana() + &quot; ja Pekan on &quot; + pekka.haeArvosana(); // Tulostaa: opettaja oli: prof. Tuumivainen print &quot;opettaja oli: &quot; + prof.haeTitteli(); // Tulostaa: opiskelija oli: tekn.yo. Harri Hakkeri print &quot;opiskelija oli: &quot; + harri.haeTitteli(); </pre></div> <div class="mw-heading mw-heading2"><h2 id="Historia">Historia</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=3" title="Muokkaa osiota Historia" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=3" title="Muokkaa osion lähdekoodia: Historia"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Ensimmäiset_kielet"><span id="Ensimm.C3.A4iset_kielet"></span>Ensimmäiset kielet</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=4" title="Muokkaa osiota Ensimmäiset kielet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=4" title="Muokkaa osion lähdekoodia: Ensimmäiset kielet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Terminologia, joka liittyy "olioihin" ja "orientaatioon" modernissa mielessä oliopohjaisessa ohjelmoinnissa, ilmestyi ensimmäisen kerran MIT:ssä 1950- ja 1960-lukujen vaihteessa. Jo vuodesta 1960 lähtien tekoälyä tutkivan ja kehittävän ryhmän yhteydessä "olio" saattoi viitata tunnistettuihin kohteisiin (LISP-atomeihin), joilla oli ominaisuuksia (attribuutteja). Olioperustainen ohjelmointi syntyi Norjassa 1960-luvun jälkipuoliskolla, jolloin norjalaisessa <a href="/w/index.php?title=Norsk_Regnesentral&amp;action=edit&amp;redlink=1" class="new" title="Norsk Regnesentral (sivua ei ole)">Norsk Regnesentral</a> -laskentakeskuksessa kehitettiin ensimmäinen oliokieli, <a href="/wiki/Simula" title="Simula">Simula</a>.<sup id="cite_ref-koskimies26_9-0" class="reference"><a href="#cite_note-koskimies26-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Ole-Johan_Dahl" title="Ole-Johan Dahl">Ole-Johan Dahl</a> ja <a href="/wiki/Kristen_Nygaard" title="Kristen Nygaard">Kristen Nygaard</a> kehittivät kieltä simulointitarkoituksiin. Jo vuonna 1961 kehitetyssä Simula I:ssa käytettiin luokkia ja niistä luotuja olioita, mutta vuonna 1967 Simula I:n seuraaja Simula67 oli ensimmäinen varsinainen olio-ohjelmointikieli.<sup id="cite_ref-johdanto_10-0" class="reference"><a href="#cite_note-johdanto-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> Simulan rungon muodosti <a href="/wiki/ALGOL" title="ALGOL">Algol60</a>, joka oli laajennettu olio-ohjelmoinnin luokkakäsitteellä. Simulassa oli mukana jo kaikki olio-ohjelmoinnin peruskäsitteet.<sup id="cite_ref-koskimies26_9-1" class="reference"><a href="#cite_note-koskimies26-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> </p><p>Simula ei saanut paljoakaan käyttäjiä yliopistojen ulkopuolelta. Olio-ohjelmointi sai uutta kantavuutta <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalkin</a> ja siihen liittyvän graafisen ohjelmointiympäristön myötä.<sup id="cite_ref-koskimies26_9-2" class="reference"><a href="#cite_note-koskimies26-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> Smalltalk kehitettiin <a href="/wiki/Xerox" title="Xerox">Xeroxin</a> kehityslaboratoriossa, <a href="/wiki/Palo_Alto_Research_Center" title="Palo Alto Research Center">Palo Alto Research Centerissä</a> (PARC). Sitä käytettiin <a href="/wiki/Alan_Kay" title="Alan Kay">Alan Kayn</a> ideoiman graafisella käyttöliittymällä varustetun henkilökohtaisen tietokoneen <a href="/w/index.php?title=Dynabook&amp;action=edit&amp;redlink=1" class="new" title="Dynabook (sivua ei ole)">Dynabookin</a> hallintaan. Xerox alkoi jakaa Smalltalkia 1980, mutta sekään ei saavuttanut merkittävää asemaa <a href="/wiki/Ohjelmistotuotanto" title="Ohjelmistotuotanto">ohjelmistotuotannossa</a>.<sup id="cite_ref-johdanto_10-1" class="reference"><a href="#cite_note-johdanto-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> </p><p>Niin kutsutun <a href="/w/index.php?title=Ohjelmistokriisi&amp;action=edit&amp;redlink=1" class="new" title="Ohjelmistokriisi (sivua ei ole)">ohjelmistokriisin</a> takia 1970-luvulla syntyi useita kieliä, joissa ohjelmistojen modularisointi oli keskeisenä ajatuksena. Kielet eivät olleet tiukassa mielessä olioperustaisia, mutta niihin kuului <a href="/wiki/Abstrakti_tietotyyppi" title="Abstrakti tietotyyppi">abstraktin tietotyypin</a> käsite, joka on oleellinen myös olio-ohjelmoinnissa. Nämä kielet loivat maaperää olioperustaisen ohjelmoinnin läpimurrolle tuomalla tietoabstraktion ohjelmistokehitykseen.<sup id="cite_ref-koskimies26_9-3" class="reference"><a href="#cite_note-koskimies26-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> </p><p>Vuonna 1981 Goldberg toimitti Byte Magazinen elokuun numeroa esitellen Smalltalkin ja olio-ohjelmoinnin laajemmalle yleisölle. Vuonna 1986, the <a href="/wiki/Association_for_Computing_Machinery" title="Association for Computing Machinery">Association for Computing Machinery</a> järjesti ensimmäisen konferenssin “Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), joka käsitteli olio-ohjelmointia, järjestelmiä ja kieliä. Yllättäen konferenssiin osallistui tuhat ihmistä. 1980-luvun puolivälissä Brad Cox kehitti Objective-C. Hän oli käyttänyt Smalltalkia ITT Inc.:ssä, ja Bjarne Stroustrup, joka oli käyttänyt Simulaa väitöskirjassaan, kehittivät olio-ohjelmointikieli C++:n. Vuonna 1985, Bertnard Meyer myös tuotti ensimmäisen Eiffel kielen mallin. Keskittyen ohjelmiston laatuun, Eiffel oli puhdas olio-ohjelmointikieli ja merkintä tukien koko ohjelmiston elinkaarta. Meyer kuvaili Eiffelin ohjelmistokehitysmenetelmää perustuen pieneen määrään pääideoita ohjelmistosuunnitelusta ja tietokonetieteestä kirjassa Object-Oriented Software Construction. Eiffelin keskittyminen laatuun on olennainen osa Meyerin luotettavuus mekanismia, Design by Contract, joka on olennainen osa molempia, sekä menetelmiä, että kieltä. </p><p>1990-luvun alussa ja puolivälissä olio-ohjelmoinnista oli tullut vallitseva tapa ohjelmoida, kun kielet alkoivat tukea tekniikaa. Eri kielet, jotka tukivat olio-ohjelmointia olivat mm. C++ and Delphi. Sen dominointia edisti edelleen graafisten käyttöliittymien suosion kasvu, joka nojaa vahvasti olio-ohjelmoinnin tekniikoihin. Esimerkki läheisesti liittyvästä dynaamisesta käyttöliittymäkirjastosta ja OOP-kielestä löytyy <a href="/wiki/MacOS" title="MacOS">Mac OS X</a>:n Cocoa viitekehyksestä, joka on kirjoitettu Objective-C:llä. Cocoa on dynaaminen oliosuuntautunut viestintälaajennus C:hen, pohjautuen Smaltalkiin. OOP-työkalusarjat lisäsivät myös tapahtumapohjaisen ohjelmoinnin suosiota (vaikkakin tämä konsepti ei rajoitu ainoastaan OOP:iin). </p><p><br /> Viime aikoina on myös ilmaantunut useita kieliä, jotka ovat pääosin oliopohjaisia, mutta yhteensopivia proseduraalisten ohjelmointikielien kanssa. Python ja Ruby ovat esimerkkejä tällaisista. Luultavasti kaupallisesti tärkeimmät viimeaikaiset ohjelmointikielet ovat Java, jonka on kehittänyt Sun Microsystems, sekä C# ja Visual Basic.NET (VB.NET), jotka molemmat on kehitetty Microsoftin .NET-alustalle. Kumpikin näistä kahdesta viitekehyksestä osoittaa omalla tavallaan oliopohjaisen ohjelmoinnin käytön edut luomalla abstraktion implementoinnista. VB.NET ja C# tukevat kieltenvälistä periytymistä, jolloin yhdellä kielellä määritellyt luokat voivat siirtyä toisella kielellä määritettyihin aliluokkaluokkiin. </p> <div class="mw-heading mw-heading3"><h3 id="Läpimurto"><span id="L.C3.A4pimurto"></span>Läpimurto</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=5" title="Muokkaa osiota Läpimurto" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=5" title="Muokkaa osion lähdekoodia: Läpimurto"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Olioperustainen ohjelmointi teki läpimurtonsa 1980-luvun puolivälissä, kun useat tahot kehittivät olioperustaisia kieliä, ohjelmistojen suunnittelumenetelmiä ja niitä tukevia <a href="/w/index.php?title=Tietokoneavusteinen_systeemity%C3%B6&amp;action=edit&amp;redlink=1" class="new" title="Tietokoneavusteinen systeemityö (sivua ei ole)">CASE</a>-välineitä sekä yksittäisiä sovelluksia. Lisäksi kiinnostuksen kasvu näkyi uusissa olioperustaisuutta käsittelevissä konferenssisarjoissa, lehdissä ja kirjoissa.<sup id="cite_ref-koskimies26_9-4" class="reference"><a href="#cite_note-koskimies26-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> Ensimmäinen tuotantokäytössä yleistynyt ohjelmointikieli oli <a href="/wiki/C%2B%2B" title="C++">C++</a>. <a href="/wiki/Bjarne_Stroustrup" title="Bjarne Stroustrup">Bjarne Stroustrup</a> kehitti sen <a href="/wiki/Bell_Labs" title="Bell Labs">Bell Labs</a> -tutkimuskeskuksessa. Vuonna 1980 julkaistu versio oli kehitetty <a href="/wiki/C_(ohjelmointikieli)" title="C (ohjelmointikieli)">C-kielestä</a>, johon oli lisätty oliotuki. Stroustrup kutsui sitä nimellä ”C with classes”. Kieli otettiin 1983 käyttöön myös Bell Labsin ulkopuolella, jolloin Rick Mascitti keksi nimen C++.<sup id="cite_ref-johdanto_10-2" class="reference"><a href="#cite_note-johdanto-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> Kielen kehittämisen motiivina oli alkuun saada simulointisovelluksiin Simulaa tehokkaampi kieli. Uuden kielen pohjaksi valittiin C, koska se oli suhteellisen matalan tason ohjelmointikieli ja sille oli valmiina toteutuksia lähes kaikissa ympäristöissä.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">&#91;</span>11<span class="cite-bracket">&#93;</span></a></sup> C++ kehittyi vielä voimakkaasti 1980-luvun aikana: siihen lisättiin muun muassa <a href="/wiki/Moniperint%C3%A4" title="Moniperintä">moniperintä</a>, parametrisoidut tyypit ja <a href="/wiki/Poikkeus" title="Poikkeus">poikkeusten</a> käsittely.<sup id="cite_ref-johdanto_10-3" class="reference"><a href="#cite_note-johdanto-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Borland" title="Borland">Borland</a> lisäsi omaan <a href="/wiki/Turbo_Pascal" title="Turbo Pascal">Turbo Pascal</a> -kehitysympäristöönsä olio-ohjelmoinnin mahdollisuuden vuonna 1986 (Macintosh-versio). MS-DOS versio julkaistiin vuonna 1989. <sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">&#91;</span>12<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Java" title="Java">Java</a>-ohjelmointikielen kehitys lähti liikkeelle 1990-luvun alkupuolella, kun tarvittiin luotettavia ohjelmistoja erilaisille mahdollisesti verkkoon kytketyille elektronisille laitteille. <a href="/wiki/Sun_Microsystems" title="Sun Microsystems">Sun Microsystemsillä</a> toiminut ryhmä halusi kehittää tarkoitukseen oman kielensä. Ryhmä tutki ensin C++:n käyttöä, mutta he totesivat sen monissa tapauksissa epätarkoituksenmukaiseksi.<sup id="cite_ref-koskimies369_13-0" class="reference"><a href="#cite_note-koskimies369-13"><span class="cite-bracket">&#91;</span>13<span class="cite-bracket">&#93;</span></a></sup> Java kehitettiin C++:n pohjalta, ja sen pääasiallisin kehittäjä oli <a href="/wiki/James_Gosling" title="James Gosling">James Gosling</a>. Siitä poistettiin monia C++-kielessä virheitä aiheuttavia ominaisuuksia, kuten moniperintä.<sup id="cite_ref-johdanto_10-4" class="reference"><a href="#cite_note-johdanto-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> Sun Microsystemsin ryhmä alkoi 1994 tutkia Javan sopivuutta verkkosovelluksiin, ja keväällä 1994 yritys julkisti Javan lisäksi <a href="/w/index.php?title=HotJava&amp;action=edit&amp;redlink=1" class="new" title="HotJava (sivua ei ole)">HotJava</a>-selaimen. Java alkoi tämän jälkeen levitä verkossa, ja uusia Java-ohjelmistoja ilmestyi nopeaan tahtiin. <a href="/wiki/Microsoft" title="Microsoft">Microsoftkin</a> ilmoitti vuoden 1995 lopulla lisäävänsä ohjelmistoihinsa Java-tuen.<sup id="cite_ref-koskimies369_13-1" class="reference"><a href="#cite_note-koskimies369-13"><span class="cite-bracket">&#91;</span>13<span class="cite-bracket">&#93;</span></a></sup> </p><p>Python-kieli on tullut suosituksi vuosituhannen vaihteen jälkeen. Python on tulkattu ja dynaamisesti tyypitetty ohjelmointikieli, jossa tyyppitarkastukset tehdään ajon aikana. Pythonia pidetään varsin puhdasoppisena oliokielenä ja se on rakenteeltaan yksinkertainen. Pythonia käytetään eniten pienimuotoisten prototyyppien nopeaan kehitykseen. </p><p>2000-luvulla on syntynyt ainakin yksi uusi merkittävä oliokieli. Javaa hyvin paljon muistuttava <a href="/wiki/C_sharp" title="C sharp">C#</a> on Microsoftin vuonna 2002 lanseeraama <a href="/wiki/.NET_Framework" title=".NET Framework">.NET</a>-alustassa käytettävä kieli.<sup id="cite_ref-johdanto_10-5" class="reference"><a href="#cite_note-johdanto-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> Toinen Microsoftin .NET alustalle lanseerattu oliopohjainen kieli on Visual Basic.NET (VB.NET). Kumpikin näistä kahdesta .NET -alustan ohjelmistokehysratkaisusta osoittaa omalla tavallaan olio-ohjelmoinnin käytön hyödyn luomalla abstraktioita toteutuksesta. VB.NET ja C# tukevat kielten välistä periytymistä, jolloin toisella kielellä määritellyt luokat voivat periytyä toisella kielellä määritellyistä luokista. </p> <div class="mw-heading mw-heading3"><h3 id="Nykypäivä"><span id="Nykyp.C3.A4iv.C3.A4"></span>Nykypäivä</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=6" title="Muokkaa osiota Nykypäivä" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=6" title="Muokkaa osion lähdekoodia: Nykypäivä"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Olio-ohjelmointi nykypäivänä on yksi ohjelmointialan tärkeimmistä työkaluista, joka auttaa kehittäjiä luomaan tehokkaampia, joustavampia ja helpommin ylläpidettäviä ohjelmistoja. Se on laajalti käytössä monissa ohjelmointikielissä, kuten Java, C++, C# ja Python, ja se tarjoaa ohjelmoijille kätevän tavan organisoida ja hallita koodiaan. </p><p>Olio-ohjelmoinnin perusperiaatteisiin kuuluvat kapselointi, periytyminen, polymorfismi ja abstraktio. Nämä käsitteet auttavat ohjelmoijia kehittämään modulaarisia ohjelmistoja, joissa eri osat ovat itsenäisiä ja helposti korvattavissa tai laajennettavissa. Tämä mahdollistaa paremman koodin uudelleenkäytön ja parantaa ohjelmistojen ylläpidettävyyttä. </p><p>Nykypäivän ohjelmistokehitysprojekteissa olio-ohjelmointi on erityisen tärkeässä roolissa<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">&#91;</span>14<span class="cite-bracket">&#93;</span></a></sup>, kun luodaan monimutkaisia ja laajoja järjestelmiä, kuten pilvipalveluita, älypuhelinsovelluksia, tekoälyjärjestelmiä ja esineiden internet -ratkaisuja (IoT). Olio-ohjelmointi tekee koodin organisoinnista selkeämpää, mikä auttaa kehittäjiä työskentelemään tehokkaammin yhdessä ja hallitsemaan järjestelmän monimutkaisuutta. </p><p>Olio-ohjelmoinnin käyttö on lisääntynyt erityisesti ohjelmistokehityksen ketterien menetelmien yleistyessä. Scrum, Kanban ja muut ketterät menetelmät korostavat iteratiivista ja inkrementaalista kehitystä, mikä edellyttää koodin joustavuutta ja modulaarisuutta<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">&#91;</span>15<span class="cite-bracket">&#93;</span></a></sup>. Olio-ohjelmointi tukee näitä vaatimuksia tarjoamalla selkeät rakenteet ja työkalut koodin organisointiin ja muokkaamiseen. </p><p>Lisäksi olio-ohjelmoinnin merkitys kasvaa jatkuvasti, kun ohjelmistoalalla otetaan käyttöön uusia teknologioita ja menetelmiä, kuten pilvipohjaiset mikropalveluarkkitehtuurit, konttiteknologiat, kuten Docker<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">&#91;</span>16<span class="cite-bracket">&#93;</span></a></sup> ja Kubernetes, ja hajautetut sovellusalustat, kuten blockchain. Näissä konteksteissa olio-ohjelmointi tarjoaa kehittäjille välttämättömät välineet sovellusten rakentamiseen, jotka ovat helposti skaalattavissa, ylläpidettävissä ja integroitavissa. </p><p>Olio-ohjelmoinnin käytön leviäminen on johtanut uusien kehitysympäristöjen ilmentymiseen, jotka tuovat ohjelmoijille lisää uusia työkaluja koodin testaamiseen. Monissa integroiduissa kehitysympäristöissä, kuten Visual Studio, on valmiiksi sisäänrakennettuja työkaluja, jotka tukevat olio-ohjelmointia. Näitä työkaluja ovat esimerkiksi debugger ja automaattinen koodin generointi. </p><p>Olio-ohjelmointi on myös tärkeässä asemassa ohjelmistojen tietoturvan osalta. Sen avulla kehittäjä voi esimerkiksi piilottaa joitakin ohjelmiston toiminnallisuuksia ulkopuolisilta, mikä auttaa suojaamaan tietoja. Olio-ohjelmointi myös helpottaa ohjelmistojen testausta, mikä johtaa parempaan laatuun. </p><p>Nykypäivänä olio-ohjelmointiin liittyy jatkuvaa kehitystä sekä tutkimusta, ja uusia menetelmiä ja tekniikoita kehitetään jatkuvasti sen parantamiseksi. Tähän liittyy esimerkiksi ohjelmointikielten kehityksen, suorituskyvyn optimoimisen ja uusien menetelmien kehittämisen olio-ohjelmointia varten. </p><p>Olio-ohjelmointi on avannut uusia mahdollisuuksia ohjelmistokehittäjille parantamaan käyttäjäkokemusta. Ohjelmoijat voivat esimerkiksi käyttää olioita luodakseen entistä kattavampia käyttöliittymiä, joihin liittyy esimerkiksi erilaisia animaatioita ja toimintoja. </p><p>Lisäksi olio-ohjelmointi on ollut tärkeässä roolissa pelinkehityksessä<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">&#91;</span>17<span class="cite-bracket">&#93;</span></a></sup>. Oliot ovat peleissä keskeisiä, sillä ne mahdollistaa objektien ja pelihahmojen luomisen. Pelialan lisäksi olio-ohjelmointi on ollut tärkeässä asemassa myös esimerkiksi terveysalan ohjelmistokehityksessä, jossa vaaditaan luotettavuutta ja turvallisuutta. Olio-ohjelmointi on tarjonnut kehittäjille erilaisia apuvälineitä ja tekniikoita, joita käyttäen voidaan luoda aina vain parempia ja monipuolisempia ohjelmistoja erilaisiin käyttötarkoituksiin. </p> <div class="mw-heading mw-heading2"><h2 id="Periaatteita">Periaatteita</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=7" title="Muokkaa osiota Periaatteita" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=7" title="Muokkaa osion lähdekoodia: Periaatteita"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <table style="" class="metadata plainlinks ambox ambox-content"> <tbody><tr> <td class="ambox-image"><div style="width:52px;text-align:center"> <span typeof="mw:File"><a href="/wiki/Tiedosto:Question_book-4.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/50px-Question_book-4.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/75px-Question_book-4.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/100px-Question_book-4.svg.png 2x" data-file-width="262" data-file-height="204" /></a></span></div> </td> <td class="ambox-text"><b>Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä.</b><br /><small>Voit auttaa Wikipediaa lisäämällä artikkeliin <a href="/wiki/Wikipedia:Tarkistettavuus" title="Wikipedia:Tarkistettavuus">tarkistettavissa olevia</a> lähteitä ja merkitsemällä ne <a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">ohjeen</a> mukaan.</small><br /> <p>Tarkennus: <i>ei yhtäkään lähdettä tässä osiossa, tarkistettava</i> </p> </td></tr></tbody></table> <p>Abstraktio tarkoittaa kokonaisuuksien käsittelyä, jossa tarkennetaan vain tarvittaessa. Kokonaisuuksien hahmotus katoaa, kun alamme lisäämään yksityiskohtia. Abstraktio on tällöin juuri yksityiskohtien piilottamista, jotta kokonaiskuvaa parannee. Tätä tiedon piilottamista kutsutaan olio-ohjelmoinnissa kapseloimiseksi. </p><p>Kapselointi on attribuuttien ja metodien sitomista yhteen luokassa. Kapseloinnin avulla luokan sisäiset yksityiskohdat voidaan piilottaa ulkopuolisilta. Luokalla on metodeja, jotka tarjoavat käyttöliittymiä, joiden avulla luokan tarjoamia palveluita voidaan käyttää. Kapselointi estää ulkoista koodia käsittelemästä olion sisäistä toimintaa, eli olio tarjoaa palvelut ainoastaan rajapintansa kautta, jolloin olion luokan sisäisellä toiminnalla ei ole merkitystä, kunhan metodikutsut toimivat samalla tavalla. Tämä mahdollistaa luokan sisäisen koodin uudelleenkirjoituksen, jos rajapinta (parametrit, paluuarvot ja metodikutsut) pidetään samana. Kapselointi motivoi ohjelmoijat sijoittamaan samaan kokonaisuuteen liittyvän datan yhteen luokkaan, mikä lisää koodin ymmärrettävyyttä ja ylläpidettävyyttä. Koska selkeärajaisten luokkien kapselointi vähentää luokkien välistä datan siirtoa, minimoi se samalla <a href="/wiki/Koheesio_(tietotekniikka)" title="Koheesio (tietotekniikka)">koheesiota</a>. </p><p>Olioiden kapselointia voidaan edistää näkyvyysmääreillä, jotka piilottavat olioiden dataa, jolloin olion jäsenmuuttujiin ei pääse ulkopuolelta käsiksi, mikä vähentää niiden väärinkäyttöä. Tällaista abstraktiota syntyy, jos luokka ei salli pääsyä sen sisäisiin tietoihin ilman, että jotain luokan metodia kutsutaan. Jotkin kielet (esimerkiksi Java) mahdollistavat luokkien pääsyrajoitusten eli näkyvyysmääreiden muokkaamisen, jolloin luokan sisäisiä tietoja voidaan merkitä <code>private</code> avainsanalla, ja luokan ulkopuoliseen käyttöön tarkoitetut metodit voidaan merkitä avainsanalla <code>public</code>. Myös näiden kahden vaihtoehdon välillä on avainsana <code>protected</code>, joka mahdollistaa metodin tai jäsenmuuttujan periytymisen luokan alaluokkiin, pitäen ne kuitenkin muiden luokkien olioilta piilossa. Muissa kielissä (kuten Pythonissa) abstraktiota helpottavien näkyvyysmääreiden suoraa vastinetta ei ole, vaan ohjelmoija toimii yleisesti hyväksyttyjen tapojen mukaan (esimerkiksi yksityisillä metodeilla voi olla alaviivalla alkavia nimiä). </p><p>Abstraktiot voidaan luokitella: "is-a" ja "has-a" -abstraktioihin. Asiaa pilkkoessamme käytämme "has-a"-abstraktiota, kun pohdimme, mistä kokonaisuus koostuu esim: Pullo koostuu itse pullosta, etiketistä, korkista ja sisällöstä. Erikoistuminen taas kuvaa "is-a" -abstraktiota. Tällöin mietimme, mitkä luokat kuuluvat laajempiin luokkiin. Tämä muodostaa perustan luokkien väliselle periytymielle esim: lasipullo on pullo, ja pullo on pakkaus. </p><p>Hierarkia olioiden tietojäsenten välillä on tärkeä osa olio-ohjelmointia. Toisin sanoen se on abstraktion järjestämistä tai järjestelyä. Hierarkia mahdollistaa systeemin kokoamisen pienemmistä yhdistetyistä kokonaisuuksista, jotka voivat koostua vielä pienemmistä kokonaisuuksista, kunnes pienin mahdollinen systeemin taso on saavutettu. Hierarkian perustuu "Hajota ja hallitse" -periaatteeseen, jossa ongelmaa pilkotaan pienempiin helposti ratkaistavampiin osiin, joista lopullinen ratkaisu kootaan. </p><p>Olio-ohjelmoinnissa pyritään olioiden hyvään <a href="/wiki/Koheesio_(tietotekniikka)" title="Koheesio (tietotekniikka)">koheesioon</a>. Olioiden tulee vastata jotakin yksiselitteistä ja selkeärajaista käsitettä. Olion tietojäsenet liittyvät kiinteästi toisiinsa. Esimerkiksi opintorekisteritietojärjestelmässä ei samaan olioon tallenneta opiskelijan ja hänen käymiensä kurssien tietoja, vaan opiskelijaolio sisältää pelkästään opiskelijan tiedot ja viittaukset opintosuoritusolioihin. </p><p>Olioiden välisten riippuvuuksien hallinta on tärkeää laajoissa oliojärjestelmissä. Oliolla on riippuvuus kaikkiin niihin olioihin, joille se lähettää viestejä. Olioiden tulisi kommunikoida vain muutamien läheisesti olioon liittyvien olioiden kanssa. On vältettävä tilannetta, jossa järjestelmän kaikki oliot joutuvat olemaan tietoisia suuresta määrästä muita olioita eri puolilta järjestelmää. </p><p>Olioita pyritään ohjelmoimaan niiden rajapintoja vastaan. Rajapinta kuvaa olion tarjoamat palvelut, eli mitä olio tekee. Olion toteutuksen yksityiskohdat, eli miten olio toimii, pyritään piilottamaan muilta olioilta. Käytännössä olion rajapinta koostuu sen julkisista metodeista ja jäsenmuuttujista. Oliolla voi olla myös suojattuja metodeja ja jäsenmuuttujia, jotka eivät ole käytettävissä olion ulkopuolelta. Usein jäsenmuuttujien käsittely olion ulkopuolelta estetään ja olion tilaa voidaan käsitellä vain sen jäsenfunktioiden avulla. </p><p>Rajapintaluokat (<i>interface</i>) määrittelevät pelkästään rajapinnan ilman toteutusta. Rajapintaluokkien käyttö mahdollistaa tietyn toiminnon toteutuksen varioimisen ohjelmassa. Konkreettiset luokat, jotka perivät rajapintaluokan, voivat toteuttaa rajapintaluokan määrittelemän rajapinnan haluamallaan tavalla. </p><p>SOLID on yksi olio-ohjelmoinnin pääperiaatteista. Periaatteet esitteli ensin Robert J. Martin, mutta SOLID lyhennettä käytti ensin Michael Feathers.<sup id="cite_ref-:1_18-0" class="reference"><a href="#cite_note-:1-18"><span class="cite-bracket">&#91;</span>18<span class="cite-bracket">&#93;</span></a></sup> </p><p>SOLID koostuu seuraavista säännöistä:<sup id="cite_ref-:1_18-1" class="reference"><a href="#cite_note-:1-18"><span class="cite-bracket">&#91;</span>18<span class="cite-bracket">&#93;</span></a></sup> </p> <ul><li>Yhden vastuun periaate (Single Responsibility Principle): Luokalla tulisi olla vain yksi tehtävä, ja siksi vain yksi syy muuttua.</li> <li>Avoin-suljettu periaate (Open-Closed Principle): Luokkien kuuluu olla avoimia laajennukselle ja suljettuja muokkaukselle.</li> <li>Liskovin korvausperiaate (Liskov Substitution Principle): Liskovin periaatteen mukaan kantaluokan olio pitäisi aina pystyä korvaamaan alaluokan oliolla.</li> <li>Rajapinnan erotteluperiaate (Interface Segregation Principle): Rajapinnat pitää olla eroteltu eri tarkoituksiin, yleisiä rajapintoja pitää välttää.</li> <li>Riippuvuuden käänteisyyden periaate (Depency Inversion Priciple): Luokkien tulisi riippua rajapinnoista ja abstrakteista luokista, konkreettisten luokkien ja funktioiden sijaan.</li></ul> <p>Polymorfismi tarkoittaa olioiden kykyä ottaa monta muotoa. Sen nimi tulee kreikan “poly”, joka tarkoittaa lukuista ja “morphs” tarkoittaa muotoa. Esimerkiksi ihminen voi olla jonkun lapsi, puoliso ja työntekijä samaan aikaan ja käyttäytyä eri tavalla eri tilanteessa. Samalla tavalla kantaluokan lapsiluokat voivat määrittää oman käyttäytymisensä ja jakaa osan kantaluokan samoista toimintatavoista. </p><p>Polymorfismi tapahtuu, kun luokka perii ominaisuuksia toiselta luokalta. Yleisin tapaus on se, kun kantaluokan viittausta käytetään viittaamaan lapsiluokkaobjektiin. Voidaan selvittää, onko objekti polymorfinen, suorittamalla “is-a” tai “instanceof” testejä. Javassa kaikki oliot ovat polymorfisia. </p><p>Polymorfismin ominaisuudet ovat metodien toiminnallisuuden eri käyttäytyminen eri skenaarioissa, metodien käyttäytymisen riippuvuus eri annetuista tiedoista, jäsenien tai metodien sama nimi erityyppisissä luokassa, implisiittisen tyyppimuunnoksen tukeminen. </p><p>Javassa on kaksi tyyppiä polymorfismia. Staattisessa polymorfismissa luokassa on useita metodeja, joilla on sama nimi samassa luokassa, mutta jokaisella on eri määrä parametreja tai eri tietotyyppien parametreja. Sellaisia funktioita kutsutaan ylikuormituksiksi (method overloading). Metodikutsun käsittelee kääntäjä. Toinen polymorfismin tyyppi on dynaaminen. Se esiintyy, kun lapsiluokalla on oma määritelmänsä yhdelle kantaluokan jäsenmetodeista. Tätä kutsutaan metodin ohitukseksi (method overriding). Näiden kahden polymorfismin välillä ero on se, että staattinen polymorfismi kerää tiedot metodin kutsumiseksi käännöshetkellä, kun taas dynaaminen polymorfismi kerää tiedot metodin kutsua varten ajon aikana. </p><p>Polymorfismi eroaa periytymisestä. Periytymisessä ilman polymorfiaa lapsiluokka perii samat kantaluokan attribuutit ja metodit ilman muutoksia niiden toimivuuteen. Polymorfismissa lapsiluokka perii attribuutit ja metodit, mutta tarjoaa näille menetelmille oman toteutuksen. </p><p>Periytymisessä aliluokan vastuulla on jäsenmuuttujien ja muiden tietorakenteiden alustaminen ja kantaluokan vastuulla on pitää huoli, että aliluokan olion kantaluokkaosa alustetaan oikein. Aliluokka tarjoaa kaikki samat palvelut mitä kantaluokkakin ja mahdollisesti vielä jotain omaa. Aliluokan olio on tyypiltään myös kantaluokan olio. </p><p>Toinen käytetty olio-ohjelmoinnin periaatteista on Craig Larmanin kirjassaan Applying UML and Patterns kuvailema GRASP, eli General Responsibility Assignment Software Patterns. Se on kahdeksan periaatteen kuvailema suhde suunnittelun ja vastuunjakamisen välillä. GRASP periaatteet ovat ohjaaja, luoja, informaatioasiantuntija, alhainen yhteenliittäminen, korkea koheesio, polymorfismi, suojatut variaatiot ja täydellinen fabrikaatio. GRASP periaatteita voidaan käyttää SOLID periaatteiden tapaan hahmottamaan ja kuvailemaan yleisiä olio-ohjelmoinnin ongelmia sekä niiden ratkaisuja. Olio-ohjelmoinnin periaatteet eivät ole fyysisiä työkaluja, vaan ajatusmalleja, joiden avulla voidaan kehittää parempaa sekä selkeämpää koodia. Yhdessä kummatkin periaatteet määrittelevät keskeisiä olio-ohjelmoinnin konsepteja sekä kehitysmalleja. </p> <div class="mw-heading mw-heading2"><h2 id="Menetelmiä"><span id="Menetelmi.C3.A4"></span>Menetelmiä</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=8" title="Muokkaa osiota Menetelmiä" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=8" title="Muokkaa osion lähdekoodia: Menetelmiä"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <table style="" class="metadata plainlinks ambox ambox-content"> <tbody><tr> <td class="ambox-image"><div style="width:52px;text-align:center"> <span typeof="mw:File"><a href="/wiki/Tiedosto:Question_book-4.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/50px-Question_book-4.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/75px-Question_book-4.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/100px-Question_book-4.svg.png 2x" data-file-width="262" data-file-height="204" /></a></span></div> </td> <td class="ambox-text"><b>Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä.</b><br /><small>Voit auttaa Wikipediaa lisäämällä artikkeliin <a href="/wiki/Wikipedia:Tarkistettavuus" title="Wikipedia:Tarkistettavuus">tarkistettavissa olevia</a> lähteitä ja merkitsemällä ne <a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">ohjeen</a> mukaan.</small><br /> <p>Tarkennus: <i>ei yhtäkään lähdettä tässä osiossa, tarkistettava</i> </p> </td></tr></tbody></table> <p>Olio-ohjelmointi on vaikuttanut suuresti <a href="/wiki/Ohjelmistotuotanto" title="Ohjelmistotuotanto">ohjelmistotuotannon</a> menetelmiin ohjelmiston elinkaaren kaikissa eri vaiheissa. </p><p>Olioanalyysi on keskeinen osa olio-ohjelmiston määrittelyä ja suunnittelua. Olioanalyysissa selvitetään ongelma-alueen (problem domain) käsitteet (concepts) ja niiden väliset rakenteelliset ja toiminnalliset suhteet. Olioanalyysin tuloksena on käsitemalli (concept model), josta toteutuksen luokkamäärittelyt voidaan suoraviivaisesti johtaa. </p><p>Olioanalyysia varten on kehitetty useita mallinnuskieliä. Mallinnuskielet poikkeavat monella tavalla tavallisista oliokielistä: Mallinnuskielet eivät ole suoritettavia, vaan ne kuvaavat järjestelmän rakennetta korkeammalla abstraktiotasolla ilman yksityiskohtia. Mallinnuskieliä käytetään pääasiassa graafisella notaatiolla, mikä mahdollistaa suurten kokonaisuuksien havainnollistamisen diagrammien avulla. Mallinnuskielten rakenne on kuitenkin tarkoin määritelty, jotta mallit eivät olisi tulkinnanvaraisia. Object Management Groupin (OMG) <a href="/wiki/UML-mallinnus" title="UML-mallinnus">Unified Modeling Language</a> (UML) on saavuttanut hallitsevan aseman yleiskäyttöisten mallinnuskielien joukossa. UML on standardi graafinen mallinnuskieli, joka tarjoaa useita erilaisia kaavioita, joista tunnetuimpia ovat <a href="/wiki/Luokkakaavio" title="Luokkakaavio">luokkakaavio</a>, <a href="/wiki/Sekvenssikaavio" title="Sekvenssikaavio">sekvenssikaavio</a>, <a href="/wiki/K%C3%A4ytt%C3%B6tapauskaavio" title="Käyttötapauskaavio">käyttötapauskaavio</a> sekä <a href="/wiki/Tilakaavio" title="Tilakaavio">tilakaavio</a>. </p><p>Luokkakaavio sisältää luokan, attribuutit (luokan sisältämä tieto), metodit (luokan toiminnallisuus) sekä luokkien väliset yhteydet. Alla esimerkki luokkakaaviossa kuvatusta Nappula-luokasta, jolla on muuttujia dataa varten sekä funktioita. Esimerkin taulukossa viisi ylintä ovat yksityisiä attribuutteja ja kolme alinta ovat julkisia metodeja. </p> <table class="wikitable"> <tbody><tr> <td>Nappula </td></tr> <tr> <td>- xkoko </td></tr> <tr> <td>- ykoko </td></tr> <tr> <td>- xsijainti </td></tr> <tr> <td>- ysijainti </td></tr> <tr> <td>- teksti </td></tr> <tr> <td>+ piirrä() </td></tr> <tr> <td>+ paina() </td></tr> <tr> <td>+ rekisteröi_takaisinkutsu() </td></tr></tbody></table> <p><a href="/wiki/Suunnittelumalli" title="Suunnittelumalli">Suunnittelumallit</a> (design patterns) syntyivät alun perin rakennusarkkitehtuurin piirissä, mutta niiden idea otettiin käyttöön olio-ohjelmoinnissa 1990-luvun alussa. Suunnittelumalli on toistettavissa oleva ratkaisu johonkin suunnitteluongelmaan tietyssä asiayhteydessä. Suunnittelumallin kuvaus sisältää ainakin nimen, kuvauksen olosuhteista joissa sitä voi soveltaa, ratkaisun kuvauksen ja ratkaisun seuraukset. Yleisesti tunnettujen nimettyjen ratkaisumallien käyttö tehostaa viestintää ohjelmistosuunnittelijoiden välillä ja parantaa varsinaisten toteutusten selkeyttä ja rakennetta. </p><p>Suunnittelumallit voidaan laajasti jakaa kolmeen osaan: luontimalleihin, rakennemalleihin ja käyttäytymismalleihin. Luontimallien avulla pysytään luomaan olioita hallitusti tilanteen vaatimalla tavalla. Näin pystytään vähentämään järjestelmän monimutkaisuutta ja epävakautta ja samalla parannetaan sen joustavuutta ja koodin uudelleenkäytettävyyttä. Yksi suosittu luontimalli on singleton (ainokainen), jolla varmistetaan, että luokasta tehdään vain yksi instanssi. Tämä instanssi tulee myös olla saavutettavissa globaalisti, jotta muut järjestelmän osat pääsevät sen sisältämään tietoon käsiksi. Singlettomassa luokkamuuttuja ja luokkafunktio on laitettu yhteen. Tällöin voidaan olla varmoja, ettei tehdä kuin yksi olio tätä kyseistä tyyppiä. Tämä on yksinkertainen, mutta tehokas malli, jonka avulla tietoa saadaan jaettua ilman tarvetta luoda uutta oliota jokaiselle sitä tarvitsevalle komponentille. </p><p>Rakennemallit ovat hyödyllisiä muodostaessa suuria, joustavia ja tehokkaita rakenteita olioista, jotka ovat muuten olisivat erillään. Näillä rakenteilla pystytään siis esimerkiksi määrittelemään komponenttien välisiä yhteyksiä ja ne ovat erityisen hyödyllisiä suurissa järjestelmissä. Rakennemalleista esimerkki voisi olla decorator (kuorruttaja), jonka avulla pystyy lisäämään toimintoja olioon muuttamatta sen pohjalla olevaa rakennetta. Uusia "kerroksia" lisätessä kuitenkin kannattaa olla varovainen, että niitä tule lisättyä liian monta, joka johtaisi turhaan monimutkaisuuteen. </p><p>Käyttäytymismallit ovat vastuussa tehokkaasta komponenttien välisestä kommunikaatiosta. Nämä mallit huolehtivat olioiden välisestä vuorovaikutuksesta ja vastuiden määrittelystä. Näiden mallien tavoite on tehdä näistä prosesseista mahdollisimman yksinkertaisia ja helppoja ymmärtää. Yksi esimerkki käyttäytymismalleista on observer (tarkkailija), jota käytetään usein, kun jokin olio on vuorovaikutuksessa monen muun olion kanssa. Malli toimii siten, että oliot, jotka tarkkailevat yhtä tiettyä oliota saavat heti tietää, jos tarkkailtu olio muuttuu tai vaihtaa tilaa. Käyttäytymismalli kuvaa myös ohjelmiston luokat. Malli voi olla luokkiin perustuva, olioihin perustuva tai toiminnallisuuden kapselointi olioon perustuva. Olioihin perustuva yksi käyttäytymismalli on Chain of Responsibility (vastuuketju), joka perustuu siihen, että toiminnot delegoidaan olioille. Tiedonsiirto, joka tapahtuu olioiden välillä perustuu pyynnön käsittelevien olioiden muodostamasta ketjusta, jossa pyyntö käsitellään siinä olevasta oliossa, joka on kyvykäs toteuttamaan pyynnön. </p><p>Olioteknologioiden käyttö ohjelmiston suunnittelussa ja toteutuksessa ei ohjaa minkään tietyn prosessimallin käyttöön tai muuta ohjelmiston laadunvarmennuksen perusperiaatteita. Olioteknologian asiantuntijat ovat kuitenkin osallistuneet aktiivisesti keskusteluun ohjelmistoprosesseista. <a href="/wiki/Ketter%C3%A4_ohjelmistokehitys" title="Ketterä ohjelmistokehitys">Ketterät menetelmät</a>, käyttötapausmallinnus ja <a href="/wiki/Testivetoinen_kehitys" title="Testivetoinen kehitys">testivetoinen kehitys</a> syntyivät pienessä Smalltalk-kehittäjien yhteisössä, josta ne ovat levinneet yleisempään käyttöön vuosituhannen vaihteen jälkeen. </p> <div class="mw-heading mw-heading2"><h2 id="Polymorfismi_-_monimuotoisuus">Polymorfismi - monimuotoisuus</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=9" title="Muokkaa osiota Polymorfismi - monimuotoisuus" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=9" title="Muokkaa osion lähdekoodia: Polymorfismi - monimuotoisuus"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Alatyypitys (subtyping) on yksi <a href="/wiki/Polymorfismi" title="Polymorfismi">monimuotoisuuden</a> ilmentymä. Alatyypityksessä kutsuttu koodi voi olla riippumaton siitä, missä tuetussa hierarkiassa se toimii, esimerkiksi kantaluokka tai jokin kantaluokan lapsiluokka. Samaan aikaan, esimerkiksi saman niminen metodi eri luokissa voi toimia eri tavalla, kun on kyse periytymisestä. </p><p>Esimerkiksi luokat, jotka ovat tyyppiä Ympyrä ja Neliö, ovat periytyneet kantaluokasta Muoto. Piirrä-metodi jokaisella luokalla, jotka ovat periytyneet Muoto-luokasta, implementoivat metodin itselleen vaatimallaan tavalla, jotta vaadittu muoto piirtyy. Samalla koodin kutsuminen ei muutu, vaikka käsiteltäisiinkin monia eri Muoto-luokan lapsiluokkia, koska jokaisella lapsiluokalla on Piirrä-metodi ja sitä voidaan kutsua yleisesti Muoto-luokan kautta. </p> <div class="mw-heading mw-heading2"><h2 id="Kapselointi">Kapselointi</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=10" title="Muokkaa osiota Kapselointi" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=10" title="Muokkaa osion lähdekoodia: Kapselointi"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tiedon piilotus eli <a href="/wiki/Kapselointi" title="Kapselointi">kapselointi</a> tarkoittaa, ettei olion tilaa pääse muuttamaan muuten kuin olion metodien välityksellä. <a href="/wiki/Olio_(ohjelmointi)" title="Olio (ohjelmointi)">Olio</a> kapseloi sisäänsä käytöksensä, tilansa ja identiteetinsä. Olion käytös kuvataan sen <a href="/wiki/Metodi_(ohjelmointi)" class="mw-redirect" title="Metodi (ohjelmointi)">metodeissa</a>. Metodi suoritetaan, kun olio saa viestin toiselta oliolta. Olio valitsee viestin perusteella metodin, jonka se suorittaa. Olion tilan muodostavat sen <a href="https://en.wikipedia.org/wiki/Attribute_(computing)" class="extiw" title="en:Attribute (computing)">attribuutteihin</a> sijoitetut arvot tiettynä ajanhetkenä. <a href="https://en.wikipedia.org/wiki/Identity_(object-oriented_programming)" class="extiw" title="en:Identity (object-oriented programming)">Identiteetti</a> yksilöi olion: kahdella oliolla voi olla sama tila, mutta eri identiteetti; ts. ne ovat kaksi eri oliota. Identiteetti määräytyy automaattisesti oliota luodessa. </p> <div class="mw-heading mw-heading2"><h2 id="Luokka-_vs._Prototyyppipohjainen">Luokka- vs. Prototyyppipohjainen</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=11" title="Muokkaa osiota Luokka- vs. Prototyyppipohjainen" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=11" title="Muokkaa osion lähdekoodia: Luokka- vs. Prototyyppipohjainen"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Luokkapohjainen_ohjelmointi" title="Luokkapohjainen ohjelmointi">Luokkapohjaisessa ohjelmoinnissa</a> luokat on määritelty etukäteen ja oliot on luotu luokkiin pohjautuen. Jos kaksi oliota <i>omena</i> ja <i>appelsiini</i> ovat luotu luokasta <i>hedelmä</i>, ovat molemmat hedelmiä ja on taattu, että voit käsitellä niitä samalla tavalla; esim. Ohjelmoija voi olettaa kummallakin olevan samat ominaisuudet, kuten <i>väri</i>, <i>sokeripitoisuus</i> tai <i>on_raaka</i>. </p><p><br /> Prototyyppipohjaisessa kielessä oliot ovat itsenäisiä kokonaisuuksia. Luokkia ei ole. Olion prototyyppi on vain toinen olio, johon olio on linkitetty. Jokaisella oliolla on prototyyppilinkki (vain yksi). Uusia olioita voi linkittää jo valmiina oleviin olioihin linkittämällä se tämän prototyypiksi. Voit kutsua kahta eri objektia, <i>omena</i> ja <i>appelsiini, Hedelmäksi</i>, jos olio <i>Hedelmä</i> on olemassa sekä molemmilla olioilla, <i>omenalla</i> ja <i>appelsiinilla,</i> on asetettu <i>Hedelmä</i> prototyypiksi. <i>Hedelmä</i> ei ole tässä luokkana vaan olion jakavana ekvivalenssiluokkana. Olion attribuutit ja metodit on delegoitu kaikille tämän prototyypin määrittämän ekvivalenssiluokan olioille. Olion omistamia atribuutteja ja metodeja ei siis voi jakaa muille ekvivalenssiluokan olioille; esim. Attribuutti <i>sokeri_pitoisuus</i> voi puuttua oliosta <i>omena.</i> Prototyypin kautta voidaan toteuttaa vain yksi perintö. </p> <div class="mw-heading mw-heading2"><h2 id="Agenttiohjelmointi">Agenttiohjelmointi</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=12" title="Muokkaa osiota Agenttiohjelmointi" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=12" title="Muokkaa osion lähdekoodia: Agenttiohjelmointi"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Agenttiohjelmointi (engl. Agent-oriented programming, AOP) on ohjelmointiparadigma, joka pohjautuu ohjelmistoagentteihin. Toisin kuin olio-ohjelmoinnissa, joka perustuu metodeja tarjoaviin olioihin, agenttiohjelmoinnissa ohjelmiston yksittäiset komponentit ovat “agenteiksi” kutsuttuja itsenäisiä tietokoneohjelmia. Nämä agentit toimivat itsenäisesti ja kommunikoivat keskenään viestien avulla, jotta voidaan saavuttaa niille annettuja tavoitteita. Agentit voivat myös suorittaa toimintoja ympäristössään ja havainnoida ympäristön tilaa. Agenttiohjelmointia käytetään usein monimutkaisten järjestelmien kehittämiseen, joissa on paljon vuorovaikutusta komponenttien välillä. Agenttiohjelmoinnista on tullut myös tärkeä osa tekoälytutkimusta ja sitä käytetään muun muassa robotiikkaan ja puheentunnistukseen. </p><p>Agenttiohjelmoinnin historia ulottuu vuoteen 1990, kun Yoav Shoham esitteli käsitteen tekoälytutkimuksessaan. Hänen luomansa agentit olivat erityisiä, koska niillä on vain yksi metodi yhdellä parametrillä. Agenttiohjelmoinnin käsite alkoi vakiintua 1990-luvun lopulla, kun useat tutkijat alkoivat kiinnostua siitä. Esimerkiksi vuonna 1998 James Odell julkaisi kirjan ”Object-Oriented Analysis, Design and Implemention”, jossa hän puhui myös agenttiohjelmoinnista. Vuonna 2000 agenttiohjelmoinnista tuli virallisesti IEEE:n (Institute of Electrical and Electronics Engineers) standardi. </p> <div class="mw-heading mw-heading2"><h2 id="Avoin_rekursio">Avoin rekursio</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=13" title="Muokkaa osiota Avoin rekursio" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=13" title="Muokkaa osion lähdekoodia: Avoin rekursio"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Kielissä, jotka tukevat avointa rekursiota, voivat luokan metodit kutsua toisia metodeja, jotka ovat samassa luokassa, tai itseään. Metodeja kutsutaan yleisesti käyttäen erikoismuuttujia tai avainsanoja nimeltään "this" tai "self". </p> <div class="mw-heading mw-heading2"><h2 id="Konstruktori">Konstruktori</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=14" title="Muokkaa osiota Konstruktori" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=14" title="Muokkaa osion lähdekoodia: Konstruktori"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Konstruktori" title="Konstruktori">Konstruktoria</a> voidaan kutsua myös muodostimeksi tai rakentajaksi. Luokkapohjaisessa olio-ohjelmoinnissa muodostin on funktio, jota kutsutaan luomaan olio. Se vastaa uuden olion alustamisesta ja asettaa jäsenmuuttujat alkuarvoihin. Sillä ei ole eksplisiittistä palautustyyppiä eikä se ole implisiittisesti peritty. Muodostaja on usein saman niminen kuin luokka. Muuttumaton olio täytyy alustaa muodostajassa. Useimmissa ohjelmointikielissä (Java, Python, C++ jne.) luokalla voi olla useampi kuin yksi muodostaja, joilla on erilaiset parametrit. </p><p>Olio-ohjelmoinnissa muodostaja tyyppejä on erilaisia. Parametrilliset muodostajat (parameterized constructor) voivat ottaa vähintään yhden argumentin ja ne mahdollistavat tietojen asettamisen, kun luokkaa luodaan. Oletusmuodostaja (default constructor) on parametriton muodostaja ja sen toiminta on kielestä riippuvainen. Javassa oletusmuodostajan luo kääntäjä automaattisesti, jos luokalle ei ole sitä määritetty. Tyyppien arvot ovat silloin oletusarvoissa eli kokonaislukutyypit jätetään arvoon 0, liukulukutyypit arvoon 0,0 ja boolean-tyyppi arvoon false ja viitetyypit ovat null. </p><p>Kopiontimuodostajassa (copy constructor) on yksi muodollinen parametri, joka on luokan tyyppi ja parametri voi olla viittaus olioon. Tätä käytetään, kun halutaan luoda kopio saman luokan olemassa olevasta oliosta. Muunnoskonstruktori (conversion constructor) tarjoaa keinon luoda implisiittisesti yhteen luokkaan kuuluvan olion erityyppisen olion perusteella. Muunnoskonstruktori mahdollistaa tietotyypin automaattisen muuntamisen toiseksi oliota luodessa. C++:ssa siirtomuodostajat (move constructor) ottavat Rvalue-viittauksen luokan olioon. Niitä käytetään resurssien omistajuuden siirtämiseen. <sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">&#91;</span>19<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Roolisuuntautunut_ohjelmointi">Roolisuuntautunut ohjelmointi</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=15" title="Muokkaa osiota Roolisuuntautunut ohjelmointi" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=15" title="Muokkaa osion lähdekoodia: Roolisuuntautunut ohjelmointi"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Roolipohjainen ohjelmointi on ohjelmoinnin muoto, jossa asioita ilmoitetaan termien avulla, jotka yrittävät ilmoittaa ihmisen näkökulmasta, tämä tekee koodin lukemisesta sekä </p><p>ymmärtämisestä helpompaa kuin tavallisen koodin. </p><p>Pääajatus rooli pohjaisessa ohjelmoinnissa on se, että ihmiset ajattelevat koodin toimintaa roolien läpi. Esimerkkinä rooli pohjaiselle ohjelmille käytetään ihmistä jolla on useita eri rooleja kuten työ rooli tai koti rooli. Tämän henkilön vuorovaikutukset riippuvat siis pitkälti hänelle annetuista rooleista ja niiden ominaisuuksista. Ominaisuudet jaetaan usein delegoimalla tietyt tehtävät tietylle oliolle. </p><p>Roolipohjaisen ohjelmoinnin edut eivät myöskään rajoitu vain koodin ymmärrettävyyden paranemiseen. Roolipohjainen ohjelmointi myös helpottaa ohjelmiston testaamista sekä ylläpitoa. Kun ohjelmisto on rakennettu roolien ja niiden ominaisuuksien ympärille tekee se toimintojen testaamisesta helpompaa, sillä jokainen rooli ja sen vastuut on määritelty tarkasti. </p><p>Jolloin mahdollisten virheiden löytäminen on helpompaa </p><p>Vanhoissa ohjelmointi oppaissa sekä muissa opetusmateriaaleissa rooli pohjaista ohjelmointia on käsitelty huomattavan vähän. Se on kuitenkin hyödyllinen osa olio ohjelmointia ja sen merkitys on lisääntynyt uusien ohjelmistojen kehityksessä. Tämän tyylisessä ohjelmoinnissa roolit pyrkivät helpottamaan kontekstin ymmärtämistä. Roolilla voidaan myös tarkoittaa tiettyä joukkoa kuten ohjelmiston palveluita, jotka esimerkiksi mahdollistavat paremman paremman palvelimen suorituskyvyn tietyistä toiminnoista verkossa. </p><p>Tulevaisuudessa roolipohjaisen ohjelmoinnin merkitys ja käyttö tulee todennäköisesti kasvamaan, kun kehitetään yhä monimutkaisempia ohjelmistoja, joissa on useita toimintoja ja rooleja, jotka tarvitsevat erillistä huomiota ja käsittelyä. </p><p>(<a href="https://en.wikipedia.org/wiki/Role-oriented_programming" class="extiw" title="en:Role-oriented programming">Role-oriented programming</a><a href="https://en.wikipedia.org/wiki/Role-oriented_programming" class="extiw" title="en:Role-oriented programming">)</a> </p> <div class="mw-heading mw-heading2"><h2 id="Sovellusalueita">Sovellusalueita</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=16" title="Muokkaa osiota Sovellusalueita" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=16" title="Muokkaa osion lähdekoodia: Sovellusalueita"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Olio-ohjelmoinnin ensimmäisiä käyttökohteita olivat diskreetit tapahtumasimulaatiot, joissa mallinnettiin esimerkiksi puhelinjärjestelmien tai logististen järjestelmien toimintaa. </p><p>Olio-ohjelmointi soveltuu erityisen hyvin graafisten käyttöliittymien toteuttamiseen. Käyttöliittymäkirjastot, kuten Swing, SWT tai MFC sisältävät luokkahierarkian, joissa käyttöliittymän komponenttien yhteisiä ominaisuuksia hallitaan perinnän avulla. </p><p>Olio-ohjelmointi on hallitseva paradigma myös tietojärjestelmien suunnittelussa. Reaalimaailman käsitteet mallinnetaan olioanalyysissä ja käsitteitä vastaavat luokat toteutetaan ohjelmointikielellä. Yleinen ongelma tietojärjestelmissä on olioiden avulla esitetyn mallin tallentaminen relaatiotietokantaan, sillä relaatiomalli voi esittää käsitteiden välillä monesta moneen suhteita, mutta ei toisaalta pysty esittämään perintäsuhteita. </p><p>Suosittu olio-ohjelmointikieli on C++. Se on yleiskäyttöinen ohjelmointikieli, joka laajentaa C-kieltä lisäämällä tuen olio-ohjelmointiin. C++:n avulla kehittäjät voivat toteuttaa objekteja, periytymistä, moninkertaisuutta ja muita olio-ohjelmointikonsepteja. C++:n ominaisuudet tekevät siitä tehokkaan ja joustavan kielen, jota käytetään laajalti esimerkiksi pelien kehittämisessä, grafiikkasovelluksissa ja sulautetuissa järjestelmissä. Olio-ohjelmointi ei rajoitu C++:aan, vaan muita suosittuja olio-ohjelmointikieliä ovat C#, Python ja Ruby. Näiden kielten avulla kehittäjät voivat hyödyntää olio-ohjelmoinnin etuja, kuten koodin uudelleenkäyttöä, kapselointia ja helpompaa ohjelman ylläpitoa. Olio-ohjelmointia käytetään laajasti erilaisissa sovelluksissa, kuten web-kehityksessä, mobiilisovelluskehityksessä, tietokannassa ja tekoälyssä. Sen avulla voidaan luoda modulaarisia ja laajennettavia ohjelmistoja, jotka on helpompi ymmärtää, ylläpitää ja laajentaa. </p><p>Olio-ohjelmoinnin periaatteiden ymmärtäminen ja sen soveltaminen ohjelmointiin on tärkeää nykyajan ohjelmistokehityksessä. Se antaa kehittäjille mahdollisuuden työskennellä tehokkaasti ja auttaa rakentamaan laadukkaita ja joustavia ohjelmistoja. </p><p>Hajautetuissa oliosovelluksissa oliot on sijoitettu hajalleen eri palvelinten välille. Olioiden välinen viestintä hoidetaan sovitun <a href="/wiki/Protokolla_(tietoliikenne)" title="Protokolla (tietoliikenne)">protokollan</a>, esimerkiksi <a href="/wiki/SOAP" title="SOAP">SOAPin</a>, <a href="/wiki/CORBA" title="CORBA">CORBA</a> tai <a href="/w/index.php?title=RMI&amp;action=edit&amp;redlink=1" class="new" title="RMI (sivua ei ole)">RMI</a>:n avulla. Olion luominen ja purkaminen tapahtuvat näennäisesti oliota kutsuvalla koneella, mutta itse olion suorittama proseduuri voidaan ajaa jollakin toisella tietoverkossa sijaitsevalla palvelimella. </p><p><a href="/w/index.php?title=Oliopohjainen_tallennus&amp;action=edit&amp;redlink=1" class="new" title="Oliopohjainen tallennus (sivua ei ole)">Oliopohjaisessa tiedontallennuksessa</a> olioajattelua sovelletaan tiedon tallentamiseen siten, että kiinteiden blokkien tai tiedostojen sijaan tai ohella viitataan olioihin, jotka voivat esimerkiksi yhdistellä tietoja useammasta paikasta ja jakaa sitä helposti keskenään. Esimerkiksi <a href="/wiki/Windows" class="mw-redirect" title="Windows">Windowsiin</a> suunniteltiin 1990-luvun puolivälissä oliopohjaista tiedostojärjestelmää, mutta ajatus toteutui vain osin: esimerkiksi <a href="/wiki/Ohjauspaneeli_(Windows)" title="Ohjauspaneeli (Windows)">Ohjauspaneelin</a> asetussovelluksiin viitataan käyttöjärjestelmän sisäisesti olioina, ei kiinteinä tiedostoina.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">&#91;</span>20<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">&#91;</span>21<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading4"><h4 id="Olio-ohjelmoinnin_käyttö_verkkoprotokollassa"><span id="Olio-ohjelmoinnin_k.C3.A4ytt.C3.B6_verkkoprotokollassa"></span>Olio-ohjelmoinnin käyttö verkkoprotokollassa</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=17" title="Muokkaa osiota Olio-ohjelmoinnin käyttö verkkoprotokollassa" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=17" title="Muokkaa osion lähdekoodia: Olio-ohjelmoinnin käyttö verkkoprotokollassa"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Viestit, jotka liikkuvat palveluja pyytävän tietokoneen ja kyseistä palvelua tarjoavan palvelimen välillä, voidaan suunnitella luokkaobjekteiksi määritellyiksi objektijonoiksi. Kyseiset luokkaobjektit ovat viestivien osapuolten (eli tietokoneen ja palvelimen) tiedossa jo ennalta. Objekti voisi koostua esimerkiksi pituuskentästä, luokan tunnisteen sisältävästä kentästä ja arvokentästä. Palvelimen pitää ohjata vastaanotetut viestit oliolle, joka tunnistaa viestissä lähetetyn käskyn ja pystyy tarjoamaan pyydetyn palvelun. Palvelua käyttävän asiakastietokoneen ja sitä tarjoavan palvelimen välistä yhteyttä mallinnetaan usein olio-orientoituneena rakenteena. <a href="/wiki/IBM" title="IBM">IBM</a>:n <a href="/w/index.php?title=Distributed_Data_Management_Architecture&amp;action=edit&amp;redlink=1" class="new" title="Distributed Data Management Architecture (sivua ei ole)">Distributed Data Management Architecture</a> (DDM) soveltaa tätä tapaa. </p> <div class="mw-heading mw-heading4"><h4 id="Olio-ohjelmoinnin_käyttö_pelien_kehittämisessä"><span id="Olio-ohjelmoinnin_k.C3.A4ytt.C3.B6_pelien_kehitt.C3.A4misess.C3.A4"></span>Olio-ohjelmoinnin käyttö pelien kehittämisessä</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=18" title="Muokkaa osiota Olio-ohjelmoinnin käyttö pelien kehittämisessä" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=18" title="Muokkaa osion lähdekoodia: Olio-ohjelmoinnin käyttö pelien kehittämisessä"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Videopelit voivat koostua muutamista tuhansista koodiriveistä miljooniin koodiriveihin. Sen vuoksi on tärkeä kirjoittaa koodia, joka on helposti muokattavissa ja ylläpidettävissä. Ohjelmointi tyyleistä olio-ohjelmointi on yksi mahdollinen tapa, jolla saadaan luotua ylläpidettävää koodia, joka on mukautuvaa, ymmärrettävää ja laajennettavissa. Sen avulla voidaan luoda uudelleen käytettävää koodia noudattamalla DRY (Don’t Repeat Yourself) -menetelmää, eli suomennettuna, älä toista itseäsi menetelmää, joka tarkoittaa, että jokin tietty toiminnallisuus kirjoitetaan kerran ja tätä käytetään uudelleen, kopioimisen sijasta. Tämä tapa sopii hyvin pelien kehittämiseen, koska peleissä on asioita, joita halutaan tehdä monesti uudelleen. Olio-ohjelmointi tarjoaa tiettyjä erityisominaisuuksia, jotka voidaan nähdä etuina pelien kehittämisessä. </p> <ul><li>Koheesio (cohesion),</li></ul> <ul><li>Yhdistäminen/kytkeytymien (coupling),</li> <li>Kapselointi (encapsulation),</li> <li>Abstraktio (abstraction),</li> <li>Periytyminen (inheritance)</li></ul> <p>Pelin kehityksen kannalta koheesiota voidaan käyttää tilanteessa, jossa haluamme liikuutta esimerkiksi avaruusalusta. Tällöin meillä voi olla luokka nimeltä liike, joka hoitaa liikkumisen ja sitä voidaan käyttää uudestaan. Kytkeytymien tulee huomioida peliä tehdessä esimerkiksi siten, että mitä tapahtuu tilanteessa, jossa avaruusalus törmää asteroidiin, tuhoutuuko se vai ei? Abstraktiota voidaan soveltaa useampien olioiden liikutteluun pelissä. Tietty toiminnallisuus voidaan abstraktoida abstraktiksi luokaksi. Esimerkiksi avaruusalus ja asteroidi tarvitsevat samoja tietoja liikkumiseen, joita ovat esimerkiksi, nopeus ja sijainti. Objektin liikkuminen voidaan periyttää abstraktista luokasta avaruusalukselle, jolloin sitä ei tarvita avaruusalus luokassa. <sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">&#91;</span>22<span class="cite-bracket">&#93;</span></a></sup> </p><p>Esimerkkejä peleistä, jotka ovat tehty Javalla, joka on olio-ohjelmointi kieli: <sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">&#91;</span>23<span class="cite-bracket">&#93;</span></a></sup> </p> <ul><li>Wakfu</li> <li>Worms: A Space Oddity</li> <li>Sainst Row 2 (Mobile)</li> <li>SimCity</li> <li>Spiral Knights</li> <li>RuneScape</li> <li>Minecraft</li></ul> <div class="mw-heading mw-heading2"><h2 id="Ongelmia">Ongelmia</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=19" title="Muokkaa osiota Ongelmia" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=19" title="Muokkaa osion lähdekoodia: Ongelmia"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="noprint noviewer" style="background-color: var( --background-color-neutral-subtle, #f8f9fa ); color: var( --color-emphasized, #101418 ); font-size: 90%; padding-left: 1em; padding-right: 1em; padding-top: 0.2em; padding-bottom: 0.5em; margin-top: 1em; margin-bottom: 0.5em; border: 1px solid var( --border-color-subtle, #c8ccd1 ); clear: both;"><figure class="mw-halign-left" typeof="mw:File"><a href="/wiki/Tiedosto:Translation_Latin_Alphabet.svg" class="mw-file-description" title="Käännös suomeksi"><img alt="Käännös suomeksi" src="//upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Translation_Latin_Alphabet.svg/60px-Translation_Latin_Alphabet.svg.png" decoding="async" width="60" height="19" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Translation_Latin_Alphabet.svg/90px-Translation_Latin_Alphabet.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Translation_Latin_Alphabet.svg/120px-Translation_Latin_Alphabet.svg.png 2x" data-file-width="475" data-file-height="150" /></a><figcaption>Käännös suomeksi</figcaption></figure> <div style="text-align: center; font-style:italic;">Tämä artikkeli tai sen osa on käännetty tai siihen on haettu tietoja muunkielisen Wikipedian artikkelista. <br />Alkuperäinen artikkeli: <a href="https://en.wikipedia.org/wiki/Object-oriented_programming" class="extiw" title="en:Object-oriented programming">en:Object-oriented programming</a> </div></div> <p>Olio-ohjelmointi ei eduistaan huolimatta ole täysin ongelmatonta. Siinä missä <a href="/wiki/Proseduraalinen_ohjelmointi" title="Proseduraalinen ohjelmointi">proseduraalisessa ohjelmassa</a> yhdessä kohtaa esiintynyt virhe saattoi vaikuttaa vain paikallisesti, olio-ohjelmoinnissa virheet monistuvat välittömästi kaikkiin oliota käyttäviin tahoihin. Olio-ohjelmoinnissa hyvän suunnittelun ja automatisoidun <a href="/wiki/Yksikk%C3%B6testaus" class="mw-redirect" title="Yksikkötestaus">yksikkötestauksen</a> merkitys korostuu. Väärin käytettynä olioilla voi myös olla suorituskykyvaikutuksia. Koska jokainen olio rakennetaan aina kokonaisuudessaan tietokoneohjelman muistiin, suurten oliomäärien käsittely voi viedä huomattavasti muistia. </p><p>Olio-ohjelmoinnin perusfilosofian (eli ohjelmointiparadigman) opettelu vie myös usein aikaa. Perinteisestä proseduraalisesta ohjelmoinnista olio-ohjelmointiin siirtyminen on joskus vaikeaa jopa kokeneille ohjelmistosuunnittelijoille. Nykyisin olio-ohjelmointia opetetaan useilla eri koulutustasoilla ja sen peruskäsitteet hallitaan yleisesti ottaen paremmin kuin ennen. Tästä huolimatta moni ohjelma suunnitellaan näennäisesti olioilla, mutta käytännössä ne noudattavat aikaisempaa ohjelmointityyliä, johon tekijä on tottunut. Olio-ohjelmointi ei siis tee kenestäkään parempaa ohjelmoijaa eikä automaattisesti anna mitään etuja suhteessa perinteiseen ohjelmointiin, ellei olio-ohjelmoinnin etuja osata oikealla tavalla hyödyntää. </p><p>Luokkien periyttämisen heikkoutena on eri luokkien käytännön toteutuksen sitominen toisiinsa, mikä saattaa aiheuttaa ongelmia siinä vaiheessa kun ohjelmistosta tehdään uusia versioita. Näiden ongelmien ennalta ehkäisemiseksi on tehty <a href="/wiki/Suunnittelumalli" title="Suunnittelumalli">suunnittelumalleja</a>, jotka perustuvat hyväksi havaittuihin ratkaisuihin. </p><p> Luca Cardelli on väittänyt, että olio-ohjelmoitu koodi on "luonnostaan vähemmän tehokas" kuin proseduraalinen koodi, että olio-ohjelmoidun koodin kääntäminen voi kestää kauemmin ja että olio-ohjelmointikielillä on "erittäin huonot modulaarisuusominaisuudet luokan laajennuksen ja muokkauksen suhteen" ja että ne ovat yleensä erittäin monimutkaisia.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">&#91;</span>24<span class="cite-bracket">&#93;</span></a></sup> Jälkimmäisen seikan toistaa <a href="/w/index.php?title=Joe_Armstrong&amp;action=edit&amp;redlink=1" class="new" title="Joe Armstrong (sivua ei ole)">Joe Armstrong</a>, <a href="/wiki/Erlang_(ohjelmointikieli)" title="Erlang (ohjelmointikieli)">Erlangin</a> pääkeksijä, jota lainataan sanomalla:<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">&#91;</span>25<span class="cite-bracket">&#93;</span></a></sup> </p><blockquote><p>Olioperustaisten kielten ongelma on, että heillä on kaikki tämä implisiittinen ympäristö, jota he kuljettavat mukanaan. Halusit banaanin, mutta sait gorillan, joka piti banaania ja koko viidakkoa. &#160;</p></blockquote><p>Potok et al.:n tutkimus ei ole osoittanut merkittävää eroa tuottavuudessa olio-ohjelmoinnin ja proseduraalisten menettelytapojen välillä.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">&#91;</span>26<span class="cite-bracket">&#93;</span></a></sup> </p><p>Eräässä artikkelissa Lawrence Krubner väitti, että verrattuna muihin kieliin (LISP-murteet, funktionaaliset kielet jne.) olio-ohjelmointikielillä ei ole erityisiä vahvuuksia, ja niiden tarpeettomasta monimutkaisuudesta aiheutuu raskas taakka.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">&#91;</span>27<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Paul_Graham" title="Paul Graham">Paul Graham</a> on ehdottanut, että olio-ohjelmoinnin suosio suurissa yrityksissä johtuu "suurista (ja usein muuttuvista) keskinkertaisten ohjelmoijien ryhmistä". Grahamin mukaan olio-ohjelmoinnin asettama kurinalaisuus estää yhtä ohjelmoijaa "tekemästä liikaa vahinkoa".<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">&#91;</span>28<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Clojure" title="Clojure">Clojure-ohjelmointikielen</a> luoja <a href="/w/index.php?title=Rich_Hickey&amp;action=edit&amp;redlink=1" class="new" title="Rich Hickey (sivua ei ole)">Rich Hickey</a> on kuvaillut oliojärjestelmiä liian yksinkertaisiksi todellisen maailman malleiksi. Hän korostaa olio-ohjelmoinnin kyvyttömyyttä mallintaa aikaa kunnolla, mikä on yhä ongelmallisempaa ohjelmistojärjestelmien samanaikaistuessa.<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">&#91;</span>29<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Unix" title="Unix">Unix</a>-ohjelmoija ja <a href="/wiki/Avoin_l%C3%A4hdekoodi" title="Avoin lähdekoodi">avoimen lähdekoodin</a> ohjelmistojen puolestapuhuja <a href="/wiki/Eric_S._Raymond" title="Eric S. Raymond">Eric S. Raymond</a> on kritisoinut väitteitä, joiden mukaan olio-ohjelmointi esitetään "ainoana oikeana ratkaisuna", ja on kirjoittanut, että olio-ohjelmointikielet kannustavat yleensä paksukerroksisiin ohjelmiin, jotka tuhoavat läpinäkyvyyden.<sup id="cite_ref-:0_30-0" class="reference"><a href="#cite_note-:0-30"><span class="cite-bracket">&#91;</span>30<span class="cite-bracket">&#93;</span></a></sup> Raymondin mukaan tämä korostuu, kun olio-ohjelmointia verrataan Unixin ja <a href="/wiki/C_(ohjelmointikieli)" title="C (ohjelmointikieli)">C-ohjelmointikielen</a> lähestymistapaan. <sup id="cite_ref-:0_30-1" class="reference"><a href="#cite_note-:0-30"><span class="cite-bracket">&#91;</span>30<span class="cite-bracket">&#93;</span></a></sup> </p><p>UTF-8 ja Go ohjelmisto projekteissa mukana ollut ohjelmoija Rob Pike, on kutsunut olio-ohjelmointia “tietojenkäsittelyn Roomalaisiksi numeroiksi” ja on sanonut, että olio-ohjelmoinnin kielet usein huomion datarakenteista ja algoritmeista tyyppeihin. Lisäksi hän mainitsee esimerkin Java professorista, jonka “käsittämätön” ratkaisu ongelmaan oli luoda kuusi uutta luokkaa sen sijaan että hän olisi yksinkertaisesti käyttänyt vain hakutaulua. </p><p>Perinnöllisyyden suhteen, Rob Martin toteaa, että koska kyseessä on tietokoneohjelmisto, sukulaisluokat eivät välttämättä jaa edustamiensa asioiden suhteita. </p> <div class="mw-heading mw-heading2"><h2 id="Olion_ja_luokan_ero">Olion ja luokan ero</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=20" title="Muokkaa osiota Olion ja luokan ero" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=20" title="Muokkaa osion lähdekoodia: Olion ja luokan ero"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Aloittavalle olio-ohjelmoijalle luokan ja olion merkityksen ero voi olla vaikeaa hahmottaa. Yksikertaistettuna voidaan ajatella, että olio on konkreettinen asia ja luokka ei. </p><p><br /> Eroa on usein helpompi ymmärtää erilaisten konkreettisten esimerkkien avulla. </p><p><br /> Kun joillakin esineillä tai asioilla on monta yhteistä ominaisuutta, olisi hyödyllistä pystyä käsittelemään näitä asioita tai esineitä jotenkin kaikkia kerralla. Voidaan ajatella esimerkiksi autoa. Autoja on erilaisia, joilla on kaikilla tiettyjä samoja ominaisuuksia, kuten malli, valmistusvuosi ja hinta. Kun halutaan ajatella kaikkia autoja kerrallaan voidaan muodostaa Auto-luokka. </p><p><br /> Toisena esimerkkina voidaan ajatella tilastoa, jossa yhdellä rivillä on monta eri tietoa, kuten sähkönkulutuksessa voisi olla aika, hinta ja kulutetun sähkön määrä. Tällöin voidaan muodostaa luokka joka sisältää jäsenmuuttuija nämä rivin sisältämät tiedot. Nyt kun tietoja halutaan siirtää paikasta toiseen voidaan ajatella pelkkiä rivejä, jotka sisältävät halutut tiedot. Tällöin tiedon siirtämisestä tulee yksinkertaisempaa, kun ei tietoa on vähemmän näkyvillä. </p><p><br /> Luokka on ikään kuin kaava ja olio konkreettien tulos, joka saadaan syöttämällä tähän kaavaan tietyt parametrit. </p><p><br /> </p><p>Olio luodaan luokasta, joka toimii ”muottina” luotavalle oliolle. Luokat nimetään aina isolla alkukirjaimella ja oliot pienellä. Esimerkiksi ”henkilö” -olio luodaan ”Henkilö” -luokasta. Jäsenmuuttujat ovat hyvin tavallisesti määritelty yksityisiksi (private) jolloin ne ovat käytettävissä vain kyseisen luokan sisällä. Jotta yksityisiin muuttujiin päästään käsiksi, tähän tarvitaan jäsenfunktio (metodi). Alla esimerkki luokan, olion, jäsenmuuttujan ja jäsenfunktion käytöstä: </p><p><br /> Luokka Henkilö </p><p>&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; - nimi (jäsenmuuttuja) </p><p>&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; + asetaNimi (jäsenfunktio) </p><p>&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; + haeNimi (jäsenfunktio) </p><p><br /> Luokasta Henkilö luotu henkilö olio: </p><p>&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Nimi = Kalle </p><p><br /> Yksinkertainen Henkilö-luokka pitää sisällään jäsenmuuttujan: ”nimi” sekä tarvittavat jäsenfunktiot (metodit) esimerkiksi ”haeNimi” (noutaja = getter) ja ”asetaNimi” (asettaja = setter). Kun luokasta: Henkilö, luodaan olio: henkilö, uusi olio tarvitsee nimen, joka annetaan luokalle parametrina. &#160;Koska luokan jäsenmuuttujat määritellään yksityisiksi, jolloin muuttujiin päästään käsiksi ainoastaan jäsenfunktioiden kautta. Tässä tapauksessa nimen hakeminen tapahtuu jäsenfunktiota haeNimi käyttämällä seuraavasti: henkilö.haeNimi() ja tämä palauttaa kyseisen olion jäsenmuuttujassa olevan arvon. Jos taas olemassa olevan olion nimeä halutaan muuttaa, se tapahtuu käyttämällä jäsenfunktiota henkilö.asetaNimi(Matti), jolloin olemassa olevan olion nimi muuttujaan asetetaan "Kalle" tilalle "Matti". Aseta nimi tarvitsee parametrinä uuden nimen muttei palauta mitään. </p> <div class="mw-heading mw-heading2"><h2 id="Tukevia_kieliä"><span id="Tukevia_kieli.C3.A4"></span>Tukevia kieliä</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=21" title="Muokkaa osiota Tukevia kieliä" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=21" title="Muokkaa osion lähdekoodia: Tukevia kieliä"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Olio-pohjaiset ohjelmointikielet tarjoavat kehittäjille joukon työkaluja ja ominaisuuksia helpottaakseen olioiden luomista ja manipulointia. Vaikka on olemassa monia olio-ohjelmointia tukevia kieliä, <a href="/wiki/Simula" title="Simula">Simula</a> nähdään yleisesti ensimmäisenä kielenä, jossa on olennaiset piirteet olio-ohjelmoinnista. Toinen varhainen ohjelmointikieli on <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a>, jolla kehitettiin merkittävä osa olio-ohjelmoinnin teoriasta<sup id="cite_ref-:2_31-0" class="reference"><a href="#cite_note-:2-31"><span class="cite-bracket">&#91;</span>31<span class="cite-bracket">&#93;</span></a></sup>. </p><p>Olio-ohjelmointikielet voidaan jakaa "puhtaisiin" oliokieliin (joissa kaikki käsitellään olioina), olio-painotteisiin kieliin (jotka sisältävät joitain proseduraalisia elementtejä) tai alun perin proseduraalisiin kieliin, jotka ovat laajennettu olio-ohjelmointiominaisuuksilla. Joissakin kielissä on suurin osa olio-ominaisuuksista mutta eri muodossa (esim. <a href="https://en.wikipedia.org/wiki/Oberon_(programming_language)" class="extiw" title="en:Oberon (programming language)">Oberon</a>). Toisissa kielissä on abstraktien tietotyyppien tuki, mitkä muistuttavat olio-ohjelmointia, mutta joilta puuttuu joitain ominaisuuksia (esim. <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>) <sup id="cite_ref-:2_31-1" class="reference"><a href="#cite_note-:2-31"><span class="cite-bracket">&#91;</span>31<span class="cite-bracket">&#93;</span></a></sup>. </p><p>On kuitenkin tärkeää huomata, että pelkän oliopohjaisen ohjelmointikielen käyttö ei takaa, että koodi noudattaa parhaita käytäntöjä olio-ohjelmoinnissa. Monet nykyaikaiset ohjelmointikielet ovat suunniteltu tukemaan olio-ohjelmointia ja niissä on erilaisia ominaisuuksia, kuten luokkien määrittelyjä, perintämekanismeja, polymorfismia, jne<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">&#91;</span>32<span class="cite-bracket">&#93;</span></a></sup>. Olio-ohjelmoinnin käyttö mahdollistaa ohjelmistojen paremman järjestelmällisyyden, luettavuuden ja ylläpidettävyyden, mikä tekee siitä tärkeän kehitystyökalun modernissa ohjelmistokehityksessä. </p><p>Nykyään on olemassa monia oliopohjaisia ohjelmointikieliä, ja jokaisella näistä kielistä on oma ainutlaatuinen syntaksinsa ja joukko ominaisuuksia, jotka vaikuttavat ohjelman suorituskykyyn ja ohjelmoijan työnkulkuun. Jotkut näistä kielistä ovat suunniteltu erityisesti tiettyihin käyttötarkoituksiin, kuten verkkokehitykseen tai tieteelliseen laskentaan (esim. <a href="/wiki/MATLAB" title="MATLAB">MATLAB</a>), kun taas toiset ovat yleisempiä ja soveltuvat moneen eri tarkoitukseen<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">&#91;</span>33<span class="cite-bracket">&#93;</span></a></sup>. </p><p>Yleisimmät olio-ohjelmointia tukevat ohjelmointikielet ovat: </p> <ul><li><a href="/wiki/Ada_(ohjelmointikieli)" title="Ada (ohjelmointikieli)">Ada</a></li> <li><a href="/wiki/C%2B%2B" title="C++">C++</a></li> <li><a href="/wiki/C_sharp" title="C sharp">C#</a></li> <li><a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a></li> <li><a href="/wiki/D_(ohjelmointikieli)" title="D (ohjelmointikieli)">D</a></li> <li><a href="/wiki/Delphi" title="Delphi">Delphi</a></li> <li><a href="/wiki/Eiffel_(ohjelmointikieli)" title="Eiffel (ohjelmointikieli)">Eiffel</a></li> <li><a href="/wiki/Gambas" title="Gambas">Gambas</a> – Avoimen lähdekoodin kilpailija Visual Basicille</li> <li><a href="/wiki/MATLAB" title="MATLAB">MATLAB</a></li> <li><a href="/wiki/Object_Pascal" title="Object Pascal">Object Pascal</a></li> <li><a href="/wiki/J_sharp" title="J sharp">J#</a></li> <li><a href="/wiki/Java" title="Java">Java</a></li> <li><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a></li> <li><a href="/wiki/Lazarus" title="Lazarus">Lazarus</a></li> <li><a href="/wiki/Neon-ohjelmointikieli" class="mw-redirect" title="Neon-ohjelmointikieli">Neon</a></li> <li><a href="/wiki/Perl" title="Perl">Perl 5</a></li> <li><a href="https://en.wikipedia.org/wiki/Pharo" class="extiw" title="en:Pharo">Pharo</a></li> <li><a href="/wiki/PHP" title="PHP">PHP</a> (versio 5)</li> <li><a href="/wiki/Python_(ohjelmointikieli)" title="Python (ohjelmointikieli)">Python</a></li> <li><a href="/wiki/REALbasic" title="REALbasic">REALbasic</a></li> <li><a href="/wiki/Ruby" title="Ruby">Ruby</a></li> <li><a href="/wiki/Scala_(ohjelmointikieli)" title="Scala (ohjelmointikieli)">Scala</a></li> <li><a href="/wiki/Simula" title="Simula">Simula</a></li> <li><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></li> <li><a href="/wiki/Visual_Basic" title="Visual Basic">Visual Basic</a></li> <li><a href="/wiki/Visual_Prolog" title="Visual Prolog">Visual Prolog</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Lähteet"><span id="L.C3.A4hteet"></span>Lähteet</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=22" title="Muokkaa osiota Lähteet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=22" title="Muokkaa osion lähdekoodia: Lähteet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <table style="" class="metadata plainlinks ambox ambox-content"> <tbody><tr> <td class="ambox-image"><div style="width:52px;text-align:center"> <span typeof="mw:File"><a href="/wiki/Tiedosto:Question_book-4.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/50px-Question_book-4.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/75px-Question_book-4.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/100px-Question_book-4.svg.png 2x" data-file-width="262" data-file-height="204" /></a></span></div> </td> <td class="ambox-text"><b>Tähän artikkeliin tai sen osaan on <a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">merkitty lähteitä</a>, mutta niihin ei viitata.</b><br /><small>Älä poista mallinetta ennen kuin viitteet on lisätty. Voit auttaa Wikipediaa <a class="external text" href="https://fi.wikipedia.org/w/index.php?title=Olio-ohjelmointi&amp;action=edit">lisäämällä</a> artikkelille asianmukaisia <a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet#L.C3.A4hdeviitemallineet" title="Wikipedia:Merkitse lähteet">viitteitä</a>. Lähteettömät tiedot voidaan <a href="/wiki/Wikipedia:Tarkistettavuus" title="Wikipedia:Tarkistettavuus">kyseenalaistaa tai poistaa</a>.</small><br />Tarkennus: <i>joitakin lähteitä (ja joitakin viitteitä) mutta suurelta osin viitteet puuttuvat</i> </td></tr></tbody></table> <ul><li><span class="kirjaviite" title="Kirjaviite">Koskimies, Kai:&#32;<i>Oliokirja</i>.&#32;&#32;Helsinki&#58;&#32;&#32;Satku, 2000.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-762-720-3" title="Toiminnot:Kirjalähteet/951-762-720-3">ISBN&#160;951-762-720-3</a>&#32;</span></li></ul> <div class="mw-heading mw-heading3"><h3 id="Viitteet">Viitteet</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=23" title="Muokkaa osiota Viitteet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=23" title="Muokkaa osion lähdekoodia: Viitteet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r23002391">.mw-parser-output div.viitteet-malline ol.references{list-style-type:inherit}.mw-parser-output .viitteet-sarakkeet li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output ol.references>li:target{background-color:var(--background-color-interactive,#DEF)}.mw-parser-output sup.reference:target{background-color:var(--background-color-interactive,#DEF)}.mw-parser-output span[rel="mw:referencedBy"]{counter-reset:mw-ref-linkback 0}.mw-parser-output span[rel="mw:referencedBy"]>a::before{font-style:italic;content:counter(mw-ref-linkback,lower-alpha)}.mw-parser-output .mw-ref>a[data-mw-group=lower-roman]::after{content:"["counter(mw-Ref,lower-roman)"]"}.mw-parser-output .mw-ref>a[data-mw-group=lower-greek]::after{content:"["counter(mw-Ref,lower-greek)"]"}.mw-parser-output .mw-ref>a[data-mw-group=upper-roman]::after{content:"["counter(mw-Ref,upper-roman)"]"}.mw-parser-output .mw-ref>a[data-mw-group=decimal]::after{content:"["counter(mw-Ref,decimal)"]"}.mw-parser-output .mw-ref>a[data-mw-group=lower-alpha]::after{content:"["counter(mw-Ref,lower-alpha)"]"}.mw-parser-output .mw-ref>a[data-mw-group=upper-alpha]::after{content:"["counter(mw-Ref,upper-alpha)"]"}body.action-info .mw-parser-output :target{background-color:var(--background-color-interactive,#DEF)}</style><div id="viitteet-malline" class="viitteet-malline viitteet-sarakkeet" style="-moz-column-count:; -webkit-column-count:; column-count:; -moz-column-width: 35em; -webkit-column-width: 35em; column-width: 35em; list-style-type:decimal;"><ol class="references"> <li id="cite_note-raynp-1"><span class="mw-cite-backlink">↑ <a href="#cite_ref-raynp_1-0"><sup><i>a</i></sup></a> <a href="#cite_ref-raynp_1-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://cs.lmu.edu/~ray/notes/paradigms/">Programming Paradigms</a>&#32;<i>cs.lmu.edu</i>. Viitattu 24.3.2020.&#32;<span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-koskimies30-2"><span class="mw-cite-backlink">↑ <a href="#cite_ref-koskimies30_2-0"><sup><i>a</i></sup></a> <a href="#cite_ref-koskimies30_2-1"><sup><i>b</i></sup></a></span> <span class="reference-text">Koskimies, s. 30.</span> </li> <li id="cite_note-koskimies37-3"><span class="mw-cite-backlink"><a href="#cite_ref-koskimies37_3-0">↑</a></span> <span class="reference-text">Koskimies, s. 37.</span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://www.cprogramming.com/tutorial/virtual_inheritance.html">Solving the Diamond Problem with Virtual Inheritance</a>&#32;Cprogramming.com. Viitattu 8.2.2017.</span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external free" href="http://www.crockford.com/javascript/inheritance.html">http://www.crockford.com/javascript/inheritance.html</a></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external free" href="https://tieteentermipankki.fi/wiki/Nimitys:konstruktori">https://tieteentermipankki.fi/wiki/Nimitys:konstruktori</a></span> </li> <li id="cite_note-Nimetön-rF5s-1-7"><span class="mw-cite-backlink">↑ <a href="#cite_ref-Nimetön-rF5s-1_7-0"><sup><i>a</i></sup></a> <a href="#cite_ref-Nimetön-rF5s-1_7-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><a rel="nofollow" class="external free" href="https://www.cs.helsinki.fi/u/laine/oliosanasto/">https://www.cs.helsinki.fi/u/laine/oliosanasto/</a></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><span class="kirjaviite" title="Kirjaviite">Stroustrup, Bjarne:&#32;<i>The C++ Programming Language</i>, s. 62&#8211;65.&#32; (Fourth Edition)&#32;&#32;Addison-Wesley, 2015.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/0-321-56384-0" title="Toiminnot:Kirjalähteet/0-321-56384-0">ISBN&#160;0-321-56384-0</a>&#32;</span></span> </li> <li id="cite_note-koskimies26-9"><span class="mw-cite-backlink">↑ <a href="#cite_ref-koskimies26_9-0"><sup><i>a</i></sup></a> <a href="#cite_ref-koskimies26_9-1"><sup><i>b</i></sup></a> <a href="#cite_ref-koskimies26_9-2"><sup><i>c</i></sup></a> <a href="#cite_ref-koskimies26_9-3"><sup><i>d</i></sup></a> <a href="#cite_ref-koskimies26_9-4"><sup><i>e</i></sup></a></span> <span class="reference-text">Koskimies, s. 26–27.</span> </li> <li id="cite_note-johdanto-10"><span class="mw-cite-backlink">↑ <a href="#cite_ref-johdanto_10-0"><sup><i>a</i></sup></a> <a href="#cite_ref-johdanto_10-1"><sup><i>b</i></sup></a> <a href="#cite_ref-johdanto_10-2"><sup><i>c</i></sup></a> <a href="#cite_ref-johdanto_10-3"><sup><i>d</i></sup></a> <a href="#cite_ref-johdanto_10-4"><sup><i>e</i></sup></a> <a href="#cite_ref-johdanto_10-5"><sup><i>f</i></sup></a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Vesanen, Ari:&#32;<a rel="nofollow" class="external text" href="https://noppa.oulu.fi/noppa/kurssi/812347a/luennot/812347A_johdanto_olio-ohjelmointiin_opiskelumateriaali.pdf">Olio-ohjelmointi – Johdanto olio-ohjelmointiin</a>&#32;<small>(pdf)</small>&#32;Oulun yliopisto.&#32;<a rel="nofollow" class="external text" href="https://web.archive.org/web/20150402152107/https://noppa.oulu.fi/noppa/kurssi/812347a/luennot/812347A_johdanto_olio-ohjelmointiin_opiskelumateriaali.pdf">Arkistoitu</a>&#32;2.4.2015. Viitattu 8.3.2015.</span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><a href="#cite_ref-11">↑</a></span> <span class="reference-text">Koskimies, s. 326.</span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://www.freepascal.org/">Free Pascal – Advanced open source Pascal compiler for Pascal and Object Pascal – Home Page</a>&#32;<i>www.freepascal.org</i>. Viitattu 21.2.2018.</span></span> </li> <li id="cite_note-koskimies369-13"><span class="mw-cite-backlink">↑ <a href="#cite_ref-koskimies369_13-0"><sup><i>a</i></sup></a> <a href="#cite_ref-koskimies369_13-1"><sup><i>b</i></sup></a></span> <span class="reference-text">Koskimies, s. 369.</span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><a href="#cite_ref-14">↑</a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">Dunlop, A N:&#32;MODERN OBJECT-ORIENTED SOFTWARE DEVELOPMENT.&#32;<i>20th CERN School of Computing</i>,&#32;17-30 Aug 1997, s. 143-155.&#32;</span><a rel="nofollow" class="external autonumber" href="https://cds.cern.ch/record/343238/files/p143.pdf">[1]</a></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><a href="#cite_ref-15">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.scrum.org/resources/blog/what-iterative-incremental-delivery-hunt-perfect-example">What is Iterative, Incremental Delivery? The Hunt for the Perfect Example.</a>&#32;<i>Scrum.org</i>. Viitattu 30.3.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><a href="#cite_ref-16">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.ibm.com/topics/docker">What is Docker? | IBM</a>&#32;<i>www.ibm.com</i>. Viitattu 30.3.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><a href="#cite_ref-17">↑</a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">Apostolos Ampatzoglou, Alexander Chatzigeorgiou:&#32;Evaluation of object-oriented design patterns in game development.&#32;<i>Information and Software Technology</i>,&#32;1.5.2007, 49. vsk, nro 5, s. 445–454.&#32;&#32;<a href="/wiki/Digital_object_identifier" class="mw-redirect" title="Digital object identifier">doi</a>:<a rel="nofollow" class="external text" href="https://dx.doi.org/10.1016%2Fj.infsof.2006.07.003">10.1016/j.infsof.2006.07.003</a>&#32;&#32;<a rel="nofollow" class="external text" href="http://www.worldcat.org/issn/0950-5849">ISSN&#160;0950-5849</a>&#32; <a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/pii/S0950584906000929">Artikkelin verkkoversio</a>.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-:1-18"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:1_18-0"><sup><i>a</i></sup></a> <a href="#cite_ref-:1_18-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.freecodecamp.org/news/solid-principles-explained-in-plain-english/">The SOLID Principles of Object-Oriented Programming Explained in Plain English</a>&#32;<i>freeCodeCamp.org</i>.&#32;20.8.2020. Viitattu 21.3.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><a href="#cite_ref-19">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a class="external text" href="https://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)">Constructor (object oriented programming)</a>&#32;<i>Wikipedia</i>.&#32;11.7.2023.&#32;Wikipedia. Viitattu 25.7.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><a href="#cite_ref-20">↑</a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">M. Mesnier, G.R. Ganger, E. Riedel:&#32;Object-based storage.&#32;<i>IEEE Communications Magazine</i>,&#32;2003-08, nro 41, s. 84–90.&#32;&#32;<a href="/wiki/Digital_object_identifier" class="mw-redirect" title="Digital object identifier">doi</a>:<a rel="nofollow" class="external text" href="https://dx.doi.org/10.1109%2FMCOM.2003.1222722">10.1109/MCOM.2003.1222722</a>&#32;&#32;<a rel="nofollow" class="external text" href="http://www.worldcat.org/issn/1558-1896">ISSN&#160;1558-1896</a>&#32; <a rel="nofollow" class="external text" href="https://ieeexplore.ieee.org/document/1222722">Artikkelin verkkoversio</a>.</span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><a href="#cite_ref-21">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://www.codersnotes.com/notes/the-microsoft-network/">What The Hell Was The Microsoft Network?</a>&#32;<i>www.codersnotes.com</i>. Viitattu 24.9.2021.</span></span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><a href="#cite_ref-22">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Varad Kajarekar:&#32;<a rel="nofollow" class="external text" href="https://varad-kajarekar19.medium.com/object-oriented-programming-in-game-development-1293e6ebed45">Object oriented programming in Game development</a>&#32;<i>Medium</i>.&#32;31.5.2021. Viitattu 31.3.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><a href="#cite_ref-23">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Modestas Mice:&#32;<a rel="nofollow" class="external text" href="https://www.javacodegeeks.com/2021/09/7-best-games-written-in-java.html">7 Best Games Written in Java - Java Code Geeks - 2023</a>&#32;<i>Java Code Geeks</i>.&#32;16.9.2021. Viitattu 31.3.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-24"><span class="mw-cite-backlink"><a href="#cite_ref-24">↑</a></span> <span class="reference-text">Cardelli, Luca (1996). "<a rel="nofollow" class="external text" href="http://lucacardelli.name/Papers/BadPropertiesOfOO.html">Bad Engineering Properties of Object-Oriented Languages</a>". ACM Comput. Surv. <b>28</b> (4es): 150–es. <a href="/wiki/DOI" title="DOI">doi</a>:<a rel="nofollow" class="external text" href="https://dl.acm.org/doi/10.1145/242224.242415">10.1145/242224.242415</a>. ISSN <a rel="nofollow" class="external text" href="https://www.worldcat.org/search?q=n2:0360-0300">0360-0300</a>. <a href="/w/index.php?title=S2CID&amp;action=edit&amp;redlink=1" class="new" title="S2CID (sivua ei ole)">S2CID</a> <a rel="nofollow" class="external text" href="https://www.semanticscholar.org/paper/Bad-engineering-properties-of-object-orient-Cardelli/62b9dd5fd5153231a5c1071947f21cc3cc9e24a0">12105785</a>.</span> </li> <li id="cite_note-25"><span class="mw-cite-backlink"><a href="#cite_ref-25">↑</a></span> <span class="reference-text">Armstrong, Joe. In <i>Coders at Work: Reflections on the Craft of Programming.</i> Peter Seibel, ed. <a rel="nofollow" class="external text" href="https://codersatwork.com/">Codersatwork.com</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100305165150/http://www.codersatwork.com/">Archived</a> 5 March 2010 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a>.</span> </li> <li id="cite_note-26"><span class="mw-cite-backlink"><a href="#cite_ref-26">↑</a></span> <span class="reference-text">Potok, Thomas; Mladen Vouk; Andy Rindos (1999). "<a rel="nofollow" class="external text" href="https://www.csm.ornl.gov/~v8q/Homepage/Papers%20Old/spetep-%20printable.pdf">Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment</a>" (PDF). Software: Practice and Experience. <b>29</b> (10): 833–847.</span> </li> <li id="cite_note-27"><span class="mw-cite-backlink"><a href="#cite_ref-27">↑</a></span> <span class="reference-text">Krubner, Lawrence. "<a rel="nofollow" class="external text" href="https://web.archive.org/web/20141014233854/http://www.smashcompany.com/technology/object-oriented-programming-is-an-expensive-disaster-which-must-end">Object Oriented Programming is an expensive disaster which must end</a>". Smashcompany.com.</span> </li> <li id="cite_note-28"><span class="mw-cite-backlink"><a href="#cite_ref-28">↑</a></span> <span class="reference-text"><a href="/wiki/Paul_Graham" title="Paul Graham">Graham, Paul</a>. <a rel="nofollow" class="external text" href="http://www.paulgraham.com/noop.html">"Why ARC isn't especially Object-Oriented"</a>. <a rel="nofollow" class="external text" href="http://www.paulgraham.com">PaulGraham.com</a>.</span> </li> <li id="cite_note-29"><span class="mw-cite-backlink"><a href="#cite_ref-29">↑</a></span> <span class="reference-text">Hickey, Rich: JVM Languages Summit 2009 keynote, <a rel="nofollow" class="external text" href="https://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey/">Are We There Yet?</a></span> </li> <li id="cite_note-:0-30"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:0_30-0"><sup><i>a</i></sup></a> <a href="#cite_ref-:0_30-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><a href="/wiki/Eric_S._Raymond" title="Eric S. Raymond">Eric S. Raymond</a> (2003). <a rel="nofollow" class="external text" href="http://www.catb.org/esr/writings/taoup/html/unix_and_oo.html">"The Art of Unix Programming: Unix and Object-Oriented Languages"</a>. Luettu 20.3.2023</span> </li> <li id="cite_note-:2-31"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:2_31-0"><sup><i>a</i></sup></a> <a href="#cite_ref-:2_31-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">Object-oriented programming.&#32;<i>Wikipedia</i>,&#32;6.3.2023.&#32; <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Object-oriented_programming&amp;oldid=1143130139">Artikkelin verkkoversio</a>.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-32"><span class="mw-cite-backlink"><a href="#cite_ref-32">↑</a></span> <span class="reference-text"><span class="kirjaviite" title="Kirjaviite">Iain Craig:&#32;<i>The Interpretation of Object-Oriented Programming Languages</i>.&#32;&#32;Springer Science &amp; Business Media, 10.10.2001.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/978-1-85233-547-2" title="Toiminnot:Kirjalähteet/978-1-85233-547-2">ISBN&#160;978-1-85233-547-2</a>&#32; <a rel="nofollow" class="external text" href="https://books.google.fi/books?hl=ru&amp;lr=&amp;id=LENA58vT9MIC&amp;oi=fnd&amp;pg=PA1&amp;dq=1.%09Craig,+I.+(2001).+The+interpretation+of+object-oriented+programming+languages.+Springer+Science+&amp;+Business+Media.&amp;ots=DFxh1AQEqM&amp;sig=wa510jvJBGTezTUiZTlg2jnfqG4&amp;redir_esc=y#v=onepage&amp;q=1.%09Craig,%20I.%20(2001).%20The%20interpretation%20of%20object-oriented%20programming%20languages.%20Springer%20Science%20&amp;%20Business%20Media.&amp;f=false">Teoksen verkkoversio</a>&#32;Viitattu 30.3.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-33"><span class="mw-cite-backlink"><a href="#cite_ref-33">↑</a></span> <span class="reference-text"><span class="kirjaviite" title="Kirjaviite">Mark Lutz:&#32;<i>Programming Python: Powerful Object-Oriented Programming</i>.&#32;&#32;"O'Reilly Media, Inc.", 14.12.2010.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/978-1-4493-0285-6" title="Toiminnot:Kirjalähteet/978-1-4493-0285-6">ISBN&#160;978-1-4493-0285-6</a>&#32; <a rel="nofollow" class="external text" href="https://books.google.fi/books?hl=ru&amp;lr=&amp;id=qtdkAgAAQBAJ&amp;oi=fnd&amp;pg=PR5&amp;dq=3.%09Lutz,+M.+(2010).+Programming+python:+powerful+object-oriented+programming.+%22+O&#39;Reilly+Media,+Inc.%22.&amp;ots=b3SoFBn9z_&amp;sig=xXNk0cwwg9NkD7dwisEzIS_sYAE&amp;redir_esc=y#v=onepage&amp;q=3.%09Lutz,%20M.%20(2010).%20Programming%20python:%20powerful%20object-oriented%20programming.%20%22%20O&#39;Reilly%20Media,%20Inc.%22.&amp;f=false">Teoksen verkkoversio</a>&#32;Viitattu 30.3.2023.&#32;<span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> </ol> </div> <div class="mw-heading mw-heading2"><h2 id="Kirjallisuutta">Kirjallisuutta</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=24" title="Muokkaa osiota Kirjallisuutta" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=24" title="Muokkaa osion lähdekoodia: Kirjallisuutta"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span class="kirjaviite" title="Kirjaviite">Sytykeraportti:&#32;<i>Oliot systeemityössä</i>.&#32;&#32;Suomen Atk-Kustannus, 1998.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-762-165-5" title="Toiminnot:Kirjalähteet/951-762-165-5">ISBN&#160;951-762-165-5</a>&#32;</span></li> <li><span class="kirjaviite" title="Kirjaviite">Meyer, Bertrand:&#32;<i>Object-Oriented Software Construction</i>.&#32;&#32;Prentice-Hall, 1998.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/0-13-629155-4" title="Toiminnot:Kirjalähteet/0-13-629155-4">ISBN&#160;0-13-629155-4</a>&#32;</span></li> <li><span class="kirjaviite" title="Kirjaviite">Sakkinen, Markku:&#32;<i>Inheritance and Other Main Principles of C++ and Other Object-oriented Languages</i>.&#32; (Jyväskylä Studies in Computer Science, Economics and Statistics 20)&#32;&#32;University of Jyväskylä, 1992.&#32;</span></li> <li>Smed, Jouni &amp; Hakonen, Harri &amp; Raita, Timo: <i><a rel="nofollow" class="external text" href="http://staff.cs.utu.fi/staff/jouni.smed/SHR07-SPOO.pdf">Sopimuspohjainen olio-ohjelmointi Java-kielellä</a></i>. Elektroninen kirja, 2007. <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/9789529217762" class="internal mw-magiclink-isbn">ISBN 978-952-92-1776-2</a></li> <li><span class="kirjaviite" title="Kirjaviite">Coad, Peter &amp; Nicola, Jill:&#32;<i>Object-Oriented Programming</i>.&#32;&#32;Prentice Hall, 1993.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/0-13-032616-X" title="Toiminnot:Kirjalähteet/0-13-032616-X">ISBN&#160;0-13-032616-X</a>&#32;</span></li> <li><span class="kirjaviite" title="Kirjaviite">Gamma, Erich &amp; Helm, Richard &amp; Jonson, Ralph &amp; Vlissides, John:&#32;<i>Design Patterns. Olio-ohjelmointi. Suunnittelumallit</i>.&#32;&#32;Edita, IT Press, 2001.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-826-428-7" title="Toiminnot:Kirjalähteet/951-826-428-7">ISBN&#160;951-826-428-7</a>&#32;</span></li> <li><span class="kirjaviite" title="Kirjaviite">Koskimies, Kai:&#32;<i>Pieni oliokirja</i>, s. 1–281.&#32;&#32;Espoo&#58;&#32;&#32;Suomen ATK-kustannus, 1998.&#32;&#32;<a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-762-503-0" title="Toiminnot:Kirjalähteet/951-762-503-0">ISBN&#160;951-762-503-0</a>&#32;</span></li></ul> <div class="mw-heading mw-heading2"><h2 id="Aiheesta_muualla">Aiheesta muualla</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Olio-ohjelmointi&amp;veaction=edit&amp;section=25" title="Muokkaa osiota Aiheesta muualla" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Olio-ohjelmointi&amp;action=edit&amp;section=25" title="Muokkaa osion lähdekoodia: Aiheesta muualla"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span typeof="mw:File"><span><img src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/10px-Commons-logo.svg.png" decoding="async" width="10" height="13" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/15px-Commons-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/20px-Commons-logo.svg.png 2x" data-file-width="1024" data-file-height="1376" /></span></span> Kuvia tai muita tiedostoja aiheesta <b><a href="https://commons.wikimedia.org/wiki/Category:Object-oriented_programming" class="extiw" title="commons:Category:Object-oriented programming">Olio-ohjelmointi</a></b> <a href="https://commons.wikimedia.org/wiki/Etusivu" class="extiw" title="commons:Etusivu">Wikimedia Commonsissa</a></li></ul></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?useformat=desktop&amp;type=1x1&amp;usesul3=0" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Noudettu kohteesta ”<a dir="ltr" href="https://fi.wikipedia.org/w/index.php?title=Olio-ohjelmointi&amp;oldid=22929254">https://fi.wikipedia.org/w/index.php?title=Olio-ohjelmointi&amp;oldid=22929254</a>”</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Toiminnot:Luokat" title="Toiminnot:Luokat">Luokka</a>: <ul><li><a href="/wiki/Luokka:Olio-ohjelmointi" title="Luokka:Olio-ohjelmointi">Olio-ohjelmointi</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Piilotetut luokat: <ul><li><a href="/wiki/Luokka:Kielenhuoltoa_kaipaavat_sivut" title="Luokka:Kielenhuoltoa kaipaavat sivut">Kielenhuoltoa kaipaavat sivut</a></li><li><a href="/wiki/Luokka:Tarkistettava" title="Luokka:Tarkistettava">Tarkistettava</a></li><li><a href="/wiki/Luokka:L%C3%A4hteett%C3%B6m%C3%A4t_artikkelit" title="Luokka:Lähteettömät artikkelit">Lähteettömät artikkelit</a></li><li><a href="/wiki/Luokka:K%C3%A4%C3%A4nnetyt_artikkelit" title="Luokka:Käännetyt artikkelit">Käännetyt artikkelit</a></li><li><a href="/wiki/Luokka:L%C3%A4hdeviitteet_puuttuvat" title="Luokka:Lähdeviitteet puuttuvat">Lähdeviitteet puuttuvat</a></li><li><a href="/wiki/Luokka:Seulonnan_keskeiset_artikkelit" title="Luokka:Seulonnan keskeiset artikkelit">Seulonnan keskeiset artikkelit</a></li><li><a href="/wiki/Luokka:Sivut,_jotka_k%C3%A4ytt%C3%A4v%C3%A4t_ISBN-taikalinkkej%C3%A4" title="Luokka:Sivut, jotka käyttävät ISBN-taikalinkkejä">Sivut, jotka käyttävät ISBN-taikalinkkejä</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"> Sivua on viimeksi muutettu 2. tammikuuta 2025 kello 01.27.</li> <li id="footer-info-copyright">Teksti on saatavilla <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fi">Creative Commons Attribution/Share-Alike</a> -lisenssillä; lisäehtoja voi sisältyä. Katso <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use/fi">käyttöehdot</a>.<br /> Wikipedia&#174; on <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundationin</a> rekisteröimä tavaramerkki.<br /> <a href="/wiki/Wikipedia:Artikkelien_ongelmat" title="Wikipedia:Artikkelien ongelmat">Ongelma artikkelissa?</a></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Tietosuojakäytäntö</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:Tietoja">Tietoja Wikipediasta</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Vastuuvapaus">Vastuuvapaus</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Käytössäännöstö</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Kehittäjät</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/fi.wikipedia.org">Tilastot</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Evästekäytäntö</a></li> <li id="footer-places-mobileview"><a href="//fi.m.wikipedia.org/w/index.php?title=Olio-ohjelmointi&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobiilinäkymä</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"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" lang="en" loading="lazy"></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" 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>Haku</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="Hae Wikipediasta"> <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Toiminnot:Haku"> </div> <button class="cdx-button cdx-search-input__end-button">Hae</button> </form> </div> </div> </div> <div class="vector-sticky-header-context-bar"> <nav aria-label="Sisällysluettelo" 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="Vaihda sisällysluettelo" > <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">Vaihda sisällysluettelo</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">Olio-ohjelmointi</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-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-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-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>78 kieltä</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>Lisää aihe</span> </a> </div> <div class="vector-sticky-header-icon-end"> <div class="vector-user-links"> </div> </div> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-6b9576b97f-726mh","wgBackendResponseTime":135,"wgPageParseReport":{"limitreport":{"cputime":"0.186","walltime":"0.251","ppvisitednodes":{"value":1766,"limit":1000000},"postexpandincludesize":{"value":27774,"limit":2097152},"templateargumentsize":{"value":3835,"limit":2097152},"expansiondepth":{"value":14,"limit":100},"expensivefunctioncount":{"value":2,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":28197,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 171.078 1 -total"," 41.82% 71.541 1 Malline:Viitteet"," 22.61% 38.680 4 Malline:Wikidata"," 16.23% 27.766 10 Malline:Kirjaviite"," 14.99% 25.648 1 Malline:Commonscat-rivi"," 14.62% 25.014 11 Malline:Verkkoviite"," 13.44% 22.996 1 Malline:Commons-rivi"," 6.10% 10.442 4 Malline:Lehtiviite"," 3.51% 5.998 1 Malline:Korjattava/kieli"," 2.93% 5.010 1 Malline:Tarkistettava"]},"scribunto":{"limitreport-timeusage":{"value":"0.020","limit":"10.000"},"limitreport-memusage":{"value":1564958,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-6dd95bfffc-rcvg9","timestamp":"20250205134658","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Olio-ohjelmointi","url":"https:\/\/fi.wikipedia.org\/wiki\/Olio-ohjelmointi","sameAs":"http:\/\/www.wikidata.org\/entity\/Q79872","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q79872","author":{"@type":"Organization","name":"Wikimedia-hankkeiden muokkaajat"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2004-05-17T09:58:30Z"}</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10