Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Polimorfism

Resurse umane


Polimorfism

Polimorfismul este modalitatea de a asocia aceluiasi mesaj semnificatii diferite, în functie de tipurile parametrilor mesajului. Polimorfismul este de urmatoarele tipuri:



polimorfism ad-hoc

polimorfism pur

polimorfism parametric

Polimorfismul ad-hoc se refera la posibilitatea ca o aceeasi operatie efectuata asupra unui obiect sa aiba un comportament diferit în functie de argumentele operatiei. Polimorfismul ad-hoc se realizeaza prin supraîncarcare si legare statica. Supraîncarcarea înseamna ca aceeasi operatie poate avea definitii diferite, pentru tipuri diferite ale argumentelor. Legarea statica înseamna ca legatura între apelul operatiei si operatia care va fi efectiv executata este realizata la momentul compilarii programului, în functie de tipurile argumentelor si ar 949g66j itatea operatiei.

Spre exemplu, sa consideram o clasa care reprezinta conceptul de vehicul. Orice vehicul se caracterizeaza prin viteza de deplasare, care este un numar real pozitiv. Întrucât majoritatea vehiculelor sunt automobile, este natural sa presupunem ca de obicei viteza unui vehicul este de 80 km/h. Un avion este un vehicul, dar a carui viteza este de 800 km/h. În acest fel metoda de determinare a vitezei unui avion suprascrie (redefineste) metoda implicita de determinare a vitezei unui vehicul.

Polimorfismul pur se refera la posibilitatea ca o aceeasi operatie executata asupra unor obiecte apartinând unor clase diferite, dar corelate printr-o aceeasi superclasa sa depinda de tipul obiectelor respective. Polimorfismul pur se realizeaza prin folosirea metodelor virtuale. O metoda virtuala desemneaza o operatie care va fi apelata corect în orice situatie, în functie de tipul obiectului asupra caruia este executata. Metodele virtuale sunt implementate prin legare dinamica, acest lucru însemnând ca legatura între apel si operatia efectiv executata se realizeaza la momentul executiei.

Revenind la exemplul anterior, sa prespunem ca dorim sa determinam viteza unui vehicul al carui tip nu-l cunoastem. În cazul polimorfismului ad-hoc se va obtine viteza 80 km/h indiferent de tipul efectiv al vehiculului respectiv. Daca însa metoda de determinare a vitezei este virtuala si tipul vehiculului este avion, se va obtine valoarea 800 km/h.

Polimorfismul parametric semnifica faptul ca tipurile argumentelor unei operatii sunt deasemenea parametrii ai operatiei respective. Pentru fiecare instantiere a acestor parametrii se va obtine o noua versiune a operatiei respective. Polimorfismul parametric se foloseste mai ales pentru implementarea unor clase container parametrizate dupa tipul elementelor.

Clase abstracte

Deseori clasa de baza a unei ierarhii de clase trebuie sa fie foarte generala si în consecinta ea va contine foarte putini membri, detaliile fiind lasate pe seama claselor derivate. La limita putem face clasa de baza atât de generala încât ea sa nu poata fi folosita pentru crearea directa de obiecte. Ea neavând instante, nu are sens sa-i implementam metodele, acestea actionând doar ca sabloane pentru metodele definite în clasele derivate. O astfel de clasa se numeste clasa abstracta si o astfel de metoda se numeste metoda virtuala pura. O clasa abstracta defineste doar o interfata comuna minimala pentru toate clasele derivate din ea.

Spre exemplu, putem defini o clasa abstracta pentru reprezentarea conceptului de vehicul si o metoda virtuala pura pentru determinarea vitezei unui vehicul. Prezenta sa are semnificatia ca orice vehicul, indiferent de tip, are viteza. Întrucât nu putem determina cu exactitate aceasta viteza daca nu cunoastem tipul vehiculului, aceasta metoda va fi redefinita pentru fiecare tip de vehicul în parte în cadrul clasei derivate corespunzatoare. Spre exemplu putem avea o clasa derivata pentru conceptul de automobil si una pentru conceptul de avion.

3.2. Modelul obiectelor

