CATEGORII DOCUMENTE |
Asa dupa cum s-a mai precizat, multitudinea operatiilor pe care le poate efectua un obiect sau se efectueaza asupra acelui obiect implementate intr-un limbaj de programare poarta denumirea de metode.
O metoda are o semnatura, care descrie parametrii metodei si include toate informatiile ce permit invocarea acesteia si o implementare, care contine codul metodei (programul corespunzator metodei), elaborat intr-un limbaj de programare. Semnatura metodei este o componenta a definirii clasei de obiecte.
In general, fiecare metoda este asociata unei clase specifice de obiecte. In acest caz, metoda are ca tinuta (target) o anume clasa de obiecte. Exista si sisteme ce permit definirea de metode multi-tinta (multi-target), care se aplica la un numar arbitrar de obiecte fara a favoriza vreunul intr-un anumit mod. In acest caz, definirea acestora este data in mod separat de definirea clasei. Totodata, precizam faptul ca fiecare metoda are un numar arbitrar de parametrii de intrare si un singur parametru de iesire.
Metodele corespunzatoare operatiilor pe care le implementeaza pot fi grupate astfel:
metode constructor (operatii de tip constructor), destinate a crea o noua instanta, un nou obiect al clasei. De exemplu, in cla sa Student putem avea metoda (operatia) CREAZA-STUDENT care creeaza un nou obiect de tip student si ii initiaza starea. De remarcat faptul ca toate clasele trebuie sa aiba o metoda constructor;
metode destructor, folosite pentru stergerea / abandonarea obiectelor si posibil altor obiecte legate de acestea;
metode de regasire / accesare folosite numai pentru preluarea valorilor asociate atributelor obiectului. Exemplu: pentru clasa STUDENT, metoda CALCULEAZA-VARSTA studentului plecand de la data nasterii sale. O astfel de metoda nu afecteaza starea obiectului;
metode de actualizare, folosite pentru actualizarea starii obiectului. Exemplu, metoda posibila schimba - adresa din clasa student are menirea de a actualiza / modifica valoarea atributului adresa.
Metodele mai pot fi clasificate si in functie de specificul cerintelor de aplicatii, astfel:
metode publice, ce reprezinta particularitatea ca pot fi apelate din oricare program de aplicatie;
metode private, ce prezinta particularitatea ca pot fi apelate numai din interiorul altor metode ale aceleasi clase.
In cele ce urmeaza vom recurge la un exemplu de definire de semnatura si implementare a unei metode in O2. Totodata, facem precizarea ca o baza de date O2 este formata din doua componente si anume: schema bazei si baza de date propriu-zisa. Schema contine informatii despre structura de date a fiecarei clase, atributele si metodele ei, drepturi si privilegii de acces etc. Baza contine date actuale in concordanta cu schema.
Procedura de lucru cu O2 prevede pentru inceput crearea schemei bazei de date, de forma:
CREATE SCHEMA denumire - schema;
CREATE BASE denumire - baza;
apoi activarea schemei si bazei, de forma:
SET SCHEMA denumire - schema;
SET BASE denumire - baza;
Dupa aceste operatii se poate trece la definirea claselor si metodelor corespunzatoare Schemei setate. Ulterior pot fi facute noi adaugari de clase de obiecte.
Presupunem ca dorim sa adaugam o metoda "init" schemei bazei in care este inclusa Clasa Universitate, din figura 7.3. Definirea semnaturii metodei va apare astfel:
add method init |
(Denumire - par: string, Nume - rector - par: string, Oras - par: string, Strada - par: string, Numar - par: integer) |
in Class Universitate is public |
iar definirea implementarii metodei "init" implica urmatoarea sintaxa:
Body method init |
(Denumire - par: string, Nume - rector - par: string, Oras - par: string, Strada - par: string, Numar - par: integer) |
in Class Universitate |
CO2
Referitor la definirea semnaturilor si implementarii metodelor, in cele ce urmeaza vom cauta sa facem anumite precizari.
Metoda init face parte face parte din categoria metodelor constructor (de creare) de clasa; ea genereaza partea de stare a unui nou obiect creat in cadrul clasei Universitate.
Structura de definire a semnaturii apare astfel:
Method den-metoda in class den-clasa
unde:
- partea mai pronuntata reprezinta cuvinte rezervate;
- reprezinta parametrii actuali de apel.
In ceea ce priveste partea de implementare a metodei, ea este precizata prin cuvantul rezervat "body" si este scrisa in CO2 (o extensie a limbajului de programare C) care permite accesul direct si transparent la obiectele stocate in baza de date. La nivelul corpului metodei (body init) se precizeaza lista de parametrii, conform urmatoarei sintaxe:
Body denn-metoda in class den-clasa
unde:
partea mai pronuntata reprezinta cuvinte clasice;
reprezinta lista de parametrii formali de comunicare.
Implementarea este inclusa intr-un bloc de initializare delimitat de cuvantul cheie CO2 si terminat cu simbolul $.
Cuvantul "self" are semnificatia de variabila de adresa ce indica obiectul clasei tinta la care metoda se aplica. Cu alte cuvinte, invocarea unei metode pe un obiect dat este similara cu trimiterea unui mesaj la acel object; "self" indicand obiectul primitor, adica obiectul ce va primi mesajul.
Simbolul "→" este echivalent cu semnificatia punctului (.) folosit frecvent si in alte limbaje de programare in scopul de a face o calificare de atribut/camp, cu ocazia unei anumite referire la acel atribut. Exemplul:
self → Nume-persoana = Nume-paremetru
echivaleaza cu descrierea de forma:
self . Nume-persoana = Nume-parametru
unde atributul / campul Nume-persoana de la variabila self este initializat cu o valoare data de atributul / campul Nume-parametru.
Urmarind cele doua aspecte referitoare la metode si anume, semnatura si implementarea metodei, observam ca ambele presupun precizarea unei liste de parametri. Cu privire la cele doua liste de parametri si se pot face anumite precizari, astfel:
parametrii poarta denumirea de parametri efectivi sau actuali, respectiv parametri poarta denumirea de parametrii formali;
o parte dintre parametrii efectiv si formali pot avea semnificatia de parametrii de intrare pentru metoda, iar, o parte pot fi parametrii de iesire prin care metoda returneaza rezultatele;
cele doua liste ofera raportul pentru asigurarea comunicarii intre semnatura si implementare, in sensul ca prin listele de parametrii se transfera datele (valorile) solicitate de metoda;
corespondenta dintre parametrii si , se face prin locul ocupat in lista de parametri si nu prin numerele lor; intr-o astfel de situatie denumirile parametrilor si pot sa coincida sau sa difere, insa numarul parametrilor in cele doua liste, precum si tipul lor trebuie sa fie acelasi. Necesitatea acestei identitati rezulta din faptul ca numai parametrilor li se rezerva memorie, parametrii utilizeaza aceleasi zone de memorie ca si .
Invocarea metodei init, intr-un program scris in CO2 apare astfel:
executie CO2
unde:
execute CO2 marcheaza lansarea in executie a metodei init;
pentru declararea variabilelor locale se foloseste cuvantul cheie "CO2";
linia a doua de program defineste o variabila locala cu denumirea X si un tip Universitate;
linia a treia defineste instructiunea de crearea a unui obiect ce apartine clasei Universitate, invocand totodata metoda new, metoda valabila tuturor claselor pentru crearea unui nou obiect si inserarea acestuia intr-o clasa corespunzatoare;
instructiunea de pe linia finala a metodei init aplicata la acel obiect, atribuie valori initiale proprietatilor obiectului nou creat. Se poate observa ca in apelarea metodei se indica obiectul tinta si numele metodei, urmata de o lista de valori actuale ale parametrilor de intrare.
La sfarsitul executiei metodei, obiectul pentru care metoda insasi este invocata este returnat ca un parametru de iesire.
De remarcat faptul ca in cadrul unei metode poate fi invocata si o alta metoda, existand astfel posibilitatea de a genera invocari de lanturi de metode, cu precizarea ca nu este permis ca o metoda sa se invoce pe sine insasi in mod direct sau indirect.
Unul dintre principalele avantaje ale programarii orientate obiect il constituie posibilitatea reutilizarii in mod facil a anumitor parti sau componente software. Daca metodele vor fi definite /proiectate cu mare grija, atunci parti de programe sau programe intregi vor fi concepute o singura data, insa vor putea fi incluse in metode si apoi folosite de diverse aplicatii. Pentru a proiecta astfel de metode este de dorit sa se tina seama de o serie considerente de ordin practic [Runbabgh 71], cum ar fi:
Metodele trebuie sa fie scurte; ele nu trebuie sa depaseasca circa doua pagini de text. Metodele mai lungi este de preferat sa fie descompuse;
Metodele trebuie sa fie coerente si consecvente in folosirea notatiilor sau unui stil comun de definire a denumirilor de variabile;
Metodele trebuie sa constituie cerinte anticipate pentru viitoarele aplicatii si chiar mai mult decat atat, ele nu trebuie sa se limiteze la satisfacerea unor cerinte minimale pentru aplicatii curente ci ele vor fi mai largi, de o intindere mai mare si vor include cazuri generale.
Metodele vor fi independente. Ele vor folosi informatii definite local sau acceptate ca parametrii, evitand folosirea variabilelor globale;
Mostenirea va fi folosita cat mai mult posibil. Este de preferat ca metodele sa fie definite in superclase si refolosite in subclase de obiecte.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 963
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved