Programmazione orientata agli oggetti in WordPress classi

Come delineato nel primo post di questa serie, ci stiamo avvicinando al concetto di programmazione orientata agli oggetti nel contesto di WordPress, e lo stiamo facendo per il molto principiante.

Ciò significa che se non hai mai sentito parlare di OOP, se sei stato curioso di apprenderlo, e sei qualcuno che è interessato a WordPress e che impara come sviluppare soluzioni su di esso, quindi questa serie è per te.

Nel prossimo set di articoli, copriremo tutti gli aspetti principali della programmazione orientata agli oggetti. Una volta fatto ciò, vedremo come possiamo applicare ciò che abbiamo imparato creando una soluzione funzionante per WordPress.

Ma prima, dobbiamo iniziare con le basi.

Quali sono le classi?

Se dovessi chiedere a 10 sviluppatori diversi la loro definizione di una classe, probabilmente ne avrai molti simile risposte, ma alcune delle quali erano effettivamente le stesse. Infatti, quello che ho sentito ripetere più spesso quando ero più giovane è andato così:

Una classe è un progetto per la creazione di un oggetto.

In teoria, suona alla grande particolarmente se sai cos'è un oggetto. Ma questo è il problema, vero? Stiamo cercando di apprendere la programmazione orientata agli oggetti, quindi non c'è alcuna garanzia che sappiamo anche cosa sia un oggetto; quindi, come possiamo capire che una classe funge da modello per esso?

In un certo senso, sta elemosinando la domanda.

Quindi facciamo un passo indietro e definiamo cosa è un oggetto per definire più chiaramente cos'è una classe.

Capire gli oggetti

L'intera idea del paradigma di programmazione orientata agli oggetti è che noi, in quanto programmatori, possiamo modellare più facilmente le informazioni che vediamo nel mondo reale usando i costrutti in un codice.

Ad esempio, nel mondo reale abbiamo oggetti che possono essere descritti usando aggettivi, e questi oggetti possono eseguire azioni. Anche se questo potrebbe essere un po 'cliché, pensa per un momento, a proposito di un'auto:

  • Ha diversi aggettivi come dimensioni e colore.
  • Può guidare e può parcheggiare.

Di nuovo, un semplice esempio, ma dimostra il fatto che tutto ciò che abbiamo nel mondo reale può di solito essere ridotto a un nome che può essere descritto dai suoi aggettivi e dalle azioni che esegue.

Quindi generalizziamo questa idea agli oggetti. In effetti, sostituiamo una parola con un'altra:

  • Un sostantivo è un oggetto.
  • Un aggettivo e un attributo (o una proprietà).
  • Un verbo è un metodo (o una funzione).

Abbastanza facile, giusto? In breve, dovremmo essere in grado di descrivere le cose che vediamo nel mondo reale come oggetti all'interno di un paradigma di programmazione. Nota che alcune lingue chiamano le proprietà degli attributi e alcune funzioni dei metodi di chiamata. Nemmeno importa, è tutto uguale. Si riferiscono semplicemente agli aggettivi relativi all'oggetto e alle azioni che possono intraprendere, rispettivamente.

Esempi poveri

