Modelarea în UML. F.Novikov, D.Ivanov.
3.2. Entitățile din diagrama de clasă
Diagrama de clasă este instrumentul principal pentru modelarea structurii în UML, iar clasa este, respectiv, unitatea structurală de bază. Acest lucru nu este deloc surprinzător și destul de natural, deoarece UML este în mare parte un limbaj orientat pe obiecte. Diagramele de clasă sunt cele mai informative saturate în comparație cu alte tipuri de diagrame UML canonice, instrumentele generează coduri în principal din descrierea claselor, structura de clasă se potrivește cel mai bine structurii finale a codului aplicației.
În această secțiune, analizăm entitățile utilizate în diagramele de clasă, iar în secțiunea următoare relațiile dintre aceste entități.
3.2.1. clase
Clasa este unul dintre cele mai "bogate" elemente de modelare UML. O descriere a clasei poate conține mai multe elemente diferite, astfel încât acestea să nu fie confundate, limba prevede gruparea elementelor din descrierea clasei în secțiuni. Există trei secțiuni standard:
- o secțiune a numelui - împreună cu numele necesar pot conține, de asemenea, un stereotip, multiplicitate și o listă a valorilor numite;
- Secțiunea atribute - conține o listă de descrieri ale atributelor clasei;
- secțiune de operațiuni - conține o listă de descrieri ale operațiunilor din clasă.
Ca toate entitățile UML de bază, clasa trebuie să aibă un nume. și, prin urmare, secțiunea de nume nu poate fi omisă. Alte secțiuni pot fi goale sau absente cu totul. Împreună cu secțiunile standard, descrierea clasei poate conține un număr arbitrar de secțiuni suplimentare. Semantic, secțiunile suplimentare sunt echivalente cu notele. Dacă instrumentul știe cum să facă ceva cu informații în secțiuni suplimentare, lăsați-o să o facă. În orice caz, instrumentul este necesar pentru a stoca aceste informații în model.
Notația de clasă este foarte simplă - este întotdeauna un dreptunghi. Dacă există mai multe secțiuni, atunci interiorul dreptunghiului este împărțit de linii orizontale în părți corespunzătoare secțiunilor.
Fig. Notație clasică tipică
Conținutul secțiunii este textul ∇. Textul din secțiunile standard trebuie să aibă o sintaxă specifică.
∇ Unele instrumente vă permit să plasați în secțiunea de clasă nu numai texte, ci și forme și pictograme.
Secțiunea nume de clasă are în general următoarea sintaxă.
Unele instrumente permit utilizarea mai multor opțiuni alternative de sintaxă pentru texte în secțiuni. De exemplu, sintaxa pentru descrierea atributelor în stilul recomandat de UML sau în stilul limbajului de programare țintă al acestui instrument. Astfel de variații sunt permise de standard, cu condiția ca variantele de sintaxă să fie echivalente din punct de vedere semantic și pot fi transformate una în alta fără a pierde informații. Această carte utilizează sintaxa standard.
Numele clasei poate fi precedat de un stereotip. Următorul tabel prezintă stereotipurile de clasă standard.
Tabel. Standard stereotipuri ale clasei
Numele de clasă cerut poate fi italicizat și în acest caz clasa este abstractă. și anume fără a avea copii directe.
Dacă numele este subliniat, atunci nu este numele clasei, ci numele obiectului.
Clasa, precum și elementele individuale ale descrierii acesteia, pot avea constrângeri arbitrare, definite de utilizator, și valori numite (vezi secțiunea 1.8.4).
Multiplicitatea unei clase este definită de regulile generale (a se vedea punctul 3.1.3).
Să luăm în considerare un exemplu de secțiune de nume de clasă pentru sistemul nostru de informații departament HR.
Dacă presupunem că sistemul de informații proiectat al personalului va fi utilizat în aceeași întreprindere, o soluție bună va fi definirea clasei de servicii a companiei cu stereotipul "utilitar" pentru stocarea atributelor globale și a operațiunilor sistemului de informare a personalului. O secțiune a numelui acestei clase este prezentată mai jos.
Fig. Secțiunea Nume serviciu
3.2.2. atribute
Un atribut este un loc numit (sau, după cum se spune, un slot) în care o valoare poate fi stocată.
Atributele clasei sunt listate în secțiunea atribut. În general, descrierea atributului are următoarea sintaxă.
Vizibilitatea, ca de obicei, este marcată cu semne +. -. #.
Încă o dată, subliniem faptul că dacă vizibilitatea nu este specificată, atunci nu este implicită vizibilitatea implicită.
Dacă numele atributului este subliniat, aceasta înseamnă că domeniul de aplicare al acestui atribut este o clasă, nu o instanță a clasei, ca de obicei. Cu alte cuvinte, toate obiectele - instanțe din această clasă au aceeași valoare a acestui atribut, comun tuturor instanțelor. În situația obișnuită (fără subliniere), fiecare instanță a clasei stochează valoarea atributului său individual.
Sublinierea descrierii atributului corespunde mânerului static. care este folosit în multe limbi de programare orientate pe obiect.
Multiplicitatea, dacă este prezentă, definește acest atribut ca o matrice (cu o lungime determinată sau nedeterminată).
Tipul de atribut este fie un tip primitiv (construit), fie un tip definit de utilizator (a se vedea punctul 3.2.4).
Valoarea inițială are un înțeles evident: atunci când este creată o instanță din această clasă, atributul obține valoarea specificată. Rețineți că dacă valoarea inițială nu este specificată, atunci nu este implicită nicio valoare implicită. Dacă doriți ca atributul să aibă o valoare, constructorul de clasă trebuie să aibă grijă de el.
Ca orice alt element al modelului, atributul poate fi dotat cu proprietăți suplimentare sub formă de constrângeri și valori numite.
Atributele au o proprietate mai standard: variabilitatea. Tabelul următor prezintă valorile posibile pentru această proprietate.
Tabel. Valorile proprietatii de schimbare a atributului
Tipul parametrului de operare, precum și tipul valorii returnate de operație, poate fi orice tip încorporat sau o clasă, o interfață sau un tip de date definite în model.
Toate împreună (denumirea operațiunii, parametrii și tipul de rezultat) sunt denumite, de obicei, semnătura operației.
Standardul își propune să ia în considerare numele de funcționare semnătură, plus numărul, ordinea și tipurile de parametri (de exemplu, direcția parametrilor de transmisie și numele lor, precum și tipul de rezultatul nu este inclus în semnătura). Dar este un punct de variații Semantica - concept diferit al semnăturii poate fi pusă în aplicare într-un anumit instrument. În cazul în care semnăturile sunt diferite, și diferite operații (chiar dacă numele sunt aceleași). Într-o clasă nu poate fi două operațiuni cu o singură semnătură - modelul este considerat controversat. Dacă operația este definită subclasă cu aceeași semnătură, atunci există două posibilități. Dacă descrierea funcționării într-o subclasă în exact aceeași sau dacă este o extensie consistentă (de exemplu, în clasa nu a fost specificat tipul de rezultat și în subclasa specificată), se repetă descrierea aceleiași operațiuni. În cazul în care descrierea operațiunii cu o semnătură de potrivire în subclasa este contrară descrierii clasei (de exemplu, arată în mod clar diferitele parametrii direcției de transport), atunci modelul este considerat a fi controversată.
Operația are câteva proprietăți importante, care sunt specificate în lista de proprietăți ca valori numite.
În primul rând. această concurrency este o proprietate care definește semantica invocării simultane (paralele) a unei operații date. În aplicațiile în care există un singur flux de control, nu pot fi efectuate apeluri paralele. Într-adevăr, dacă operația este apelată, executarea programului este suspendată la punctul de apel până la finalizarea executării operației numite. În aplicațiile cu un singur filet, la fiecare punct al controlului de timp se află la un anumit punct al programului și se efectuează exact o operație specifică. Apelul recursiv (adică o operație de apel de la sine) nu este considerată a fi paralelă, deoarece operația apel recursiv este de obicei suspendat, și astfel, se efectuează întotdeauna o singură instanță a unei operațiuni recursive. Nu este cazul în cazul aplicațiilor în care există mai multe fluxuri de control. În acest caz, operația poate fi apelată dintr-un fir și în timp ce nu este finalizată, este apelată dintr-un alt fir. Valoarea proprietății concurenței determină ce se va întâmpla în acest caz. Variantele posibile și descrierile lor sunt prezentate mai jos.
Tabel. Valorile proprietatii de concurrency
Operația nu permite efectuarea unui apel paralel (nu este reintrodus). Dacă apare un apel paralel, atunci comportamentul suplimentar al sistemului este nedefinit.
Apeluri paralele sunt permise, dar numai una dintre ele se realizează - restul sunt blocate, iar punerea lor în aplicare este amânată până când până la finalizarea executării apelului. ∇
Operația permite un număr arbitrar de apeluri paralele și garantează corectitudinea executării acesteia. Astfel de operațiuni se numesc reentrable.
∇ Astfel de semantici pot genera o stare de blocare reciprocă (sau blocaj) în care două sau mai multe procese se blochează reciproc și nici unul nu poate continua execuția.
În al doilea rând. operațiunea are o proprietate. a căror valoare indică dacă operația are un efect secundar. Dacă valoarea acestei proprietăți este adevărată. operația nu schimbă starea sistemului - operația calculează numai valorile returnate la punctul de apel ∇. Altfel, adică când este fals. operația modifică starea sistemului: atribuie noi valori atributelor, creează sau distruge obiecte și așa mai departe. Implicit, operația are o proprietate. Prin urmare, dacă doriți să specificați că această operație este o funcție fără efecte secundare, atunci este suficient să scrieți.
∇ Astfel de operații sunt denumite în mod tradițional funcții sau interogări.
În al treilea rând. Dacă implementarea unei operațiuni nu ar trebui să fie suprascrisă în subclase, atunci este utilizată o restricție. Implicit.
Să luăm în considerare exemple de descriere a posibilelor operațiuni ale clasei Persoană a sistemului informatic al departamentului HR.
Tabel. Exemple de descriere a operațiunilor