Orice MDOO foloseste un model al obiectelor - MO, acest lucru fiind valabil si pentru metodele OMT si UML.

Se numeste model al obiectelor - MO o notatie grafica si textuala a conceptelor cheie vehiculate în cadrul unei MDOO. MO va contine urmatoarele elemente:

lista a claselor si obiectelor din domeniul problemei

numele atributelor obiectelor

numele operatiilor claselor

relatiile dintre clase si obiecte

Reprezentarea claselor si obiectelor

Un obiect se simbolizeaza printr-un dreptunghi cu colturile rotunjite. Optional dreptunghiul poate contine si valorile atributelor obiectului, cât si clasa careia îi apartine obiectul. Câteva exemple sunt ilustrate în figura 3.1.

Fig. 3.1. Exemple de obiecte

O clasa se simbolizeaza printr-un dreptunghi cu colturile drepte. Optional, dreptunghiul poate contine si numele/tipurile (semnaturile) atributelor si operatiilor clasei. Câteva exemple sunt ilustrate în figura 3.2.

Fig. 3.2. Exemple de clase

Legaturi si asocieri

O legatura desemneaza o conexiune fizica sau conceptuala între doua sau mai multe obiecte. Spre exemplu, legatura ''România are capitala Bucuresti'' se simbolizeaza în UML dupa cum se arata în figura 3.3.

Fig. 3.3 Exemplu de legatura

Din punct de vedere formal, o legatura este tuplu format din obiectele implicate în cadrul legaturii respective. Spre exemplu, legatura din figura 3.3. corespunde tuplului are-capitala (Romania, Bucuresti).

O asociere descrie un grup de legaturi cu o structura si o semantica comuna. Din acest punct de vedere, putem privi o legatura drept o instanta a unei asocieri. Spre exemplu, între clasele Tara si Oras exista asocierea are-capitala, fapt ilustrat grafic în figura 3.4.

Fig. 3.4. Exemple de asocieri

Din punct de vedere formal, o asociere reprezinta un predicat ale carui argumente sunt clasele implicate în asocierea respectiva. Orice asociere se caracterizeaza prin multiplicitate. Multiplicitatea ne indica numarul instantelor unei singure clase care vor fi în relatie de legatura cu o singura instanta a altei clase participante la asociere. Exista urmatoarele variante de multiplicitati:

unu-unu

unu-multi

multi-multi

Spre exemplu, o tara are o singura capitala, fapt ce ne arata ca asocierea are-capitala este unu-unu. În schimb, un profesor poate preda mai multe discipline, fapt ce ne arata ca asocierea preda este multi-multi. Acest lucru este ilustrat grafic în figura 3.5.

Sensul unei asocieri ne indica clasele asociante si clasele asociate. Spre exemplu, unei tari are sens sa-i asociem capitala, care este un oras. Însa unui oras arbitrar nu are sens sa-i asociem tara a carei capitala este. Deci relatia de asociere are-capitala este unidirectionala, fapt indicat de o sageata, ca în figura 3.6. În schimb, orice disciplina este predata de un profesor, deci asocierea  preda este bidirectionala.

Fig. 3.5. Exemplu de asociere unu-multi

Fig. 3.6. Exemplu de asociere cu sens

Multiplicitatea unei asocieri depinde de punctul de vedere din care este abordata problema. Spre exemplu, daca clasa Profesor descrie profesorul titular (cel care preda cursul) al unei discipline, atunci asocierea preda este unu-multi. Daca însa clasa Profesor ne indica orice profesor, asocierea este multi-multi, deoarece profesorul titular poate fi diferit de profesorul care preda seminarul sau laboratorul la disciplina respectiva.

O alta caracteristica a unei asociatii este aritatea. Ea reprezinta numarul de clase implicate în asociatie. Pâna acum am vazut doar exemple de asociatii binare. Un exemplu de asociere ternara este:

un student are un proiect la o anumita disciplina

O asociere ternara se simbolizeaza grafic ca în figura 3.7.

Fig. 3.7. Exemplu de asociere ternara

