BIBLIOTECI
Reutilizarea secventeolor
Biblioteca de subprograme
Biblioteca de macrodefinitii
Biblioteci de secvente de cod sursa
Biblioteci de clase
Testarea
Elaborarea documentatiei
Implementarea
Managementul bibliotecilor
Reutilizarea secventelor
Indiferent de tehnologia de elaborare a produselor software, ideea de reutilizare a existat de la inceput.
Asa cum se repeta refrenul intr-un cantec, tot asa, intr-un program se repeta anumite secvente.
Asa au aparut subprogramele, din necesitatea ca si in cazul refrenului, de a relua anumite prelucrari, fara ca aceste prelucrari sa fie constituite in secvente noi, ci sa fie sub forma unor secvente care se apeleaza prin instructiunea CALL, deci se reutilizeaza.
Este vorba de reutilizarea de secvente in interiorul programului insusi.
Cu timpul, s-a observat ca unele subprograme bine scrise prin preluare in alte programe, conduc la:
- garantarea ca se obtin rezultate corecte
- reducerea duratei de realizare a programului
- reducerea costurilor.
Cu timpul, s-au definit:
- biblioteci de subprograme care contin proceduri, functii destinate rezolvarii unor clase de probleme: biblioteci de calcule matriceale, biblioteci de calcule polinomiale, biblioteci pentru sisteme liniare de exuatii, biblioteci de optimizari functii neliniare, biblioteci de programare liniara, biblioteci pentru optimizari de stocuri, biblioteci pentru validari de date, biblioteci cu proceduri de sortare:
- biblioteci de macrodefinitii, care includ m,acrodefinitii pentru testarea apartenenetei la o anumita categorie de campuri, biblioteci de alegere element minim sau maxim, macrodefinitii pentru implementarea unor functii grafice, a unor functii pentru lucru cu fisier;
- biblioteci de clase care contin clase dintre cele mai frecvent utilizate in programe, clase care gestioneaza operatii de intrare-iesire, ferestre, conversii, referiri, operatii intre diferite tipuri de date, supraincarcarea de operatori, transformari a tipurilor de date;
- biblioteci de secvente de program cu descrieri de date de catre managerul care gestioneaza dezvoltarea unei aplicatii; se asigura obligativitatea ca toti membri echipei sa utilizeze resursele impuse de manager, exact asa cum au fost definite; in biblioteca se descriu structuri de articole, antete de proceduri, structuri de liste de parametri, structuri de rezultate returnate si liste cu coduri a caror interpretare este , de asemenea, impusa de manager.
Pentru a reutiliza software, cel ce se incumeta sa impuna o astfel de politica in firma trebuie sa fie constient ca:
- in biblioteca se includ numai subprograme cu generalitate foarte mare; este foarte dificil sa se accepte ideea ca utilizatorul unui subprogram care a dat un rateu va mai apela la biblioteca cu pricina, crezand ca la a doua tentativa lucrurile vor sta altcumva; rateul vizeaza un caz care nu este inclus in subprogram, dar de care utilizatorul bibliotecii are mare nevoie;
- subprogramele au fost suficient de mult testate si ofera rezultate complete si corecte; trecerea intr-o biblioteca se face in timp, dupa ce programatorul s-a convins ca subprogramul este intr-adevar bun si nu ofera nicio surpriza din punct de vedere a corectitudinii si completitudinii rezultatelor;
- mai multi programatori vor apela acele subprograme datorita faptului ca in aplicatiile lor simt nevoia sa preia anumite operatii executate de aceste subprograme de biblioteca si sa nu mai depuna el efort pentru a le scrie; exista tentatia de a elabora subprograme complexe care sa execute foarte multe prelucrari specifice unei anumite probleme; in acest caz este putin probabil ca si alti programatori se vor confrunta exact cu acea problema si vor apela subprogramul; daca in biblioteca se va include subprogramul pentru calculul intretinerii unei familii pentru un apartament de pe o scara de la un bloc, acest subprogram are sanse reduse de a fi apelat; daca insa se vor scrie subprograme pentru: adunare elemente vector, pentru impartire elemente vector la un numar, pentru inmultire elemente vector cu un numar, pentru adunare elemente a doi vectori pentru a rezulta un alt vector, pentru sortare doi vectori dupa o cheie continuta in alt vector, evident, folosind aceste subprograme, cine doreste sa calculeze intretinerea unei familii o va face daca primeste ca intrare niste vectori cu suprafete de apartamente si numar de persoane din apartamente si niste numere din facturi;
- biblioteca trebuie sa fie construita astfel incat subprogramele: sa fie identificate usor, parametri sa fie usor de alcatuit si mai ales sa inspire incredere; de regula, cei care construiesc biblioteci trebuie sa ofere suficient de multe detalii incat curiozitatea programatorilor sa fie total satisfacuta; mai mult, modul in care au fost elaborate bibliotecile trebuie sa evidentieze inalta clasa a celor care le-au elaborat; nicio biblioteca elaborata de o echipa slaba nu va fi in obiectivul programatorilor care doresc sa reutilizeze componente din ea.
Bibliotecile se elaboreaza numai in ideea de a include componente care se reutilizeaza.
Mergand pe aceasta idee, cei care elaboreaza biblioteci trebuie sa aiba o strategie si de la inceput trebuie sa impuna programatorilor sa scrie subproigrame care rezolva probleme si care au destinatia precisa: o biblioteca de subprograme.
revenire

