Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Programmare ad Oggetti con Worodpress : L' ambito di applicazione

by
Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Object-Oriented Programming in WordPress.
Object-Oriented Programming in WordPress: Functions and Attributes
Object-Oriented Programming in WordPress: Building the Plugin I

Italian (Italiano) translation by Piergiorgio Sansone (you can also view the original English article)

Continuando la nostra discussione sulla programmazione orientata agli oggetti, dobbiamo iniziare il discorso circa l'idea dello scopo. In breve, questo si riferisce al fatto che dalle classi è possibile  controllare la  modalità di accesso ai loro attributi e  funzioni (o anche se non possono nemmeno accedere).

Questo è un altro elemento essenziale della programmazione orientata agli oggetti  che dovremmo trattare quando affronteremo il lavoro su un vero e proprio plugin per WordPress.

Prima di andare avanti, notate che ogni articolo di questa serie si basa su quello precedente, quindi se  vi unite a noi da questo articolo , date un occhio anche agli articoli  precedenti della serie:

  1. L'introduzione
  2. Le Classi
  3. I Types
  4. Strutture di Controllo : Istruzioni Condizionali
  5. Strutture di Controllo : i Cicli
  6. Funzioni ed attributi

Una volta che siete nell’argomento  potremmo continuare  la nostra discussione su questo ultimo pezzo del paradigma  prima di entrare nello sviluppo di un’ applicazione pratica della programmazione orientata agli oggetti all'interno di WordPress.

Definiamo l'ambito di applicazione

Secondo la Wikipedia, la prima definizione di ambito di applicazione (scopo)  è la seguente:

 Nella programmazione, lo scopo di un nome vincolante  - l’associazione di un nome ad un ente, ad esempio una variabile -  è  la parte di un programma  in cui l'associazione è valida:   quando il nome può essere utilizzato per fare riferimento ad una entità. In altre parti del programma il nome può riferirsi ad una entità diversa (si può avere un vincolo differente), o a nulla (può essere slegata).

A meno che non sei un programmatore esperto, questo  crea della confusione, non è vero?  In realtà, si potrebbe essere interpretato in modo gergale.

Ma va bene, perché lo scopo di questo articolo è quello di fornire una definizione  dell’ambito di applicazione (scopo) con alcuni esempi pratici su ciò che sembra nel contesto di un programma.

Quindi, prima di guardare i tre diversi aspetti dello scopo nella programmazione orientata agli oggetti, cerchiamo di formulare una definizione più chiara.

In breve, l’ambito di applicazione  si riferisce a come le variabili e le funzioni all'interno del programma possono essere accedute da oggetti di terze parti o oggetti figli.

Ad esempio, diciamo che hai un oggetto BlogPost e unoggetto Author.  Quindi, diciamo che l'Autore ha attributi per first_name e last_name e il BlogPost vuole accedere loro, per visualizzarli sullo schermo.

Forse un illustrazione di alto livello potrebbe aiutare:

In questo post l’oggetto BlogPost harichiesto l’informazione nome alla classe Author. Nota la figura sopra , il nome della classe è nella prima sezione , gli attributi nella seconda ed il terzo blocco vuoto è solitamente riservato per indicare la funzione che viene richiamata. 

Ma questo va oltre lo scopo di questo articolo.

Ricorda : Le Classsi sono tipicamente indicate con Sostantivi, gli attributi con Aggettivi e le funzioni da Verbi o con l’azione che l’oggetto può eseguire. A tal fine, le classi incapsulano normalmente loro informazioni in modi strategici, in modo tale che il loro funzionamento è tenuto nascosto e ciò che possono fare è dimostrato dalle loro funzioni pubblicamente disponibili.

Per fare questo, le variabili e le funzioni devono essere di un determinato ambito che dia accesso ad altri oggetti ed alle loro informazioni. Questo tipo di oggetto  comprende oggetti di terze parti che vogliono sfruttare i dati rappresentati da una classe, e un altro tipo di oggetto rappresenta un oggetto che eredita le informazioni da tale classe.

l'ereditarietà va oltre quanto stiamo andando a trattare con questo particolare articolo; tuttavia per coloro che sono nuovi alla programmazione orientata agli oggetti, ci occuperemo di questo argomento più avanti nella serie.

Quindi , detto questo, siamo pronti per dare un'occhiata ad un esempio pratico dell'ambito, compreso il modo che abbiamo usato finora nella serie e come incide sulle decisioni di progettazioni successive.

Tutto su Public, Private e Protected

il sillabato sopra avrebbe dovuto spiegare, almeno ad alto livello, quali possibilità e quanto è importante, ma se non lo ha fatto, allora forse lo farà nelle sezioni successive.

In particolare , vedremo ciascun ambito che le variabili e funzioni possono avere , ne spiegheremo il significato e poi spiegheremo quando vorrete utilizarle.

Prima facciamo un passo indietro e noterete che public, protected e private sono parole chiave che possono essere utilizzate per definire l'ambito di entrambi, attributi e funzioni. Questo accade perchè le regole che si applicano agli attributi sono applicabili anche per le funzioni.

Con questo, diamo un occhiata ad ogniuna delle parole chiave.

Public

In poche parole, gli attributi e funzioni public sono a disposizione per ogni tipo di oggetto che sta tentando di accedere alla variabile o la funzione.

Per esempio:

Data questa configurazione, ogni oggetto che chiama una istanza di quest'oggetto non può accedere solo agli attributi $first_name e $last_name, ma può anche modificarli. Ugualmente, ogni oggetto che richiama un istanza dell'oggetto, può accedere alle funzioni per recuperare il nome e modificarlo.

Cosi, la domanda è : che senso ha avere queste funzioni se l'attributo è reso public ? Voglio dire , è ridondante, non lo è ? Si. Risponderò a questo più avanti in questo articolo, quando affroteremo  la parola chiave private.

Protected ( Protetto)

A seguire, protected attributi e funzioni sono disponibili nel contesto della classe nella quale sono definite, ma non per oggetti di terze parti. Detto questo, possono essere chiamate dall'interno della propria classe, ma non da classi esterne.

Ma c'è un eccezzione. la sottoclasse.

Per esempio, diciamo che definite una classe chiamata Contributor che è una sottoclasse di Author , questo significa che il Contributor ha accesso a tutto attibuti e funzioni protected e public della sua classe genitore.

Dato il codice sopra, questo significa che potete chiamare i metodi come get_first_name() da e dentro la classe Author o dalla classe Contributor ma non dalle classi esterne.

Certo, le sottoclassi hanno più a che fare con l'ereditarietà che è un qualcosa di cui tratteremo più avanti nella serie; Tuttavia, porto avanti l'argomento per fornire un chiarimento importante tra gli attributi e le funzioni public e gli attribuiti e le funzioni private.

Private

In breve , gli attributi e le funzioni private bloccano gli attributi e le funzioni nella classe in cui vengono definite. Ciò significa che nessun oggetto esterno o sottoclasse può accedere a nessuna delle informazioni.

Chiaramente, questa è la forma più severe dell'ambito, ma che non deve essere letto come se fosse una brutta cosa (o una buona cosa). Invece, è pensata per fornire un modo per alcune informazioni di rimanere nascoste (o astratta) nel contesto della classe in cui sono definite.

Tornando al nostro esempio di prima, diamo un'occhiata a come possiamo rifattorizzare la classe che fornisce la quantità massima di utilità sia per esterne classi e sottoclassi.

In primo luogo , questo esempio dimostra l'uso povero della parola chiave private

In questo esempio, non ci sono solo attributi inaccessibili, ma anche le funzioni non sono accessibili. In altre parole, ad altri oggetti nel "mondo esterno", questa classe sembra avere niente di disponibile. Peggio ancora, nemmeno le sottoclassi possono accedere a qualsiasi di queste informazioni.

In breve, il codice non ha davvero senso.

Allora, facciamo un refactoring quanto basta per lasciare l'attributo nascosto (e quindi inaccessibile agli oggetti di terze parti), e potremmo indicare un modo agli oggetti di terze parti per recuperare i nomi,consentendo solo alla classe principale e le relative sottoclassi di cambiarli:

Naturalmente, questo è solo un esempio. Ovviamente, stiamo lasciando fuori alcuni dei dettagli di implementazione, tali che non sappiamo quali possiamo richiamare per, diciamo, i nomi da aggiornare.

Ma non è un problema: Questo mostra un esempio completo di come per ogni ambito : private, protected e public gli aspetti di una classe possano lavorare in combinazione tra loro per fornire una modo sicuro e strategico per accedere alle informazioni.

Astrazione e nascondere informazioni

Per quanto concerene l'ambito di applicazione , è possibile che le questioni che verranno si riducano ad astrazioni ed informazioni nascoste.

Vale a dire che le classi (che sono progetti per oggetto, se vi ricordate dai nostri articoli precedenti) dovrebbero organizzare strategicamente le loro informazioni in modo tale che:

  • informazioni che dovrebbero essere accessibili e pertinenti solo ad esso dovrebbero rimanere private
  • informazioni che devono essere accessibili da esse stesse e le sue sottoclassi devono essere protette
  • Informazioni che dovrebbero essere accessibili da oggetti di terze parti dovrebbero essere public

in realtà , potrei fare un passo avanti nel dire che sia improbabile vedere effettivamente molti attributi contrassegnati come pubblici. Invece , è più facile vedere attributi identificato come protected - al fine di creare delle sottoclassi - o private in modo che i loro dati possano essere gestiti da funzioni dallo scopo appropriato.

Inizialmente , suona relativamente semplice , giusto ? E il concetto stesso non è terribilmente complicato, ma quando si tratta di costruire sistemi che utilizzano un numero di oggetti diversi, tutti lavorano insieme per fornire solide astrazioni, avere interfacce pulite dalle quali interagiscono classi e sottoclassi di terze parti e modi efficaci di organizzazione delle informazioni, può diventare più difficile - ci sono molti elementi in gioco da considerare.

Detto questo, questa è una di quelle cose come la scrittura di codice, interagire con altri sviluppatori e letteggere il codice accresce l'esperienza.

Per quel che vale, non ho paura di ammettere che ancora si tratta di strategie con cui faccio fatica, non perché io non capisco i concetti, ma perché cercando di fornire l'implementazione della classe più pulita possibile può essere difficile, soprattutto in un sistema che è suscettibile di cambiamenti.

Ma questo è il contenuto per un altro post.

Naturalmente, se avete domande o commenti su qualsiasi cosa riguardo l'argomento dell'ambito, non esitate a lasciarli nei commenti.

Cosa ci sarà dopo?

A partire nel prossimo articolo, dobbiamo iniziare a incorporare alcune di queste informazioni in un'applicazione pratica della costruzione di un plugin per WordPress.

Così per quelli di voi che sono in attesa di vedere come questa serie funziona in congiunzione con WordPress, il prossimo articolo dovrebbe cominciare a riunire tutti i concetti mentre continuiamo la serie con il nostro plugin di WordPress utilizzando il concetto di programmazione object-oriented.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.