Documente Academic
Documente Profesional
Documente Cultură
Cursul 6
Proiectarea algoritmilor: algoritmii utilizai pentru a furniza servicii sunt proiectai n detaliu
i specificai.
Acest proces se repet pentru fiecare subsistem pn cnd componentele identificate pot fi
mapate direct n componentele limbajului de programare.
2. Caracteristicile unei proiectri corecte
Rezultatul principal a fazei de proiectare este un model al codului care arat cum este
implementat sistemul i o diagram a dependenelor dintre module, care arat cum va fi sistemul
divizat n module i cum interacioneaz acestea. Pentru module mai dificile, se includ specificaii
speciale.
Ce nseamn o proiectare corect? Desigur, nu exist o modalitate simpl i obiectiv care s
spun c o proiectare este mai bun dect alta. Dar exist unele proprieti cheie care pot fi utilizate
pentru a msura calitatea proiectrii. n mod ideal, o proiectare ar trebui s aib toate aceste
caracteristici. n practic, trebuie fcute compromisuri ntre ele. Aceste caracteristici sunt
extensibilitatea, sigurana i eficiena.
2.1. Extensibilitatea
Proiectarea trebuie s poat suporta noi funcii. Un sistem perfect din toate celelalte puncte de
vedere, dar n care nu poate fi integrat nici o schimbare sau mbuntire, nu este de prea mare folos.
Chiar dac nu exist cerine pentru trsturi suplimentare, probabil vor exista schimbri n domeniul
problemei care vor necesita schimbri n program.
Modelul problemei trebuie s reflecte caracteristicile generale ale problemei. Un obstacol des
ntlnit atunci cnd se dorete extinderea unui sistem este faptul c anumite noiuni nu sunt exprimate
n cod i deci funcionalitile corespunztoare care trebuie adugate nu-i gsesc locul n program.
Un exemplu n acest sens poate fi vzut n Microsoft Word. Acesta a fost proiectat plecnd de la
premisa c structura fundamental de organizare a unui document este paragraful. De aceea,
structurile ierarhice pot fi introduse cu greutate i, ca efect, divizarea documentului n seciuni nu se
face foarte eficient. Optimizarea modelului nu trebuie s elimine substructurile care numai par
nefolositoare. Abstractizrile nu trebuie s nlocuiasc structurile concrete dect dup o analiz
serioas.
Chiar dac programul cuprinde noiuni generale pe baza crora s poat fi adugate noi
funcionaliti, acestea trebuie introduse fr a modifica tot codul. De aceea, proiectarea trebuie s fie
localizat, adic problemele diferite trebuie separate n regiuni distincte ale codului. Modulele trebuie
decuplate ct mai mult, astfel nct o schimbare s nu antreneze modificri n cascad.
2.2. Sigurana
Sistemul trebuie s aib un comportament sigur, care nu presupune doar lipsa "prbuirilor"
sau a pierderii datelor, ci i faptul c trebuie s ruleze corect, aa cum se ateapt utilizatorul. Nu e
suficient ca sistemul s ndeplineasc o specificaie obscur, ci trebuie s ndeplineasc o specificaie
care poate fi neleas uor de utilizator, astfel nct acesta s poat prezice comportamentul
sistemului. Pentru sistemele distribuite, este important disponibilitatea. Pentru sisteme de timp real,
este important sincronizarea. Criteriile de stabilire a siguranei variaz n funcie de tipul aplicaiei.
Conexiunile telefonice automate trebuie s fie n permanen disponibile i s fie foarte sigure, uneori
pot fi suprancrcate, iar alte ori mai au loc rutri eronate de mesaje. ntrzieri mici ntr-un program
de trimitere a email-urilor nu prea conteaz, ns aceleai ntrzieri se pot dovedi catastrofale pentru
un controler de reactor nuclear.
Modelarea atent. Sigurana nu poate fi introdus uor ntr-un sistem existent. Cheia realizrii
de produse sigure este modelarea i dezvoltarea atent. Problemele serioase n sistemele critice n
general nu apar din erori de programare, ci din erori de analiz a problemei. Programatorii pur i
simplu nu iau n calcul o anumit proprietate a mediului n care este plasat sistemul. De exemplu,
incidentul din 1993 cnd un avion Airbus a ncercat s aterizeze pe timp de furtun pe aeroportul din
Varovia, ns frnele nu au funcionat, avionul a ieit de pe pist i a luat foc.
Analiza i testarea. Orict de atent ar fi cineva, este foarte probabil c va face pn la urm
greeli. Din punct de vedere al costului, cea mai bun soluie este verificarea codului de ctre alt
persoan. O testare mai detaliat i care poate descoperi erori mai subtile poate fi realizat cu un
instrument automat.
2.3. Eficiena
Sistemul trebuie s consume resurse n limite rezonabile. Eficiena depinde de context. O
aplicaie care ruleaz pe un telefon mobil nu are disponibil la fel de mult memorie ca una care
ruleaz pe un PC. Pentru determinarea eficienei unui program, se analizeaz n general timpul de
execuie i spaiul necesar. Pe lng timpul de execuie, este la fel de important i timpul necesar
dezvoltrii, care este legat de costul aplicaiei. O proiectare care poate fi implementat mai economic
poate fi preferabil uneia care ndeplinete toate metricile de calitate dar este mai scump.
Modelul obiectului. Alegerea modelului obiectelor din cod este crucial, deoarece este greu
de schimbat. De aceea, intele de performan trebuie considerate nc de la nceput n faza de
proiectare.
Evitarea tendeniozitii. Cnd se dezvolt modelul obiectelor pentru problem, trebuie
excluse orice preocupri legate de implementare. Un model care conine detalii de implementare este
tendenios (engl. "biased"), deoarece favorizeaz o anumit implementare. Rezultatul este excluderea
unor posibiliti de implementare care se pot dovedi n final mai eficiente.
Optimizarea. n general, "optimizare" este o denumire greit, deoarece nseamn creterea
performanelor n detrimentul altor caliti, cum ar fi claritatea structurii. Dac optimizarea nu este
tratat cu atenie, putem risca s ajungem la un sistem mai prost din toate punctele de vedere. Sunt
recomandate numai optimizrile care vor avea efecte foarte puternice, de exemplu o modificare care
reduce complexitatea de timp de la O(n) la timp constant. Optimizrile unor aspecte minore trebuie
evitate dac presupun o scdere n claritatea proiectrii.
3. Proiectarea orientat obiect
Dup cum tim, faza de proiectare se afl situat ntre analiz i implementare. Toate aceste
faze fac parte din procesul de dezvoltare orientat obiect. Aa cum am vzut n cursul precedent,
analiza orientat obiect se refer la dezvoltarea unui model orientat obiect al domeniului aplicaiei.
Obiectele identificate reflect entiti i operaii asociate cu problema care trebuie rezolvat.
Proiectarea orientat obiect privete dezvoltarea unui model orientat obiect al sistemului
software care trebuie s implementeze cerinele identificate. Programarea orientat obiect urmrete
implementarea (punerea n practic a) proiectrii software folosind un anumit limbaj de programare
orientat obiect.
Continund faza de analiz orientat obiect, proiectarea orientat obiect este o strategie n
care sistemul se gndete n termeni de "obiecte", n loc de operaii i funcii. Programul nu este
proiectat ca o mulime de funcii care schimb date prin parametri i memorie comun (variabile
3
O soluie a acestei probleme este dezvoltarea de modele diferite la diferite nivele de detaliu.
Cnd exist legturi strnse ntre inginerii de cerine, proiectani i programatori, modelele abstracte
sunt suficiente. Decizii specifice de proiectare pot fi fcute pe msur ce sistemul este implementat.
Cnd legturile dintre echipele implicate sunt indirecte (de exemplu, cnd sistemul este proiectat de o
parte a unei organizaii i implementat n alt parte), sunt necesare modele mai detaliate.
Detalierea modelului depinde i de tipul de sistem dezvoltat. Un sistem simplu de prelucrare
secvenial a datelor va fi proiectat ntr-un mod diferit fa de un sistem integrat de timp real i deci
vor fi necesare modele de proiectare diferite. n general, exist dou tipuri de modele de proiectare
care descriu o proiectare orientat obiect:
modelele statice, care descriu structura static a sistemului n termenii claselor sistemului i ai
relaiilor dintre ele; relaiile importante care trebuie documentate n aceast etap sunt:
relaiile de generalizare, relaiile folosete/este folosit de, relaiile de compunere etc.;
modelele dinamice, care descriu structura dinamic a sistemului, cu interaciunile dintre
obiectele sistemului (nu dintre clase); interaciunile care trebuie documentate aici sunt
serviciile solicitate de obiecte i modul n care starea sistemului este influenat de acestea.
4.5. Specificarea interfeelor obiectelor
O parte important a procesului de proiectare este specificarea interfeelor dintre diferitele
componente ale proiectrii. Ea este foarte important i deoarece permite posibilitatea ca obiectele i
celelalte componente s fie proiectate n paralel. Odat ce a fost specificat interfaa, cei care
dezvolt celelalte obiecte pot considera c aceasta este interfaa care va fi implementat.
Proiectanii trebuie s evite informaiile privind reprezentarea interfeei. Reprezentarea
trebuie s fie ascuns, iar pentru accesarea i actualizarea datelor trebuie furnizate servicii ale
obiectelor. Dup cum tim, dac reprezentarea este ascuns, ea poate fi schimbat fr a afecta
obiectele care folosesc atributele respective. n acest fel, design-ul devine mai uor de ntreinut. De
exemplu, reprezentarea unei stive ca vector poate fi schimbat cu o reprezentare de tip list fr s
afecteze celelalte obiecte care folosesc stiva.
ntre obiecte i interfee nu exist n mod necesar o relaie simpl 1:1. Acelai obiect poate
avea mai multe interfee care semnific perspective diferite asupra serviciilor pe care le furnizeaz.
De exemplu, n Java sau C#, interfeele sunt declarate separat de clase iar clasele .implementeaz.
interfeele. De asemenea, un grup de obiecte poate fi accesat printr-o singur interfa.
Proiectarea interfeelor obiectelor trebuie s specifice semnturile i semantica serviciilor
asigurate de un obiect sau de ctre un grup de obiecte.
5. Metoda de proiectare Coad-Yourdon
Metoda de proiectare orientat obiect Coad-Yourdon const n 4 componente:
componenta domeniului problemei;
componenta interaciunii cu factorul uman;
componenta coordonrii task-urilor;
componenta coordonrii datelor.
Fiecare component este construit din clase i obiecte. Componenta domeniului problemei se
bazeaz pe modelul logic construit n timpul analizei orientate obiect. Dac sistemul va fi
implementat ntr-un limbaj de programare orientat obiect, atunci va exista o coresponden de 1 la 1
ntre clasele i obiectele domeniului problemei. Componenta interaciunii cu factorul uman
coordoneaz mesajele dinspre i nspre utilizator. Componenta coordonrii task-urilor se refer la
6
multiplele fire de execuie existente ntr-un sistem. Componenta coordonrii datelor furnizeaz
infrastructura pentru nregistrarea i regsirea datelor.
Corespunztoare acestor patru componente, metoda identific patru activiti:
proiectarea componentei domeniului problemei;
proiectarea componentei interaciunii cu factorul uman;
proiectarea componentei coordonrii task-urilor;
proiectarea componentei coordonrii datelor.
5.1. Activitatea I: Proiectarea componentei domeniului problemei
n aceast prim activitate, componentele domeniului rezultate din analiz sunt utilizate i
suplimentate. Deoarece se bazeaz pe reutilizarea claselor identificate de faza de analiz, modificrile
trebuie meninute pe ct posibil la un nivel redus.
Apoi clasele specifice domeniului problemei sunt grupate mpreun prin adugarea unei clase
rdcin. Viznd direct limbajul de programare care va fi utilizat pentru implementare, poate fi
necesar modificarea structurilor gen-spec pentru a se potrivi nivelului de motenire oferit de
limbajul ales.
Dac structurile gen-spec ale modelului analizei orientate obiect includ moteniri multiple,
trebuie fcute cteva modificri ale acestora atunci cnd se va utiliza un limbaj de programare
orientat obiect care nu suport mecanismul motenirii sau care nu suport dect motenirea simpl.
Dou tipuri de motenire multipl sunt prezentate n figurile 2 i 3.
Figura 4. Formarea unor ierarhii separate, mapate ntre ele prin structuri ntreg-parte
Ierarhia multipl poate fi transformat direct ntr-o ierarhie simpl, caz n care anumite
atribute i servicii vor fi repetate n clasele specializate.
Dac nu sunt necesare, task-urile nu trebuie proiectate ntruct mresc complexitatea. Exist
cteva tipuri de task-uri care pot fi identificate:
task-uri declanate de un eveniment (de exemplu: apsarea unui buton al mouse-ului);
task-uri declanate la un anumit interval de timp;
task-uri prioritare i critice.
Cnd sunt necesare trei sau mai multe task-uri, se recomand adugarea unui task special de
coordonare. Dup identificarea task-urilor, necesitatea lor trebuie reverificat. Pentru fiecare task,
trebuie specificat:
ce este task-ul;
cum este coordonat task-ul;
cum comunic task-ul.
5.4. Activitatea a IV-a: Proiectarea componentei coordonrii datelor
Mai nti trebuie selectat o abordare pentru coordonarea datelor: fiiere simple sau un sistem
de gestionare a bazelor de date, pe baza unor criterii potrivite. Apoi, n funcie de abordarea aleas,
trebuie proiectat componenta de coordonare a datelor, adic a formatului de date i a serviciilor
corespunztoare.
6. Concluzii
Scopul acestui curs este de a realiza o introducere n procesul de proiectare a sistemelor
software. Au fost amintite mai nti caracteristicile unei proiectri corecte: extensibilitatea, sigurana
si eficiena, mpreun cu modalitile prin care pot fi atinse aceste deziderate. S-a definit proiectarea
orientat obiect i s-au detaliat etapele acestei faze de dezvoltare a produselor software: determinarea
contextului sistemului i a modelelor de utilizare, proiectarea arhitecturii, identificarea obiectelor,
modelele de proiectare i specificarea interfeelor obiectelor. n final, s-a concretizat aceast faz prin
descrierea metodei de proiectare Coad-Yourdon, cu cele patru activiti specifice: proiectarea
componentei domeniului problemei, proiectarea componentei interaciunii cu factorul uman,
proiectarea componentei coordonrii task-urilor i proiectarea componentei coordonrii datelor.
11