Biblioteca de subprograme
Biblioteca de subprograme este o constructie unitara.
Biblioteca de subprograme este o constructie omogena.
Biblioteca de subprograme solutioneaza probleme apartinand unei clase restranse.
Numele bibliotecii de programe indica clar despre ce este vorba, ce operatii solutioneaza, cine sunt operanzii.
Biblioteca de subprograme este gandita din start sa includa componente reutilizabile de catre programatorii din firma, in primul rand.
In cazul in care in firma se scriu programe in care se lucreaza cu matrice de foarte mari dimensiuni, se va construi o biblioteca de lucru cu matrice mari.
Se stabilesc o serie de reguli, precum:
- matricea foarte mare se stocheaza in fisier prin triplete: linie, coloana si valoare;
- linia si coloana sunt variabile definite int, iar valoarea este definita float; - numarul de linii si numarul de coloane sunt de tip int si se specifica ca primele doua campuri din fisier;
- se memoreaza numai elementele nenule din matrice;
- in memorie, matricea se stocheaza sub forma de matrice rara ca lista de liste.
Biblioteca va contine urmatoarele subprograme:
- subprogram pentru crearea fisierului cu matricea;
- subprogram pentru extragerea matricei din fisier si construirea listei de liste;
- subprogram pentru transpunerea matricei;
- subprogram pentru adunarea a doua matrice;
- subprogram pentru compararea a doua matrice;
- subprogram pentru inmultirea a doua matrice;
- subprogram pentru inversarea unei matrice;
- subprogram pentru afisarea pe blocuri a matricei rare;
- subprogram pentru rezolvarea unui sistem de ecuatii liniare;
- subprogram pentru verificarea daca matricea este simetrica;
- subprogram pentru calcul valori proprii;
- subprogram pentru calculul de norme ale matricei;
- subprogram pentru aflarea elementelor minime si maxime pe linii si pe coloane;
- subprogram pentru insumari ale elementelor pe linii si pe coloane.
Cel care vizeaza elaborarea unei astfel de biblioteci va specifica foarte clar:
- cum se numesc subprogramele si ce returneaza fiecare;
- definirea campurilor din elementele listei de liste, a pointerilor listei de liste;
- modul de referire a elementelor din lista de lista;
- structura repetitiva utilizata in traversarea listei de liste;
- structuri de liste de parametri;
- expresiile de referire.
Pentru fiecare subprogram se stabilesc inputurile si autputurile, formulele de calcul si chiar se dau detalii de programare.
Dupa fixarea riguroasa a tuturor elementelor se trece la scrierea subprogramelor.
Biblioteca de calcul si de manipulare a matricelor de mari dimensiuni devine in acest fel o constructie unitara pentru ca:
- toate subprogramele se scriu in limbajul C++;
- toate subprogramele utlizeaza aceleasi structuri de definire a elementelor din lista de liste;
- toate subprogramele folosesc instructiunea while() cu aceeasi expresie de conditionare a traversarii listei de liste;
- toate subprogramele tin seama de modul in care sunt scrise alte subprograme si se elimina elementele de redundanta;
- toate subprogramele au liste de parametri care nu difera fundamental de la un subprogram la altul; daca parametrul de intrare este un fisier, se va specifica numele acestui fisier intr-un vector de tip char definit in toate subprogramele cu 30 de elemente cu un nume pe care toti programatorii il vor folosi ca atare;
- in toate subprogramele se efectueaza niste testari; daca se solicita deschiderea unui fisier, dupa deschidere se testeaza sa se vada ca operatia a avut succes si numai daca asa s-a intamplat se continua;
- in toate subprogramele se returneaza un cod de eroare care este 0 daca prelucrarea s-a efectuat complet si corect si are diferite valor in caz contrar; programatorii vor initializa toti in acelasi mod acesta variabila si pentru toti 0 inseamna rezultat corect, 1 inseamna fisier negasit, 2 inseamna lista vida si tot asa;
Biblioteca de lucru cu matrice de mari dimensiuni este o provocare pentru programatori pentru ca:
- lucreaza cu structuri complexe;
- necesita algoritmi foarte eficienti de prelucrare, pentru ca una este precizia pentru inversarea unei matrice de 10 linii si 10 coloane printr-o metoda de calcul aproximativ si altfel stau lucrurile daca matricea are 100 linii si 1000 coloane;
- presupune stocarea de rezultate intermediare si gestionarea de parti din matrice;
- presupune existenta unei proceduri de normalizare, adica de eliminare din lista de liste a elementelor cu valoare nula reiesite din calcule;
- garantia reutilizarii subprogramelor din aceasta biblioteca este data de modul in care subprogramele au fost testate si au fost eliminate erorile;
- tratarea cazurilor particulare de matrice full si de matrice vida.
Daca proiectarea acestei biblioteci este realizata respectand toate cerintele construirii unui software de complexitate medie, rezultatele vor fi cele asteptate.
daca insa vor apare fluctuatii de stil, de definire si fiecare programator are libertatea de a face ceea ce doreste, fara o coordonare unitara, lururile vor conduce spre o biblioteca neomogena, care are subprograme care difera foarte mult unul de celalalt prin:
- definiri de variabile;
- moduri de utilizare a operanzilor;
- structuri de control utilizate;
- structura lista de parametri;
- mod de initializare variabile;
- grad de generalitate;
- validari existente sau nu;
- rezultate returnate;
- mod de apelare alte proceduri in interiorul procedurilor scrise.
Numai respectand cerinte specifice elaborarii de biblioteci se vor obtine subprograme necesare dar in primul rand reutilizabile de catre alti programatori pentru ca :
- STIU DE EXISTENTA ACESTOR SUBPROGRAME;
- AU INCREDERE IN ACESTE SUBPROGRAME DE BIBLIOTECA;
- PRIN APELARE SIMT CA FAC ECONOMIE DE TIMP;
- INTELEG TOT CEEA CE FAC SUBPROGRAMELE SI IN LOC SA SCRIE ACELE SECVENTE LE PREIAU.
revenire

Biblioteca de macrodefinitii
Macrodefinitiile sunt constructii ceva mai rafinate decat subprogramele si necesita o mai mare atentie in elaborare si in utilizare.
Cu atat mai mult, atunci cand se construieste o biblioteca de macrodefinitii se impune sa se specifice cat mai multe restrictii incat rezultatul sa fie intr-adevar componente de stricta necesitate care conduc la utilizarea de functii cu mult mai mare lejeritate decat daca fiecare programnator scrie acele secvente de program.
Macrodefinitia se incorporeaza in program si daca este construita cu o serie de carente, programatorul este limitat in a gasi mijloace de contracarare a efectelor.
De aceea, macrodefinitiile realizeaza prelucrari simple, chiar foarte simple, dar foarte bine facute.
Se impune ca macrodefinitiile:
- aibe un numar redus de instructiuni
- sa includa instructiuni care definesc o prelucrare foarte bine definita
- sa contina instructiuni de o aceeasi tipologie
- sa utilizeze moduri de adresare in numar cat mai mic din punct de vedere a diversitatii - sa aiba gradul de generalitate maxim
- sa aiba un nume foarte usor de recunoscut, utilizat, retinut si mai ales sa nu fie confundat cu alte constructii existente in programe sau in alte biblioteci.
Se vor construi macrodefinitii pentru:
- activarea de intreruperi
- initializarea unor resurse de structura fixata
- efectuarea de operatii pe caractere
- oprare cu siruri de caractere
- validari simple de date
- afisarea de mesaje standard
- executia unor secvente specializate, foarte frecvente si deosebit de omogene
- lucru cu fisiere
- implementarea de operatii cu moduri de organizare a fisierelor
- generare de termeni fara a utiliza proceduri, iar datorita numarului mare de apeluri se procedeaza la includerea prin macroapeluri a secventelor in corpul programului.
revenire

Biblioteci de secvente de cod sursa
In companiile puternice de dezvoltare software comunicarea dintre programatori este foarte intensa.
Numai in acest fel se vor construi programe foarte bune.
De regula, programatorii sunt foarte discreti si transparenta muncii lor o lasa pentru altii.
Schimbarile din ultimul timp indica necesitatea de a face vizibila activitatea de programare si deci si a textelor sursa.
Secventele de program cele mai bune se includ in biblioteci de secvente de program pe care le cunosc toti cei care lucreaza in companie si este obligatorie folosirea acestor secvente.
Daca trebuie definita FACTURA ca tabel cu coloane, cu structura cu variabile initializate cu zero si alinieri pentru a o face compatibila, secventa de program odata creata va fi stocata intr-o biblioteca de secvente si oricine doreste sa tipareasca sau sa afiseze o factura, va prelua de acolo textul sursa.
Pentru definirea unei liste de liste, a unui fisier de personal sau a altei structuri de date, daca acesta este definita printr-o secventa in biblioteca de secvente, va fi preluata.
Atunci cand este analizat un program trebuie sa se analizeze cat din ceea ce exista a fost preluat si mai ales de ce programatorul a scris linii de cod sursa cand acestea existau deja. revenire


Biblioteci de clase
Clasele reprezinta expresia reutilizarii de cod la cel mai inalt nivel.
Clasa contine operanzi si operatori.
Definirea de clase permite o abordare foarte clara a problemelor.
Programarea orientata obiect are la baza existenta de biblioteci puternice de clase.
Faptul ca programele cele mai complexe se rezuma la referirea de membri ai unor variabile de tip clasa dovedeste ca reutilizarea de componente este ceva obisnuit.
Rolul programatorului este de a cunoaste bibliotecile de clase nu pentru a reutiliza ceva ci pentru faptul ca nu va putea scrie nici un program daca nu cunoaste ce fac functiile membru referite.
Programele contin instantieiri.
Pentru a face instantieri trebuie referite elemente de biblioteca. Altfel, progrmele scrise linie de linie in care se includ calcule clasice, nu inseamna programare orientata obiect.
revenire

reingineria bibliotecilor
Din timp in timp trebuie perfectionat continutul bibliotecilor:
- adaugand noi subprograme
- schimband algoritmii de prelucrare
- crescand generalitatea si corectitudinea
- schimband intreaga conceptie daca s-a implementat o noua tehnologie de dezvoltare software.
reingineria bibliotecilor trebuie astfel realizata incat utilizatorul sa nu simta modificarile radicale decat sub forma efectelor de:
- reducere a duratei de executie
- cresterea diversitatii de operatii
- cresterea usurintei in transmitere de parametri.
reingineria trebuie sa conduca spre o noua biblioteca de componente, cu o noua filosofie de realizare.
reingineria corespunde acelorasi schimbari pe care le-a adus trecerea de la televiziunea cu tub catodic la televiziunea digitala.
Ete tot televiziune, dar este altceva.
Biblioteca, rezultat al unui proces de reinginerie, este tot o biblioteca dar este un nou tip de biblioteca. Un altfel de biblioteca.
Face altceva, are alt rol si permite reutilizare de cod si inca ceva.
revenire

Elaborarea documentatiei
Bibliotecile sunt insotite de documentatii complete.
Mai mult, fiecare subprogram, macrodefinitie si secventa are o documentatie clara, convingatoare care detaliaza: - cine a facut subprogramul, macrodefinitia sau secventa
- ce algoritm stau la baza cand s-a construit subprogramul, macrodefinitia sau secventa
- cum se refera subprogramul, macrodefinitia sau secventa
- ce rezultate returneaza subprogramul, macrodefinitia sau secventa
- ce restriuctii au subprogramul, macrodefinitia sau secventa
- unde se folosesc subprogramul, macrodefinitia sau secventa si cu ce efecte secundare.
revenire

