{"id":229611,"date":"2022-11-20T17:17:00","date_gmt":"2022-11-20T14:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229611"},"modified":"2022-11-20T17:26:26","modified_gmt":"2022-11-20T14:26:26","slug":"oop-kaks-esimest-sammast","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/oop-kaks-esimest-sammast\/","title":{"rendered":"OOP kaks esimest sammast"},"content":{"rendered":"\n<p>Kui r\u00e4\u00e4kida objektorienteeritud programmeerimisest (v\u00f5i OOP-st), kuulete t\u00f5en\u00e4oliselt objektorienteeritud programmeerimise kolmest sambast v\u00f5i objektorienteeritud programmeerimise neljast sambast.<\/p>\n<p>Olenevalt teie taustast olete v\u00f5ib-olla neist juba kuulnud, teate, mis need on, ja te ei pea sellesse liiga palju s\u00fcvenema. Aga kui te seda pole, usun, et nende m\u00f5istmine on objektorienteeritud programmeerimise aluseks.<\/p>\n<p>Oleme l\u00e4binud kogu objektorienteeritud programmeerimise <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">anal\u00fc\u00fcsifaasi :<\/a><\/strong><\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/objektorienteeritud-programmeerimine-wordpressis-analueues-1-osa\/\" title=\"Anal\u00fc\u00fcs, 1. osa\">Anal\u00fc\u00fcs, 1. osa<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/objektorienteeritud-programmeerimine-wordpressis-analueues-2-osa\/\" title=\"Anal\u00fc\u00fcs, 2. osa\">Anal\u00fc\u00fcs, 2. osa<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/objektorienteeritud-programmeerimine-wordpressis-klientide-ootuste-moistmine\/\" title=\"Klientide ootuste m\u00f5istmine\">Klientide ootuste m\u00f5istmine<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/objektorienteeritud-programmeerimine-wordpressis-toeoearuanne\/\" title=\"T\u00f6\u00f6aruanne\">T\u00f6\u00f6aruanne<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/objektorienteeritud-programmeerimine-wordpressis-nouded-ja-tingimused\/\" title=\"Tingimused\">Tingimused<\/a><\/li>\n<\/ol>\n<p>Seda \u00f6eldes asume disaini ja rakendamise aruteludesse. L\u00f5ppude l\u00f5puks tahavad paljud inimesed selle poole h\u00fcpata, kas pole?<\/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 kaks esimest sammast\"><\/a><\/p>\n<p>Enne mis tahes koodi kirjutamist tahaksin teha kaks postitust objektorienteeritud programmeerimise neljast punktist (sest olen \u00fcks neist, kes n\u00f5ustub ideega, et neid on neli).<\/p>\n<h2>OOP kaks sammast<\/h2>\n<p>J\u00e4llegi, nende m\u00f5istmine on objektorienteeritud programmeerimise aluse m\u00f5istmiseks v\u00f5tmet\u00e4htsusega. Ilma nendeta on tulevastes postitustes k\u00e4sitletavas osas raske navigeerida.<\/p>\n<p>Sellega r\u00e4\u00e4gime neist iga\u00fchest. Kahte esimest k\u00e4sitleme selles postituses ja kahte viimast j\u00e4rgmises postituses.<\/p>\n<h3>1 Abstraktsioon<\/h3>\n<p>\u00dcldiselt on see objektorienteeritud koodi kirjutamise v\u00f5ti. Selle all pean silmas k\u00f5ike, mis klassis sisaldub. Abstraheerime idee millestki klassi. Paljudes raamatutes n\u00e4eme klassidena selliseid asju nagu <strong>loomad<\/strong> v\u00f5i <strong>autod .<\/strong><\/p>\n<p>Teoreetiliselt see toimib, kuid praktilises m\u00f5ttes me ei programmeeri loomi ega programmeeri autosid (kuigi ma arvan, et praegusel ajaloohetkel v\u00f5ite v\u00e4ita, et oleme, aga ma kaldun k\u00f5rvale, sest teate, mida ma m\u00f5tlen).<\/p>\n<p>Selle asemel abstraheerime ideid nende klassidesse. Ja siin on p\u00f5hiidee:<\/p>\n<blockquote>\n<p>Klass peaks esindama nimis\u00f5na.<\/p>\n<\/blockquote>\n<p>See t\u00e4hendab, et teil ei tohiks olla klassi, mis esindab midagi sellist nagu &quot;jooksmine&quot;. Selle asemel v\u00f5ib teil olla midagi, mis t\u00f6\u00f6tab ja seega <strong>oleks k\u00e4itamine<\/strong> meetod. Ja see on abstraktsiooni toimimise \u00fcldine jaotus:<\/p>\n<ol>\n<li>Asi, mida tuleb esindada, on klass,<\/li>\n<li>Asi, mida asi teeb, on selle meetodid,<\/li>\n<li>Ja seda, kuidas te asja kirjeldate, saab seda tavaliselt teha selle atribuutide v\u00f5i omaduste kaudu.<\/li>\n<\/ol>\n<p>See ei t\u00e4henda, et meil ei oleks funktsioone v\u00f5i meetodeid, mis selle omadusi muudaksid, kuid \u00fclaltoodud kolm punkti on head rusikareeglid. Nii et klassi kujundamisel v\u00f5ite k\u00fcsida j\u00e4rgmisi asju:<\/p>\n<ul>\n<li>Kas ma kirjutan midagi?<\/li>\n<li>Kas ma kirjutan midagi, mida teha?<\/li>\n<li>V\u00f5i kirjutan ma midagi, mis kirjeldab midagi?<\/li>\n<\/ul>\n<p>Sest kui kirjutate toimingut, teeb selle t\u00f5en\u00e4oliselt miski (kuna asjad tegutsevad \u2013 nad teevad asju). Ja kui kirjeldate midagi, viitab see t\u00f5en\u00e4oliselt millelegi (millal te viimati midagi ei kirjeldanud?)<\/p>\n<p>On loogiline?<\/p>\n<h3>2 Kapseldamine<\/h3>\n<p>Nii et kui me kirjutame klasse \u2013 h\u00e4id klasse \u2013, peame need kirjutama nii, et oleksime nende andmed korralikult kapseldatud. Ja kapseldamine on tegelikult lihtsalt &quot;suur&quot; s\u00f5na, mis viitab ideele oma kohustuste haldamisest (v\u00f5i andmete j\u00e4lgimisest).<\/p>\n<p>N\u00e4iteks kui kirjutaksime klassi WordPressi postituse esindamiseks, oleks meil klass nimega <strong>Post<\/strong>, millel on sellised omadused nagu <strong>avaldamine, v\u00e4rskendamine, kustutamine,<\/strong> \u00a0<strong>postData, publishDate, lastUpdatedData<\/strong>, <strong>deletedDate<\/strong> ja nii edasi.<\/p>\n<p>Siis oleks meil funktsioonid, mis on spetsiaalselt loodud klassi <strong>Post eksemplari suhtes toimingute tegemiseks.<\/strong><\/p>\n<p>N\u00e4iteks v\u00f5ime\u2026<\/p>\n<ul>\n<li>avaldada,<\/li>\n<li>v\u00e4rskendus,<\/li>\n<li>v\u00f5i kustuta postitus<\/li>\n<\/ul>\n<p>Need meetodid avaldatakse t\u00f5en\u00e4oliselt nii, et teised klassid saavad neid \u00e4ra kasutada. Lisaks kasutavad need meetodid t\u00f5en\u00e4oliselt \u00e4ra ka muid atribuute, nagu <strong>publishDate<\/strong> v\u00f5i <strong>deletedDate<\/strong>.<\/p>\n<p>Ja siin tuleb m\u00e4ngu n\u00e4htavuse m\u00f5iste. Objektorienteeritud programmeerimises ei viita kapseldamine mitte ainult klassis sisalduva teabe ideele, vaid ka sellele, kuidas see andmeid paljastab.<\/p>\n<p>Neid tehakse kolmel viisil, mis k\u00f5ik on m\u00e4\u00e4ratletud allpool:<\/p>\n<ol>\n<li><strong>avalikud<\/strong> omadused ja funktsioonid on k\u00f5igile k\u00e4ttesaadavad; <strong>avalikke\u00a0<\/strong> varasid aga tavaliselt ei eksponeerita. Selle asemel tagame, et neid saab <strong>avalikul<\/strong> meetodil muuta.<\/li>\n<li><strong>kaitstud<\/strong> atribuudid ja funktsioonid on saadaval kasutamiseks klassile ja mis tahes muule klassile, mis p\u00e4rib sellelt teavet. Sellest tuleb t\u00e4psemalt juttu j\u00e4rgmises postituses.<\/li>\n<li><strong>privaatsed<\/strong> omadused ja funktsioonid on need, mis on m\u00f5eldud kasutamiseks ainult antud klassi kontekstis. Need v\u00f5ivad olla atribuudid, mida kasutatakse sisemiste olekute v\u00f5i meetodite j\u00e4lgimiseks, mida kasutatakse avalike funktsioonide abifunktsioonidena nende t\u00f6\u00f6 l\u00f5petamiseks.<\/li>\n<\/ol>\n<p>Seda sarja j\u00e4tkates n\u00e4eme, millist rolli m\u00e4ngivad k\u00f5ik need selgete, h\u00f5lpsasti j\u00e4lgitavate ja h\u00e4sti \u00fcles ehitatud tundide kirjutamisel.<\/p>\n<p>Praegu on aga oluline m\u00f5ista, et neid s\u00f5nu <strong>avalik, kaitstud<\/strong> ja <strong>privaatne<\/strong> nimetatakse n\u00e4htavuse muutjateks, sest nagu saate kindlaks teha, juhivad need meetodi v\u00f5i atribuudi n\u00e4htavust selle klassi ja klassid, mis sellelt p\u00e4rivad ja sellega suhtlevad.<\/p>\n<p>P\u00e4rimisest r\u00e4\u00e4kides r\u00e4\u00e4gin sellest selle sarja j\u00e4rgmises osas.<\/p>\n<h2>Abstraktsioon, kapseldamine ja WordPress<\/h2>\n<h4>Halvad uudised: WordPressi klassid<\/h4>\n<p>Siin on asi: WordPressis n\u00e4eme sageli v\u00e4ga-v\u00e4ga suuri klasse. See ei ole hea. Tegelikult on need <a href=\"https:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">antimustrid<\/a>, mida nimetatakse jumalaklassideks (m\u00f5te seisneb selles, et teil on \u00fcks klass, kes teab k\u00f5ike).<\/p>\n<p>Ja kui teil on jumalik klass, tundub see mugav, sest saate k\u00f5ik funktsioonid \u00fchte kohta koondada. Aga<\/p>\n<ul>\n<li>seda on raske katsetada,<\/li>\n<li>see ei ulatu,<\/li>\n<li>see ei m\u00e4ngi kenasti teise klassiga (r\u00e4\u00e4kimata klassidest v\u00f5i kolmandate osapoolte raamatukogudest),<\/li>\n<li>see ei kohane muutustega h\u00e4sti.<\/li>\n<\/ul>\n<p>L\u00f5ppkokkuv\u00f5ttes, kui te seda teete, ei tee te objektorienteeritud programmeerimist. Sa v\u00f5tad funktsioone ja viskad need klassi. Ja me tahame sellest lahti saada.<\/p>\n<h4>Hea uudis: WordPressis kirjutamiskursused<\/h4>\n<p>See t\u00f5statab aga k\u00fcsimuse: miks proovida \u00f5ppida objektorienteeritud programmeerimist WordPressiga, kui see pole objektorienteeritud programmeerimise kindel n\u00e4ide?<\/p>\n<p>Selle p\u00f5hjuseks on asjaolu, et WordPressis saate endiselt kirjutada head objektorienteeritud koodi. See suudab endiselt WordPressiga h\u00e4sti suhelda ja suudab endiselt kenasti m\u00e4ngida paljude muude WordPressi aspektidega.<\/p>\n<p>Ma tean, et see k\u00f5lab intuitiivselt, kuid kui me s\u00fcveneme WordPressis objektorienteeritud koodi kirjutamisse, peaks see selgeks saama.<\/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>Enne mis tahes koodi kirjutamist tahaksin teha kaks postitust OOP nelja samba kohta. Esimesed kaks on abstraktsioon ja kapseldamine.<\/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":[718,833,842],"tags":[1165],"class_list":["post-229611","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-juhend-algajatele","category-opetused","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229611"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229611\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/165087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}