{"id":230204,"date":"2022-11-20T17:31:00","date_gmt":"2022-11-20T14:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230204"},"modified":"2022-11-20T17:31:40","modified_gmt":"2022-11-20T14:31:40","slug":"oop-n-kaksi-ensimmaeistae-pilaria","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/oop-n-kaksi-ensimmaeistae-pilaria\/","title":{"rendered":"OOP:n kaksi ensimm\u00e4ist\u00e4 pilaria"},"content":{"rendered":"\n<p>Kun puhutaan olio-ohjelmoinnista (tai OOP:sta), kuulet todenn\u00e4k\u00f6isesti olio-ohjelmoinnin kolmesta pilarista tai olio-ohjelmoinnin nelj\u00e4st\u00e4 pilarista.<\/p>\n<p>Taustastasi riippuen olet ehk\u00e4 jo kuullut niist\u00e4, tied\u00e4t mit\u00e4 ne ovat, eik\u00e4 sinun tarvitse sukeltaa niihin liikaa. Mutta jos et ole, uskon niiden ymm\u00e4rt\u00e4misen olevan olio-ohjelmoinnin perusta.<\/p>\n<p>Olemme kattaneet olio-ohjelmoinnin koko <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">analyysivaiheen :<\/a><\/strong><\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/olio-ohjelmointi-wordpressissae-analyysi-osa-1\/\" title=\"Analyysi, osa 1\">Analyysi, osa 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/olio-ohjelmointi-wordpressissae-analyysi-osa-2\/\" title=\"Analyysi, osa 2\">Analyysi, osa 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/olio-ohjelmointi-wordpressissae-asiakkaiden-odotusten-ymmaertaeminen\/\" title=\"Asiakkaiden odotusten ymm\u00e4rt\u00e4minen\">Asiakkaiden odotusten ymm\u00e4rt\u00e4minen<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/olio-ohjelmointi-wordpressissae-tyoeselostus\/\" title=\"Ty\u00f6selostus\">Ty\u00f6selostus<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/olio-ohjelmointi-wordpressissae-ehdot-ja-ehdot\/\" title=\"K\u00e4ytt\u00f6ehdot\">K\u00e4ytt\u00f6ehdot<\/a><\/li>\n<\/ol>\n<p>T\u00e4m\u00e4n j\u00e4lkeen menn\u00e4\u00e4n suunnittelu- ja toteutuskeskusteluihin. Loppujen lopuksi monet ihmiset haluavat hyp\u00e4t\u00e4 t\u00e4h\u00e4n, eik\u00f6 niin?<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165086-61e77571592ef.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165086-61e77571592ef.jpg\" alt=\"OOP:n kaksi ensimm\u00e4ist\u00e4 pilaria\"><\/a><\/p>\n<p>Ennen kuin kirjoitan mit\u00e4\u00e4n koodia, haluaisin tehd\u00e4 kaksi viesti\u00e4 olio-ohjelmoinnin nelj\u00e4st\u00e4 kohdasta (koska olen yksi niist\u00e4, jotka hyv\u00e4ksyv\u00e4t ajatuksen, ett\u00e4 niit\u00e4 on nelj\u00e4).<\/p>\n<h2>OOP:n kaksi pilaria<\/h2>\n<p>J\u00e4lleen n\u00e4iden ymm\u00e4rt\u00e4minen on avainasemassa olio-ohjelmoinnin perustan ymm\u00e4rt\u00e4misess\u00e4. Ilman niit\u00e4 tulee olemaan vaikeaa navigoida tulevissa viesteiss\u00e4 k\u00e4sitelt\u00e4vist\u00e4 asioista.<\/p>\n<p>Sen my\u00f6t\u00e4 puhutaanpa jokaisesta niist\u00e4. K\u00e4sittelemme kaksi ensimm\u00e4ist\u00e4 t\u00e4ss\u00e4 viestiss\u00e4 ja kaksi viimeist\u00e4 seuraavassa postauksessa.<\/p>\n<h3>1 Abstraktio<\/h3>\n<p>Yleisesti ottaen t\u00e4m\u00e4 on avain oliopohjaisen koodin kirjoittamiseen. T\u00e4ll\u00e4 tarkoitan kaikkea, mik\u00e4 sis\u00e4ltyy luokkaan. Abstraktioimme idean jostakin luokasta. Monissa kirjoissa n\u00e4emme esimerkiksi <strong>El\u00e4imet<\/strong> tai <strong>Autot<\/strong> luokkina.<\/p>\n<p>T\u00e4m\u00e4 toimii teoriassa, mutta k\u00e4yt\u00e4nn\u00f6ss\u00e4 emme ohjelmoi el\u00e4imi\u00e4 emmek\u00e4 autoja (vaikka t\u00e4ss\u00e4 historian vaiheessa voisi v\u00e4itt\u00e4\u00e4, ett\u00e4 olemme, mutta poikkean siit\u00e4, koska tied\u00e4t mit\u00e4 tarkoitan).<\/p>\n<p>Sen sijaan aiomme ottaa ideoita heid\u00e4n luokkiinsa. Ja t\u00e4ss\u00e4 on keskeinen ajatus:<\/p>\n<blockquote>\n<p>Luokan tulee edustaa substantiivia.<\/p>\n<\/blockquote>\n<p>Eli sinulla ei pit\u00e4isi olla luokkaa, joka edustaa jotain &quot;juoksua&quot;. Sen sijaan sinulla voi olla jotain, joka toimii, ja n\u00e4in ollen <strong>suoritukset<\/strong> olisivat menetelm\u00e4. Ja t\u00e4m\u00e4 on yleinen erittely siit\u00e4, miten abstraktio toimii:<\/p>\n<ol>\n<li>Asia, joka on edustettava, on luokka,<\/li>\n<li>Asia, jota asia tekee, ovat sen menetelm\u00e4t,<\/li>\n<li>Ja tapa, jolla kuvaat asiaa, voidaan yleens\u00e4 tehd\u00e4 sen attribuuttien tai ominaisuuksien kautta.<\/li>\n<\/ol>\n<p>T\u00e4m\u00e4 ei tarkoita, etteik\u00f6 meill\u00e4 olisi funktioita tai menetelmi\u00e4, jotka muokkaavat sen ominaisuuksia, mutta yll\u00e4 olevat kolme kohtaa ovat hyvi\u00e4 nyrkkis\u00e4\u00e4nt\u00f6j\u00e4. Joten kun suunnittelet luokkaa, voit kysy\u00e4 esimerkiksi seuraavia asioita:<\/p>\n<ul>\n<li>Kirjoitanko jotain?<\/li>\n<li>Kirjoitanko jotain tekemist\u00e4?<\/li>\n<li>Vai kirjoitanko jotain, joka kuvaa jotain?<\/li>\n<\/ul>\n<p>Koska jos kirjoitat toimintoa, sen todenn\u00e4k\u00f6isesti tekee jokin (koska asiat toimivat \u2013 ne tekev\u00e4t asioita). Ja jos kuvailet jotain, se todenn\u00e4k\u00f6isesti viittaa johonkin (milloin et viimeksi kuvaillut mit\u00e4\u00e4n?)<\/p>\n<p>K\u00e4yd\u00e4 j\u00e4rkeen?<\/p>\n<h3>2 Kapselointi<\/h3>\n<p>Joten jos kirjoitamme luokkia \u2013 hyvi\u00e4 luokkia \u2013 meid\u00e4n on kirjoitettava ne siten, ett\u00e4 kapseloimme niiden tiedot oikein. Ja kapselointi on oikeastaan \u200b\u200bvain &quot;iso&quot; sana, joka viittaa ajatukseen vastuunsa hallinnasta (tai tietojensa seuraamisesta).<\/p>\n<p>Jos esimerkiksi kirjoittaisimme luokkaa edustamaan WordPress-julkaisua, meill\u00e4 olisi luokka nimelt\u00e4 <strong>Post<\/strong>, jolla on ominaisuuksia, kuten <strong>publish, update, delete,<\/strong> \u00a0<strong>postData, publishDate, lastUpdatedData<\/strong>, <strong>deletedDate<\/strong> ja niin edelleen.<\/p>\n<p>Sitten meill\u00e4 olisi toimintoja, jotka on erityisesti suunniteltu toimimaan <strong>Post<\/strong> &#8211; luokan esiintym\u00e4ss\u00e4.<\/p>\n<p>Esimerkkin\u00e4 voimme\u2026<\/p>\n<ul>\n<li>julkaista,<\/li>\n<li>p\u00e4ivitt\u00e4\u00e4,<\/li>\n<li>tai poista viesti<\/li>\n<\/ul>\n<p>N\u00e4m\u00e4 menetelm\u00e4t tulevat todenn\u00e4k\u00f6isesti esille siten, ett\u00e4 muut luokat voivat hy\u00f6dynt\u00e4\u00e4 niit\u00e4. Lis\u00e4ksi n\u00e4m\u00e4 menetelm\u00e4t todenn\u00e4k\u00f6isesti hy\u00f6dynt\u00e4v\u00e4t my\u00f6s muita ominaisuuksia, kuten <strong>publishDate<\/strong> tai <strong>deletedDate<\/strong>.<\/p>\n<p>Ja t\u00e4ss\u00e4 n\u00e4kyy n\u00e4kyvyyden k\u00e4site. Olio-ohjelmoinnissa kapselointi ei viittaa vain ajatukseen luokan sis\u00e4lt\u00e4mist\u00e4 tiedoista, vaan my\u00f6s siihen, miten se paljastaa tiedot.<\/p>\n<p>N\u00e4m\u00e4 tehd\u00e4\u00e4n kolmella tavalla, jotka kaikki on m\u00e4\u00e4ritelty alla:<\/p>\n<ol>\n<li><strong>julkiset<\/strong> kiinteist\u00f6t ja toiminnot ovat kaikkien k\u00e4ytett\u00e4viss\u00e4; <strong>julkisia\u00a0<\/strong> kiinteist\u00f6j\u00e4 ei kuitenkaan yleens\u00e4 paljasteta. Sen sijaan varmistamme, ett\u00e4 niit\u00e4 voidaan muokata <strong>julkisella<\/strong> menetelm\u00e4ll\u00e4.<\/li>\n<li><strong>suojatut<\/strong> ominaisuudet ja funktiot ovat luokan ja mink\u00e4 tahansa muun luokan, joka perii siit\u00e4 tietoa, k\u00e4ytett\u00e4v\u00e4ksi. T\u00e4st\u00e4 keskustellaan tarkemmin seuraavassa postauksessa.<\/li>\n<li><strong>yksityiset<\/strong> ominaisuudet ja toiminnot ovat niit\u00e4, jotka on tarkoitettu k\u00e4ytett\u00e4v\u00e4ksi yksinomaan tietyn luokan yhteydess\u00e4. N\u00e4m\u00e4 voivat olla ominaisuuksia, joita k\u00e4ytet\u00e4\u00e4n seuraamaan sis\u00e4isi\u00e4 tiloja tai menetelmi\u00e4, joita k\u00e4ytet\u00e4\u00e4n julkisten toimintojen aputoimintoina suorittamaan ty\u00f6ns\u00e4.<\/li>\n<\/ol>\n<p>Kun jatkamme t\u00e4t\u00e4 sarjaa, n\u00e4emme roolin, joka kullakin n\u00e4ist\u00e4 on kirjoitettaessa selkeit\u00e4, helposti seurattavia ja hyvin suunniteltuja kursseja.<\/p>\n<p>Toistaiseksi on kuitenkin t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4, ett\u00e4 n\u00e4it\u00e4 sanoja, <strong>julkinen, suojattu<\/strong> ja <strong>yksityinen<\/strong>, kutsutaan n\u00e4kyvyyden muokkaajiksi, koska ne, kuten voit varmistaa, hallitsevat menetelm\u00e4n tai ominaisuuden n\u00e4kyvyytt\u00e4 suhteessa sen luokkaan ja luokat, jotka periv\u00e4t siit\u00e4 ja jotka ovat vuorovaikutuksessa sen kanssa.<\/p>\n<p>Perinn\u00f6st\u00e4 puhuttaessa puhun siit\u00e4 t\u00e4m\u00e4n sarjan seuraavassa osassa.<\/p>\n<h2>Abstraktio, kapselointi ja WordPress<\/h2>\n<h4>Huonot uutiset: WordPress-tunnit<\/h4>\n<p>Asia on n\u00e4in: WordPressiss\u00e4 n\u00e4emme usein hyvin, hyvin suuria luokkia. T\u00e4m\u00e4 ei ole hyv\u00e4 asia. Itse asiassa n\u00e4m\u00e4 ovat <a href=\"https:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">anti-malleja<\/a>, joita kutsutaan jumalaluokiksi (ajatuksena on, ett\u00e4 sinulla on yksi luokka, joka tiet\u00e4\u00e4 kaiken).<\/p>\n<p>Ja kun sinulla on jumalallinen luokka, se n\u00e4ytt\u00e4\u00e4 k\u00e4tev\u00e4lt\u00e4, koska voit pudottaa kaikki toiminnot yhteen paikkaan. Mutta<\/p>\n<ul>\n<li>sit\u00e4 on vaikea testata,<\/li>\n<li>se ei skaalaudu,<\/li>\n<li>se ei pelaa kauniisti toisen luokan kanssa (puhumattakaan luokista tai kolmannen osapuolen kirjastoista),<\/li>\n<li>se ei sopeudu hyvin muutoksiin.<\/li>\n<\/ul>\n<p>Viime k\u00e4dess\u00e4, kun teet niin, et tee olio-ohjelmointia. Otat funktioita ja heit\u00e4t ne luokkaan. Ja haluamme p\u00e4\u00e4st\u00e4 eroon siit\u00e4.<\/p>\n<h4>Hyv\u00e4t uutiset: Kirjoituskurssit WordPressiss\u00e4<\/h4>\n<p>T\u00e4m\u00e4 her\u00e4tt\u00e4\u00e4 kuitenkin kysymyksen: Miksi yritt\u00e4\u00e4 oppia olio-ohjelmointia WordPressill\u00e4, jos se ei ole vankka esimerkki olio-ohjelmoinnista?<\/p>\n<p>T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 voit silti kirjoittaa hyv\u00e4\u00e4 oliokoodia WordPressiss\u00e4. Se voi silti olla hyvin vuorovaikutuksessa WordPressin kanssa, ja se voi silti pelata hienosti monien muiden WordPressin osien kanssa.<\/p>\n<p>Tied\u00e4n, ett\u00e4 se kuulostaa intuitiiviselta, mutta kun sukeltamme syvemm\u00e4lle oliokoodin kirjoittamiseen WordPressiss\u00e4, t\u00e4m\u00e4n pit\u00e4isi tulla selv\u00e4ksi.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ennen kuin kirjoitan mit\u00e4\u00e4n koodia, haluaisin tehd\u00e4 kaksi viesti\u00e4 OOP:n nelj\u00e4st\u00e4 pilarista. Kaksi ensimm\u00e4ist\u00e4 ovat abstraktio ja kapselointi.<\/p>\n","protected":false},"author":1,"featured_media":165087,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,834,843],"tags":[1166],"class_list":["post-230204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opas-aloittelijoille","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230204"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230204\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/165087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}