Professional Documents
Culture Documents
INGINERIA SOFTULUI
Dorin Bocu
Deşi relativ nouă, lumea informaticii impune respect prin problemele formulate,
conceptele şi teoriile dezvoltate pentru rezolvarea acestor probleme.
Fundamentarea teoretică a universului informaţional aflat în zona de impact cu
calculatorul este un exemplu de demers în spirală a cărui dinamică şi profunzime este greu de
egalat în alte domenii.
Permanenta schimbare a “infrastructurilor” informaţionale orientate pe calculator
menţine la cote de alertă maximă efortul de redefinire a paradigmelor teoretico-
aplicative din lumea softului.
Aproape toate tipurile de activitate umană pot fi organizate şi desfăşurate cu totul altfel în
prezenţa calculatorului. Motivul acceptării calculatorului în preajma omului sau în locul
acestuia? Operativitate, precizie, obiectivitate.
Despre consecinţele în plan estetic şi moral ale “rătăcirii” omului în sofisticata junglă a
universului informaţional planetar (în curs de configurare) este, probabil, prematur să
discutăm şi nici nu ne propunem aşa ceva în această lucrare.
Desprinderea omului de condiţiile lui naturale de viaţă a început de mult, în preistorie,
odată cu descoperirea focului. În zilele noastre această desprindere continuă cu o viteză (sau
grabă) care, uneori, ne pune pe gânduri.
Din această uriaşă epopee a desprinderii omului de natură ne propunem să analizăm unele
aspecte care se referă, în fond, la nevoia acestuia de a crea o realitate virtuală care să-l
ajute, să-l deconecteze şi, dacă se poate, să-l substitue.
Acest joc în care s-au angajat energii uriaşe are toate şansele să dureze deoarece multe
dintre abilităţile omului sunt greu de modelat şi, spre “deliciul” cercetătorilor, unele dintre ele
aproape insurmontabile.
Această lucrare încearcă un lucru destul de dificil (ţinând cont de marea diversitate a
abordărilor în literatura de specialitate) şi anume identificarea bazelor ingineriei sistemelor
soft.
Adresându-se indeosebi studenţilor de anul III de la specializarea informatică, dar şi
tuturor celor interesaţi de ştiinţa şi, în egală măsură, arta de a realiza sisteme soft, prezenta
lucrare poate fi începutul unui drum lung, uneori complicat şi, de ce nu, interesant.
Braşov
27 noiembrie 2007
1 PROBLEME A CĂROR REZOLVARE DEPINDE
ESENŢIAL DE INGINERIA SISTEMELOR SOFT
1.1 Ce este ingineria sistemelor soft?
Mai întâi, să observăm frecvenţa destul de mare cu care întâlnim sau vom întâlni sintagma ingineria
softului. Pentru comoditate o voi nota, prescurtat şi IS.
Din dorinţa de a închega repede un dialog cu cititorul, anticipez că:
Ingineria softului este o ramură a ştiinţei calculatoarelor, în permanentă evoluţie, care fundamentează
teoretic o parte din activităţile specifice realizării sistemelor soft.
Spunem “o parte” deoarece realizarea unui sistem soft are, de regulă, în spate, cunoştinţe din multe alte
ramuri ale ştiinţei calculatoarelor precum şi din alte domenii (algoritmică, programarea calculatoarelor, limbaje
formale, cercetări operaţionale, psihologie, teoria generală a sistemelor, etc.).
Tentantă şi interesantă problema definirii riguroase a sintagmei “ştiinţa calculatoarelor”.
Autorul acestei lucrări vede în spatele acestei sintagme domenii precum: algoritmica, teoria matematică a
algoritmilor (calculabilitate şi decidabilitate), bazele matematice ale sistemelor de calcul, bazele logice ale
sistemelor de calcul, teoria formală a specificării limbajelor de programare, problematica limbajelor de
programare, bazele contructive ale sistemelor de calcul (un domeniu de mare complexitate şi cu o dinamică
remarcabilă), inteligenţa artificială (un domeniu în care căutările sunt din ce în ce mai ramificate şi mai
profunde), ingineria softului, teoriile dezvoltate în jurul problematicii bazelor de date, teoriile dezvoltate în jurul
arhitecturilor de tip reţea, etc.
Este clar, sper şi pentru cei care încă mai văd în informatică “un exerciţiu de utilizare inspirată a tastaturii”,
faptul că ştiinţa calculatoarelor este variată ca preocupări, solicită intens intelectul şi, încă un amănunt
important, viteza cu care afirmaţiile din informatică devin istorie este mult mai mare decât viteza cu care
se întâmplă acelaşi lucri în fizică, sau matematică, de exemplu”.
Care sunt, totuşi, acele activităţi specifice realizării sistemelor soft care cad sub incidenţa IS?
Le putem rezuma astfel:
10 Abstractizarea soluţiei unui sistem soft, prin care desemnăm demersul conceptual în urma căruia
specialistul în IS trece de la enunţul problemei la soluţia acesteia.
20 Organizarea procesului de abstractizare (modelare) a soluţiei unui sistem soft. Îndeosebi în cazul
sistemelor soft de complexitate mare şi medie modul de organizare a efortului de modelare poate influenţa
hotărâtor calitatea unui sistem soft.
30 Reprezentarea soluţiei unui sistem soft de-a lungul întregului proces de modelare; documentarea
completă a soluţiei sistemului soft.
Este vorba, în esenţă, de rezolvarea eficientă a unor probleme de comunicare între participanţii la realizarea
unui sistem soft, precum şi de rezolvarea unor probleme de comunicare între realizatorii sistemului şi diferitele
categorii de beneficiari ai sistemului soft.
40 Optimizarea managementului procesului de realizare a unui sistem soft. Ca în orice alt tip de
industrie şi în industria softului contează enorm (pentru lansarea pe piaţă cu succes a unui sistem soft) calitatea
actului de management.
Sloganul – cheie în IS ar trebui să fie: ”Cum se poate sistematiza ,eventual automatiza, procesul de
realizare a unui sistem soft de calitate, ieftin şi obţinut în timp util?”.
IS încearcă (în diferite chipuri şi de mai mult timp) să ne înveţe cum poate deveni realitate acest slogan.
Modalitatea prin care IS rezolvă această problemă este (simplificând lucrurile) propunerea de metodologii
de dezvoltare a softului (MDS).
Istoria MDS este lungă şi destul de dificil de sintetizat fără a omite numeroase aspecte interesante. Firul
călăuzitor al acestei istorii ar putea fi, totuşi, definit astfel:
10 Fiecare metodologie doreşte să instaureze o anumită rigoare în procesul de elaborare a soluţiei unui
sistem soft.
20 Fiecare metodologie se individualizează prin accentul pe care îl pune pe un anumit element
definitor (unul sau mai multe concepte de bază, unul sau mai multe principii de bază, formalizmul de
reprezentre, etc.).
30 Fiecare metodologie doreşte să ofere suport cât mai consistent pentru realizarea de sisteme soft de
calitate.
După unele aprecieri există, încă, o diversitate prea mare de metodologii de dezvoltare a softului, fapt care
nu stimulează neapărat productivitatea specialiştilor în IS. În jurul marilor firme producătoare de soft se
cristalizează, progresiv, elemente şi idei cu ajutorul cărora se alimentează procesul de fundamentare a unor noi
MDS. Aceste MDS primesc, de regulă, girul mediilor academice, după care se întorc la utilizatori, care le
consideră adecvate pentru rezolvarea problemelor lor.
Schematizând, avem situaţia din Figura 1.1, adică “un fel de circuit al apei în natură”. Privind mai atent,
însă, observăm că este vorba de un proces cu conexiune inversă pozitivă care, pe termen lung, are ca scop
optimizarea suportului de care au nevoie specialiştii în IS pentru a realiza sisteme soft.
Astfel se prezintă IS dacă “privim lucrurile din avion”. În realitate situaţia este mult mai complexă. Acest
fapt va ieşi la iveală în cele ce urmează, când aplicând descompunerea top-down în conjuncţie cu un permanent
efort de abstractizare, vom înţelege mai bine structura şi specificul unui demers IS.
Firme/Persoane implicate în
realizarea de sisteme soft
Laboratoare de cercetare
MDS nouă
biblioteci cu legături dinamice (DLL-Dynamic Link Library); o bibliotecă DLL este, în esenţă, o colecţie
de funcţii care pot fi apelate din alte module executabile Windows. Nu discutăm aici motivele care au
generat specificarea acestei tehnologii de către specialiştii de la Microsoft(deşi acesta ar fi un foarte
interesant studiu de caz într-o lucrare pe teme IS). Important este că, realizarea unei biblioteci DLL este un
exerciţiu deosebit atât din punct de vedere al elaborării soluţiei tehnice cât şi din punct de vedere al
programării. Aceasta deoarece, mai mult decât într-o aplicaţie Windows ordinară, realizarea unei biblioteci
DLL pune la încercare abilităţile specialistului IS în ceea ce priveşte definirea de interfeţe optimale pentru
funcţii, specificarea/scierea de cod generic, specificarea/scrierea de cod reentrant, cunoaşterea
particularităţilor programării sub Windows, etc..
Controalele ActiveX; sunt un gen de mini-aplicaţii care pot fi încapsulate în orice obiect de tip container.
Container poate fi fereastra cadru a unei aplicaţii, sau un document HTML. Reprezentând, de fapt,
extinderea tehnologiei OLE la cerinţele universului INTERNET, ActiveX permite programatorilor să
sporească gradul de funcţionalitate al programelor fără prea mult efort. Prin utilizarea tehnologiei ActiveX,
programatorul consimte să respecte o serie de reguli, să surmonteze o serie de obstacole, dar are şi avantajul
de a beneficia de efortul de modelare al altor specialişti în IS, în caz de convergenţă de interese cu aceştia.
Am terminat, astfel, scurta trecere în revistă a tipurilor de aplicaţii suportate suportate de platforma
Windows. Evident, am pus în discuţie elemente noi care ne-ar putea ajuta la definirea noţiunii de sistem soft.
Continuând mica noastră investigaţie, ne putem întreba dacă un document HTML poate fi considerat sistem
soft? Întrebări asemănătoare ne putem pune relativ la creaţii precum: colecţiile de fonturi utilizate de editoarele
de texte, aşa zisele fişiere cu resurse promovate de mediile vizuale de programare, colecţiile de clase gen MFC
(Microsoft Foundation Class), etc.
Este clar, sper, motivul pentru care, la începutul acestui paragraf, am afirmat că este dificil de dat o definiţie
“viabilă” noţiunii de sistem soft. Nu ar fi acesta singurul caz (Biblia operează cu noţiunea de Dumnezeu fără să
ne-o definească. Cu toate acestea există oameni care consideră biblia o capodoperă atât din punct de vedere al
tipului de scriitură cât şi din punct de vedere al modului de organizare a argumentaţiei).
Contând, mai ales pe valoarea ei didactică, propun următoarea definiţie a noţiunii de sistem soft.
Se numeşte sistem soft orice produs al IS care poate fi utilizat pentru a fundamenta sau realiza protocoale
efective şi relativ autonome de prelucrare sau comunicare a datelor şi informaţiilor într-un context
informaţional dat.
Nivel conceptual
(Ce face sistemul soft)
Soluţia conceptuală
Nivel logic
(Cine, când şi unde
execută prelucrările)
Soluţia logică
Nivel operaţional
(Cum se efectuează
prelucrările)
Managementul de TOP, dacă este specificat corect trebuie să aibă cea mai mare stabilitate structurală.
Managementul TACTIC formulează politicile necesare pentru îndeplinirea obiectivelor managementului de
TOP. Dacă este necesar, stabilitatea structurală a acestor politici poate fi schimbată. În sfârşit, managementul
OPERATIV face tot ceea ce este necesar pentru a operaţionaliza politicile stabilite de managementul TACTIC.
Nivelul operativ al managementului este supus, cu prioritate, schimbărilor atunci când se pune problema
adaptării sistemului condus la condiţii de performanţă noi.
Prin sistematizarea procesului de realizare a sistemelor soft se urmăreşte creşterea permanentă a
calităţii acestora.
Este momentul să facem o scurtă incursiune în semantica deosebit de complexă a sintagmei “calitatea
sistemelor soft”.
Atât în teorie cât şi în practică se acceptă faptul că softul de calitate este rezultatul luării în consideraţie a o
serie de factori interni şi externi procesului de configurare a soluţiei finale a unui sistem soft.
În limbaj comun se vorbeşte despre necesitatea de a realiza sisteme soft fiabile, uşor de folosit, structurate,
etc. Astfel de epitete asociate unui sistem soft caracterizează două tipuri de proprietăţi ale sistemelor
soft:proprietăţi externe şi proprietăţi interne.
Calitatea sistemelor soft şi proprietăţile externe
Dintre proprietăţile externe care decid calitatea unui sistem soft, le considerăm ca fiind foarte importante pe
următoatele:
-corectitudinea;
-robusteţea;
-extensibilitatea;
-reutilizabilitatea;
-compatibilitatea;
-eficienţa;
-portabilitatea;
-uşurinţa în folosire.
Corectitudinea
Este abilitatea unui sistem soft de a executa toate sarcinile convenite cu utilizatorii şi beneficiarii în faza de
specificare
Corectitudinea este o proprietate de maximă prioritate a sistemelor soft. Un sistem soft care “face altceva
decât s-a stabilit de comun acord cu beneficiarii şi utilizatorii lui” este obligatoriu să fie corectat (dacă efortul
necesar pentru a face acest lucru este asumat de cei care au greşit) sau abandonat pentru a relua efortul de a găsi
o soluţie care să aibă, printre altele şi atributul corectitudinii.
Deşi se poate vorbi uşor şi mult despre corectitudine, este o “probă de rezistenţă şi de îndemânare
profesională” specificarea corectă a sistemelor soft.
Pentru teoreticienii IS corectitudinea, dincolo de acceptarea rutinei, este sinonimă cu rigoarea în specificare
şi proiectare, ceea ce nu este “agreat” de specialiştii în IS adepţi ai utilizării unor limbaje cu suport natural în
specificare şi proiectare.
Robusteţea
Este abilitatea unui sistem soft de a reacţiona adecvat în condiţii anormale de utilizarea.
Este evident faptul că robusteţea completează corectitudinea. În timp ce corectitudinea se referă la
comportamentul unui sistem relativ la o anumită specificare corectă, robusteţea apreciază ce se întâmplă cu
sistemul soft în situaţii care, în chiar procesul de specificare ar trebui identificate ca excepţii.
Realizarea de sisteme soft robuste este o sarcină care începe în faza de specificare şi se întinde până în faza
de programare. Pe acest traseu specialiştii în IS trebuie să înfrunte două clase mari de execpţii:
Excepţiile externe sistemului soft;
Excepţiile interne sistemului soft.
Frontiera dintre aceste două clase de excepţii trebuie privită cu multă circumspecţie deoarece, în realitate
este oricând posibil ca, potenţial, o excepţie externă să inducă o excepţie internă şi invers.
De asemenea, să mai observăm că în timp ce excepţiile externe pot fi “înfruntate” descurajând iniţiativele
“nespecificate” ale utilizatorului, problematica excepţiilor interne este mult mai complicată.
În cazul sistemelor care gestionează relaţia cu utilizatorul prin intermediul unei interfeţe cu o semantică
deosebit de complexă, excepţiile externe, înainte de a fi inhibate trebuie identificate.
Iată, deci, încă o problemă de care specialiştii în IS se lovesc dacă doresc să “scoată pe piaţă” sisteme soft
care “rămân pe picioare” la apariţia unor excepţii. Se poate formula şi un fel de principiu relativ la odiseea
tratării excepţiilor într-un sistem soft:
În timp ce interfaţa unui sistem soft îşi sporeşte receptivitatea faţă de curiozitatea şi comoditatea utilizatorilor,
efortul de tratare complexă şi corectă a posibilelor excepţii creşte astfel încât poate deveni o problemă care nu
poate fi rezolvată decât prin metoda aproximaţiilor succesive.
Este cazul sistemelor de operare, de exemplu, a căror robusteţe este, adeseori, rezultatul unui proces de
ajustare pe banii şi pe răbdarea diferitelor categorii de utilizatori.
Extensibilitatea
Este abilitatea unui sistem soft de a se adapta uşor la modificări în faza de specificare
Problema extensibilităţii este o problemă de situare pe scala complexităţii: programele mici sunt uşor de
modificat; sistemele soft din ce în ce mai mari devin tot mai dificil de adaptat la modificări. Rămânând în sfera
afirmaţiilor valabile, dar generale, putem adăuga că două principii sunt utile în realizarea de sisteme soft
extensibile. Acest principii sunt:
Simplitatea proiectării
Ideea de bază este că o arhitectură simplă este întotdeauna mai uşor de modificat decât o arhitectură
complexă. Inevitabil, însă, vine întrebarea: când spunem că un sistem soft are o arhitectură simplă? Un
răspuns complet şi precis la această întrebare nu încape în paginile acestei cărţi. Simplitatea este un deziderat
urmărit de orice creator care se respectă. Faptul că există destule creaţii ale omului care uimesc prin dificultatea
cu care îşi transmit mesajul (inepţii literare, subproduse cinematografice, discursuri politice sterile, etc.)
dovedeşte caracterul imprevizibil al modului în care un creator ajunge să opereze cu avantajele simplităţii în
munca sa. Nu se poate algoritmiza obţinerea simplităţii pentru că, în forma ei cea mai înaltă de exprimare, este
sinonimă cu creaţia. O creaţie plăsmuită cu talent va provoca întotdeauna exclamaţii de genul:”Ce simplu era!”,
“Foarte uşor de înţeles!”, “Nici că se putea mai bine!”, “Cum de nu mi-a trecut prin cap?!”, etc.
O “creaţie” plăsmuită doar pentru a umple fizic unul din multele goluri care există în viaţa oamenilor
provoacă exclamaţii de tipul:”Doamne, ce îmbâcseală!”, Nu înţeleg mai nimic!”, Mai bine lipsă!”, “Aşa ceva
puteam şi eu să fac!”, etc.
Nu este pierdere de vreme să urmărim simplitatea şi în IS. Doar că, şi aici, obţinerea ei cere timp, pentru a
şlefui soluţia unei probleme, astfel încât să putem obţine un sistem soft care este, cel puţin:
-lizibil;
-corect modularizat;
-eficient în timpul execuţiei.
Sunt nenumărate motive, însă, pentru care în IS se sacrifică simplitatea, asigurându-se, de exemplu,
corectitudinea şi robusteţea. Enumerăm câteva dintre aceste motive: necesitatea scurtării termenelor de execuţie,
modificarea paradigmelor de modelare, modificarea limbajelor de programare, modificarea sistemelor de
operare, creşterea puterii de calcul a sistemelor hard (frecvenţă de lucru foarte mare+ dimensiuni, de vis altădată,
ale memoriei RAM).
Descentralizarea
Dacă extensibilitatea este dorită cu orice preţ şi poate că nu există suficient timp pentru a obţine un sistem
soft cu arhitectură simplă, atunci mai avem un punct de sprijin în descentralizare: cu cât autonomia modulelor
care compun sistemul soft este mai mare cu atât mai mare este probabilitatea ca o schimbare simplă să afecteze
un număr redus de module.
Reutilizabilitatea
Este abilitatea componentelor unui sistem soft de a putea fi utilizate la dezvoltarea mai multor aplicaţii
diferite.
Necesitatea reutilizării unor componente soft se întemeiază pe observaţia că, adeseori, sisteme soft diferite
pot fi construite pe baza unor soluţii-şablon similare. Promovarea sistematică a reutilizării influenţează alţi
factori de apreciere a calităţii sistemelor soft, precum corectitudinea şi fiabilitatea.
Reutilizarea este un factor cardinal în multe paradigme de programare şi modelare. Astfel, programatorii
Windows pot utiliza în procesul de realizare a propriilor aplicaţii, potenţialul MFC (Microsoft Foundation
Class). De asemenea, mediile vizuale de programare (Delphi, Visual Basic, Visual C++, CBuilder, etc.) oferă
exemple consistente de reutilizare.
Compatibilitatea
Este o măsură a uşurinţei cu care componentele unui sistem soft se combină cu alte componente pentru a
forma aplicaţii noi.
Fireşte, compatibilitatea este importantă deoarece, în general, sistemele soft nu pot fi dezvoltate în vid; ele
vor interacţiona cu alte sisteme soft.
Secretul compatibilităţii se află în omogenitatea proiectării şi în acceptarea unor standarde de
comunicare între programe.
Aşadar, pentru a realiza sisteme soft compatibile, efortul de proiectare trebuie să ia în calcul şi cele două
cerinţe formulate mai sus. Comunitatea IS nu se poate “mândri” cu impunerea unor standarde şi principii de
detaliu în acest sens. Există “fani” Windows care promovează tehnologiile, trebuie să recunoaştem remarcabile,
ale Microsft-ului. Există, însă, şi “fani” Linux care promovează propriile lor idei şi tehnologii în ceea ce priveşte
caracteristicile mediilor de dezvoltare a sistemelor soft. Am dat două exemple de “medii” de dezvoltare a
softului. Mai sunt nenumărate altele al căror istoric nu este momentul să îl facem; raţiunea lor de a fi este
următoarea:
Lumea IS îşi datorează remarcabila dinamică unui permanent efort de inovare teoretică şi în plan
aplicativ;
Lumea IS, în marea ei varietate, are nevoie de puncte de convergenţă pentru a face posibilă
interoperabilitatea crescândă între sistemele soft.
Este destul de dificil de făcut o predicţie relativ la dezvoltarea pârghiilor de compatibilizare a sistemelor soft
în viitor. Actualmente, lumea aplicaţiilor Internet se prefigurează ca un “câmp de desfăşurare a unor
bătălii importante pentru noua faţă a universului IS”. Este nevoie de timp, răbdare şi efort susţinut pentru a
găsi noi formule de specificare a proprietăţilor fundamentale ale sistemelor soft, printre care se află şi
compatibilitatea.
Eficienţa (Performanţa)
Este abilitatea unui sistem soft de a minimiza cererile de resurse hard (timp UC, memorie RAM, memorie
externă, etc.).
Comunitatea IS are două atitudini tipice faţă de eficienţă.
Există “softişti” care fac o pasiune din optimizarea permanentă a sistemelor la care lucrează. Din
“mâinile” unor astfel de specialişti ies adevărate bijuterii din punct de vedere al performanţelor. Preţul plătit
împingând performanţa dincolo de un anumit prag logic este, în principal, diminuarea portabilităţii softului
respectiv. Într-o lume care visează la compatibilizarea sistemelor soft este greu de crezut că portabilitatea poate
fi sacrificată.
Există şi “softişti” care gândesc astfel: “Să facem sistemul soft corect înainte de a fi eficient cu orice
preţ”. Un astfel de slogan merge în aplicaţiile în care absenţa performanţei nu este critică pentru funcţionarea
softului, mizându-se pe un fapt absolut real în ultima vreme: “Eficienţa poate fi obţinută pe seama progreselor în
materie de tehnologii hard”. Ca de obieci, adevărul trebuie să fie undeva la mijloc, ceea ce înseamnă că
specialistul IS trebuie să stăpânească arta de a obţine performanţa cerută cu minimum de cheltuieli de resurse.
Portabilitatea
Este o măsură a uşurinţei cu care un sistem soft poate fi transferat pe diferite platforme hard şi medii de
operare.
Dată fiind marea diversitate de platforme hard şi medii de operare, problema este reală şi dificil de rezolvat.
Esenţa acestei probleme constă în faptul că orice sistem soft, ajuns în faza executabilă, pe un calculator real,
trebuie “să se înţeleagă cu calculatorul respectiv”. Aceasta înseamnă că un cod execuatbil are o anumită structură
şi instrucţiunile pe care le conţine sunt recunoscute de procesorul maşinii gazdă. Structura codului executabil
este importantă pentru sistemul de operare, care supervizează încărcarea codului executabil în memorie şi
execuţia acestuia, pas cu pas.
Uşurinţa în folosire
Se referă la modul în care oameni cu diferite nivele de instruire pot învăţa să folosească sistemul soft pentru
rezolvarea unor probleme reale. Se referă, de asemenea, la uşurinţa instalării şi operării sistemului soft.
Închei prezentarea proprietăţilor externe ale sistemelor soft cu precizarea că problematica proprietăţilor
interne (structurare, modularizare, obiect orientare, etc.) reprezintă un capitol la a cărui scriere încă se lucrează,
neexistând un consens deplin al specialiştilor asupra modului de articulare a acestora într-o explicaţie stabilă
structural.
2 CE ESTE O METODOLOGIE DE DEZVOLTARE A
SOFTULUI?
Etape de dezvoltare
Figura 2.1. Conţinutul generic al etapei de dezvoltare a unui sistem soft
Având ca pretext diagrama prezentată în Figura 2.1., pot prezenta comentariile de mai jos.
Analiza
Este etapa în care se constată că este necesar un sistem soft şi se iau decizii în consecinţă.
Fie că se constată existenţa unei pieţe pentru un produs de uz general, fie că o anumită organizaţie are
nevoie de un soft specializat, în mare măsură această primă etapă presupune mai degrabă luarea unor decizii de
management şi marketing decât abordarea unor probleme legate de studiul algoritmilor, de exemplu.
După luarea deciziei de dezvoltare a sistemului soft începe analiza propriu-zisă, al cărei scop principal este
identificarea necesităţilor utilizatorului potenţial al sistemului soft. De exemplu, în cazul unui produs de uz
general, care urmează a fi vândut pe o piaţă concurenţială, trebuie stabilit un public ţintă. Dacă se construieşte un
sistem soft de gestiune a stocurilor ce urmează a fi folosit în departamentul de aprovizionare al unei firme
constructoare de maşini, atunci trebuiesc identificate necesităţile şi aşteptările celor care lucrează în cadrul
acestui departament.
Unul dintre rezultatele formale ale etapei de analiză îl reprezintă un set de cerinţe pe care noul sistem soft ar
trebui să le satisfacă. Acestea trebuiesc formulate din punctul de vedere al utilizatorului (direct sau indirect), sau
în limbajul de specialitate al IS.
După ce au fost identificate cerinţele, acestea sunt transformate în specificaţii tehnice. Ca un exemplu,
cerinţa ca accesul la datele sistemului să fie permis doar persoanelor autorizate se poate transforma în
specificaţia că sistemul nu trebuie să răspundă decât după introducerea unei parole de exact unsprezece
caractere, confirmată de sistem.
Fireşte, se pot pune întrebările:
“Care sunt regulile care guvernează procesul de identificare şi reprezentare a cerinţelor faţă de sistemul
soft?”
şi
“Care sunt regulile care guvernează domeniul de elaborare şi reprezentare a specificaţiilor tehnice?”.
Răspunsul este simplu: metodologia oferă suport de tip ASS şi suport de tip RDS care se foloseşte în această
etapă a ciclului de viaţă cât mai eficient cu putinţă.
Proiectarea
Este etapa în care soluţia sistemului soft este specificată în detaliu.
În termeni generali vorbind, sistemul soft imaginat în etapa de analiză este descompus, progresiv, în
componente mai uşor de modelat, numite, generic, module. Implementarea sistemelor complexe devine posibilă
tocmai prin această descompunere modulară. Astfel, mulţimea detaliilor tehnice care trebuie luată în considerare
ar fi imposibil de stăpânit. Proiectarea modulară creează, totodată condiţii pentru lucrul în echipă şi vine în
întâmpinarea efortului de întreţinere, dacă acesta este reclamat.
Una dintre concluziile greu de combătut ale generaţiilor de MDS poate fi formulată astfel:
“O structură modulară, chibzuit proiectată este benefică atât pentru implementarea sistemului cât şi
pentru modificarea sa ulterioară.”
Probabil, acesta este unul dintre principalele motive pentru care modelarea orientată spre obiecte câştigă tot
mai mult teren.
În faza de proiectare, ca şi în cea de analiză suportul de tip ASS şi RDS este esenţial pentru a obţine o
soluţie tehnică de calitate.
Implementarea
Este etapa în care are loc scrierea efectivă a programelor, crearea fişierelor şi, în consecinţă, dezvoltarea
bazei de date a sistemului soft astfel obţinut.
Testarea
Este etapa strâns legată de etapa anterioară deoarece, în mod normal, fiecare modul al sistemului este testat
în timpul implementării.
Într-un sistem bine proiectat (ceea ce ar face trimitere directă la o serie de posibili factori interni ai calităţii
precum: decompozabilitatea modulară, compozabilitatea modulară, înţelegerea modulară, continuitatea modulară
şi protecţia modulară) fiecare modul poate fi testat în mod independent, utilizând versiuni simplificate ale
celorlalte module pentru a simula interacţiunea modulului ţintă al testării cu restul sistemului. Evident, pe măsură
ce diferite module sunt finalizate şi combinate, testarea individuală face loc treptat testării generale a întregului
sistem.
Practica dovedeşte că testarea şi complementara acestei activităţi, care este depanarea, sunt, îndeosebi în
cazul sistemelor mari activităţi greu de finalizat. Sistemele de mari dimensiuni pot conţine foarte multe erori
chiar şi după efectuarea celor mai complexe teste. Multe erori pot rămâne neobservate pe toată durata vieţii
sistemului soft. Punerea la punct a unor strategii de eliminare a acestor erori este un obiectiv major al IS. Practica
ne arată că în această direcţie mai sunt încă multe probleme de rezolvat.
În ceea ce priveşte capacitatea unei MDS de a oferi suport pentru rezolvarea problemelor de tip
RDS, putem, de asemenea, să facem o serie de consideraţii cu caracter general.
Pe tot parcursul elaborării soluţiei unei probleme, aceasta trebuie documentată şi reprezentată.
Soluţia trebuie documentată deoarece există mai multe categorii de persoane interesate în utilizarea acestei
documentaţii (operatorii sistemului soft, cei care distribuie şi instalează sistemul soft, programatorii care se
ocupă de întreţinerea sistemului soft, partenerii proiectului de realizare a sistemului soft, etc.).
Documentaţia de utilizare poate fi realizată sub forma unor ghiduri de utilizare tipărite sau poate fi
încorporată în structura sistemului soft sub formă de help interactiv. Spre binele autorilor sistemelor soft sau spre
binele celor care ar trebui să modifice sistemul soft este bine ca însuşi codul sursă al sistemului soft să fie
generos documentat.
Deoarece, de calitatea documentaţiei depinde în mare măsură şi priza sistemului soft la segmentul de
piaţă căruia i se adresează, marile firme producătoare de soft au transformat documentarea unui sistem soft
într-o activitate supusă în mare măsură standardelor, automatizării, legilor pieţei.
Se cunosc exemplele remarcabile oferite în această privinţă de firme precum Microsoft sau Borland.
Soluţia trebuie reprezentată în fiecare etapă a ciclului de viaţă deoarece:
-permite schimbul de informaţii de natură tehnică între partenerii de proiect;
-serveşte ca sursă de documentare strict necesară celor care vor să aducă modificări sau dezvoltări
acestei soluţii.
Atât pentru documentarea cât şi pentru reprezentarea soluţiei se folosesc limbaje sau sisteme adecvate.
Astfel, pentru documentare se foloseşte, în esenţă, limbajul natural, manifestându-se o grijă deosebită pentru
rigoarea, claritatea, sugestivitatea şi uşurinţa în utilizare a diferitelor tipuri sau sisteme de documentare.
Programatorii, îndeosebi, sunt deja obişnuiţi cu încorporarea în mediile de programare sau în funcţionalitatea
diferitelor sisteme soft a unor help-uri interactive de mare complexitate sau a tutorialelor care asistă învăţarea
operării sistemelor soft. Ultima “găselniţă” în materie de documentare a sistemelor soft o reprezintă capabilităţile
de tip “wizards” care scutesc utilizatorii de grija de a memora anumite protocoale de utilizare a sistemelor soft,
lăsându-le însă întotdeauna libertatea de a gândi care este cea mai bună alegere într-un anumit moment al
utilizării softului în cauză.
În ceea ce priveşte reprezentarea soluţiei, aducem la cunoştinţa cititorului faptul că lucrurile sunt mai puţin
aşezate decât în cazul documentării.
Limbajele alese pentru reprezentarea soluţiei unui sistem soft pot fi:
-tributare cerinţei de a fi intuitive, caz în care textul este combinat cu grafica conform unor reguli
specificate riguros din punct de vedere sintactic (a se vedea notaţia utilizată în UML!);
-tributare excesului de formalizm, indispensabil, spun teoreticienii pentru a asigura un spor de
corectitudine în specificare, analiză, proiectare. Formalizmul excesiv este cerut şi de, încă ipotetica, nă zuinţă a IS
de a implica sisteme soft specializate în generarea automată a codului executabil pornind de la soluţia tehnică (a
se vedea Z, Z++, VDM, VDM++, sisteme formale de reprezentare a soluţiei unui sistem soft care au reuşit
câteva străpungeri experimentale în lumea practică a IS şi atât deocamdată).
Referitor la notaţie (cum se mai numeşte limbajul de reprezentare a soluţiei) să precizăm că aceasta în
manualele de prezentare a MDS este strâns dependentă de semantica metodologiei, adică limbajul de
reprezentare a soluţiei “respiră acelaşi aer” cu limbajul de abstractizare a soluţiei.
În ceea ce priveşte capacitatea unei MDS de a oferi suport pentru rezolvarea problemelor de tip
OMP
Din cele expuse până în acest punct al lucrării s-a înţeles, presupun, faptul că lucrul în cadrul unui proiect de
dezvoltare a unui sistem soft ridică probleme deosebite din punctul de vedere al managementului. Deja, practica
lucrului în cadrul proiectelor de realizare a unor sisteme soft serioase a confirmat valabilitatea afirmaţiei potrivit
căreia:
Un management slab poate compromite uşor şansele de reuşită ale unei echipe de proiectare redutabilă
profesional; un management bun poate gestiona eventualele probleme datorate nivelului profesional
necorespunzător al unora dintre membrii echipei de proiectare.
Lumea în care trăim este, fără să exagerăm deloc, opera diferitelor tipuri de management.
Specialişti sau nu în probleme de management, este bine să ştim că există discipline care studiază
problemele fundamentale ale managementului, dar, complexitatea activităţilor imaginate de om depăşind de mult
capabilităţile explicative şi operaţionale ale unui tratat de bazele managementului, asistăm la apariţia unor
varietăţi noi de management cu obişnuinţa cu care la un anumit timp după apusul soarelui ne vine din ce în ce
mai greu să rezistăm tentaţiei de a ne culca. Printre aceste varietăţi de management se află şi managementul
proiectelor de realizare a sistemelor soft (MPRSS). Multe dintre principiile fundamentale ale teoriei
managementului operează şi în cadrul MPRSS. Mai mult, putem afirma că, cel puţin în cazul etapei de analiză
din ciclul de viaţă al unui sistem soft cunoştinţele de management sunt de mare utilitate (dacă sistemul soft este
realizat la cererea conducerii unei organizaţii cu sau fără profit).
Multe din întrebările care se pun în etapa de analiză (ce obiective are de îndeplinit sistemul soft?, care sunt
mijloacele de îndeplinire a acestor obiective?, cum îşi mapează sistemul soft funcţiile pe domeniul activităţilor
deservite?, etc.) primesc răspunsuri mult mai clare dacă analistul are şi cunoştinţe de management. Sperând că v-
am convins, oarecum, de utilizarea unui management adecvat al procesului de dezvoltare a unui sistem soft, să
anticipăm că în atenţia MPRSS se află trei tipuri fundamentale de activităţi:
-gestiunea resurselor angajate în realizarea sistemului soft;
-asigurarea calităţii sistemului soft;
-gestiunea riscurilor asociate procesului de realizare a sistemului soft.
Toate aceste trei tipuri de activităţi se desfăşoară după o planificare riguroasă care presupune, în esenţă
stabilirea cadrului optim din punct de vedere organizatoric şi logistic care permite valorificarea suportului
oferit de MDS pentru rezolvarea problemelor de tip ASS, OPA, RDS.
Nu ne va surprinde, aşadar, să constatăm că specialiştii care depun eforturi pentru dezvoltarea suportului
metodologic de tip OMP propun o serie de modele calitative şi cantitative cu ajutorul cărora se încearcă
măsurarea sau evaluarea rezultatelor activităţilor mai sus precizate.
Date fiind particularităţile acestor activităţi în cazul proiectelor de realizare a unor sisteme soft, este de
aşteptat ca multe direcţii de acţiune ale managementului să se supună unor legităţi specifice.
Orice patron de firmă soft va scăpa de multe probleme în ziua în care din laboratorul de cercetare va ieşi pe
piaţă o metodologie care:
articulează atât de bine contradicţiile, certitudinile şi incertitudinile din munca unui specialist în IS, încât
toate merg ca într-o linie de fabricaţie a unor echipamente necesare pentru dotarea unor capsule spaţiale.
Fericire sau ghinion, cert este că mai avem cale lungă până acolo. Nu cred că este cazul să vă spun explicit
de ce. Doar atât mai adaug: de vină este complexitatea unora dintre activităţile specifice gândirii omeneşti.
Nu ne rămâne decât să alegem dintre nenumăratele rele pe care le avem în faţă pe cea mai puţin costisitoare
din toate punctele de vedere.
3 CICLUL DE VIAŢĂ AL UNUI SISTEM SOFT
3.1 Ciclul de viaţă al sistemelor soft. Încă o introducere
Să ne reamintim, la acest început de capitol, ideea de bază a capitolelor 1 şi 2: nevoia de sistematizare a
procesului de dezvoltare a sistemelor soft.
Nimeni nu contestă faptul că se pot întâlni abordări de genul celor reprezentate în Figura 3.1 şi în Figura 3.2.
Specificarea Implementare
cerinţelor
Specificarea Diagrama de
cerinţelor structură
Implementare
Tot ceea ce se poate spune despre modelele de dezvoltare sugerate de figurile de mai sus este faptul că
abstractizează frumos, dar ineficient procesul de dezvoltare a sistemelor soft de mare şi medie complexitate.
Conform Figurii 3.1, specialistul în IS trebuie să aibă abilităţi remarcabile care să-i permită să facă un salt
uriaş de la cerinţe la codul care descrie, practic, în detaliu, soluţia executabilă a sistemului soft.
Există oameni care pot face acest lucru. Diferitele nivele de abstractizare şi faze de dezvoltare a softului se
înfiripă în creierele acestora şi capătă contururi suficient de clare pentru a permite alimentarea cu “materie primă
de calitate” a procesului de codificare. Chiar şi în cazul unor astfel de oameni, saltul de la cerinţe la cod este plin
de riscuri.
Îmbunătăţirea sugerată de Figura 3.2 este reală dar insuficientă. Ani la rând, în laboratoarele de cercetare ale
IS s-au făcut eforturi extrem de diverse şi uneori foarte originale, pentru găsirea celei mai bune formule de
desfăşurare în timp a procesului de abstractizare a soluţiei unui sistem soft.
Toate aceste formule se concretizează într-o listă lungă de propuneri de cicluri de viaţă, din care vom
analiza în continuare câteva exemple reprezentative.
Deşi ciclul de viaţă propus de o MDS funcţionează optim în conjuncţie cu o anumită strategie de
abstractizare a soluţiei, specifică MDS, în analiza pe care o fac în paragraful 3.2 voi insista doar pe elementele
care definesc particularităţile unei MDS din punct de vedere al ciclului de viaţă.
-numărul de faze să fie justificat atât de o analiză punctuală cât şi de consideraţii de ansamblu în ceea
ce priveşte versatilitatea operaţionalizării ciclului de viaţă;
-fiecare fază a ciclului de viaţă să fie “acoperită” satisfăcător de elemente supor t pentru rezolvarea
problemelor de tip ASS, RDS, OMP.
Având în vedere aceste două exigenţe, voi trece la descrierea unor modele ale ciclului de viaţă al sistemelor
soft reprezentative, urmând să degajez o serie de concluzii generale după prezentarea acestor modele.
Definirea
cerinţelor
Analiza
Proiectarea
Implementarea
Testarea
Utilizarea
şi instruirea
Evident, sistemul se predă doar după parcurgerea etapelor anterioare, ceea ce înseamnă o lungă perioadă
de timp până când utilizatorul vede sistemul la lucru, ceea ce nu este convenabil pentru nici una din faze
(utilizatorul are destul timp să emită alte pretenţii faţă de sistemul soft);
MC nu oferă suport adecvat pentru abordarea dinamică a proceselor de modelat;
MC nu are protecţie explicită faţă de modificările care pot interveni pe parcursul dezvoltării sistemului
soft.
Nu am considerat necesar să mai insist asupra conţinutului fazelor prezentate în Figura 3.3. Paragraful 2.2 al
acestei lucrări conţine suficiente informaţii lămuritoare în acest sens.
Cu toate că are destui critici, modelul cascadă a fost şi este folosit, integral sau parţial, ori de câte ori se
doreşte un ciclu de viaţă cu o structură echilibrată.
Definirea
cerinţelor Validare
Proiectare Testare
sistem sistem
Proiectare Testare
subsisteme subsisteme
(componente) (componente)
Codificare/
asamblare
componente
Analiza Definire
iniţială obiective
prototip
Specificare
prototip
Prototip
complet
Specificarea prototipului
Deşi prototipul nu este realizat în perspectiva unor operaţii de extindere este, evident, important să aibă un
comportament scontat. De aceea, este absolut firesc să luăm în calcul posibilitatea unor modificări care să
apropie prototipul cât mai mult de comportamentul scontat.
Aceste modificări sunt mult mai uşor de făcut dacă softul este realizat potrivit unor principii de proiectare
profunde.
Construirea prototipului
Deoarece este important ca prototipul să fie realizat rapid este firesc ca în această fază să se apeleze la un
mediu de dezvoltare rapidă a plicaţiilor (Delphi, Visual Basic, Visual C, C-Builder, etc.).
Avantaje:
Ilustrarea timpurie a funcţionalităţii sistemului ajută la identificarea tuturor dezacordurilor dintre
specialistul IS şi client;
Cerinţele client omise au şanse să fie identificate;
Dificultăţile legate de proiectarea interfeţei pot fi conştientizate şi rezolvate;
Realizabilitatea şi utilitatea sistemului soft pot fi testate chiar dacă, prin natura lui, prototipul este
incomplet.
Probleme:
Clientul poate percepe prototipul ca parte a sistemului final dar nu poate înţelege amploarea efortului
cerut, uneori, de realizarea formei finale a sistemului, motiv pentru care are senzaţia că acesta (sistemul final)
trebuie livrat mai curând decât este posibil în realitate;
Prototipul poate distrage atenţia de la aspectele funcţionale (uneori critice pentru sistem) către problemele
de interfaţă (fetişizate oarecum de nevoia de a da permanent satisfacţie clientului/utilizatorului);
Prototipizarea se bazează pe o implicare semnificativă a utilizatorului;
Managementul care se bazează pe modelul MP are de luat decizii dificile de-a lungul întregului ciclu de
viaţă.
3.2.4 Concluzii
Deşi din motive didactice am încercat să focalizez atenţia cititorului pe noţiunea de ciclu de viaţă, acesta va
înţelege, probabil, legătura indisolubilă dintre ciclul de viaţă şi celelalte componente ale unei MDS. Îndeosebi
binomul ciclu de viaţă – ciclu de abstractizare trebuie înţeles profund de către practicanţii IS care vor să
valorifice la maximum potenţialul unei MDS.
Exemplele prezentate arată, pe de o parte, dificultăţile întâmpinate de-a lungul timpului de specialişti IS în
încercarea lor de a spori randamentul metodologiilor de dezvoltare a softului, pe de altă parte tendinţa
permanentă a MDS de a oferi o perspectivă cât mai realistă asupra procesului de dezvoltare a sistemelor soft.
Aşa cum se vede şi din exemplele prezentate nu lipsesc nici exagerările, multe din modelele specificate de-a
lungul timpului funcţionând frumos doar în închipuirea creatorilor lor.
Ca o concluzie de bun simţ, am putea spune că un model de dezvoltare este bun dacă este agreat de un
număr mare de specialişti.
Acest lucru se poate întâmpla dacă:
modelul este uşor de învăţat şi operaţionalizat;
modelul este bine ancorat în realitatea procesului de dezvoltare;
modelul oferă suport consistent de-a lungul întregului proces de dezvoltare a sistemelor soft.
Cititorul începe, probabil, să fie de acord cu mine atunci când spun că în IS "nisipurile sunt mişcătoare",
multe probleme nerezolvate stau la vedere, deci cei care se simt cu muşchii tari pot să iasă la "interval".
Expediţia noastră continuă pentru că mai avem şi alte necunoscute de scos la iveală în capitolele care
urmează.
4 ABSTRACTIZAREA SOLUŢIEI UNUI SISTEM SOFT
4.1 Modelarea. Limbaje de modelare
După Capitolul 3, în care libertatea de mişcare a gândirii a fost oarecum îngrădită de exigenţele subiectului
abordat, iată-ne din nou pe un teritoriu vast, complex şi în continuă prefacere: universul modelării.
Activitatea de elaborare a modelelor se bazează, prin definiţie, pe un mare consum de energie intelectuală.
Cu atât mai mare este efortul de modelare cu cât orizontul epistemologic al celui implicat în efort este
nestructurat sau structurat neconcludent.
Ori de câte ori este vorba despre activităţi care se bazează pe “muşchii” gândirii, trebuie să ne asumăm
deopotrivă riscurile, frumuseţea şi noutatea pe care o presupune rezolvarea unei probleme. Chiar şi atunci când
“drumul este, pe alocuri, bătătorit” pentru a reuşi avem nevoie de două tipuri de abilităţi:
abilităţi de elaborare sistematică a realităţii,
metodă de modelare în domeniul de care aparţine problema.
Pentru a fi “meseriaşi” adevăraţi ne mai trebuie doar atâta îndoială în ceea ce ştim la un moment dat cât să
ne fie permanent trează dorinţa de a şti mai multe în fiecare clipă.
Ce este un model?
Un model este reprezentarea într-un anumit mediu a unui obiect, proces sau fenomen din acelaşi mediu sau
dintr-un mediu diferit. Vom numi sistem real (SR) obiectul, procesul sau fenomenul supus procesului de
modelare.
Modelul surprinde aspectele considerate importante ale unui SR, dintr-un anumit punct de vedere,
simplificând sau omiţând celelalte aspecte ale SR. Ingineria, arhitectura, astronomia, fizica şi, de ce nu, IS
folosesc intens modele.
Odată realizate, modelele pot fi fizice (în construcţii, în muzeologie, etc.) sau pot lua forma unor
reprezentări adecvate pe un suport de memorie externă (hârtie, floppy-disk, hard-disk, etc.).
În IS proprietăţile modelelor sunt reprezentate cu ajutorul limbajelor.
Făcând abstracţie de cele fizice, modelele se impun atenţiei celor care le studiază prin semantica şi notaţia
lor. Mai pe înţelesul unui specialist IS, înţelegerea unui model este o problemă de sintaxă, semantică şi,
pentru a fi toate bune, trebuie să fie şi o problemă de pragmatică .
Dacă singurul merit al unui model s-ar rezuma la faptul că generează problemele mai sus menţionate,
probabil că, îndeosebi în zilele noastre, ne-am lepăda de ele.
Realitatea este că avem nenumărate motive pentru care acest lucru nu se întâmplă.
Modelarea poate fi utilizată pentru reprezentarea unor sisteme de cunoştinţe în vederea simplificării
înţelegerii acestora de către persoanele interesate.
În lumea IS se folosesc frecvent astfel de modele pentru a capacita utilizatorii în procesul de specificare a
cerinţelor faţă de un sistem soft, de exemplu.
Elaborarea de modele pare a stimula creativitatea celor care proiectează un anumit sistem.
Înainte de a fi ceea ce este în forma finală, un sistem este descris dintr-o serie de perspective care prilejuiesc
realizarea a o serie de modele preliminare.
Sistemul final este aproximarea unui SR, obţinută prin agregarea sintaxei şi semanticii tuturor modelelor
preliminare asociate.
Dacă ar fi să dăm un exemplu din lumea IS, atunci sintaxa şi semantica unui sistem soft ar putea fi rezultatul
agregării a trei tipuri fundamentale de modele:
-modele care descriu aspectele statice ale SR modelat;
-modele care descriu aspectele dinamice ale SR modelat;
-modele care descriu aspectele funcţionale ale SR modelat.
Un model poate fundamenta realizarea unui sistem de organizare, clasificare, vizualizare şi editare a
informaţilor despre sistemele mari.
Altfel spus, nu ne putem imagina procedee de simplificare a efortului de modelare într-un anumit domeniu
dacă nu rezolvăm problema paradigmei-cadru de modelare.
Sistemele dinamice pot fi modelate utilizând, să zicem, paradigma UML.
Cu ajutorul modelelor putem simplifica procesul de alegere a unei soluţii alternative .
Numeroase sunt situaţiile în care factorii care condiţionează la un moment dat procesul de realizare a unui
sistem soft complică peste măsură decizia de continuare a procesului. O modalitate de a ieşi din impas într-o
astfel de situaţie o reprezintă elaborarea de modele alternative şi alegerea celui mai bun pe baza evaluării
avantajelor şi riscurilor asociate acestora.
Pe bună dreptate, cititorul se va intreba: “La ce îmi foloseşte să ştiu atâtea despre arhitectura UML?”.
Un răspuns moderat la această întrebare, mai jos.
Aşa cum se prezintă la ora actuală, UML oferă utilizatorilor o notaţie şi un meta-model.
Notaţia desemnează acele elemente de sintaxă (preponderent grafice) cu ajutorul cărora se specifică soluţia
UML a unui sistem soft. De exemplu, pentru a reprezenta soluţia UML a unei probleme, în mod normal ne vom
folosi de notaţia aferentă diagramelor de clase, în care se operează cu concepte precum: clase, asocieri,
generalizări, multiplicitate, etc. Utilizatorul “grăbit” prinde din zbor semantica unor astfel de concepte.
Utilizatorul care are obsesia rigorii, vrea un răspuns precis la întrebări de genul: “Ce este o clasă?”.
Producătorii de tools-uri de dezvoltare pentru specialiştii IS sunt chiar interesaţi, în mod obiectiv, de
clarificarea răspunsurilor la astfel de întrebări. Ideea unor limbaje de specificare şi proiectare riguroase este bine
reprezentată în lumea metodelor formale (în care singurele enunţuri acceptate sunt în spiritul calculului
propoziţional sau al calculului predicatelor).
Metodele formale reprezintă cea mai bună armă cu care putem stăvili insinuarea ambiguităţilor în
enunţurile noastre.
Din păcate, “omul în genere ”, nu a fost “proiectat” spre a fi un adorator al limbajelor formale .
Pentru a comunica, “omul în genere” foloseşte cel mai bine limbajul natural sau derivaţi simplificaţi ai
acestuia. La urma urmei, această înclinaţie naturală are o explicaţie destul de profundă:
Capacitatea lilmbajelor naturale de a opera cu semnificaţii noi este mult mai mare decât a limbajelor
formale.
Pentru a împăca pe toată lumea, UML oferă utilizatorilor un meta-model, cu ajutorul căruia se dau
răspunsuri riguroase la întrebări de genul: “Ce este o clasă?”. Această caracteristică face din UML un limbaj
interesant, deoarece resursele pentru specificarea conceptelor lui se găsesc în el însuşi (limbajele de programare,
de exemplu, folosesc metalimbaje de tip notaţie BNF sau diagrame de sintaxă, pentru specificare).
Perspectiva
contexte de
utilizare
(utilizator)
Mod de folosire
Înţelegere
sistem
Perspectiva Perspectiva
procese sistem topologie sistem
(comportamentală) (desfăşurare în mediul
Performanţă de execuţie)
Utilitate Performanţă
Toleranţă la erori Utilitate
Toleranţă la erori
Livrare şi instalare
Accesibilitate
Figura 5. 2 Perspectiva arhitecturii 4+1
CNP
Nume_I_Prenume Atribute informaţionale
…
creare()
eliberare() Operaţii
adaugare()
…
Figura 5.3. Reprezentarea unei clase în UML
Ca şi notaţie vizualǎ, o interfaţǎ este redatǎ printr-un cerc cǎruia i se ataşeazǎ numele interfeţei (Figura
5.4).
IPacient
3. colaborare - abstractizeazǎ o familie de clase, interfeţe şi alte elemente care, prin cooperare,
reuşesc sǎ asigure un comportament care înseamnǎ mai mult decât “suma mecanicǎ” a
comportamentelor pǎrţilor.
De remarcat faptul cǎ, o colaborare are atât dimensiune structuralǎ cât şi dimensiune comportamentalǎ.
Dintr-o perspectivǎ ceva mai largǎ privind, o colaborare reprezintǎ implementarea unui şablon care
abstractizeazǎ o anumitǎ funcţie a unui sistem soft. Notaţia pentru colaborare este o elipsǎ al cǎrei contur este
realizat cu o linie întreruptǎ, în interiorul cǎreia se trece numele colaborǎrii.
Programare
pacient
Planifica
re
pacient
Figura 5.6. Reprezentarea unui context de utilizare în UML
Urmǎtoarele trei tipuri de EFS (clasele active, componentele şi nodurile) sunt, într-o oarecare mǎsurǎ,
asemǎnǎtoare claselor, în sensul cǎ sunt descrise ca mulţimi de obiecte care partajeazǎ aceleaşi atribute, operaţii,
relaţii şi semantici. Şi totuşi, existǎ suficiente elemente care deosebesc aceste trei tipuri de EFS de tipul clasǎ, şi
între ele însele, motiv pentru care sunt tratate distinct de cǎtre notaţia UML.
5. clasǎ activǎ - este o clasǎ ale cǎrei obiecte posedǎ unul sau mai multe procese sau fire de execuţie,
ceea ce înseamnǎ cǎ obiectele pot iniţia activitǎţi de control.
Aşadar, o clasǎ activǎ este întocmai ca o clasǎ obişnuitǎ, exceptând faptul cǎ obiectele sale reprezintǎ
elemente al cǎror comportament este concurent cu comportamentul altor elemente.
Notaţia UML pentru o clasǎ activǎ se deosebeşte de notaţia pentru clasǎ prin linia îngroşatǎ a
conturului. De observat, Figura 5.7.
Cititorul bǎnuieşte, probabil, faptul cǎ avem nevoie de clase active pentru a modela soluţiile problemelor în
care se apeleazǎ la multitasking şi, în consecinţǎ, apar probleme noi legate de sincronizarea proceselor sau firelor
de execuţie.
Supervizor pacient
CNP
…
Iniţiere()
Suspendare()
…
Figura 5.7. Reprezentarea unei clase active în UML
6. componentǎ - este o parte a unui sistem soft, reprezentatǎ de un anumit gen de cod fizic, dedicatǎ,
în general, realizǎrii uneia sau mai multor interfeţe.
Exemple de componente: unit-uri Pascal, ierahii de clase C++ specializate în lucrul cu octeţii de şiruri,
DLL-uri din lumea Windows, pachetele din Java etc.
Notaţia UML pentru o componentǎ este ilustratǎ în Figura 6.8.
7. Un nod - este un element fizic, care existǎ la un moment dat şi reprezintǎ o resursǎ de calcul (cel
puţin memorie, şi adesea capabilitǎţi de prelucrare).
Una sau mai multe componente pot fi rezidente într-un nod sau pot migra de la un nod la altul. Notaţia
UML, simplificatǎ, pentru un nod este prezentatǎ în Figura 5.9.
Server
Acestea au fost cele şapte tipuri de entitǎţi cu funcţii structurale, care formeazǎ fundamentul structural
al oricǎrui model UML autentic. Prezentarea pe care am fǎcut-o a avut ca scop introducerea notaţiei pentru cele
şapte EFS, semantica completǎ a conceptelor prezentate şi a notaţiilor asociate fiind o problemǎ ce urmeazǎ a fi
pusǎ în discuţie, ulterior, în aceastǎ carte sau, de ce nu, în altă carte, care prezintă procesul de utilizare efectivǎ a
notaţiei UML pentru rezolvarea unor probleme date.
Dupǎ cum se vede din notaţia prezentatǎ în Figura 5.10, sǎgeata care indicǎ un mesaj între douǎ obiecte
are asociat şi numele operaţiei invocate.
2. maşină de stare (în engleza americanǎ, state machine) abstractizeazǎ, de data aceasta ,
comportamentul unui singur obiect sau al unei interacţiuni dintre obiecte, pe timpul vieţii
acestora, ca succesiune de acţiuni-rǎspuns la anumite evenimente.
Aşadar, comportamentul unei clase sau al unei colaborǎri între clase (cadrul natural de reprezentare al
interacţiunilor) poate fi specificat cu ajutorul unei maşini de stare. O maşină de stare implicǎ o serie de alte
elemente, precum: stǎri, tranziţii, evenimente (fapte ce pot declanşa o tranziţie) şi activitǎţi (rǎspunsuri la
tranziţii). Notaţia UML pentru o stare este prezentatǎ în Figura 5.11 (dreptunghi cu colţurile rotunde, în interiorul
cǎruia se aflǎ numele stǎrii şi, eventual, substǎrile asociate.
Aşteptare
Figura 5.11. Notaţia UML pentru stare
Interacţiunile şi maşinile de stare sunt elemente comportamentale fundamentale, care pot fi incluse într-
un model UML. Semantic vorbind, aceste elemente sunt, în mod uzual, conectate cu alte elemente structurale,
îndeosebi clasele, colaborǎrile şi obiectele.
Gestiune pacienţi
Funcţia calculeazǎ
vârsta pacientului
Figura 5.13. Notaţia UML pentru conceptul de notǎ
Relaţii în UML
UML utilizeazǎ patru tipuri de relaţii pentru a descrie aspectele de naturǎ relaţionalǎ ale modelelor:
Dependenţele;
Asocierile;
Generalizǎrile;
Realizǎrile.
Aceste tipuri de relaţii reprezintǎ nucleul conceptelor de bazǎ propuse de UML pentru descrierea relaţiilor
dintre diferitele tipuri de entitǎţi ale modelelor UML.
1. dependenţa - abstractizeazǎ o relaţie semanticǎ între douǎ entitǎţi, caracterizatǎ prin faptul cǎ o
schimbare în una dintre ele poate afecta semantic cealaltǎ entitate.
Într-o astfel de relaţie, despre entitatea în care se poate produce schimbarea se spune cǎ este independentǎ,
iar despre entitatea afectatǎ se spune cǎ este dependentǎ. În lumea IS, o astfel de relaţie se întâlneşte foarte des,
în diferite ipostaze. Notaţia UML pentru relaţia de dependenţǎ este reprezentatǎ în Figura 6.14.
0..1 Asistǎ *
Medic Pacient
Figura 5.15. Notaţia UML pentru asociere
3. generalizarea - este abstractizarea unei relaţii dintre două concepte UML, compatibile, a cărei
semantică este exprimată astfel:
Unul dintre concepte este concept tată, celălalt este concept fiu
Orice element din categoria conceptuală tată poate fi substituit de un element din categoria
conceptuală fiu. Acest lucru este posibil deoarece un element fiu moşteneşte structura şi
comportamentul elementului părinte asociat.
4. realizarea - este abstractizarea unei relaţii semantice între clasificatori, exprimată astfel: un
clasificator specifică nişte capabilităţi pentru care alt clasificator fur nizează suportul necesar.
Ca un exemplu uzual, o interfaţă pentru a fi utilizată efectiv, trebuie să fie realizată de una sau mai multe
clase. Aşadar, o anumită clasă realizează o anumită interfaţă. Notaţia UML pentru realizare este prezentată în
Figura 5.17.
Diagrame în UML
În UML, diagramele sunt reprezentări grafice ale unor colecţii de elemente (entităţi şi relaţii).
Diagramele UML sunt grafuri ale căror noduri sunt entităţi şi ale căror arce sunt relaţii. Permiţând asamblarea
diferitelor tipuri de entităţi şi relaţii pentru a obţine descrieri ale sistemelor modelate din diferite perspective,
diagramele UML sunt elemente suport puternice pentru abstractizarea şi vizualizarea soluţiei unui sistem soft.
Deşi în teorie se susţine că o diagramă poate conţine orice combinaţie de entităţi şi relaţii, în practică se
recomandă utilizarea unui set restrâns de tipuri de diagrame, care încearcă să acopere toate cerinţele legate de
acceptarea pentru sistemele soft a arhitecturii “4+1”.
De aceea, cei care popularizează UML-ul recomandă următoarele nouă tipuri de diagrame:
Diagrame de clase;
Diagrame de obiecte;
Diagrame de contexte de utilizare;
Diagrame de secvenţă;
Diagrame de colaborare;
Diagrame hărţi de stare;
Diagrame de activitate;
Diagrame de componente;
Diagrame de desfăşurare.
Descrierea şi exemplificarea modului de utilizare a acestor diagrame, sarcină de care urmează să ne ocupăm
în continuare, va lămuri problemele esenţiale care apar într-un exerciţiu de modelare UML.
matricol
: Student
…
Maria
<<instance Of>>
Maria Student
IDecan
Figura 5.19. Interfeţele şi implementarea lor
Aşa cum, probabil că aţi ghicit, în Figura 5.19 sunt prezentate două interfeţe implementate de o componentă
DLL. Multe dintre blocurile constructive UML suportă genul de abordare prezentat pe relaţia interfaţă /
implementare. De exemplu, colaborările realizează contextele de utilizare, metodele implementează operaţiile.
Mecanismele de extindere UML
Un limbaj de modelare, închis din punct de vedere al notaţiei, poate ajunge uşor în situaţia de a nu putea
exprima, cu mijloace recunoscute de toţi utilizatorii lui, o anumită semantică din domeniul problemei sau din
domeniul soluţiei.
Pentru acest motiv, UML a fost gândit ca un limbaj de modelare deschis-închis (open-closed), prin
specificarea unor mecanisme de extindere care includ:
Stereotipurile (stereotypes);
Valorile etichetate (tagged values);
Constrângerile (constraints).
Un stereotip extinde vocabularul UML, permiţând specialiştilor să creeze noi genuri de blocuri constructive,
pornind de la unele existente deja.
O valoare etichetată extinde proprietăţile unui bloc constructiv UML, permiţând specialiştilor să adauge
informaţii noi în procesul de specificare a blocului constructiv.
O constrângere extinde semantica unui bloc constructiv UML, permiţând specialiştilor să adauge reguli noi
sau să le modifice pe cele existente.
EventQueue
<<exception>> { version=3.2
Overflow author=ma}
add() {ordered}
remove()
flush()
În figura 5.20 este prezentat un exemplu de clasă – stereotip (Overflow), aflată în relaţie de dependenţă cu
clasa EventQueue, căreia i-au fost adăugate informaţii referitoare la versiune şi autor folosind sintaxa specifică
valorilor etichetate şi care are o metodă (add()), pentru care obiectele cu care lucrează (evenimentele) sunt
supuse constrângerii {ordered}.
6 MODELAREA ASPECTELOR STRUCTURALE.
ELEMENTE-SUPORT FUNDAMENTALE
6.1 Clase
Clasele sunt elementele constructive cele mai importante ale unui sistem obiect orientat. În general vorbind,
o clasă este abstractizarea unei colecţii de obiecte care partajează aceleaşi atribute, aceleaşi operaţii,
aceleaşi relaţii şi aceeaşi semantică. UML oferă un formalizm grafic pentru reprezentarea unei clase,
asemănător celui din Figura 6.1.
coordonate atribute
perimetru()
aria()
afisare() operaţii
După cum se poate vedea, notaţia propusă în Figura 6.1 permite vizualizarea unei abstractizări, independent
de limbajul de programare şi de o manieră care permite evidenţierea celor mai importante părţi ale abstractizării:
numele, atributele şi operaţiile clasei.
Numele unei clase
Fiecare clasă trebuie să aibă un nume care o identifică în mod unic, printre alte clase. Un nume de clasă este
un şir de caractere care se poate prezenta în două moduri: nume simplu sau nume cu cale. Un nume simplu de
clasă se poate observa în Figura 6.2a. Un nume cu cale, asociat unei clase, se poate observa în Figura 6.2b, el
indicând, ca un prefix la numele clasei, pachetul în care este rezidentă clasa.
Client java::awt::Rectangle
(a) (b)
Un nume de clasă poate fi un şir de caractere de orice lungime, care conţine litere, cifre şi semne de
punctuaţie, cu excepţia simbolului ”::”, utilizat pentru a separa numele clasei de pachetul sau lanţul de pachete
care o include. Evident, este necesar un compromis rezonabil între lungimea numelui şi puterea lui de sugestie.
În practică, numele unei clase se obţine prin juxtapunerea mai multor cuvinte care pot dezvălui semantica clasei
respective. De exemple, PoligonAbstract, TriunghiEchilateral, FereastraDeDialog, etc. Se observă cum,
pentru mai multă lizibilitate, fiecare cuvânt din structura numelui începe cu literă mare.
Atributele unei clase
Un atribut este numele unei proprietăţi ( a unei clase) care abstractizează un domeniu de valori pe care
instanţele proprietăţii le pot lua.
O clasă poate avea orice număr de atribute sau, la limită, nici un atribut.
Un atribut desemnează, astfel, o anumită proprietate a realităţii modelate, proprietate partajată de toate
instanţele realităţii respective. Ca formalizm de reprezentare, atributele sunt listate în compartimentul situat
imediat sub numele clasei, ca în Figura 6.3.
În funcţie de nivelul de abstractizare al clasei (conceptualizare, specificare, implementare), atributele pot fi
listate doar ca nume, dar pot fi listate şi ca nume, împreună cu tipul definitor şi, eventual, o valoare iniţială. ca în
Figura 6.4.
Student
Aşa cum sugerează exemplele prezentate în Figurile 6.3 şi 6.4, numele unui atribut poate începe cu literă
mică, celelalte cuvinte care formează numele atributului începând cu literă mare.
Student
natricol : string[4]
numePrenume: string[40] Lista atributelor
adresa: TAdresa
dataNasterii: TData
sex: char=’F’
Student
adaugs()
stergs()
modifics() Lista operaţiilor
afisez()
În practică, regulile de formare şi reprezentare a numelor operaţiilor sunt asemănătoare celor folosite în
cazul atributelor. O operaţie poate fi reprezentată şi la nivel de signatură, care se poate referi la: nume, tipul
returnat, lista parametrilor şi valorile lor implicite, ca în Figura 6.6. În Figura 6.6 am folosit secvenţa “...”
pentru a indica faptul că lista operaţiilor este, în mod conştient, incompletă. Această secvenţă, împreună cu
posibilitatea de a organiza listele de atribute sau operaţii, prea lungi, în categorii descriptive, folosind
stereotipurile, contribuie la o mai bună mapare a potenţialului de descriere al unei clase peste nevoile de
reprezentare specifice unui punct de vedere al specialistului în IS.
Student
...
modificMatricol(m:string[4])
consultNume():string[40]
modificAdresa(a:TAdresa=””) Lista operaţiilor
...
Utilizarea stereotipurilor pentru clasificarea însuşirilor unei clase este exemplificată în Figura 6.7.
Student
<<constructor>>
student()
student(m:string[4])
<<proces>>
modificAdresa(a:Adresa)
...
<<query>>
esteValid():boolean
afisez()
<<iterator>>
pentruToti(as:^Student)
...
Figura 6.7. Utilizarea stereotipurilor
Se cuvine să reamintim faptul că stereotipul este unul dintre mecanismele de extensie, de bază, ale
UML-ului, cu ajutorul căruia putem îmbogăţi, progresiv, însăşi semantica limbajului. Asupra acestui
mecanism de extensie vom mai reveni.
Responsabilităţile unei clase
O responsabilitate este abstractizarea textuală a unui serviciu furnizat de o clasă. Este deja lămurit
faptul că, la definirea unei clase, este foarte importantă supoziţia că toate obiectele acestei clase au acelaşi
comportament.
Această afirmaţie, la un nivel de abstractizare mai înalt, înseamnă că atributele şi operaţiile sunt doar
nişte elemente-suport pentru îndeplinirea responsabilităţilor clasei. Responsabilităţile unei clase, în cazul în care
sunt definite, sunt listate într-un compartiment situat la baza simbolului grafic al clasei, ca în Figura 6.8
În practică, elaborarea modelului claselor poate începe prin specificarea responsabilităţilor entităţilor
candidate, înregistrate în vocabularul realizat în faza de analiză a cerinţelor. În acest scop se pot folosi tehnici
precum card-urile CRC1 sau analiza bazată pe contexte de utilizare. În procesul de rafinare a modelului claselor,
responsabilităţile sunt traduse într-un set de atribute şi operaţii care asigură îndeplinirea optimă a
responsabilităţilor.
1
CRC – prescurtare de la Class – Responsabilities – Collaborators, o tehnică efectivă de explorare şi identificare a responsabilitătilor unei
clase
Student
Responsabilities
creare studenţi
actualizare date personale studenţi
validare date personale studenţi
...
6.2 Relaţii
În modelarea obiect-orientată există trei tipuri de relaţii care sunt considerate foarte importante:
dependenţele, care abstractizează relaţiile de utilizare existente între clase (rafinarea, versionarea, legarea);
generalizările, care leagă clasele generalizate de specializările lor şi asocierile, care reprezintă relaţiile
structurale dintre obiecte. Formalizmul UML pentru reprezentarea acestor trei tipuri de relaţii, precum şi maniera
de utilizare, pot fi urmărite, pentru început, în Figura 6.9.
Window dependenţă
open()
Event
close()
move()
display()
handleEvent()
generalizări
asociere
ConsoleWindow DialogBox
Control
asociere
Figura 6.10. Numele unei asocieri
Relaţia de agregare
O asociere obişnuită între două clase reprezintă, aşa cum am spus, o relaţie structurală între egali,
ceea ce înseamnă că ambele clase sunt considerate, conceptual, la acelaşi nivel de importanţă în relaţie.
Făcând puţină literatură, o asociere obişnuită este abstractizarea unei relaţii de parteneriat. În realitate, există
nenumărate situaţii, în care suntem nevoiţi să acordăm un statut special unor asocieri în care ideea de parteneriat
nu mai operează. O astfel de situaţie este cea în care trebuie să modelăm o relaţie „întreg/parte”, în care una
dintre clase desemnează o entitate mai largă (întregul) care constă din entităţi mai mici (părţile). Acest tip de
relaţie se numeşte agregare şi în literatura de specialitate mai este recunoscută şi ca relaţie „has-a”, spre
deosebire de „is-a-kind of” (generalizarea”). Formalizmul grafic folosit pentru specificarea unei agregări este
prezentat în Figura 6.11.
Companie întregul
1
agregarea
multiplicităţi
*
Departament partea
legătură la document
A se vedea Heap.doc
pentru detalii asupra
acestui algoritm
Notele prezentate în Figura 6.12 pot fi ataşate unuia sau mai multor elemente care fac parte din specificarea
unui model UML. Pe de altă parte, UML permite utilizarea ornamentelor pentru vizualizarea şi detalierea
specificării. De exemplu, se ştie că notaţia de bază pentru asociere este o linie; atunci când situaţia o cere,
această linie poate fi ornamentată cu detalii, cum sunt rolurile şi multiplicităţile ataşate fiecărui capăt al asocierii.
În utilizarea UML, regula generală de urmat este: „ Se porneşte cu notaţia de bază pentru fiecare element şi
se adaugă alte ornamente numai dacă acestea sunt necesare pentru a furniza informaţii importante
pentru înţelegera modelului”. Majoritatea ornamentelor sunt redate prin plasarea textului în apropierea
elementului vizat sau prin adăugarea unui simbol grafic notaţiei de bază. Este posibil ca, uneori, să doriţi să
adăugaţi unui element detalii mai multe, ceea ce poate fi destul de dificil folosind textul simplu sau simbolurile
grafice. În astfel de situaţii, unor entităţi precum clasele, componentele şi nodurile le putem adăuga un nou
compartiment, situat imediat sub compartimentele uzuale, pentru a furniza alte informaţii.
Stereotipurile
Referindu-ne la aria claselor, un stereotip nu este similar cu o clasă părinte într-o relaţie de generalizare
părinte-copil. Mai degrabă, putem gândi stereotipul ca un metatip, ale cărui instanţe sunt clase noi, în sintaxa
UML. Ca un exemplu, dacă suntem familiarizaţi cu modelul de dezvoltare RUP, vom vedea că acesta conţine
recomandări precise în ceea ec priveşte modelarea claselor, existând stereotipuri pantru trei tipuri fundamentale
de clase: clasele de frontieră, clasele cu funcţii de prelucrare şi clasele cu funcţii de control. Fiecare din cele
trei tipuri de clase poate fi considerat un stereotip, care extinde posibilităţile de modelare ale UML -ului, ca în
Figura 6.13.
<<Boundary>> <<Entity>>
PreluareDateStudent PrelucrareDateStudent
<<Control>>
SupervizareBE
Valorile etichetate
Fiecare entitate UML are propriul set de proprietăţi: clasele au nume, atribute şi operaţii; asocierile au
nume şi două sau mai multe capete cu propriile lor proprietăţi, etc. După cum am văzut, folosim stereotipurile
pentru a adăuga soluţiei noastre entităţi noi. Pentru a adăuga proprietăţi noi entităţilor, folosim valorile
etichetate. În practică, valorile etichetate pot fi folosite pentru a păstra diferite informaţii despre proprietăţile
entităţilor. Astfel, informaţii de interes pentru managementul unui proiect (data creării unui model, starea
dezvoltării lui, autorul, etc.) sau informaţii de interes în procesul de instalare a unei aplicaţii (memoria internă
necesară, memoria externă necesară, limita inferioară a frecvenţei procesorului, etc.) sunt două exemple uzuale
de utilizare a valorilor etichetate. Formalizmul de prezentare a valorilor etichetate este , transparent prezentat în
Figura 6.14.
După cum se poate observa în Figura 6.14, valorile etichetate apar între acolade ca secvenţe de tipul:
{<etichetă>=<valoare>}
dacă informaţiile sunt adăugate direct pe entitatea vizată, sau, folosind ca suport nota ataşată, urmând aceeaşi
sintaxă, dacă este vorba de informaţii care se referă la mai multe entităţi, de exemplu.
Constrângerile
Este de domeniul evidenţei, probabil, faptul că orice construcţie sintactică în UML are propria ei
semantică. De exemple, într-o relaţie de generalizare operează principiul substituţiei care afirmă că un obiect al
clasei copil poate substitui un obiect al clasei părinte, dar nu şi invers. Acest „dar nu şi invers” este o
constrângere, de care trebuie să fim conştienţi când lucrăm cu o ierarhie de clase.
Utilizând constrângerile, putem, de asemenea, să adăugăm semantici noi modelelor sau să modificăm
regulile fundamentale după care operează modelele. În ultimă analiză, o constrângere specifică o serie de
condiţii care trebuie îndeplinite pentru ca modelul să fie corect. Formalizmul după care adăugăm
constrângeri modelelor este deductibil din Figura 6.15.
În general, specificarea constrângerilor poate fi realizată folosind un limbaj textual, liber în expresie.
Dacă se doreşte mai multă rigoare în specificarea constrângerilor se poate apela la OCL (Object
Constraint Language), un standard care însoţeşte specificarea completă a UML-ului. Acest standard poate
fi găsit în documentaţia pusă la dispoziţie de firma Rational pe site-ul www.rational.com.
autor=Tudor Stelian
Server terminat=12/10/2001
{procesoare=2}
{aplicatie=serv.exe}
serv.exe
{doarPeServer,
RamSize=600K}
* ContPersonal {XOR}
* Persoana
lucrator
angajat angajator
Persoana Firma
* 0..1
Şef
{Persoana.angajator=
Persoana.Şef.angajator}
Abilitatea de a realiza diagrame de tipurile mai sus precizate, coerente, corecte şi eficiente este tot ceea ce îşi
doreşte, în ultimă instanţă, un specialist în IS, în relaţia cu UML. Fără această abilitate, mânuirea, cu randament,
a tool-urilo precum Rational Rose, ObjectiF, etc. este un vis imposibil.
Diagrame structurale
Cele patru tipuri de diagrame structurale UML servesc la vizualizarea, specificarea, construirea şi
documentarea aspectelor statice ale unui sistem. Prin aspecte statice ale unui sistem înţelegem relaţiile
invariante dintre componentele sistemului. Referindu-ne la ingineria softului, din perspectivă UML, aspecte
statice ale soluţiei unui sistem soft sunt: relaţiile dintre clase, interfeţele, colaborările, ansamblul structurat
al componentelor, topologia hard care susţine execuţia sistemului. Odată definite relaţiile dintre clase,
introducem un element de stabilitate, necesară pentru a putea continua efortul de realizare a soluţiei. Odată
specificate interfeţele, clienţii lor se pot ocupa, în linişte, de aspectele legate de utilizarea lor, etc..
Diagrame de desfăşurare
O diagramă de desfăşurare expune un ansamblu de noduri, împreună cu relaţiile dintre ele. Folosim
acest tip de diagramă pentru a ilustra aspectele statice ale perspectivei desfăşurare a hard-ului care susţine
execuţia unui sistem soft. Diagramele de desfăşurare se află în legatură cu diagramele componentelor, datorită
faptului că, în mod uzual, un nod conţine una sau mai multe componente.
Diagrame comportamentale
După cum am văzut, există cinci tipuri de diagrame care pot fi folosite pentru a modela dinamica
(comportamentul) unui sistem soft.
Diagrame de secvenţă
O diagramă de secvenţă este o diagramă de interacţiune, care evidenţiază ordonarea în timp a mesajelor
care rezolvă problemele de comunicare dintre obiectele unei aplicaţii. Astfel că, o diagramă de secvenţă expune
un ansamblu de obiecte şi distribuţia temporală a mesajelor, trimise şi primite, de către aceste obiecte. Obiectele,
în mod uzual au nume, pot fi şi instanţe anonime ale claselor, dar pot reprezenta şi instanţe ale altor tipuri de
entităţi precum: colaborări, componente sau / şi noduri. Evident, utilizăm o diagramă de secvenţă pentru a
reprezenta perspectiva dinamică a unui sistem.
Diagrame de colaborare
O diagramă de colaborare este o diagramă de interacţiune care pune accent pe organizarea structurală a
obiectelor care trimit sau primesc mesaje. O diagramă de colaborare expune un ansamblu de obiecte, legăturile
dintre aceste obiecte şi mesajele trimise sau primite de aceste obiecte. În mod uzual, obiectele au un nume, pot fi
instanţe anonime ale claselor, dar pot fi şi instanţe ale altor tipuri de entităţi, precum colaborări, componente
sau/şi noduri. O diagramă de colaborare este, de asemenea, utilă pentru a reprezenta perspectiva dinamică a unui
sistem.
Diagrame de activitate
O diagramă de activitate expune fluxul activităţilor din interiorul unui sistem (flux care poate fi
secvenţial sau ramificat) precum şi obiectele asupra cărora acţionează, sau de care sunt demarate aceste activităţi.
Diagramele de activitate sunt importante pentru modelarea funcţiei unui sistem, ca flux de control, în dinamica
activităţilor unui obiect sau a unui ansamblu de obiecte-partenere la rezolvarea unei probleme.
Asemenea altor tipuri de diagrame, diagramele claselor pot conţine note şi constrângeri. Dacă necesităţile de
abstractizare o impun, diagramele claselor pot conţine pachete sau subsisteme, fiecare dintre acestea fiind
utilizate pentru a grupa elemente ale modelului în curs de elaborare, obţinându-se blocuri constructive cu o
semantică specifică, accesibilă unui anumit tip de „beneficiar”. Uneori, diagramele claselor pot conţine şi
instanţe.
Încercând un răspuns la întrebarea „Pentru ce elaborăm diagramele claselor?”, reamintesc faptul că
intenţia lor declarată este de a modela aspectele statice ale perspectivei design (structurale). Mergând ceva mai
departe, trebuie să subliniez faptul că cerinţele funcţionale ale unui sistem soft trebuie să se mapeze
convenabil peste ansamblul modelelor care compun perspectiva design. De aceea se obişnuieşte să se afirme
că stabilitatea structurală a design-ului static este esenţială pentru longevitatea şi calitatea unei soluţii .
Din punctul de vedere al practicii, utilizăm diagramele claselor în una din situaţiile următoare:
Responsabilities
căutare traseu Driver
evitare obstacole
Motor
move(d:Directie;v:Viteza)
stop()
resetCounter()
stare status()
...
Facultate Catedră
{persistent} {persistent}
Ar
nume:TNume e nume:TNume
1
adresa:string adaugProf()
1..*
Angaja stergProf()
adaugstud() t la
stergstud()
citestestud()
… () Profesor
{persistent}
1..
nume:TNume
*
Înmatric
ulat Pred
ă
*
Student Curs
{persistent} {persistent}
Frecvent
nume:TNume ează nume:TNume
matricol:integer codCurs:integer
Asocierea unei diagramei de clase cu un nume sugestiv (care să deconspire semantica diagramei);
Expunerea elementelor diagramei astfel încât să reducem la minimum liniile care se intersectează;
Folosirea notelor şi a culorilor, ca pârghii vizuale de dirijare a atenţiei asupra aspectelor importante ale
diagramei.
7 MODELAREA ASPECTELOR
COMPORTAMENTALE. ELEMENTE-SUPORT
FUNDAMENTALE
7.1 Interacţiuni
Într-un sistem, interesant din punct de vedere comportamental, obiectele interacţionează între ele utilizând ca
tehnică de bază transmiterea de mesaje.
Se numeşte interacţiune un comportament care se exprimă printr-o serie finită de mesaje, schimbate între
obiectele situate în interiorul unui anumit context, pentru îndeplinirea unui anumit scop.
În practica modelării vom folosi interacţiunile pentru a modela aspecte dinamice ale colaborărilor, care
reprezintă uniuni de obiecte jucând roluri specfice, cooperând pentru realizarea unui anumit comportament,
despre care putem spune, cu rezerva de rigoare, că este mai mare decât suma mecanică a elementelor.
Aceste roluri reprezintă instanţe prototipice ale claselor, interfeţe, componente, noduri şi contexte de
utilizare. Aspectele lor dinamice sunt vizualizate, specificate, construite şi documentate ca fluxuri de control care
pot cuprinde fire de execuţie secvenţiale, precum şi fluxuri mai complexe, care implică ramificări, iteraţii,
recursii sau concurenţă.
Putem modela o interacţiune în două moduri: prin accentuarea ordonării în timp a mesajelor (obţinând
modele numite diagrame de secvenţă) sau prin accentuarea secvenţării mesajelor în contextul unor colecţii
structurate de obiecte (obţinând modele numite diagrame de colaborare).
Este evident faptul că interacţiunile bine structurate sunt asemenea algoritmilor bine structuraţi: eficiente,
simple, adaptabile şi inteligibile.
Să mai subliniem faptul că putem folosi interacţiunile pentru a modela fluxuri de control în interiorul unor
operaţii, clase, componente, contexte de utilizare sau la nivelul sistemului ca întreg. Utilizând diagramele de
interacţiune, putem reflecta asupra acestor fluxuri în două moduri. Mai întâi, ne putem focaliza atenţia asupra
modului în care sunt expediate mesajele în timp. În al doilea rând, ne putem concentra atenţia asupra relaţiilor
structurate dintre obiectele aflate într-o interacţiune şi, pe acest temei, să considerăm modul în care mesajele
circulă între componentele contextului structurat.
UML furnizează o reprezentare grafică a mesajului, aşa cum se poate vedea în Figura 7.1.
1:PrelNotMat(n)
f:Foaia_Matricola n:Note
{ordered}
De exemplu, subsistemul Planificarea activităţii didactice din cadrul sistemului informaţional al unei
facultăţi este contextul în care instanţe ale unor clase, precum StatDeFuncţii, PlanDeÎnvăţământ,
FormaţieDeLucru vor interacţiona pentru a „contribui” la rezolvarea problemei orarului semestrial al grupelor
de la fiecare specializare şi, de ce nu, al fiecărui profesor în parte.
Interacţiuni între obiecte descoperim şi în procesul de implementare a unei operaţii. Parametrii unei operaţii,
orice variabilă obiect locală operaţiei şi orice obiecte globale (dar încă vizibile operaţiei) pot interacţiona pentru
a materializa algoritmul corespunzător implementării operaţiei.
Astfel, invocarea operaţiei suma() care simulează adunarea a două numere mari, fiecare număr fiind o
instanţă a clasei NumarMare, este evident că poate fi implementată astfel încât invocarea să aibă sintaxa:
nr1.suma(nr2)
ceea ce inseamnă interacţiune între obiectul global nr1, obiectul transmis prin lista de parametrii ( nr2 ) şi
un obiect local operaţiei, folosit pentru a genera obiectul sumă pe care îl va returna operaţia suma().
În al treilea şi ultimul rând, descoperim interacţiuni în contextul unei clase. Altfel spus, putem folosi
interacţiunile pentru a vizualiza, specifica, construi şi documenta semantica unei clase. Revenind la exemplul
clasei NumarMare, pentru a ilustra comportamentul obiectelor acestei clase, putem imagina interacţiuni care
arată cum colaborează atributele acestei clase pentru a permite îndeplinirea responsabilităţilor asumate de clasă,
la specificare.
Obiecte şi roluri
Obiectele care participă într-o interacţiune sunt sau lucruri concrete sau lucruri prototipice. În calitate de
lucru concret, un obiect reprezintă un aspect din lumea reală. De exemplu, p, o instanţă a clasei Persoana poate
desemna o persoană particulară, ca lucru concret, sau o instanţă oarecare a clasei Persoana, ca lucru prototipic.
Legături
O legătură este o conexiune semantică între obiecte. În general, o legătură este o instanţă a unei asocieri.
Aşa cum rezultă şi din Figura 68, în momentul în care o clasă are o asociere cu altă clasă, putem avea şi o
legătură între instanţele celor două clase; odată ce există o legătură între două obiecte, unul dintre ele poate
trimite un mesaj celuilalt.
O legătură specifică o cale de-a lungul căreia un obiect poate trimite un mesaj altui obiect sau chiar lui
însuşi.
De cele mai multe ori, este suficient să specificăm faptul că o astfel de cale există. Dacă este nevoie de mai
multă precizie în ceea ce priveşte această cale, putem ornamenta capătul potrivit al legăturii cu unul din
următoarele stereotipuri standard:
<<association>> - specifică faptul că obiectul corespunzător este vizibil prin asociere;
<<self>> - specifică faptul că obiectul corespunzător este vizibil deoarece el este executantul operaţiei;
<<global>> - specifică faptul că obiectul corespunzător este vizibil deoarece aparţine unui domeniu
acoperitor;
<<local>> - specifică faptul că obiectul corespunzător este vizibil deoarece aparţine unui domeniu
local;
<<parameter>> - specifică faptul că obiectul corespunzător este vizibil în calitate de parametru.
Persoana
1..* * Firma
afectare (d:Departament) angajat angajator
afectare(financiar)
p:Persoana :Firma
Mesaje
Presupunem că avem o colecţie de obiecte şi un set de legături care conectează aceste obiecte. Un astfel de
model este un model static care poate fi asimilat cu o diagramă de obiecte. Diagramele de obiecte modelează
starea colecţiei de obiecte, la un moment dat şi sunt folositoare atunci când dorim să vizualizăm, să specificăm,
să construim sau să documentăm o structură statică de obiecte.Să presupunem, acum, că dorim să modelăm
schimbarea stării unei colecţii de obiecte de-a lungul unei perioade de timp.
Dacă, prin absurd, am putea imagina un procedeu de „fotografiere” a colecţiei de obiecte, la intervale succesive
de timp, atunci ar trebui să observăm: obiecte care schimbă mesaje între ele, provoacă evenimente şi invocă
operaţii. În plus faţă de perspectiva asociată scenariului de mai sus, ne putem propune vizualizarea explicită a
stării curente şi a rolului instanţelor individuale.
Un mesaj este specificarea unei comunicări între obiecte, care transmite informaţia necesară pentru
producerea unei activităţi. Primirea unei instanţe mesaj poate fi considerată o instanţă a unui eveniment. Ca
urmare a formulării unui mesaj, o acţiune răspuns va fi declanşată. O astfel de acţiune poate produce o schimbare
de stare.
În UML pot fi modelate următoarele tipuri de acţiuni:
Call – invocarea unei operaţii a unui obiect; un obiect îşi poate transmite lui însuşi un mesaj, ceea ce
este interpretat ca invocare locală a unei operaţii;
Return – întoarcerea unei valori la apelant;
Send – expedierea unui semnal către un obiect;
Create – crearea unui obiect;
Destroy – distrugerea unui obiect; un obiect se poate, la nevoie, autodistruge.
UML oferă o notaţie care permite deosebirea, sub aspect vizual, a acestor tipuri de acţiuni, care pot fi
asociate unui mesaj. O primă prespectivă asupra acestei notaţii poate fi observată în Figura 7.3, care este,
anticipând, o diagramă de secvenţă.
c:Client p:AsistentPlanificare
<<create>> :AgentBilete
create
setItinerar(i)
calculRuta()
call
notificare()
destroy
send
Figura 7.3. Mesaje şi tipuri de acţiuni asociate
Figura 7.3, deşi ipotetică conţine elementele fundamentale pentru a înţelege importanţa noţiunii de mesaj în
reprezentarea interacţiunilor dintre obiecte. Obiectul c (de tip Client) creează un obiect anonim de tip
AgentBilete (folosind un mesaj asociat cu o acţiune stereotipizată create); obiectul c apelează metoda
setItinerar() a obiectului anonim de tip AgentBilete (care primeşte ca parametru, un obiect i de tip
Itinerar); obiectul anonim apelează propria metodă calculRuta() pentru a determina elementele
caracteristice ale rutei. Următorul mesaj este asociat cu o acţiune de tip return, după care urmează distrugerea
obiectului anonim de către obiectul i. În sfârşit, avem şi un exemplu de trimitere a unui semnal de la c la p.
Cititorul atent şi curios simte infuzia de semantică dintr-o astfel de diagramă, precum şi numeroasele probleme,
încă neclare, asupra cărora va trebui să revenim în continuare.
Secvenţare
În practica descrierii interacţiunilor dintre obiecte, un obiect trimite un mesaj altui obiect; receptorul, la
rândul lui, trimite un mesaj altui obiect ş.a.m.d. Acest potenţial flux de mesaje formează o secvenţă. Orice
secvenţă are un început, care este localizat într-un proces sau fir de execuţie. Secvenţa poate să fie activă, cel
mult cât timp este activ procesul sau firul de execuţie.
Fiecare proces şi fir de execuţie din interiorul unui sistem defineşte un flux de control distinct şi în interiorul
fiecărui flux mesajele sunt ordonate în secvenţe care ţin cont de succesiunea lor în timp. Pentru o mai bună
vizualizare a scevenţelor de mesaje, în UML putem modela explicit „ordinea de intrare” a mesajului, relativ la
începutul secvenţei din care face parte, prin prefixarea mesajului cu un număr de secvenţă, separat cu simbolul
„:” de mesaj. De domeniul uzualului este să specificăm fluxuri de control procedurale, redate folosind o
săgeată de tipul celei din Figura 7.4.
2:selectN(S) 2.2:Insert(m)
s:Student n:Note 2.2 f:FoaieMa-
ricola
2.1:m=CalcMed()
Mai puţin uzuale, dar, evident posibile sunt fluxurile de control plate, care se redau folosind o săgeată
asemănătoare celei din Figura 7.5.
1:procesare(p)
p:Persoana o:OreLucrate
2:generare(o)
f:Fluturas
În practica modelării UML distincţia dintre secvenţa plată şi cea procedurală este subtilă. De exemplu,
modelarea interacţiunilor din perspectiva contexte de utilizare se pretează la utilizarea secvenţelor plate. Odată
cu adâncirea procesului de rafinare a soluţiei vom fi nevoiţi să folosim şi secvenţele procedurale, omniprezente
în oferta limbajelor de programare pentru organizarea fluxurilor de prelucrare.
Consultare
planuri de
invatamant
Decan
nume actor
nume context de utilizare
Validare Financiar::PreluarePontaj
utilizator
Client
generalizare
actor
ClientPersoanaFizi ClientPersoanaJuridica
ca
Putem specifica comportamentul unui context de utilizare prin descrierea textuală a unui flux de
evenimente, suficient de clar pentru ca un neiniţiat să îl poată înţelege uşor. Când se redactează acest flux de
evenimente, trebuie să specificăm cum şi când începe şi se termină contextul de utilizare, când interacţionează
contextul de utilizare cu actorii şi ce obiecte sunt schimbate, fluxul principal de evenimente, precum şi fluxurile
alternative de evenimente.
Exemplificăm cu un scenariu asociat contextului de utilizare ValidareUtilizator, din cadrul unui sistem soft
care gestionează o reţea de bancomate.
Gestiune Consultare
planuri planuri de
învăţământ
Trecerea de la posibilitatea de a asocia unui context de utilizare o colaborare care îl realizează, în contextul
sistemului, ca întreg, este o problemă nouă, care este rezolvată corect dacă deciziile arhitecturale sunt luate în
zodia inspiraţiei.
Relaţia de generalizare
Generalizarea între contexte de utilizare este asemănătoare generalizării dintre clase. Mai exact, aceasta
înseamnă că orice context de utilizare copil moşteneşte comportamentul şi semantica contextului de
utilizare părinte; copilul poate adăuga elemente de comportament noi sau poate suprascrie
comportamentul părintelui. De asemenea, părintele poate fi substituit de oricare dintre copii lui (dacă ne
exprimăm în termeni de instanţe).
De exemplu, în sistemul informaţional al unei bănci putem avea un context de utilizare Validare utilizator
(responsabil de verificarea identităţii unui utilizator). Putem, de asemenea, avea doi copii specializaţi ai acestui
context de utilizare (Verificare parolă şi Scanare retină). Fiecare dintre aceste două contexte se comportă la fel
ca Validare utilizator, putând fi aplicate oriunde apare Validare utilizator, în plus, fiecare putând adăuga
propriul comportament (primul, prin verificarea unei parole textuale, al doilea prin verificarea şablonului retiniar
unic al utilizatorului).
Notaţia pentru relaţia de generalizare este cunoscută de la generalizarea între clase.
Relaţia de includere
O relaţie de includere între contexte de utilizare se referă la faptul că un context de utilizare de bază
încorporează explicit comportamentul unui alt context de utilizare la o locaţie specificată în bază .
Contextul de utilizare inclus nu poate opera singur niciodată, ci doar instanţiat ca parte a unui context de utilizare
de bază, care îl include.
Folosim relaţia de includere pentru a evita descrierea aceluiaşi flux de evenimente de mai multe ori, prin
descrierea comportamentului comun într-un context de utilizare separat, care va fi inclus în unul sau mai multe
contexte de utilizare de bază. O relaţie de includere se reprezintă ca o relaţie de dependenţă marcată cu
stereotipul include. În descrierea asociată contextului de utilizare de bază, includerea este marcată ca în
exemplul de mai jos.
Relaţia de extindere
O relaţie de extindere într contexte de uilizare se referă la faptul că un context de utilizare de bază
încorporează implicit comportamentul unui alt context de utilizare, la o locaţie specificată indirect de
contextul de utilizare care realizează extinderea.
Folosim relaţia de extindere pentru a modela o parte a unui context de utilizare pe care utilizatorul o percepe
ca fiind un comportament opţional al sistemului. În acest mod, separăm comportamentul opţional de
comportamentul imperativ.
O relaţie de extindere este redată ca o relaţie de dependenţă, marcată cu stereotipul extend. Punctele de
extensie pot fi precizate ca simple etichete în fluxul principal de evenimente, ca mai jos:
În exemplul de mai sus setare_drepturi_suplimentare este un punct de extensie. Ideea este că,
pentru un utilizator obişnuit se face validarea parolei, configurarea standard a sesiunii şi începerea sesiunii.
Pentru un utilizator cu privilegii, va fi executat un context de utilizare care permite stabilirea resurselor
suplimentare necesare utilizatorului.
Ca oricare alt tip de diagramă, ele mai pot conţine note şi constrângeri.
În sfârşit, diagramele de contexte de utilizare mai pot conţine pachete, folosite pentru a grupa elementele
modelului în unităţi mai mari, cu scopul de a mări lizibilitatea modelului.
Uneori, diagramele de contexte de utilizare pot conţine şi instanţe ale contextelor de utilizare, îndeosebi
când dorim să vizualizăm un sistem specific de execuţie.
obiecte
legături
mesaje
Atunci când este cazul, o diagramă de interacţiune mai poate conţine note şi constrângeri.
Diagrame de secvenţă
Cum am mai spus, o diagramă de secvenţă pune accent pe ordonarea în timp a mesajelor. Cum se poate
vedea şi în Figura 7.10, realizarea unei diagrame de secvenţă presupune, plasarea, pentru început, a obiectelor
care participă la interacţiune, în partea de sus a diagramei, de-a lungul axei absciselor, figurată simbolic.
Obiecte
<<create>>
Timpul return
setDatePer() prelNote(m)
insert(m)
<<destroy>>
linia vieţii
În mod normal, obiectul cel mai din stânga va fi obiectul care declanşează interacţiunea, urmat, spre dreapta,
de celelalte obiecte, în ordinea participării la interacţiune. Urmează, precizarea mesajelor pe care aceste obiecte
le expediază şi le receptează, de-a lungul axei ordonatelor, figurată, de asemenea, simbolic.
Alinierea mesajelor se face, de sus în jos, în ordinea crescătoare a timpului în care sunt emise, obţinându-se
o redare vizuală clară a fluxului de control, în timp.
Diagramele de secvenţă au două caracteristici care le deosebesc de diagramele de colaborare.
Mai întâi, este vorba despre linia vieţii obiectului. O linie a vieţii unui obiect este o linie verticală
întreruptă, care reprezintă existenţa unui obiect de-a lungul unei perioade de timp. Majoritatea obiectelor care
apar într-o diagramă de interacţiune vor avea durata de viaţă cât timp există interacţiunea, prin urmare, aceste
obiecte vor fi aliniate în partea de sus a diagramei; pentru aceste obiecte linia vieţii acoperă toată verticala
diagramei, începând de la obiect în jos. Pot exista şi obiecte care sunt create pe timpul interacţiunii, la primirea
unui mesaj purtând marca stereotipului create. Pentru aceste obiecte linia vieţii începe din momentul
receptării mesajului (a se observa linia vieţii pentru obiectul m, în Figura 76). Obiectele pot fi distruse pe timpul
interacţiunii. Linia vieţii pentru un astfel de obiect se termină odată cu primirea mesajului purtând marca
stereotipului destroy, moment marcat prin prezenţa unui X lărgit, care punctează terminarea liniei vieţii (a
se observa linia vieţii pentru obiectul m, în Figura 7.10).
În al doilea rând, este vorba despre focalizarea controlului pe un obiect. Focalizarea controlului pe un obiect
este indicată printr-un dreptunghi înalt şi de lăţime mică, prin care se figurează perioada de timp în care un
obiect execută o acţiune, directă sau dintr-o procedură subordonată. Partea de sus a dreptunghiului coincide cu
startul acţiunii; partea de jos este asociată cu terminarea acţiunii şi poate fi însoţită de un mesaj de tip return
(cum se întâmplă în Figura 7.10, la terminarea acţiunii obiectului n; de observat şi forma particulară a săgeţii în
cazul unui mesaj de tip return).
Imbricarea focalizării controlului (datorită apelurilor recursive, apelului unei self-operaţii, etc.) poate fi
redată cu ajutorul unor dreptunghiuri desenate uşor la dreapta focus-ului părinte, ca în Figura 7.11.
print()
Diagrame de colaborare
O diagramă de colaborare pune accent pe organizarea obiectelor care participă la o interacţiune. După cum
se poate vedea şi în Figura 7.12, realizarea unei diagrame de colaborare poate începe prin reprezentarea
obiectelor care participă la interacţiune, în calitate de vârfuri ale unui graf. În al doilea rând, se adaugă legăturile
dintre obiecte, în calitate de arce ale grafului. În sfârşit, legăturile în cauză sunt îmbogăţite semantic prin ataşarea
de mesaje pe care obiectele le trimit sau le primesc.
În acest fel, persoana care urmăreşte o diagramă de colaborare beneficiază de indicaţii vizuale clare relativ
la fluxul de control al interacţiunii, fără a pierde din vedere organizarea structurală a obiectelor care colaborează.
s:Student
1:<<create>>
2:setDatePers()
2.3:insert(m) <<global>>
m:FoaieMatricola f:FluxFoiMatricole
2.3.1:<<destroy>>
2.1:prelNote(m)
2.2
<<global>
n:Note >
Diagramele de colaborare au două caracteristici care le deosebesc de diagramele de secvenţă. Mai întâi, este
vorba de indicarea modului în care un obiect este legat de altul (=calea de acces la obiect).
În acest scop, putem ataşa legăturii un stereotip de cale la capătul unei legături, indicând natura vizibilităţii
obiectului vizat, pentru obiectul care expediază mesajul. În Figura 7.12, f este global pentru m, de exemplu.
În al doilea rând, este vorba de sistemul de secvenţare prin ataşare de numere de secvenţă explicite. Pentru a
specifica ordonarea în timp a mesajelor, mesajul este prefixat cu un număr (începând cu mesajul numărul 1),
incrementând cu o unitate prefixul fiecărui mesaj nou (2,3,...).
În situaţia în care avem imbricare de mesaje, se apelează la numerotarea zecimală Dewey (ceea ce
înseamnă că, dacă 1 este primul mesaj, atunci 1.1 poate fi primul mesaj imbricat în 1, 1.2 este al doilea mesaj
imbricat în 1, etc. ). Se poate vizualiza imbricarea mesajelor pe oricâte nivele dorim. După cum se vede şi în
Figura 7.12, de-a lungul aceleeaşi legături putem reprezenta mai multe mesaje (eventual cu direcţii de expediere
diferite) dar având numere de secvenţă unice.
De cele mai multe ori, în practică modelăm fluxuri de control secvenţiale. Atunci când este cazul , putem
modela şi fluxuri de control mai complexe (iteraţii sau ramificări). O iteraţie înseamnă o secvenţă repetată de
mesaje. Pentru a modela o iteraţie, trebuie să prefixăm numărul de secvenţă al mesajului cu o expresie iteraţie de
tipul [i:=1..n] sau, pur şi simplu * dacă dorim să semnalăm prezenţa iteraţiei fără a specifica alte detalii.
O iteraţie indică faptul că mesajul vizat şi orice mesaj imbricat vor fi repetate în conformitate cu expresia
asociată iteraţiei.
Pentru a indica mesaje cu execuţie condiţionată, mesajele în cauză pot avea numărul de secvenţă prefixat cu
o clauză de condiţie, de tipul [x0]. Un mesaj alternativ va avea acelaşi număr de secvenţă, dar prefixat de o
condiţie în relaţia de SAU EXCLUSIV cu celelalte mesaje având acelaşi număr de secvenţă.
UML nu impune o anumită sintaxă pentru expresiile din interiorul parantezelor drepte. Putem folosi
convenţii pseudocod sau sintaxă specifică unui anumit limbaj de programare.
Scurtă notă relativ la ingineria directă şi inversă a diagramelor de interacţiune.
Ingineria directa (=obţinerea codului pornind de la model) este posibilă pentru ambele tipuri de diagrame
de interacţiune, îndeosebi, atunci când contextul diagramei este o operaţie. Cantitatea şi acurateţea codului
generat depinde atât de „inteligenţa” softului care procesează modelul (în cazul nostru diagrama de interacţiune)
cât şi de cantitatea şi acurateţea informaţiei conţinută de model.
Este previzibil faptul că ne aflăm într-un stadiu de abstractizare în care mai sunt încă mulţi paşi de făcut
pentru a mapa eficient modelul pe codul care îl implementează.
Ingineria inversă (=crearea modelului pornind de la cod) este, de asemenea, posibilă, pentru ambele tipur i
de diagrame de interacţiune, îndeosebi atunci când codul în cauză este implementarea unei operaţii.
Deoarece o diagramă de activitate este un gen de maşină de stare, va avea toate caracteristicile unei maşini
de stare. Aceasta înseamnă că diagramele de activitate pot conţine stări simple şi compuse, ramificări (specifice
unor prelucrări secvenţiale sau paralele), etc.
Evident, asemenea tutror celorlaltor diagrame, diagramele de activitate mai pot conţine şi constrângeri.
Start V[I]:=I+10
Pe de alta parte, stările de activitate pot fi, ulterior descompuse, activitatea lor putând fi reprezentată de alte
diagrame de activitate. Stările de activitate nu sunt atomice, ceea ce înseamnă că pot fi întrerupte şi execuţia lor
are durată în timp.
După cum se vede în Figura 80, nu există deosebire de notaţie esenţială între stările de acţiune şi activitate,
cu excepţia faptului că starea de activitate poate conţine elemente adiţionale, precum: acţiunile iniţiale şi finale
sau specificările de submaşini.
Tranziţiile
În momentul în care o acţiune sau o activitate este terminată fluxul de control este preluat de următoarea
acţiune sau activitate. Trecerea de la o stare la alta se numeşte tranziţie şi se reprezintă ca o linie simplă
orientată (a se vedea Figura 7.14).
Semantic vorbind, acest gen de tranziţii, se numesc tranziţii fără declanşator sau de terminare, deoarece
controlul trece de la starea sursă la starea destinaţie de îndată ce acţiunea/activitatea din starea sursă este
terminată.
starea de start
tranziţii
stări de acţiune
starea finală
În momentul în care acţiunea unei stări sursă date este terminată, se va executa acţiunea specifică ieşirii,
dacă există vreuna. După care, necondiţionat, are loc tranziţia către următoarea acţiune sau activitate. Urmează
executarea acţiunii specifice intrării în noua stare (dacă există) şi executarea acţiunii/activitaţii asociate noii stări,
etc. Există situaţii în care fluxul de control evoluează nedefinit, dar există şi foarte multe situaţii în care acesta
încetează la întâlnirea unei stări finale.
Notaţiile pentru starea iniţială şi starea finală pot fi observate în Figura 7.14.
Ramificarea (branching) şi unirea (merge)
Tranziţiile secvenţiale, simple, sunt destul de obişnuite, dar nu sunt singurele întâlnite în procesul de
modelare a fluxurilor de control. La fel ca în cazul schemelor logice (hărţile de fluxuri – flowchart-uri), putem
apela la ramificări pentru a specifica tranziţii alternative, ghidate de o anumită expresie booleană. O ramificare,
se introduce, din punct de vedere al notaţiei, ca un romb; poate avea o singură tranziţie la intrare şi două sau mai
multe tranziţii la ieşire. Pe fiecare tranziţie de ieşire se indică o expresie booleană, evaluată la intrarea în
ramificare. Evident, expresiile boolene asociate tranziţiilor care ies dintr-o ramificare (numite şi expresii de
gardă) trebuie să fie mutual exclusive. Un exemplu, în Figura 7.15.
Se mai adaugă şi faptul că simularea unei iteraţii este destul de simplă, folosind ramificarea.
Diagrama din Figura 7.15 poate fi completată, ca semantică şi din punct de vedere al notaţiei, ca în Figura
7.16.
Do verificareCont(s)
ramificarea [else]
(branch, în engleză) Do afisareStareCont()
[există suma]
expresii de gardă
Do tranzactie(s)
Do verificareCont(s)
Do afisareStareCont() Do tranzactie(s)
DestupareSticlăVin
Combinare
îmbinări
2. Folosind sintaxa UML, specificaţi cerinţele faţă de un sistem soft care automatizează fluxurile
informaţionale ale secretariatului unei şcoli generale.
3. Folosind sintaxa UML, specificaţi cerinţele faţă de un sistem soft care automatizează fluxurile
informaţionale ale secretariatului unei facultăţi.
4. Folosind sintaxa UML, specificaţi cerinţele faţă de un sistem soft care automatizează fluxurile
informaţionale ale unei conferinţe ştiinţifice.
5. Elaboraţi diagrama claselor aferentă soluţiei UML a problemei automatizării fluxurilor informaţionale
ale unei case de schimb valutar
6. Elaboraţi diagrama claselor aferentă soluţiei UML a problemei automatizării fluxurilor informaţionale
ale secretariatului unei facultăţi.
7. Elaboraţi diagrama claselor aferentă soluţiei UML a problemei automatizării fluxurilor informaţionale
ale secretariatului unei şcoli generale.
8. Folosind sintaxa UML, să se reprezinte aspectele statice ale aplicaţiei care automatizează fluxurile
informaţionale ale unei case de schimb valutar.
9. Folosind sintaxa UML, să se reprezinte aspectele statice ale aplicaţiei care automatizează fluxurile
informaţionale ale secretariatului unei şcoli generale.
10. Folosind sintaxa UML, să se reprezinte aspectele statice ale aplicaţiei care automatizează fluxurile
informaţionale ale secretariatului unei facultăţi.
12. Elaboraţii arhitectura UML a soluţiei problemei realizării unei librării virtuale care funcţionează pe
lângă o editură.
13. Elaboraţi arhitectura UML a soluţiei problemei realizării unui sistem de informare şi documentare care
funcţioneză pe lângă o primărie.
14. Elaboraţi arhitectura UML a soluţiei problemei informatizării fluxurilor informaţionale ale unui birou
notarial.
BIBLIOGRAFIE SELECTIVĂ
[1] Bennet, S., McRobb, S., Farmer, R., Object Oriented Systems Analysis and Design using UML, McGraw-
Hill Publishing Company, 1999
[2] Booch, G., Rumbaugh, J., Jacobson, I., The Unified Modeling Language User Guide, Addison-Wesley,
1999
[3] Booch, G., Object Oriented Design with Applications, The Benjamin/ Cummings Publishing Company,
Inc., 1991
[4] Fowler, M., UML Distiled, Second Edition, Addison Wesley, 2000
[7] Quatrany, T., Visual Modeling with Rationale Rose and UML,
Addison-Wesley, 1998
[8] Rumbaugh, J., Jacobson, I., Booch, G., The Unified Modeling Language Reference Manual, Addison-
Wesley, 1999
CUPRINS
1 Probleme a căror rezolvare depinde esenţial de ingineria sistemelor soft ....................................................... 3
1.1 Ce este ingineria sistemelor soft? .............................................................................................................. 3
1.2 Ce este un sistem soft? .............................................................................................................................. 4
1.3 Probleme cu care se confruntă specialiştii în IS ........................................................................................ 6
2 Ce este o metodologie de dezvoltare a softului? ............................................................................................ 12
2.1 De ce avem nevoie de MDS? .................................................................................................................. 12
2.2 Încercare de caracterizare a unei metodologii generice de dezvoltare a softului.....................................13
3 Ciclul de viaţă al unui sistem soft .................................................................................................................. 18
3.1 Ciclul de viaţă al sistemelor soft. Încă o introducere............................................................................... 18
3.2 Ciclul de viaţă al sistemelor soft. Câteva exemple. ................................................................................. 18
3.2.1 Modelul cascadă( MC)................................................................................................................... 19
3.2.2 Modelul V (MV)............................................................................................................................ 20
3.2.3 Modelul prototipizării (MP)........................................................................................................... 20
3.2.4 Concluzii........................................................................................................................................ 22
4 Abstractizarea soluţiei unui sistem soft ......................................................................................................... 24
4.1 Modelarea. Limbaje de modelare ............................................................................................................ 24
4.2 Arhitectura unui limbaj de modelare ....................................................................................................... 28
5 Modelarea obiect orientatĂ cu UML ............................................................................................................. 30
5.1 Ce este UML(fără a intra în detalii)?....................................................................................................... 30
5.2 Date esenţiale pentru înţelegerea UML ...................................................................................................31
5.3 Scurtă incursiune în universul conceptual al UML ................................................................................. 34
6 Modelarea aspectelor structurale. Elemente-suport fundamentale ................................................................ 41
6.1 Clase........................................................................................................................................................ 41
6.2 Relaţii ...................................................................................................................................................... 44
6.3 Mecanisme comune.................................................................................................................................45
6.4 Diagrame ................................................................................................................................................. 48
Introducere..................................................................................................................................................... 48
Diagrame structurale...................................................................................................................................... 49
Diagrame comportamentale........................................................................................................................... 50
Diagrame ale claselor ....................................................................................................................................50
7 Modelarea aspectelor comportamentale. Elemente-suport fundamentale...................................................... 54
7.1 Interacţiuni .............................................................................................................................................. 54
7.2 Concepte vehiculate în modelarea interacţiunilor ................................................................................... 54
7.2.1 Contextul în care se manifestă interacţiunile ................................................................................. 54
Obiecte şi roluri ............................................................................................................................................. 55
Legături.......................................................................................................................................................... 55
Secvenţare...................................................................................................................................................... 56
Crearea, modificarea şi distrugerea obiectelor............................................................................................... 57
Reprezentarea unei interacţiuni ..................................................................................................................... 57
7.3 Contexte de utilizare................................................................................................................................ 58
7.3.1 Elemente introductive .................................................................................................................... 58
7.3.2 Concepte UML din sfera contextelor de utilizare .......................................................................... 59
Numele contextelor de utilizare ..................................................................................................................... 59
Contextele de utilizare şi actorii .................................................................................................................... 59
Contextele de utilizare şi fluxurile de evenimente ......................................................................................... 59
Contextele de utilizare şi scenariile ............................................................................................................... 60
Contextele de utilizare şi colaborările............................................................................................................ 61
Organizarea contextelor de utilizare .............................................................................................................. 61
Relaţia de generalizare...................................................................................................................................61
Relaţia de includere ....................................................................................................................................... 62
Relaţia de extindere ....................................................................................................................................... 62
7.4 Diagrame de contexte de utilizare ........................................................................................................... 62
Concepte UML utilizate în sfera diagramelor de contexte de utilizare.......................................................... 62
Conţinutul unei diagrame de contexte de utilizare......................................................................................... 62
Scurtă notă, relativ la ingineria directă şi inversă a diagramelor UML ......................................................... 63
7.5 Diagrame de interacţiune......................................................................................................................... 63
Conţinutul unei diagrame de interacţiune ...................................................................................................... 63
Diagrame de secvenţă ....................................................................................................................................63
Diagrame de colaborare .................................................................................................................................65
7.6 Diagrame de activitate............................................................................................................................. 66
Conţinutul unei diagrame de activitate .......................................................................................................... 66
Stări de acţiune şi stări de activitate............................................................................................................... 66
Tranziţiile ...................................................................................................................................................... 67
Teme pentru proiecte la disciplina Ingineria softului....................................................................................... 70
BIBLIOGRAFIE SELECTIVĂ ......................................................................................................................... 71
CUPRINS ............................................................................................................................................................ 72