Successivamente, la maggior parte dei corsi di programmazione o libri sempre inizia con un esempio di come gli oggetti sono pensati per modellare oggetti del mondo reale (simile a come ho fatto con l'esempio di auto sopra). 

E in parte, c'è una verità in questo. Per quelli che avere state lavorando in sviluppo, quindi probabilmente avrete familiarità con il modo in cui possiamo modellare le persone nel contesto della nostra applicazione, ma questo sta superando noi stessi.

Anche se è vero che possiamo usare la programmazione orientata agli oggetti per modellare oggetti del mondo reale, ho scoperto che, più spesso no, sto modellando una forma più generalizzata di un oggetto del mondo reale - come un utente piuttosto che a persona - e che le azioni che svolgono sono più uniche per loro.

A tal fine, gli esempi che voglio dare in questo articolo e quelli nel resto di questa serie saranno più orientati verso applicazioni pratiche nella programmazione di computer. Nessuno sta per scrivere un plug-in per auto e nessuno creerà un oggetto animale (che è anche qualcosa che si vede e si sente nei corsi introduttivi di programmazione).

Invece, cercheremo di focalizzare un po 'di più sugli oggetti che sono più probabili essere visti nel regno della programmazione - non nel mondo reale. Non perché la programmazione orientata agli oggetti sia debole, ma perché il nostro modo di insegnare è debole.

Buoni esempi

Naturalmente, ciò solleva la questione di ciò che costituisce un buon esempio? Il problema di rispondere a una domanda come questa è che può essere letteralmente una vasta e ampia varietà di cose. 

Questo include oggetti come:

  • un post sul blog,
  • un documento come un curriculum,
  • un autenticatore o un sistema di autenticazione,
  • un prodotto,
  • un generatore di password,
  • … e così via.

E vedi: molte di queste cose non esistono veramente nel mondo reale. Ad esempio, i post dei blog non sono tangibili. Sono cose che leggiamo sui nostri schermi. Ma questo significa che non hanno proprietà come una data, un'ora e un autore? O significa che non hanno azioni come pubblicare ed eliminare?

Ovviamente no.

Quindi, mentre progrediamo in questa serie, parleremo dell'oggetto in termini di cose con le quali è più probabile che funzionino.

Non ci vedo programmare un animale - e certamente non così in WordPress - in qualsiasi momento durante questa serie :).

Tornando alle basi

Bene, ora che abbiamo fatto una breve digressione che cosa gli oggetti sono effettivamente, e gli esempi buoni e cattivi di ciascuno, è il momento di iniziare effettivamente a parlare di classi e di come realmente servono come progetti per gli oggetti.

Nella programmazione, un oggetto viene creato da una classe. Ciò significa che una classe definisce tutte le proprietà di un oggetto e le azioni che può intraprendere, quindi il computer creerà un oggetto in memoria.

Quando si tratta di lezioni, puoi sentire gli sviluppatori discutere di scrivere classi, definire classi o costruire classi. Tutti e tutti questi termini sono accettabili.

Successivamente, potresti sentire gli sviluppatori parlare della creazione di oggetti. L'atto di creare un oggetto è chiamato istanziazione. Sì, è una parola grossa per un concetto relativamente semplice. Ma pensalo in questo modo: quando hai una classe, hai una definizione da cui puoi creare più istanze di un oggetto.

Se abbiamo bisogno di tracciare un'analogia con il mondo reale, pensiamo prima a una serie di progetti per una casa. Definisce la planimetria, le dimensioni, i muri e così via che forniscono informazioni ai lavoratori edili su come costruire una casa. Poi, quando arriva il momento di costruire una casa, una squadra di operai edili erige la casa in base al progetto.

Questo è il caso di classi, istanze e oggetti. Le classi sono i progetti, il computer è la squadra degli operai edili e gli oggetti sono la casa. E proprio come possono essere costruite più case da un unico progetto, come nel caso di oggetti e classi.

I modelli mentali di classi e oggetti

Quando si tratta di scrivere codice, alcune persone sono in grado di raffigurare l'oggetto nella propria testa - altri, forse no. 

Personalmente, penso che questo abbia più a che fare con il modo in cui ciascuno di noi tende ad apprendere ed elaborare le informazioni, ma credo che sia possibile iniziare a immaginare mentalmente come i sistemi software lavorano insieme più a lungo si scrive codice.

Qui, non esamineremo alcun sistema complesso; però, siamo andando a dare un'occhiata ad un esempio di una classe e quindi a una rappresentazione visiva di ciò che potrebbe sembrare in termini di codice e in termini di un'immagine mentale.

Una classe per un post sul blog

Dal momento che abbiamo a che fare con WordPress, forse un esempio iniziale per una classe sarebbe quello che rappresenta un post sul blog.

Certo, questo sarà un semplice esempio per dimostrare le idee di attributi e funzioni, ma tratteremo vari costrutti in maggiori dettagli negli articoli futuri.

Quindi, detto questo, diciamo che stiamo per creare un corso per un post sul blog. Diciamo anche che il nostro post sul blog avrà un autore, una data in cui è stato pubblicato, indipendentemente dal fatto che sia pubblicato o meno e le azioni da pubblicare ed eliminare.