Orice asociere n-ara cu n > 2 se poate reprezenta cu ajutorul a n asociatii binare. Pentru aceasta se defineste o clasa pentru reprezentarea asocierii si relatii binare de asociere între clasele asocierii si clasa care modeleaza asocierea. Spre exemplu, asocierea ternara din figura 3.7. se poate transforma în multimea de asocieri binare din figura 3.8.

Fig. 3.8. Transformarea unei asocieri ternare într-o multime de asocieri binare

O asociere poate fi optionala. Spre exemplu, faptul ca un oras poate fi o capitala a unei tari poate fi modelat cu ajutorul unei asociatii optionale, ca în figura 3.9.

Fig. 3.9. Exemplu de asociere optionala

Roluri si calificatori

Un rol reprezinta o extremitate a unei asocieri. O asociere n-ara va avea n roluri. Un rol modeleaza rolul jucat de clasa corespunzatoare în cadrul asocierii respective. Spre exemplu, clasa Oras joaca rolul de capitala în asocierea are-capitala. Similar, clasa Persoana din cadrul asocierii angajeaza dintre o persoana si o companie joaca rolul de angajat. În general, rolurile sunt specializari ale clasei ce apare în asocierea respectiva.

În cadrul metodei de modelare UML, rolurile se desemneaza prin etichete textuale plasate la capetele asocierii, ca în figura 3.10.

Fig. 3.10. Exemplu de asociere cu roluri

Specificarea rolurilor în cadrul unei asocieri este optionala. Prezenta lor nu poate însa duce decât la cresterea lizibilitatii modelului. Un element important al unei asocieri îl constituie calificatorul. El este un atribut special care poate reduce multiplicitatea unei asocieri. Un calificator este similar unei chei unice asociate unui rol. Spre exemplu, un director de fisiere poate contine mai multe fisiere. Însa, în cadrul unui director, orice fisier are un nume unic. Acest lucru este ilustrat grafic în figura 3.11.

Fig. 3.11. Exemplu de asociere cu calificator

Modelarea asocierilor prin clase

Uneori este util sa modelam asocierile prin clase si legaturile prin instante ale acestor clase. Acest lucru este necesar atunci când asocierilor li se ataseaza atribute. Spre exemplu, o persoana care lucreaza pentru o anumita companie are un anumit salariu si o anumita functie. Este mai natural sa consideram aceste proprietati drept atribute ale asocierii si nu ale persoanei implicate. Astfel, o persoana poate lucra pentru mai multe companii si pentru fiecare astfel de asociere exista o functie si un salariu. Aceasta situatie este ilustrata grafic în figura 3.12.

Fig. 3.12. Exemplu de asociere modelata ca o clasa

Agregari

Cu ajutorul agregarii se descrie un obiect agregat format din obiecte componente. În acest fel agregarea descrie o relatie de compozitie de tip parte-întreg. Agregarea este o relatie între obiecte si ea poate fi fixa, variabila

sau recursiva. Cu toate ca agregarea a fost definita ca o relatie între obiecte, ea se simbolizeaza în cadrul UML prin conectarea claselor implicate, de partea clasei corespunzatoare obiectului agregat fiind indicat un mic romb. Câteva exemple de agregari sunt indicate în figura 3.13.

Fig. 3.13. Exemple de agregari (fixa, variabila sirecursiva)

Mostenire

Pentru a specifica faptul ca o clasa este o specializare a altei clase UML foloseste un simbol de forma unui triunghi. Triunghiul este gol în cazul în care specializarile claselor nu se suprapun, atât din punctul de vedere al starilor cât si al comportamentului si plin în caz contrar. Figura 3.14 prezinta o ierarhie cu mostenire multipla.

Fig. 3.14. Exemplu de mostenire

Exemple

În acest pargraf se prezinta doua exemple de modelare obiectuala care combina agregarea si asocierea si respectiv agregarea recursiva cu mostenirea. Aceste exemple sunt ilustrate în figurile 3.15 si respectiv 3.16.

Fig. 3.15. Combinarea asocierii cu agregarea

Fig. 3.16. Combinarea agregarii recursive cu mostenirea


Document Info


Accesari: 6502
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )