În continuarea discuției despre programarea orientată pe obiecte în WordPress, trebuie să începem să vorbim despre ideea de domeniu. Pe scurt, aceasta se referă la ideea că clasele pot controla modul în care sunt accesate atributele și funcțiile lor (sau dacă pot sau nu să fie accesate).
Aceasta este încă o altă idee de bază de programare orientată pe obiecte, după care ar trebui să fim în formă bună pentru a începe să lucrăm la un plugin WordPress real.
Înainte de a merge mai departe, vă rugăm să rețineți că fiecare articol din această serie se bazează pe cel precedent, deci, dacă vă alăturați, vă rugăm să verificați articolele anterioare din seria:
Odată ce sunteți toți prinși, să continuăm discuția noastră cu privire la ultima piesă a paradigmei necesare pentru a înțelege înainte de a intra în aplicația practică a programării orientate pe obiecte în WordPress.
În conformitate cu Wikipedia, prima definiție a domeniului de aplicare este după cum urmează:
În programarea computerelor, domeniul de aplicare al unei legături de nume - o asociere a unui nume cu o entitate, cum ar fi o variabilă - este partea unui program de calculator în care legarea este validă: unde numele poate fi folosit pentru a se referi la entitate. În alte părți ale programului, numele se poate referi la o entitate diferită (poate avea o legătură diferită) sau la nimic (poate fi nelegat).
Dacă nu ești un programator cu experiență, este puțin confuz, nu-i așa? De fapt, se poate citi chiar ca un jargon.
Dar acest lucru este bine deoarece scopul acestui articol este de a oferi o definiție de lucru a domeniului de aplicare, precum și câteva exemple practice cu privire la ceea ce pare în contextul unui program.
Deci, înainte de a ne uita la cele trei aspecte diferite ale domeniului de aplicare în programarea orientată pe obiecte, să formulăm o definiție mai curată.
Pe scurt, domeniul de aplicare se referă la modul în care variabilele și funcțiile pot fi accesate de la obiecte terțe sau obiecte copil în cadrul programului.
De exemplu, spuneți că aveți a Postare pe blog
obiect și an Autor
obiect. În continuare, să spunem că autorul are atribute pentru Nume
și numele de familie
si Postare pe blog
vrea să le acceseze pentru a le putea afișa pe ecran.
Poate că o ilustrare la nivel înalt ar ajuta:
În acest post, Postare pe blog
solicită informații de nume de la Autor
clasă. Observați că în diagrama de mai sus numele de clasă se află în primul blog, atributele din al doilea bloc și apoi cele trei blocuri goale sunt de obicei rezervate funcțiilor.
Dar asta este dincolo de, hm, Domeniul de aplicare al acestui articol.
Amintiți-vă: clasele reprezintă de obicei substantive, atributele reprezintă adjective și funcțiile reprezintă verbe sau acțiuni pe care le poate lua obiectul. În acest scop, clasele de obicei încapsulează informațiile în moduri strategice, cum ar fi acestea Cum munca lor este păstrată ascunsă și ce acestea pot fi demonstrate prin funcțiile lor disponibile publicului.
Pentru a face acest lucru, variabilele și funcțiile trebuie să aibă un anumit domeniu de aplicare care permite altor obiecte accesul la informațiile lor. Aceste tipuri de obiecte includ obiecte terță parte care doresc să utilizeze datele reprezentate de o clasă, iar un alt tip de obiect reprezintă un obiect Moștenește informații din acea clasă.
Moștenirea este dincolo de ceea ce vom acoperi în acest articol special; cu toate acestea, vom acoperi acest lucru un pic mai târziu în serie pentru cei care sunt nou-născuți în programarea orientată pe obiecte.
Deci, cu aceasta am spus că suntem gata să aruncăm o privire asupra unui exemplu practic de domeniu, inclusiv modul în care am folosit-o până acum în serie și cum influențează deciziile de proiectare care avansează înainte.
Primerul de mai sus ar fi trebuit să explice, cel puțin la un nivel înalt, ce domeniu de aplicare este și ce contează, dar dacă nu, atunci probabil următoarele secțiuni.
Mai precis, vom analiza fiecare tip de domeniu pe care variabilele și funcțiile le pot avea, vom explica ceea ce înseamnă fiecare și apoi vom explica când doriți să utilizați fiecare dintre ei.
Înainte de a merge mai departe, rețineți că public
, protejat
, și privat
cuvintele cheie pot fi folosite la ambele atribute și funcții. Acest lucru contează deoarece regulile care se aplică atributelor sunt de asemenea aplicabile funcțiilor.
Cu asta a spus, să aruncăm o privire la fiecare dintre cuvintele cheie.
Pur și simplu pune, public
atributele și funcțiile sunt disponibile fiecare tipul de obiect care încearcă să acceseze variabila sau funcția.
De exemplu:
first_name = $ name; funcția publică set_last_name ($ name) $ this-> last_name = $ name; funcția publică get_first_name () return $ this-> first_name; funcția publică get_last_name () return $ this-> last_name; Alte detalii despre clasă ...
Având în vedere această configurație, orice obiect care solicită o instanță a acestui obiect nu poate accesa numai $ FIRST_NAME
și $ LAST_NAME
atribute, dar poate, de asemenea Schimbare lor. În mod similar, orice obiect care apelează o instanță a obiectului poate accesa funcțiile pentru a prelua numele și pentru a schimba numele.
Deci ridică întrebarea: Care este scopul acestor funcții dacă atributul este făcut public? Adică, este redundantă, nu-i așa? Da. Și vom răspunde mai târziu în articol când vom vorbi despre privat
cuvinte cheie.
Următor →, protejat
atributele și funcțiile sunt disponibile în contextul clasei în care sunt definite, dar nu pentru obiecte terță parte. Acestea fiind spuse, ei poate fi chemat din propria lor clasă, dar nu din clasele externe.
first_name = $ name; funcția protejată set_last_name ($ name) $ this-> last_name = $ name; funcția protejată get_first_name () return $ this-> first_name; funcția protejată get_last_name () return $ this-> last_name; Alte detalii despre clasă ...
Dar există o excepție: subclase.
De exemplu, să presupunem că definiți o clasă numită colaborator
care este o subclasă de Autor
, acest lucru înseamnă că colaborator
are acces la toate din protejat
(și public
) atribute și funcții ale clasei părinte.
Având în vedere codul de mai sus, aceasta înseamnă că puteți apela metode cum ar fi
get_first_name ()
din interiorulAutor
clasa sau în cadrulcolaborator
dar nu nu din orice clasă externă.Desigur, subclasele au mai mult de-a face cu moștenirea, despre care vom vorbi mai târziu în serie; cu toate acestea, aduc acest lucru pentru a oferi o clarificare importantă între
public
atribute și funcții șiprivat
atribute și funcții.Privat
pe scurt,
privat
atributele și funcțiile blochează atributele și funcțiile în clasa în care sunt definite. Aceasta înseamnă că niciun obiect extern sau subclase nu poate accesa orice a informațiilor.În mod clar, aceasta este cea mai strictă formă de domeniu de aplicare, dar aceasta nu trebuie citită ca și cum ar fi un lucru rău (sau un lucru bun). În schimb, acesta este menit să ofere o modalitate pentru ca anumite informații să rămână ascunse (sau abstracte) în contextul clasei în care este definită.
Revenind la primul nostru exemplu, să aruncăm o privire asupra modului în care putem refactoriza clasa astfel încât să furnizeze cantitatea maximă de utilitate pentru clasele externe și subclasele.
first_name = $ name; funcția privată set_last_name ($ name) $ this-> last_name = $ name; funcția privată get_first_name () return $ this-> first_name; funcția privată get_last_name () return $ this-> last_name; Alte detalii despre clasă ...În primul rând, acest exemplu demonstrează utilizarea slabă a sistemului
privat
cuvinte cheie.În acest exemplu, nu numai că atributele sunt inaccesibile, dar și funcțiile nu sunt accesibile. Cu alte cuvinte, pentru alte obiecte din "lumea exterioară", această clasă pare să nu aibă nimic disponibil. Chiar mai rău, nici măcar subclasele nu pot accesa niciuna dintre aceste informații.
Pe scurt, codul nu are sens.
Deci, haideți să refacem acest lucru puțin, dar mai mult astfel încât atributul rămâne ascuns (și astfel inaccesibil obiectelor terță parte) și vom specifica o modalitate pentru obiectele terță parte de a prelua numele, dar numai permiteți clasei reale și subclaselor sale să le schimbe:
Nume; funcția publică get_last_name () return $ this-> last_name; Alte detalii despre clasă ...Desigur, acesta este doar un exemplu. Evident, vom lăsa câteva din detaliile implementării, astfel încât să nu o facem știți ce detalii pot solicita, să zicem, numele care urmează să fie actualizate.
Dar nu contează: Aceasta arată un exemplu complet al modului în care
privat
,protejat
, șipublic
aspectele legate de o clasă pot funcționa împreună cu altele pentru a oferi un mod sigur și strategic de acces la informații.Abstractarea și ascunderea informațiilor
În ceea ce privește domeniul de aplicare, puteți face argumentul că totul se reduce la abstractizare și ascunderea informațiilor.
Aceasta înseamnă că clasele (care sunt schițe pentru obiect, dacă vă amintiți din articolele noastre anterioare) ar trebui să-și organizeze în mod strategic informațiile astfel încât:
privat
De fapt, voi merge un pas mai departe și vă spun că nu este probabil să vedeți de fapt multe atribute marcate ca public
. În schimb, este mai probabil să vedeți atributele marcate ca protejat
- în scopul subclasării - sau privat
, astfel încât datele lor să poată fi gestionate prin funcții care sunt bine definite.
Inițial, sună relativ simplu, nu? Și conceptul în sine nu este foarte complicat, dar când vine vorba de construirea unor sisteme care se bazează pe un număr de obiecte diferite, toate lucrează împreună pentru a furniza o abstractizare solidă, interfețe curate prin care clase și subclase ale unor terțe părți pot interacționa cu ele, de a organiza informații, poate deveni mai provocator - există o mulțime de părți în mișcare care trebuie luate în considerare.
Cu aceasta a spus, acesta este unul din acele lucruri care scriu cod, interacționează cu alți dezvoltatori și codul de citire poate genera experiență.
Pentru orice merită, nu mi-e teamă să recunosc că acestea sunt încă strategii cu care mă lupt nu pentru că nu înțeleg conceptele, ci pentru că încercarea de a oferi cea mai curată implementare a clasei este posibilă, mai ales într-un sistem este capabil să se schimbe.
Dar asta este conținut pentru un alt post.
Desigur, dacă aveți întrebări sau comentarii cu privire la orice subiect care se referă la domeniul de aplicare, nu ezitați să le lăsați în comentarii.
Începând cu articolul următor, vom începe să încorporăm câteva dintre aceste informații într-o aplicație practică de construire a unui plugin WordPress.
Astfel, pentru cei care așteptați să vedeți cum funcționează această serie împreună cu WordPress, următorul articol ar trebui să înceapă să aducă toate conceptele împreună, pe măsură ce vom continua seria cu propriul plugin WordPress, folosind conceptul de programare orientată pe obiecte.