{"id":230382,"date":"2022-11-20T17:28:00","date_gmt":"2022-11-20T14:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230382"},"modified":"2022-11-20T17:31:32","modified_gmt":"2022-11-20T14:31:32","slug":"i-primi-due-pilastri-di-oop","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/i-primi-due-pilastri-di-oop\/","title":{"rendered":"I primi due pilastri di OOP"},"content":{"rendered":"\n<p>Quando si tratta di parlare di programmazione orientata agli oggetti (o OOP), \u00e8 probabile che tu senta parlare dei tre pilastri della programmazione orientata agli oggetti o dei quattro pilastri della programmazione orientata agli oggetti.<\/p>\n<p>A seconda del tuo background, potresti averne gi\u00e0 sentito parlare, sapere cosa sono e non hai davvero bisogno di immergerti troppo. Ma se non l&#8217;hai fatto, credo che capirli sia fondamentale per la programmazione orientata agli oggetti.<\/p>\n<p>Abbiamo coperto l&#8217;intera fase di <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/oop-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">analisi<\/a><\/strong> della programmazione orientata agli oggetti:<\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/programmazione-orientata-agli-oggetti-in-wordpress-analisi-parte-1\/\" title=\"Analisi, parte 1\">Analisi, parte 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/programmazione-orientata-agli-oggetti-in-wordpress-analisi-parte-2\/\" title=\"Analisi, parte 2\">Analisi, parte 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/programmazione-orientata-agli-oggetti-in-wordpress-comprendere-le-aspettative-dei-clienti\/\" title=\"Comprendere le aspettative dei clienti\">Comprendere le aspettative dei clienti<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/programmazione-orientata-agli-oggetti-in-wordpress-statement-of-work\/\" title=\"Dichiarazione di lavoro\">Dichiarazione di lavoro<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/programmazione-orientata-agli-oggetti-in-wordpress-termini-e-condizioni\/\" title=\"Termini e Condizioni\">Termini e Condizioni<\/a><\/li>\n<\/ol>\n<p>Detto questo, entriamo nelle discussioni di progettazione e implementazione. Dopotutto, questo \u00e8 ci\u00f2 a cui molte persone vogliono saltare comunque, vero?<\/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=\"I primi due pilastri di OOP\"><\/a><\/p>\n<p>Prima di scrivere qualsiasi codice, vorrei fare due post sui quattro punti della programmazione orientata agli oggetti (perch\u00e9 sono uno di quelli che aderisce all&#8217;idea che ce ne siano quattro).<\/p>\n<h2>Due pilastri dell&#8217;OOP<\/h2>\n<p>Ancora una volta, comprenderli \u00e8 la chiave per comprendere le basi della programmazione orientata agli oggetti. Senza di loro, sar\u00e0 difficile navigare nel resto di ci\u00f2 che verr\u00e0 discusso nei post futuri.<\/p>\n<p>Detto questo, parliamo di ciascuno di essi. Tratteremo i primi due in questo post e gli ultimi due nel prossimo post.<\/p>\n<h3>1 Astrazione<\/h3>\n<p>In generale, questa \u00e8 la chiave per scrivere codice orientato agli oggetti. Con ci\u00f2, intendo tutto ci\u00f2 che \u00e8 contenuto all&#8217;interno di una classe. Astraiamo l&#8217;idea di qualcosa in una classe. In molti libri vedremo cose come <strong>Animali<\/strong> o <strong>Macchine<\/strong> rappresentate come classi.<\/p>\n<p>Funziona, in teoria, ma in pratica, non stiamo programmando animali n\u00e9 stiamo programmando automobili (anche se immagino che a questo punto della storia, potresti sostenere che lo siamo, ma sto divagando perch\u00e9 sai cosa intendo).<\/p>\n<p>Invece, astrarremo le idee nelle loro classi. E qui c&#8217;\u00e8 un&#8217;idea chiave:<\/p>\n<blockquote>\n<p>Una classe dovrebbe rappresentare un sostantivo.<\/p>\n<\/blockquote>\n<p>Cio\u00e8, non dovresti avere una classe che rappresenti qualcosa come &quot;Running&quot;. Invece, potresti avere qualcosa che funziona e, quindi, le <strong>corse<\/strong> sarebbero un metodo. E questa \u00e8 la ripartizione generale di come funziona l&#8217;astrazione:<\/p>\n<ol>\n<li>La cosa che deve essere rappresentata \u00e8 la classe,<\/li>\n<li>Le cose che fa la cosa sono i suoi metodi,<\/li>\n<li>E il modo in cui descrivi la cosa di solito pu\u00f2 essere fatto tramite i suoi attributi o propriet\u00e0.<\/li>\n<\/ol>\n<p>Questo non significa che non abbiamo funzioni o metodi che ne modifichino le propriet\u00e0, ma i tre punti precedenti sono buone regole pratiche. Quindi, quando stai progettando una classe, puoi chiedere cose come:<\/p>\n<ul>\n<li>Sto scrivendo qualcosa?<\/li>\n<li>Sto scrivendo qualcosa da fare?<\/li>\n<li>O sto scrivendo qualcosa che descriva qualcosa?<\/li>\n<\/ul>\n<p>Perch\u00e9 se stai scrivendo un&#8217;azione, \u00e8 probabile che sia fatta da qualcosa (perch\u00e9 le cose agiscono, loro fanno cose). E se stai descrivendo qualcosa, probabilmente si riferisce a qualcosa (quando \u00e8 stata l&#8217;ultima volta che non hai descritto nulla?)<\/p>\n<p>Ha senso?<\/p>\n<h3>2 Incapsulamento<\/h3>\n<p>Quindi, se stiamo scrivendo classi \u2013 buone classi \u2013 allora dobbiamo scriverle in modo tale da incapsulare correttamente i loro dati. E incapsulamento \u00e8 in realt\u00e0 solo una parola &quot;grande&quot; che si riferisce all&#8217;idea di gestire le proprie responsabilit\u00e0 (o tenere traccia dei propri dati).<\/p>\n<p>Quindi, ad esempio, se stessimo scrivendo una classe per rappresentare un post di WordPress, avremmo una classe denominata <strong>Post<\/strong> con propriet\u00e0 come <strong>publish, update, delete,<\/strong> \u00a0<strong>postData, publishDate, lastUpdatedData<\/strong>, <strong>DeleteDate<\/strong> e cos\u00ec via.<\/p>\n<p>Quindi avremmo funzioni progettate specificamente per agire su un&#8217;istanza della\u00a0 classe <strong>Post<\/strong>.<\/p>\n<p>Caso in questione, potremmo&#8230;<\/p>\n<ul>\n<li>pubblicare,<\/li>\n<li>aggiornare,<\/li>\n<li>o eliminare un post<\/li>\n<\/ul>\n<p>Questi metodi saranno probabilmente esposti in modo tale che altre classi possano trarne vantaggio. Inoltre, questi metodi probabilmente trarranno vantaggio anche da altre propriet\u00e0 come <strong>publishDate<\/strong> o <strong>DeleteDate<\/strong>.<\/p>\n<p>Ed \u00e8 qui che entra in gioco il concetto di visibilit\u00e0. Nella programmazione orientata agli oggetti, l&#8217;incapsulamento non si riferisce solo all&#8217;idea delle informazioni che una classe contiene, ma anche al modo in cui espone i dati.<\/p>\n<p>Questi vengono eseguiti in tre modi, tutti definiti di seguito:<\/p>\n<ol>\n<li><strong>le<\/strong> propriet\u00e0 e le funzioni pubbliche sono disponibili per l&#8217;utilizzo da parte di chiunque; tuttavia,\u00a0 le propriet\u00e0 <strong>pubbliche di\u00a0<\/strong> solito non sono esposte. Al contrario, ci assicuriamo che possano essere modificati con un metodo <strong>pubblico .<\/strong><\/li>\n<li><strong>le propriet\u00e0 e le funzioni protette<\/strong> sono disponibili per essere utilizzate dalla classe e da qualsiasi altra classe che eredita le informazioni da essa. Questo sar\u00e0 discusso in modo pi\u00f9 dettagliato nel prossimo post.<\/li>\n<li><strong>le propriet\u00e0 e le funzioni private<\/strong> sono quelle destinate esclusivamente ad essere utilizzate nel contesto di una data classe. Queste possono essere propriet\u00e0 utilizzate per tenere traccia degli stati interni o dei metodi utilizzati per funzionare come funzioni di supporto per le funzioni pubbliche per completare il proprio lavoro.<\/li>\n<\/ol>\n<p>Continuando con questa serie, vedremo il ruolo che ciascuno di questi svolge nello scrivere classi chiare, facili da seguire e ben strutturate.<\/p>\n<p>Per ora, per\u00f2, \u00e8 importante capire che queste parole, <strong>public, protected<\/strong> e <strong>private<\/strong>, vengono chiamate modificatori di visibilit\u00e0 perch\u00e9, come si pu\u00f2 constatare, gestiscono la visibilit\u00e0 di un metodo o di una propriet\u00e0 rispetto alla sua classe e al classi che ereditano da esso e che interagiscono con esso.<\/p>\n<p>Parlando di eredit\u00e0, ne parler\u00f2 nella prossima parte di questa serie.<\/p>\n<h2>Astrazione, incapsulamento e WordPress<\/h2>\n<h4>La cattiva notizia: lezioni in WordPress<\/h4>\n<p>Ecco il punto: in WordPress vediamo spesso classi molto, molto grandi. Questa non \u00e8 una buona cosa. In effetti, questi sono <a href=\"https:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">anti-modelli<\/a> chiamati classi di divinit\u00e0 (l&#8217;idea \u00e8 che hai una singola classe che sa tutto).<\/p>\n<p>E quando hai una classe divina, sembra conveniente perch\u00e9 puoi concentrare tutte le funzionalit\u00e0 in un unico posto. Ma<\/p>\n<ul>\n<li>\u00e8 difficile da testare,<\/li>\n<li>non scala,<\/li>\n<li>non funziona bene con un&#8217;altra classe (per non parlare di classi o librerie di terze parti),<\/li>\n<li>non si adatta bene al cambiamento.<\/li>\n<\/ul>\n<p>In definitiva, quando lo fai, non stai eseguendo la programmazione orientata agli oggetti. Stai prendendo funzioni e le inserisci in una classe. E vogliamo allontanarci da quello.<\/p>\n<h4>La buona notizia: lezioni di scrittura su WordPress<\/h4>\n<p>Ci\u00f2 solleva una domanda, tuttavia: perch\u00e9 provare a imparare la programmazione orientata agli oggetti con WordPress se non \u00e8 un solido esempio di programmazione orientata agli oggetti?<\/p>\n<p>Questo perch\u00e9 puoi ancora scrivere un buon codice orientato agli oggetti su WordPress. Pu\u00f2 ancora interagire bene con WordPress e pu\u00f2 ancora giocare bene con molti altri aspetti di WordPress.<\/p>\n<p>So che sembra controintuitivo, ma mentre ci addentriamo pi\u00f9 a fondo nella scrittura di codice orientato agli oggetti su WordPress, questo dovrebbe diventare chiaro.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prima di scrivere qualsiasi codice, vorrei scrivere due post sui quattro pilastri dell&#8217;OOP. I primi due sono Astrazione e Incapsulamento.<\/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":[835,720,844],"tags":[1168],"class_list":["post-230382","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guida-per-principianti","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230382"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230382\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/165087"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}