Una definizione di classe di esempio per un post del blog con questi attributi e funzioni sarà simile a questa:


class Blog_Post private $ author; private $ publish_date; private $ is_published; public function publish () // Pubblica qui l'articolo public function delete () // Elimina l'articolo qui

Per coloro che hanno familiarità con la programmazione orientata agli oggetti, è possibile riconoscere alcune delle informazioni di cui sopra, e si può anche riconoscere che ho dimenticato alcune cose (come il costruttore). Non preoccuparti di questo - tratteremo questi concetti in seguito.

Per coloro che sono completamente nuovi alla programmazione, questo è come appare una definizione di classe base. Per il momento, non preoccuparti delle parole privato e pubblico come vedremo in seguito.

Invece, concentrati su $ autore, $ publish_date, e $ is_published. Questi sono gli attributi. Si noti che si siedono sopra le definizioni di funzione nella classe. Questi sono analoghi agli aggettivi che descrivono il Post sul blog.

Successivamente, abbiamo le funzioni pubblicare() e Elimina(). Queste due funzioni sono le azioni che possono essere intraprese sopra il Post sul blog. Ricorda, come possono muoversi gli oggetti nel mondo reale (come una macchina può guidare), può essere pubblicato un post sul blog.

Una rappresentazione visiva

Quindi cosa succede quando istanziate un post sul blog? Vale a dire, quando creiamo un post sul blog in codice, come possiamo immaginare mentalmente ciò che accade nel computer.

Per prima cosa, descriviamo come viene creato un post di un blog. Ricorda, l'istanza è una parola, proprio come eretto è per i lavoratori edili: è come un oggetto viene creato da una classe.

Successivamente, vediamo come possiamo utilizzare la definizione di una singola classe per creare tre diversi post del blog:

$ first_post = new Blog_Post (); $ second_post = new Blog_Post ();

Abbastanza facile da leggere, giusto? Sopra, abbiamo creato due variabili che faranno riferimento a due completamente diversi Post sul blog oggetti. 

Si noti che, anche se ne parleremo più in un prossimo articolo, la parola nuovo è ciò che istruisce il computer per istanziare a Post sul blog da noi dalla definizione della classe.

Diamo quindi un'occhiata al primo esempio in cui otteniamo la nostra prima istanza di Post sul blog.

Notate in questa illustrazione, abbiamo il $ first_post variabile che si riferisce all'istanza del Post sul blog è stato creato. Il Post sul blog esiste nella memoria del computer, ha i suoi attributi che sono disponibili così come i suoi metodi che sono disponibili.

Possiamo accedere a tutti questi attraverso il $ first_post variabile che fa riferimento a questo oggetto. Ne parleremo più in dettaglio più avanti nella serie.

Ma per quanto riguarda il $ second_post? Come fa quello guarda nel contesto della programmazione orientata agli oggetti?

Se si confrontano le due illustrazioni, sembrano praticamente uguali, giusto? $ first_post fa riferimento a un'istanza di Post sul blog, $ second_post fa riferimento a una seconda istanza di Post sul blog anche se loro tutti e due proveniva da una singola classe.

Si noti che per coloro che sono tecnicamente astuti, lo è è possibile che entrambe le variabili facciano riferimento a una singola istanza, ma questo esula dallo scopo di questo articolo.

Che succede Avanti?

Ad ogni modo, a questo punto, dovresti avere una comprensione ad alto livello di cosa sia una classe, il ruolo che gioca nella programmazione orientata agli oggetti e come possiamo creare istanze di oggetti accessibili attraverso variabili.

Questo comunque non ci mostra come interagire con le classi, vero? Ci arriveremo, ma prima dobbiamo discutere alcuni aspetti più primitivi della programmazione come stringhe, matrici, loop e condizionali.

Ognuno dei suddetti costrutti ci aiuterà a dare vita ai nostri oggetti, e una volta che avremo fatto un tour di ognuno di questi, torneremo per creare classi più mature che possono effettivamente funzionare.