Definiții generale
Mai întâi, să definim: ce este un obiect în înțelegerea programării orientate obiect. În cel mai simplu (de zi cu zi) înțelegerea obiectului - acesta este un lucru, și la fel de bine ca și în lumea exterioară, obiectul are proprietăți ( „piatră dură“) și operațiunile care sunt efectuate pe aceste proprietăți (pot fi rupte de piatră). Aproape la fel se întâmplă și cu obiectele din lumea programelor. De exemplu, puteți trata un fișier ca obiect, dimensiune sau nume ca proprietate și citiți sau scrieți ca operațiuni. Deci, există un obiect și există proprietăți - ce este o operațiune? Orice procedură sau funcție de utilizator care modifică sau pur și simplu funcționează cu proprietățile obiectului. De exemplu, procedura de inițializare a câmpurilor de înregistrare sau procedura de afișare a valorilor câmpului. Este firesc să se combine datele și metodele de prelucrare a acestora într-o singură, astfel încât să fie clar ce proceduri sunt proiectate să se ocupe de date specifice. Astfel, am ajuns foarte aproape de conceptele centrale ale programării orientate obiect - conceptele de încapsulare și de clasă.
Încapsulare și clase
Programarea orientată pe obiecte (OOP) este cea mai populară metodologie de programare în prezent, care este dezvoltarea programării structurate. Ideea centrală a POR este încapsularea, adică structurarea programului în module speciale care combină datele și procedurile de procesare, iar datele interne ale modulului pot fi prelucrate numai prin procedurile prevăzute pentru aceasta. În VBA, numele unui modul de clasă sau pur și simplu o clasă este acceptat. Fiecare clasă are un interior numit o implementare și o parte externă numită interfață.
O clasă în acest fel este un nou tip de date care vă permite să creați noi variabile de acest tip - obiecte (uneori ele sunt, de asemenea, numite instanțe ale unei clase). Un obiect constă din elemente care pot fi fie date corecte, adică valori ale unui anumit tip de date, fie funcții care implementează operații pe elementele de date. Elemente - datele se numesc proprietăți ale clasei, elementele se numesc metode de clasă. Această descriere servește ca un șablon pentru crearea în instanțele specifice ale programului (obiecte) din această clasă a numelor lor specifice.
încorporarea
Mecanismul de încorporare este foarte convenabil și natural. Un strămoș al unei familii de clase poate specifica câteva proprietăți și metode fundamentale, iar numeroși descendenți, având rădăcini părintești (proprietăți și metode), își aduc propriile proprietăți și metode foarte specializate.
moștenire
Împreună cu încorporarea, există o altă modalitate de a utiliza clasele existente atunci când creați clase noi, se numește moștenire. La moștenire, se specifică faptul că clasa B, recent creată pe baza clasei A, conține toate (sau unele) metode și proprietăți ale clasei A. De asemenea, propriile metode și proprietăți. Diferența dintre încorporare și moștenire este doar sintactică. Când încorporați, utilizate în VBA pentru a face referire la o metodă sau la o proprietate a unei clase încorporate, folosim numele câmpului din această clasă. Atunci când moștenește (caracteristică C și C ++), numele proprietății sau al metodei din clasa părinte poate fi utilizat direct.
Crearea unei clase
În mod sintactic, clasele din VBA sunt proiectate sub formă de module de clasă specială (numele clasei este numele modulului), unde descrierea proprietăților clasei (variabilelor) este plasată în secțiunea Declarații, iar apoi sunt descrise metodele (procedurile) clasei. Din punct de vedere sintactic, descrierile proprietăților și metodelor sunt practic aceleași cu descrierile variabilelor și procedurilor obișnuite. Cazurile de diferență sau utilizare specială vor fi discutate separat. Pentru a crea un modul de clasă în Access, trebuie să efectuați următoarele acțiuni în fereastra bazei de date:
Modul de inserare - clasă - "Numele clasei"
Ar trebui să alegeți un nume pentru clasă care să fie ușor de recunoscut și să reflecte informații despre obiectele pe care le descrie această clasă de obiecte.
Proceduri de clasă
În Access, toate procedurile de clasă sunt împărțite în trei grupe:
- proceduri - metode
- proceduri - proprietăți
- proceduri - replicare la evenimente
Proceduri - metode
Proceduri - Proprietăți
După cum știți, definiția unei clase în VBA constă în două secțiuni: implementare și interfață. Una dintre cele mai dificile sarcini pentru programatori - incepatori in OOP este de a determina care membrii clasei de a face închise (pentru a include în secțiunea de punere în aplicare), și care, dimpotrivă, deschise (pentru a include în secțiunea de interfață). Ca regulă generală, puteți presupune că mai mici programul cunoscut cu privire la punerea în aplicare a clasei, cu atât mai bine, adică, este de dorit să se ascundă de privare de cuvinte cheie cât mai multe posibil în secțiunea de implementare a proprietăților de clasă, și accesați proprietățile prin publice speciale - Metode .. de organizare clasă.
Ascunderea informațiilor (încapsulare) ascunde detaliile implementării funcțiilor, a unei clase sau chiar a unui program. În condiții de ascundere a informațiilor, programatorul funcționează cu funcții și clase ca și cu casetele negre. Cu alte cuvinte, prin trecerea unei funcții la o anumită valoare sub forma unui parametru de intrare, programatorul cunoaște numai rezultatul care va fi obținut la ieșirea acestei funcții. Ascunderea informațiilor în partea de implementare a clasei și accesarea acesteia prin interfața funcțională sporește fiabilitatea programului. Există două moduri de a crea proprietăți:
- Unul mai simplu este crearea unui modul de clasă variabilă declarat în cuvântul cheie public în secțiunea descriere. Astfel, utilizatorii obiectului vor putea seta și obține valoarea stocată în această variabilă. (Cu alte cuvinte, proprietatea este disponibilă atât pentru citire cât și pentru scriere). Numele variabilei este determinată de numele proprietății care este utilizată în programul dvs. Deci, ca și în cazul denumirilor de clasă, ar trebui să folosiți numele care reflectă conținutul variabilelor. Deși folosirea variabilelor comune pentru a determina proprietățile este cea mai simplă, are mai multe dezavantaje:
Clasa creată nu are nici o modalitate de a determina când procesul extern a modificat valoarea proprietății. Acest lucru poate juca un rol negativ când trebuie să limitați valori la un anumit interval sau să efectuați o acțiune atunci când modificați o valoare.
Nu puteți impune restricții asupra valorilor proprietății sau nu puteți efectua validarea altor date. De exemplu, este posibil să doriți să limitați valoarea unei proprietăți reprezentând vârsta persoanei la numere reale pozitive.
Nu se pot crea proprietăți numai pentru citire. Programele au adesea situații în care trebuie să returnați o valoare a proprietății fără al aloca, mai ales când aceste valori se bazează pe alte date.
Proprietatea Let este o procedură de scriere care vă permite să atribuiți unei proprietăți o nouă valoare
[] [Static] Proprietate Lăsați namepropertyproperties ([lista parametrilor] valoare)[BlokOperatorov1]
[Ieșire din proprietate]
[BlokOperatorov2]
Proprietatea finală
Numele Proprietății Proprietății este numele procedurii care modifică proprietatea. Apropo, este de dorit ca numele să fie repetat în toate cele trei proceduri de proprietate, dacă acestea se ocupă de aceeași proprietate.
Lista parametrilor este o listă cu parametrii suplimentari implicați în procedură. Sintaxa listei de parametri este exact aceeași cu cea a listei în procedura obișnuită. Rețineți că toate cele trei proceduri de proprietate care au același nume trebuie să aibă aceeași listă de parametri.
valoarea este cel mai important parametru obligatoriu a cărui valoare este transmisă proprietății.
Urmează operatorii de bloc. în care doriți să atribuiți valoarea proprietății valorii valorii efective a parametrului.
[] [Static] Proprietăți Obțineți proprietăți NameProcedure([listă de parametri]) Ca tip de date
[blocOperatorii 1]
[nameProcedure properties = expresie]
[Ieșire din proprietate]
[blocOperatori 2]
Proprietatea finală
După cum puteți vedea, Property Get este o funcție și toate regulile sintactice ale funcțiilor funcționează pentru aceasta. Reveniți la un singur lucru: tipul valorii returnate de funcție trebuie să se potrivească cu tipul de valoare al expresiei.
Crearea unei instanțe a unei clase
După ce ați definit o clasă, oferindu-i câteva proprietăți și metode, o puteți folosi în programul VBA. Dar pentru aceasta, mai întâi trebuie să creați o nouă instanță a clasei. Nu se poate pur și simplu se referă la variabile sau apelarea unei proceduri de modul clasă, astfel cum se face într-un modul standard: VBA va da o eroare de compilare „sub-procedura sau funcția nu este găsit“, deoarece posibilitatea de a găsi o procedură în spațiul de nume la nivel mondial nu există. Procedura va fi „ascuns“, atâta timp cât nu creați o nouă instanță a clasei, iar apoi îl puteți apela doar ca o metodă de a crea o instanță. Pentru a crea o nouă instanță a clasei, trebuie să declarați o variabilă de obiect care este utilizată pentru a stoca referința la instanța creată a clasei. Pentru variabilele folosite pentru a referenți clase personalizate, se aplică aceleași reguli ca și pentru variabilele care fac referință la obiectele sau aplicațiile VBA. Ele pot fi descrise cu ajutorul cuvintelor rezervate Dim. Privat. Public și global. Următorul pas este să creați o nouă instanță a obiectului și să salvați referința la acesta în variabila. Pentru aceasta, utilizați operatorul Set în combinație cu cuvântul cheie nou.
Creați o instanță a clasei. Numele clasei Utilizator. numele instanței clasei tmpuser.
Tmpuser dimensiune ca utilizator
Setați tmpuser = Utilizator nou
Rețineți că tipul de date din acest exemplu este numele clasei definite anterior. Deși această sintaxă poate părea redundantă, trebuie să utilizați cuvântul cheie nou în operatorul Set pentru a crea o nouă instanță a obiectului. Dacă nu faceți acest lucru, atunci când încercați să aplicați orice proprietate sau metodă acestei clase, VBA va raporta eroarea de execuție 91 - "Nici o variabilă de obiect sau o variabilă cu bloc cu". Pentru a crea o nouă instanță a obiectului, nu este suficientă o descriere simplă a variabilei obiect folosind instrucțiunea Dim.
Implicarea instanței unei clase
Tmpuser dimensiune ca utilizator nou