Implementarea
Implementarea bibliotecilor este etapa in care realizatorul de subprograme, macrodefinitii sau secvente efectueaza instalarea produsului, instruirea personalului si arata cum se deruleaza exploatarea.
Rezultatele implementarii determina modificari conceperea de programe, masuratori mai ales in activitatea celor care nu reutilizeaza componente de biblioteca. Se are in vedere ca in viitor sa se treaca la obtinerea de versiuni de biblioteci care sa faca produsele program mai usor de implementat si de exploatat prin reutilizarea de subprograme, macrodefinitii si secvente performante.
revenire

Managementul bibliotecilor
Managementul bibliotecilor presupune:
- gestionarea fisierelor cu texte sursa intermediare daca bibliotecile contin cod sursa
- gestionarea altor forme de stocare a procedurilor daca acestea sunt deja compilate
- realizarea concordantei intre specificatiile fiecarei componente si ceea ce realizeaza de fapt subdprogramul, macrodefinitia sau secventa
- includerea in biblioteci a celor mai bune componente din program, in vederea reutilizarii lor ulterioare, pentru alte programe, semnaland utilizatorilor orice trecere la o noua versiune de biblioteca
- masurarea consumurilor de resurse care au fost necesare pentru a face programul in conditiile in care nu au fost folosite lemenetele de biblioteca sau din contra, economiile rezultate din reutilizare; publicarea acestor calcule pentru a diferentia activitatea programatorilor
- stabilirea nivelului de performanta a bibliotecilor si cresterea acestuia prin efectuarea modificarilor ce se impun prin semnalele care vin de la utilizatorii permanenti ai componentelor din biblioteci.
Managementul bibliotecii inseamna
corelarea subprogramelor cu parametri, in asa fel incat sa existe un nivel cat mai bun de utilizare a parametrilor de catre fiecare subprogram. Trebuie sa se asigure continuitatea utilizarii variabilelor de catre cat mai multe subprograme.
daca se accepta ca subprogramul sa contina mai multe instructiuni return in toata biblioteca trebuie mentinut acest principiu.
Eliminarea instructiunilor return(0 astfel incat in subprogram sa ramana una singura presupune utilizarea unei structuri repetitive in care sa apara si conditia de incorectitudine a valorilor variabilelor ce definesc limite ale variabilelor de control.
managementul presupune includerea stricta in lista de parametri numai a parametrilor necesari.
Pentru subprogramul de calcul a transpusei este necesara matricea care se transpune ca data de intrare si,respectiv, dimensiunile ei.
Nu este rezonabil sa se construiasca liste de parametri stabile care sa includa parametri care nu se refera in subprogram, doar numai pentru a avea o stabilitate care nu foloseste scopurilor practice.
Se impune ca testele de validare pentru unele variabile sa fie uniform tratate. Desi la toate procedurile se putea testa si depasirea limitelor de definire fizica a masivelor cu constantele simbolice NC si NL, folosirea strict numai in procedura de normare a trei niveluri pentru nuantarea erorilor (0,1,2) conduce la un mod neomogen de dezvoltare a acestei proceduri, lucru daunator in economia intregii biblioteci.
Ori in toate bibliotecile se introduce aceasta suita de teste, ori in toate procedurile se efectueaza numai un test.
In economia procedurii, utilizarea pentru verificarea simetriei a instructiunii return(3) care intrerupe suita de repetari cu for() aduce un mod artificial si aproximativ de construire a procedurii.
Crearea de proceduri in care se utilizeaza pointeri in lista de parametri crescand neomogenitatea listei si neincluderea testelor de validare a numarului de linii si a numarului de coloane, genereaza in procesul de management luarea de masuri privind:
- inserarea validarii
- asigurarea unui nivel de performanta corespunzator prin: folosirea variabilelor de control, eliminarea unor repetari si prin compactarea secventelor.
In final, dupa analize repetate, biblioteca de subprograme sau macrodefinitii sau secvente, trebuie sa fie acceptata de toti ca fiind o constructie buna.
Procesul de management trebuie sa fie transparent.
revenire

revenire