9capitolul 7 Iail Limbaje

download 9capitolul 7 Iail Limbaje

of 36

description

9capitolul 7 Iail Limbaje

Transcript of 9capitolul 7 Iail Limbaje

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    230

    CAPITOLUL 7

    LIMBAJE DE PROGRAMARE

    7.1. DOMENII DE UTILIZARE ALE CALCULATOARELOR

    Principalele domenii de utilizare ale calculatoarelor sunt:

    prelucrarea datelor,

    proiectare,

    simulare,

    conducerea proceselor.

    Prelucrarea datelor cuprinde mai multe aspecte:

    - nregistrarea,

    - selectarea,

    - sortarea,

    - ordonarea,

    - prelucrarea matematic,

    - analiza,

    - rezumarea,

    - raportarea informaiilor.

    Selectarea datelor se refer la asocierea unui element de informaie cu un ansamblu de caracteristici date. De exemplu: o indicaie bibliografic, un tip de scul sau un tip de ascuire.

    Sortarea reprezint separarea unei liste n pri (clase) care se exclud reciproc. De exemplu: seleca fiierelor cu extensia .exe sau selecia unor articolele unui autor.

    Ordonarea reprezint aranjarea unei liste n conformitate cu un sistem liniar (oarecare, stabilit). De exemplu: ordonare dup criteriu alfabetic sau cresctor.

    Prelucrarea matematic reprezint efectuarea operaiilor matematice indicate prin program asupra informaiilor introduse.

    Analiza, rezumarea i raportarea informaiilor se refer la efectuarea programat a acestor operaii asupra informaiilor pe care le poate furniza n urma prelucrrii prealabile a datelor.

    Rezultatele sunt analizate, iar prin rezumare se rein cele care urmeaz a fi raportate prin sistemul de ieire al datelor din calculator.

    Utilizarea calculatoarelor n procesele de proiectare constituie o ramur preponderent inginereasc i cuprinde un spectru larg de probleme care pot fi abordate.

    Proiectarea reprezint aplicarea creatoare a unui fond de cunotiine la realizarea unor produse utile.

    Proiectul reprezint din punct de vedere semantic o lucrare tehnic ntocmit pe baza unei teme date, cuprinznd :

    calcule tehnico-economice,

    desene,

    instruciuni necesare executrii unei construcii, maini, instalaii, tehnologii etc.

    Clasificarea problemelor de proiectare:

    1. probleme structurale,

    2. probleme nestructurale,

    3. probleme semisructurale.

    1. Problemele structurale au urmtoarele caracteristici:

    variabile cunoscute,

    relaii funcionale dintre variabile bine definite,

    este posibil o rigurozitate complet (matematic),

    algoritmi precii.

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    231

    Pe baza principalelor caracteristici precizate se poate constata c problemele structurale pot fi rezolvate relativ uor i cu ajutorul mainilor de calcul, fapt care le recomand pentru proiectarea automat (prin calculator).

    2. Problemele nestructurale sunt caracterizate de:

    slab definire a relaiei dintre variabile,

    nesiguran n compararea variabilelor individuale.

    3. Problemele semistructurale sunt caracterizate de:

    au caracteristici comune (structurale i nestructurale),

    sunt parial structurale i parial nestructurale.

    Pe baza principalelor caracteristici precizate se poate constata c problemele semistructurale pot fi rezolvate relativ cu ajutorul calculatorului. Proiectantul stabilete strategia i algoritmul de rezolvare a problemei, iar calculatorul execut calculele.

    Problemele nestructurale datorit slabei definiri a relaiilor dintre parametrii i variabilele individuale solicit proiectantul s introduc reguli dup care se va lua decizia i se face alegerea variantei cea mai bun. Proiectantul alege varianta final, ia decizia, dar la soluie nesatisfctoare modific regulile de calcul a soluiei i reia rezolvarea problemei. Calculatorul realizeaz produsul, ns proiectantul precizeaz sistemul care proiecteaz produsul.

    Proiectare euristic este cea care se aplic n aceste cazuri. Euristica este metoda de studiu i cercetare bazat pe descoperirea unor fapte noi n timpul procesului n desfurare i schimbarea metodei n cazul neomologrii (fig 7.1.).

    Figura 7.1. Etapele parcurse de informaie pn la omologarea i decizia final.

    Alt domeniu important de utilizarea a calculatoarelor este simularea. n acest domeniu este

    necesar o abordare soft i hard adecvat i n concordan cu procesul urmrit. Calculatoarele n simulare trebuie s in seama de aspectele:

    reprezentarea printr-un model matematic a fiecrui element al sistemului care urmeaz a fi simulat, specificndu-se interaciunea dintre elemente,

    elaborarea unui program de calculator care evolueaz n concordan cu modelul matematic.

    Pornind de la simulatoare de navigaie (zbor), de conducere auto, a locomotivelor la simularea prelucrrii pe CNC a panourilor de mobil, a decorrilor de interioare cu diferite obiecte de mobilier, schimbarea ambientului prin modificarea texturii i culorii, utilizarea analizelor cu element finit pentru testarea i mbuntirea formelor i seciunilor produrelor de mobilier, simularea matematic a diferitelor ncrcri cu fore concentrate sau distribuite etc. pn la simplele jocuri simularea i face apariia i i aduce un aport important la formarea unor deprinderi sau la verificarea nedistructiva a unor variante proiectate.

    Alt domeniu n care se impune utilizarea calculatoarelor este n conducerea proceselor:

    onducerea unor procese tehnologice care au loc la maini unelte i instalaii,

    INFORMAIA

    DORIT

    COMPARARE I

    OMOLOGARE

    ANALIZA SINTEZA DECIZIA

    FINAL

    MODIFICRI

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    232

    conducerea proceselor de producie din punct de vedere organizatoric i economic. Rolul calculatoarelor n domeniul conducerii proceselor industriale:

    - prin performanele deosebite i capacitii acestora de a nmagazina i prelucra rapid datele,

    - prin echipamentele periferice specializate ce asigur transmiterea i recepionarea rapid n timp real a fluxului informaional din proces,

    - prin imposibilitatea operatorului uman de a asigura, prin metodele clasice, conducerea eficient a produciei.

    Introducerea i utilizarea calculatoarelor electronice n procesul de producie urmrete n principal:

    -atingerea i meninerea unor regimuri tehnologice optimale; -conducerea proceselor tehnologice cu grad de nocivitate ridicat;

    -reduceri ale consumurilor specifice de materii prime i materiale; -reduceri ale consumurilor de energie;

    -creterea productivitii utilajelor, liniilor, proceselor tehnologice, siguranei n funcionare a acestora; -posibiliti de conducere operativ a marilor platforme industriale;

    -creterea eficienei economice a activitii industriale.

    7.1.1. Calculatoarele de proces

    Calculatoarele de proces formeaz o categorie aparte, care se caracterizeaz printr-o structur complex generat att de existena unor module ce asigur primirea i transmiterea informaiilor din i n instalaia tehnologic, ct i de existena unor module de prelucrare a informaiilor numerice, de calcul i de decizie, proprii unor calculatoare electronice numerice universale.

    Calculatorul de proces asigur: - prelucrarea unor volume mari de informaii; - viteza i precizie mare n prelucrarea datelor;

    - calcule de complexitate ridicat; - funcionarea n timp real; - intervenie rapid n procesul tehnologic. Folosirea sistemelor de prelucrare a datelor n acest domeniu impune crearea i dezvoltarea

    unor sisteme de programe de exploatare i aplicative adecvate.

    Calculatoarele de proces se caracterizeaz prin existenta a dou interfee: calculator - proces i

    calculator - operator uman.

    Interfaa ntre aceste sisteme complexe i omul care este chemat s le mnuiasc este realizat prin sistemul de programe i limbajele de programare.

    Programele utilizate n contextul sistemelor de conducere se mpart n:

    - programe destinate exploatrii curente a sistemelor (software de baz i software de aplicaie);

    - programe (sau sisteme de programe) destinate elaborrii programelor de aplicaie, pentru o aplicaie anume.

    Mrimile de intrare sau variabilele independente sunt informaiile primite despre proces. Principalele informaii sunt relative la temperaturi, presiuni, debite.

    Mrimile pot fi mprite n dou grupe: - cele care pot fi comandate direct de operator, numite comenzi;

    - cele care nu sunt supuse comenzii directe a operatorului, numite perturbaii.

    Mrimile de ieire sau variabilele dependente, pot fi grupate n:

    - performante, variabilele care intervin n formularea obiectivelor procesului (ex.: volumul produciei, calitatea produselor) i care trebuie meninute ntre anumite limite date;

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    233

    - variabile intermediare, care apar n diverse puncte intermediare ale procesului sau ale

    unui model matematic al procesului, (ca de ex. temperatura), sau compoziia, care pot fi utilizate ca masur a unor perturbaii inaccesibile, ca un predictor al calitii produsului.

    Corelaiile dintre variabilele de proces sunt destul de complexe, astfel c variaia unei singure mrimi de intrare poate atrage dup sine variaia mai multor mrimi de ieire.

    Scopul conducerii procesului tehnologic se poate formula astfel: prin ajustarea variabilelor

    comandate, s se asigure realizarea unor obiective bine definite ale procesului, innd seama de perturbaii i folosind rezultatele msurrii indicatorilor de performan, variabilelor intermediare i pertbaiilor. Operatorul st la consola de proces de unde controleaz i dirijeaz procesul.

    Moduri de conectare calculator proces. n conducerea proceselor tehnologice, calculatorul poate ndeplini diferite funciuni ce sunt

    raportate la modul n care acesta primete informaia i, transmite informaia de la/la proces. Introducerea datelor n calculator se face pe trei ci : - utilizarea unui suport de informaie; - direct de la operator n calculator, prin intermediul consolei;

    - direct de la surs n calculator, prin intermediul dispozitivelor de cuplare la proces. Datele prelucrate de un calculator pot fi folosite pentru:

    - asigurarea cu date a operatorului, ntr-o form intermitent; - asigurarea de nregistrri permanente pentru operator; - comanda direct a instalaiilor din proces. Evideniind aceste ci de introducere-extragere a datelor, putem defini urmtoarele moduri de

    conectare dintre calculator i proces;

    CALCULATOARE OFF-LINE" Calculatorul nu este conectat direct la proces, iar legatura informaional ntre calculator i

    proces este stabilit prin intermediul omului. Un astfel de sistem poate fi utilizat acolo unde ntrzierile nu conteaz i unde manipularea

    manual a dalelor nu este costisitoare.

    CALCULATOARE IN-LINE" Operatorul introduce datele privind procesul, direct n calculator, n mod rapid i frecvent, cu

    ajutorul unei claviaturi, lector de simboluri, creion optic etc., pot fi prelucrate imediat (dac este cazul), iar rezultatele sunt aplicate manual de ctre operator.

    La acest regim (ca i n cel off-line") informaia de la ieirea calculatorului se prezint sub form de mesaj tiparit sau pe un dispozitiv de afiare.

    CALCULATOARE ON-LINE" Un sistem on-line" este un sistem conectat fizic cu procesul, astfel nct s primeasc

    informaia fr intervenia omului i fr ntrziere. Calculatorul poate primi direct informaii de la proces prin dispozitivele sale periferice.

    Sistemele on-line" transmit informaii de la un proces n memoria calculatorului fr ca prelucrarea s aib loc imediat, n mod obligatoriu. Atunci cnd prelucrarea informaiilor transmise on- line" se desfoar imediat, n timpul funcionrii procesului, sistemul se numete on-line", n timp real. Un calculator care posed aceasta capacitate se numete, n mod convenional, calculator de proces. Dac datele de ieire sunt transmise sub form de mesaje, iar operatorul le interpreteaz i apoi aplic deciziile de conducere asupra dispozitivelor de reglare ale procesului, sistemul se numeste on-line" n circuit deschis, calculatorul funcionnd n regim ghid operator", n calitate de consultant al conducerii proceselor.

    n cazul n care nu este nevoie de nici o intervenie manual, aciunile de conducere sunt calculate de calculator i aplicate direct procesului, sistemul se numeste on-line" n circuit nchis.

    Dezvoltarea unor periferice specializate de proces, mbuntirea sistemelor de calcul, permit folosirea tot mai frecvent a metodei de introducere on-line" a datelor, n calculatoarele de proces.

    STRUCTURA UNUI CALCULATOR DE PROCES

    Un calculator de proces posed o serie de caracteristici fundamentale, care-l deosebesc de un calculator electronic universal, i anume:

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    234

    - capacitatea de a comunica direct i eficient cu aparatura de msur i control, precum i cu echipamentul de reglare al procesului;

    - posibilitatea de a rspunde rapid, n timp util, la semnale de prioritate emise de procesul condus (proprietate de ntrerupere);

    - capacitatea de a opera suficient de rapid asupra datelor, asigurnd funcionarea i conducerea procesului n timp real (timpul cronometric).

    Calculatorul de proces este un sistem integrat format dintr-un calculator electronic universal

    (unitatea central i echipamentele periferice clasice) i un echipament periferic specializat pentru cuplarea calculatorului la proces (dispozitive analogice, dispozitive numerice, consola operatorului

    de proces).

    FUNCIILE GENERALE I NIVELURILE DE CONDUCERE A PROCESELOR INDUSTRIALE n conducerea proceselor industriale, funciile realizate de un calculator de proces pot fi

    mprite n: - funcii de supraveghere; - funcii de reglare i comand; - funcii de optimizare; - funcii de planificare.

    1. FUNCIA DE SUPRAVEGHERE Funcia de culegere de date i supraveghere (control centralizat) este o funcie pasiv de

    msurare i semnalizarea strii procesului, prin care calculatorul ajut sau ghideaz pe operator n luarea deciziilor de conducere, prezentndu-i n timp o informaie precis.

    Calculatorul culege i supravegheaz variabilele din proces efectund asupra lor o serie complet i ntreag de manipulri, verificri, operaii aritmetice:

    2. FUNCIA DE REGLARE I COMAND Este o funcie activ care completeaz funcia de supraveghere, prin aciuni de comand n

    scopul realizrii unui obiectiv impus instalaiei industriale.

    n cadrul acestei funcii, calculatorul calculeaz n mod explicit aciunea de conducere ce trebuie ntreprins, fie recomandnd operatorului aceast aciune (funcia de ghid operator), fie asigurnd o reglare automat, n circuit nchis realiznd comanda efectiv a mrimilor de referin ale regulatoarelor.

    Dac n sistemele cu reacie invers, reglarea intervine numai dup sesizarea unei abateri, n schimb, la sistemele cu reacie predictiv, reglarea previne apariia abaterii.

    3. FUNCIA DE OPTIMIZARE Calculatorul, determin la anumite intervale de timp, condiiile optime ale procesului

    furniznd, de fiecare dat, un grup complet de msuri n vederea reglrii variabilelor pentru obinerea rezultatelor economice mai bune, supraveghind toate variabilele semnificative i fiind prevzut cu un algoritm de optimizare adecvat.

    Criteriul univoc i clar de optimizare, care trebuie s fie urmrit, poart denumirea de funcie obiectiv". Odat stabilit modelul matematic, problema de optimizare const n obinerea valorii optime (maxim sau minim) a funciei obiectiv (de ex. obinere a volumului maxim a anumitor produse sau calitatea acestora).

    4. FUNCIA DE PLANIFICARE n scopul realizrii unor parametri optimi de producie, se cer a fi rezolvate o serie de

    probleme cum ar fi:

    capacitatea de producie,

    ealonarea n timp a produciei,

    evidena stocurilor,

    evidena lucrrilor de ntreinere a utilajelor etc. Astfel, o parte din aceste activiti pot fi efectuate de calculatorul de proces. Alegerea depinde de necesitatile de memorie, periferice i, bineneles, de pre. Funciile de conducere a proceselor industriale prezentate mai sus se realizeaz ierarhizat,

    conducnd la urmatoarele nivele de comand i supraveghere a proceselor :

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    235

    - supraveghere,

    - reglare,

    - optimizare,

    - planificare.

    Calculatoarele de proces sunt folosite la primele dou nivele i uneori la al treilea. Estimarea eficienei economice se refer la urmtoarele puncte:

    - creterea capacitii de producie; - creterea randamentului; - reducerea consumurilor;

    - mbuntirea calitii produsului; - reducerea timpilor de ntrerupere ai instalaiei; - reducerea cantitilor de rebuturi.

    SISTEMUL DE OPERARE IPROGRAMARE AFERENT UNUI CALCULATOR DE PROCES Exploatarea calculatorului se face sub controlul sistemului de operare, ce are ca sarcin

    optimizarea utilizrii sistemului de calcul, minimizarea efortului uman de programare i automatizarea operaiilor manuale ntr-o msur ct mai mare.

    Sistemele de operare i programare aferente calculatoarelor de proces prezint structuri diferite, corelate cu configuraiile de echipamente ale fiecrui calculator de proces.

    Ceea ce este comun tuturor acestor sisteme este prezena urmatoarelor componente: - un sistem de exploatare de baz aferent calculatorului numeric universal (pentru

    conducerea non-proces) ;

    - un sistem de timp real (pentru conducerea on-liue"); - un sistem de procesoare,

    Sistemul de exploatare de baz trebuie s supervizeze execuia programelor de non-proces, permind utilizatorului compilarea, asamblarea, tergerea, modificarea programelor.

    Funciile principale ale acestui sistem vor fi: - comanda execuiei i nlnuirii programelor, - gestiunea operaiilor de intrare-ieire, - tratarea condiiilor excepionale (erorilor), - gestiunea ntreruperilor interne, - ncarcarea i lansarea unor lucrri paralele sau timp real etc. Sistemul de programe de timp real trebuie s asigure ordonarea deservirii ntreruperilor

    externe, supravegherea i comanda operaiilor de intrare/ieire (din/spre proces), gestiunea proceselor de timp real, comunicarea cu operatorul de proces.

    Sistemul de procesoare, constituit dintr-un set de limbaje de programare, asigur interfaa ntre programator i calculatorul de proces.

    n setul limbajelor de programare aferente unui calculator de proces trebuie inclus un limbaj

    cu faciliti de timp real care s permit programarea aplicaiilor industriale. Specificul programarii unui calculator de proces decurge din:

    - posibilitatea calculatorului de proces de a rspunde n timp foarte scurt la semnalele de ntreruperi emise de procesul ce urmeaz a fi condus; - capacitatea sistemului de a primi datele direct de la aparatura de masur, control i reglare a procesului;

    - cerina ca timpul real (cronometric) n care calculatorul este ocupat cu o anumit operaie s fie strict corelat cu timpul n care se produc alte evenimente, exterioare fa de calculator.

    PARTICULARITILE UNUI LIMBAJ DE PROGRAMARE PENTRU CALCULATOARELOR DE PROCES Dificultatea n programarea calculatoarelor de proces cu limbaje convenionale, precum i

    necesitatea reducerii cheltuielilor de elaborare a sistemelor de programare, specifice fiecrei aplicaii, conduce la necesitatea dezvoltrii de limbaje orientate pe problem.

    Cu ct limbajul de programare este mai apropiat de limbajul utilizat la analiza i definirea problemei care se programeaz, cu att gradul de automatizare al programrii este mai ridicat.

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    236

    Limbajele de programare destinate conducerii proceselor industriale, duc la realizarea unui

    program care s realizeze schema de reglare a procesului ntr-un timp scurt i un consum de memorie relativ minim, rezult c particularitile acestora se refer la:

    - redactarea de programe de lucru n timp real (sincronizarea acestora cu timpul, sincronizarea ntre diferite programe, acces direct la unele resurse ale sistemului etc.);

    - fiabilitatea programelor elaborate;

    - flexibilitatea programelor elaborate pentru adaptri i dezvoltri n funcie de schimbarea condiiilor tehnologice etc.

    Cerintele preliminare necesare conducerii unui astfel de proces pot fi exprimate cu ajutorul

    urmtoarelor documente surs:

    a) specificatia procesului industrial ce urmeaz a fi condus; b) diagrama de comand;

    c) schema logic a descrierii procesului. Elementele unui astfel de limbaj vor fi identificatorii (ex: nume, adrese etc.), ce indic

    obiectele i atributele obiectelor i operatorii (ex: verbe imperative, operatori aritmetici etc.), ce indic operaia ce urmeaz a fi executat cu obiecte.

    1. SPECIFICAIA PROCESULUI INDUSTRIAL n vederea descrierii procesului industrial este necesar a fi furnizate listele cu tabele

    referitoare la intrri analogice, semnale de ieire, semnale de tip contact. Pentru mrimile analogice aceste tabele vor contine:

    - identificator (nume etc.);

    - valoare, limite de alarm etc.;

    - traductoare i semnale; - perioada de explorare;

    - conversia n uniti inginereti; - note.

    Pentru semnalele de ieire aceste tabele vor contine:

    - identificator;

    - dispozitiv i semnal;

    - alarmare i blocare; - caracteristici ale reaciei inverse (feedback).

    Pentru semnalele de tip-contact, aceste tabele vor conine: - identificator;

    - dispozitiv;

    - poziia contactului n cadrul dispozitivului,;

    - poziia normal a contactului (deschis, nchis); - explorarea (aleatorie sau sincronizat cu un anumit interval de timp). 2. DIAGRAMA DE COMAND

    Sistemul de comand este definit printr-o diagram bloc similar cu diagramele calculatoarelor analogice sau a schemelor diverselor aparate. Diagrama const din blocuri sau simboluri speciale care reprezint att calcule ce trebuiesc efectuate ct i fluxul informaional. Sistemul de comand poate fi definit ca o entitate cu un nume i o serie de elemente de comand. Un element de comand este o entitate cu nume, tip i cteva variabile asociate cu intrri, ieiri i parametri care pot fi utilizai ca intrri n alte calcule.

    3. SCHEMA LOGIC Schema logic descrie procesul industrial, inclusiv operaiile ce sunt permise att n timpul

    operrii normale ct i n condiii exceptionale, n general, schema logic const dintr-un grup de operatori reprezentai printr-o suit de simboluri standard.

    CLASIFICAREA IDENTIFICATORILOR

    1. VARIABILE

    O variabil este orice dat cu o structur arbitrar.

    Oricrei variabile i sunt asociate urmtoarele atribute:

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    237

    - nume;

    - valoare curent i valoare iniial;

    - uniti de msur;

    - criterii de variaie;

    - semnalul corespunztor;

    - conversia n uniti inginereti;

    - filtrare;

    - perioada de explorare;

    - limitele de alarm;

    - limitele zonei de operare;

    - viteza de schimbare a limitelor;

    - prioritatea punctului;

    - tipul datei;

    - calcule speciale.

    2. PROCEDURI

    Scopul unui astfel de limbaj sunt procedurile care pot fi realizate att sub forma unor

    programe ct i sub forma unor subprograme.

    Acestea vor specifica, de exemplu:

    - modul de citire al variabilei (aleatoriu, secvenial);

    - viteza de reactualizare;

    - timpul de baz pentru reactualizare;

    - acumularea rezultatului trecut;

    - aciuni speciale;

    - condiii de oprire a citirii;

    - tratarea erorilor de condiie; etc.

    3. CLASIFICAREA OPERATORILOR

    Operatorii pot fi clasificai dup cum urmeaz:

    -operatori aritmetici i relationali: +, -, x, /, =, , =;

    -operatori logici i anume: AND, OR, NOT, EXCLUSIV OR (I, SAU, NU, SAU EXCLUSIV);

    -operatori de tip ir: MOVE (TRANSFER), EDIT (EDITARE);

    -operatori de transfer necondiionat: DO, UNTIL, WHITE, GO TO, DELAY;

    -operatori de transfer condiionat: IF, ELSE, WHEN, WAIT UNTIL;

    -operatori de tip procedur de comand:

    START PROGRAM (nceput de program),

    STOP PROGRAM (sfrit program),

    CALL SUBROUTINE (apel subrutin),

    RETURN (ntoarcere la prelucrare),

    EXIT

    DEFINIREA LIMBAJULUI

    Limbajul de programare specializat destinat conducerii proceselor industriale poate fi astfel

    realizat n dou forme:

    - forma lung, n care o parte sau toate elementele limbajului sunt separate prin simboluri, denumite, delimitatori limbajul seaman cu un limbaj de programare procedural tipic;

    - forma scurt, n care elementele limbajului ocup poziii fixe n fluxul de intrare -i nu sunt separate prin delimitatori - limbajul seaman cu limbajele de programare specializate de proces de tipul fill-in-the-blanks".

    NIVELUL ACTUAL I TENDINE N DEZVOLTAREA LIMBAJELOR DE PROGRAMARE PENTRU CALCULATOARELE DE PROCES

    Varietatea de limbaje de programare destinate conducerii proceselor industriale este strns

    legat att de structura echipamentului de calcul ct i de structura aplicaiilor industriale.

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    238

    Avnd n vedere legatura ntre echipamentul de calcul (hardware), sistemul de programare

    (software) i utilizator, n prezent pe plan mondial exist o confruntare direct a urmtoarelor direcii de dezvoltare:

    1) Maini (sisteme de calcul) orientate pe limbaje (MOL), sau cum se mai poate spune, hardware-ul vine n ntimpinarea software-ului;

    2) Limbaje orientate pe maini (LOM), adic software-ul vine n ntmpinarea hardware-ului;

    3) Limbaje orientate pe problema (POL), adic software-ul vine n ntmpinarea utilizatorului.

    Aceast confruntare a condus la elaborarea i dezvoltarea de limbaje de programare de proces care au urmrit, n principal, fie probleme legate de tehnica de programare, fie realizarea standardizat a funciilor specifice de supraveghere i conducere a proceselor industriale.

    Problema limbajelor de programare de proces a fost orientat, pe plan mondial, n principal, n dou mari direcii:

    - una, prin dezvoltarea unor limbaje de programare evaluate sau a unor limbaje

    procedurale, cu extinderea setului de instruciuni care, s faciliteze lucrul n timp real, lsnd n sarcina utilizatorului conceperea i scrierea programelor specifice de proces;

    - cealalt, prin conceperea i dezvoltarea unor sistem de programare de baz de proces standardizate, care s realizeze funciile de supraveghere i conducere a proceselor i

    care s pun la dispoziia utilizatorului limbaje de programare mai puin evoluate din punct de vedere al programrii, dar mai accesibile inginerului tehnolog.

    Urmrind aceste direcii, putem clasifica limbajele existente, n present, n urmatoarele trei clase:

    1. LIMBAJE DE NIVEL NALT ORIENTATE SPRE APLICAII INDUSTRIALE

    Limbajele de programare de nivel nalt, cel mai des folosite pentru conducerea proceselor

    industriale, sunt extensii ale limbajelor de nivel nalt devenite clasice.

    Limbajele clasice sunt inadecvate modului de lucru n timp real, dar cu anumite extensii

    fcute sau folosind anumite elemente din ele, pot deveni folosibile n conducerea proceselor industriale.

    Extensiile fcute cuprind instruciuni ce permit:

    - manipularea datelor la nivel bit i cuvnt;

    - comunicrile ntre programe (eventual scrise n acest limbaj);

    - comunicrile ntre operator i calculator n urma unui eveniment extern;

    - prelucrarea ntreruperilor externe;

    - initializarea orologiilor;

    - ntrzierea n timp etc.

    2. LIMBAJE PROCEDURALE

    Specificul aplicaiilor de timp real, necesitile cerute programelor de proces au condus la elaborarea unor limbaje de programare de proces ct mai sugestive tehnologului, care ofer posibilitatea scrierii unui program pe baze tehnologice.

    Instructiunile acestor limbaje sunt de fapt comenzi utilizate n proces, care permit realizarea

    pornirii-opririi unor elemente din instalatie, ntirzierea anumitor faze, citirea intrrilor din proces, modificarea modului de reglare, activarea sau dezactivarea unei bucle de reglare etc.

    3. LIMBAJE ORIENTATE PE PROBLEM

    n esen, proiectarea unor astfel de limbaje genereaz o standardizare a funciilor specializate de supraveghere i conducere a procesului i conduc totodat la reducerea efortului de programare-implementare.

    La rndul lor, aceste limbaje se pot clasifica n:

    - limbaje descrise prin diagrame;

    - limbaje descrise prin chestionare (de tipul fill-in-the-blanks").

    LIMBAJE DESCRISE PRIN DIAGRAME

    n anumite aplicaii industriale (n particular n comanda secvenial), inginerul dispune de diagrame logice ce dau o imagine sugestiv a procesului tehnologic. Acest lucru a fcut posibil

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    239

    crearea unor limbaje care s permit scrierea direct a diagramelor, fiecare instruciune fiind n relaie direct cu o proprietate a diagramei.

    Limbajele din aceasta categorie sunt limbaje interpretative a unor diagrame logice. Ele

    necesit cunotine minime de programare, dar folosesc o serie de simboluri ce reprezint ordinele de codificare a diagramelor logice care sunt prezentate sub forma mnemotehnic.

    7.2. ORGANIZAREA STRUCTURAT A CALCULATOARELOR

    Un calculator numeric poate rezolva probleme prin executarea instruciunilor ce i-au fost date.

    O instruciune este o comand dat calculatorului, prin care se descrie operaia sau operaiile pe care acesta trebuie s le execute.

    Instruciunile pe care le execut un calculator sunt de fapt grupuri de 1 i 0 care reprezint semnale electronice produse n interiorul calculatorului.

    Totalitatea instruciunilor care descriu cum se rezolv o anumit problem se numete program.

    Circuitele electronice ale unui calculator pot recunoate i executa un set finit de instruciuni primare, simple, n care trebuie transformate toate programele, nainte ca acestea s poat fi rulate (adic executate de ctre microprocesor).

    Totalitatea instruciunilor pe care un procesor le poate recunoate i executa, formeaz setul de instruciuni al procesorului respectiv.

    Aceste instruciuni primare execut operaii ca :

    adun dou numere,

    verific dac un numr este egal cu 0,

    copiaz date dintr-o zon a calculatorului n alta, precum i cteva operaii ceva mai complicate.

    Toate informaiile dintr-un program sunt codificate binar. Unitatea de msur pentru informaie este bitul (0 sau 1). n interiorul calculatoarelor toate informaiile sunt reprezentate sub forma unor numere binare grupate n bii. Aceste grupe pot fi de 8, 16, 32, 64 de bii. Reprezentarea unei grupe de 8 bii formeaz un octet.

    ntregul set de instruciuni primare reprezint un limbaj care permite comunicarea dintre calculator (procesorul unui calculator) i om.

    Acest limbaj se numete limbaj main, i este singurul limbaj pe care l poate nelege un calculator. Evident acest limbaj este binar.

    Proiectanii de calculatoare trebuie s decid setul de instruciuni primare folosit de noul procesor. Fiecare tip de microprocesor are un set de instruciuni propriu. La primele calculatoare se puteau scrie programe cu ajutorul a 8 comutatoare (instruciuni pe 8 bii) care se puteau poziiona pe 0 sau 1, i astfel puteau fi scrise i executate programele. Astazi acest fel de scriere nu se mai folosete, cel mai de jos" limbaj fiind limbajul de asamblare.

    Deoarece este destul de dificil de scris programe n limbaj main, va fi necesar proiectarea unui nou set de instruciuni (limbaj) mai uor de utilizat de ctre oameni dect setul de instruciuni main, pe care l vom nota cu L1. Vom nota setul de instruciuni main cu L0.

    O metod de executare a unui program scris n L1 este de a nlocui fiecare instruciune din

    acest limbaj cu un set echivalent funcional din L0. O astfel de tehnic se numete traducere. Cea de a doua tehnic const n a scrie un program n L0 care preia programe n L1 ca i date

    de intrare i le execut examinnd fiecare instruciune pe rnd i executnd secvena echivalent de instruciuni direct n L0. O astfel de tehnic se numete interpretare i programul care o realizeaz se numete interpretor.

    Traducerea i interpretarea sunt similare.

    n ambele metode, instructiunile din L1 sunt n final realizate pe baza executrii unor secvene echivalente de instruciuni n L0.

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    240

    Diferena const n faptul c, n translatare, programul L1 este mai nti transformat n ntregime ntr-un program L0, programul L1 este abandonat i noul program L0 este ncrcat n memoria calculatorului i executat, prelund controlul calculatorului.

    Programul L1 se mai numete program surs iar programul L0 se numete program n cod main (limbaj main).

    Pentru un limbaj de programare, programul surs este cel scris cu ajutorul instruciunilor limbajului respectiv iar programul n cod main este cel rezultat n urma compilrii programului surs.

    Toate fiierele cu extensia exe sau com de sub sistemul de operare MS-DOS sunt programe n cod min. n timpul executrii, se ruleaz noul program generat n L0 i acesta este cel care are controlul calculatorului.

    n interpretare, dup examinarea i decodificarea fiecrei instruciuni din L1, aceasta este executat imediat, nu se genereaz un program tradus. n acest caz interpretorul este cel care controleaz calculatorul.

    Se poate crea o ierarhie de limbaje, fiecare limbaj folosindu-l pe predecesorul su ca baz.

    Limbajul de pe nivelul cel mai de jos este cel mai simplu iar limbajul de pe nivelul cel mai

    nalt este cel mai sofisticat. Cele mai multe calculatoare moderne sunt formate din dou sau mai multe niveluri.

    Vom analiza un calculator cu ase niveluri.

    Nivelul 0, corespunde structurii hardware a mainii care execut instruciunile n limbaj main de pe nivelul 1. Pentru corectitudine trebuie menionat un nivel aflat sub nivelul 0, care tine de domeniul ingineriei electronice i se numete nivelul echipamentelor electronice (device level).

    La acest nivel se gsesc tranzistoarele cu ajutorul crora se pot proiecta circuitele integrate i respectiv circuitele logice. Tranzistoarele precum i alte componente electronice sunt considerate primitivele de nivelul cel mai sczut pentru proiectanii de calculatoare.

    Se poate cobor la un nivel i mai de jos, dar acesta se ocup cu tehnologia siliciului, adic a fabricrii componentelor electronice.

    Pentru nivelul logic digital (digital logic level), sunt de interes obiectele numite pori logice. Ele sunt construite din componente analogice, cum ar fi tranzistoarele, i alctuiesc circuitele digitale. Fiecare poart are una sau mai multe intrri digitale (0 sau 1) i calculeaz o funcie logic drept ieire, cum ar fi SI sau SAU logic. Cteva pori pot fi combinate pentru a forma o memorie de un bit. Memoriile de 1 bit pot fi combinate n grupuri de 16, 32 sau 64 pentru a forma registre.

    Fiecare registru poate conine un numr binar pn la o anumita valoare.

    Nivelul 1 sau Nivelul microarhitecturii (microarhitecture level) conine o colecie de 8 pn la 64 de registre de dimensiune cuprins ntre 8 i 32 de bii, formnd o parte din memoria intern a procesorului, i un circuit numit UAL (Arithmetic Logic Unit) unitate aritmetic i logic care poate executa operaii aritmetice i logice simple.

    Registrele sunt conectate la UAL pentru a forma o cale de date (data path) prin care se

    transmit datele. Operaiile principale ale cii de date constau n selecia a unu sau dou registre asupra crora opereaz UAL, de exemplu le adun i rezultatul se memoreaz ntr-unul dintre registre.

    Ciclul cii de date const n citirea operanzilor din registre i trimiterea lor prin magistralele interne la unitatea UAL i la alte uniti funcionale pentru execuie.

    Calea de date este controlat de un circuit de comand (command circuit), a crui sarcin este s gestioneze toate activitile microprocesorului, ncepnd din momentul n care acesta este alimentat cu curent i are semnal de tact.

    Circuitul de comand genereaz toate semnalele de comand pentru activarea elementelor interne i externe procesorului.

    Operaiile principale ale circuitului de comand sunt:

    -citete din memorie instruciunea;

    -o decodific pentru a ntelege operaiile necesare execuiei;

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    241

    -programeaz toate activitile interne i externe pentru a duce la bun sfrit execuia instruciunii.

    Pe anumite calculatoare circuitul de comand este un program (soft) numit microprogram, iar pe alte calculatoare (n special pe cele moderne) este implementat prin hardware.

    Pe calculatoarele cu control software al cii de date, microprogramul este un interpretor al instruciunilor de pe nivelul 2.

    Interpretorul extrage, examineaz i execut instruciunile una dup alta, folosind pentru aceasta calea de date. De exemplu, pentru o instruciune ADD (adunare) se va extrage instruciunea, se vor localiza i aduce n registre operanzii, UAL va calcula sum a i, n final, rezultatul va fi depus la locul potrivit. Pe o main cu control hardware al cii de date, se vor executa nite pai similari dar fr ajutorul unui program memorat explicit pentru controlul interpretrii instruciunilor de pe nivelul 2. Unitatea aritmetic i logic poate executa dou operaii aritmetice: adunarea i scderea a dou numere binare.

    Operaiile logice pe care le poate executa sunt: SI, SAU, SAU EXCLUSIV, COMPARATIE i COMPLEMENTARE.

    Cu toate c setul de operaii pare foarte restrns, dac se cunote ndeajuns bazele analizei numerice se pot programa calcule tiinifice foarte complexe. Totul const n cunotinele matematice ale programatorului i abilitatea programrii instruciunilor de baz.

    Nivelul 2 reprezint un nivel numit nivelul arhitecturii setului de instruciuni sau nivelul ISA - Instruction Set Arhitecture. Fiecare productor de calculatoare (microprocesoare) public un manual pentru microprocesoarele pe care le fabric, numit " Manualul de referin al limbajului mainii". n manuale productorii detaliaz ntregul set de instruciuni pe care microprocesorul le poate recunote i executa. Dac un productor de calculatoare ar oferi dou interpretoare pentru unul dintre calculatoarele sale, interpretnd dou niveluri ISA diferite, el ar trebui s produc dou manuale de referin despre limbajul min.

    Fiecrui tip de microprocesor i corespunde un set de instruciuni ISA specific, i deci un manual al operaiilor acestora. De obicei, aceste manuale prezint setul de instruciuni scrise cu ajutorul limbajului de asamblare.

    Nivelul 3 este un nivel hibrid n care cele mai multe instruciuni din limbajul de la acest nivel, sunt instruciuni ale nivelului ISA.

    O instruciune de pe un nivel poate aparine i altui nivel. De exemplu, sistemul de operare DOS este scris n limbaj de asamblare 20% i n limbajul C 80%. La fel, sistemele de operare Windows sunt scrise o parte n limbajul C++ i o parte n limbajul de asamblare.

    n cadrul nivelului 3 exist un set de instruciuni noi, o organizare diferit a memoriei, posibilitatea de executare concurent a dou sau mai multe programe precum i alte caracteristici.

    Exista mai multe posibiliti de proiectare a nivelului 3 dect n cazul nivelurilor 1 i 2. Noile operaii permise pe nivelul 3 sunt realizate de un interpretor care se execut pe nivelul 2, interpretor numit sistem de operare.

    Instruciunile de pe nivelul 3 care sunt identice cu cele de pe nivelul 2 sunt executate direct de ctre microprogram (sau controlate hardware) i nu de sistemul de operare. Cu alte cuvinte unele dintre instruciunile de pe nivelul 3 sunt interpretate de sistemul de operare iar altele direct de circuitul de comand. Acest nivel este numit nivelul main al sistemului de operare (operating system machine level). Primele trei niveluri sunt concepute n principal pentru execuia interpretoarelor i translatoarelor necesare susinerii nivelurilor superioare. Aceste interpretoare i translatoare sunt scrise de programatorii de sistem.

    Nivelul 4 i cele superioare sunt destinate programatorilor de aplicaii care au de rezolvat o problem specific. Alt diferen ntre nivelurile 1, 2, 3 i nivelurile 4 i 5 este natura limbajului oferit. Limbajele main ale nivelurilor 1, 2 i 3 sunt numerice, programele scrise n aceste limbaje sunt formate din serii lungi de numere care sunt convenabile pentru procesoare dar greu de neles pentru oameni. ncepnd de pe nivelul 4 limbajele conin cuvinte i abrevieri pe nelesul oamenilor.

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    242

    Nivelul 4. Limbajul de asamblare pe care l gsim la nivelul 4 este o form simbolic pentru limbajul cod main. Acest nivel ofer programatorilor posibilitatea de a scrie programe pentru nivelurile 1, 2 i 3 care nu sunt att de complexe ca limbajele de pe nivelul 5

    Programele scrise n limbaj de asamblare sunt nti traduse n unul din limbajele nivelurilor 1,

    2 sau 3 i apoi interpretate de microprocesor.

    Programul care efectueaz traducerea se numete asamblor.

    Nivelul 5 este reprezentat de limbaje proiectate pentru a fi utilizate de programatorii de

    aplicaii care au de rezolvat anumite probleme.

    Astfel de limbaje se numesc limbaje de nivel nalt. Exist sute de astfel de limbaje, printre cele mai cunoscute se numr BASIC, C++, Java, LISP, PROLOG, PASCAL .a.

    Programele scrise n aceste limbaje sunt n general traduse pentru nivelurile 3 sau 4 de

    translatoare cunoscute sub numele de compilatoare, dei exist i interpretoare.

    n anumite cazuri nivelul 5 poate fi considerat un interpretor pentru un domeniu aplicativ

    particular, de exemplu programul AUTOCAD scris n limbajul LISP sau MATHCAD scris n

    limbajul C++.

    Mulimea de tipuri de date, operaii i caracteristici ale fiecrui nivel se numete arhitectur.

    Arhitectura se refer la acele aspecte care sunt vizibile pentru utilizatorul unui anumit nivel.

    Diferitele caracteristici vzute de programator, de exemplu

    ct memorie disponibil exist,

    dimensiunea regitrilor,

    lrgimea magistralei,

    memoria secundar sunt pari ale arhitecturii.

    Aspectele de implementare ca tehnologia cipurilor de memorie, nu fac parte din arhitectur. Studiul proiecrii acelor pri ale unui sistem de calcul care sunt vizibile programatorului se numete arhitectura calculatoarelor.

    Un calculator este compus din dou pri principale:

    - o parte hardware care este format din obiecte tangibile cum sunt:

    circuitele integrate,

    plci imprimate,

    cabluri,

    surse de putere,

    memoriile,

    echipamente periferice,

    i nu din idei abstracte cum ar fi algoritmi sau instruciuni. - o parte de software care const din:

    algoritmi (instruciuni detaliate care spun cum se poate face un anumit lucru)

    i modelarea lor cu ajutorul limbajelor de programare, adic programe.

    Programele pot fi memorate pe dispozitive de stocare a datelor, dar esena software-ului este setul de instruciuni care formeaz programul i nu mediile fizice pe care acestea sunt memorate.

    n cazul primelor calculatoare exist o diferen clar ntre hardware i software.

    Cu timpul linia de demarcaie dintre cele dou a devenit foarte flexibil, n special datorit adugarii, eliminrii sau compactrii unor niveluri odat cu evoluia calculatoarelor. Hardware-ul i software-ul sunt logic echivalente.

    Orice operaie executat prin software poate fi, de asemenea, construit direct n hardware, de preferin dup ce este destul de bine neleas. Reversul este de asemenea adevrat: orice instruciune executat de hardware poate fi simulat prin software. Decizia de a realiza anumite funcii prin hardware i altele prin software se bazeaz pe factori cum ar fi costul, viteza, sigurana n funcionare i schimbrile ulterioare avute n vedere, spre exemplu: module grafice implementate hardware, reele neuronale implementate hardware sau o gam larg de module folosite pe calculatoarele din tehnica militar.

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    243

    7.3. GENERALITI DESPRE PROGRAMAREA CALCULATOARELOR

    Lume a limbajelor de programare este indisolubil legat de evoluia, ntr-un interval de timp destul de redus, al sistemelor de calcul electronice (SCE).

    Dependente de iniiativa i capacitatea omului de a le structura capabilitile fundamentale, sistemele de calcul electronice nu se pot exprima dect n prezena unor sisteme de comunicaie cu acesta.

    Potenialul de calcul al unui sistem de calcul electronic, privit ca main fizic, poate fi valorificat i chiar amplificat, cu ajutorul suportului oferit de mainile virtuale (sisteme de operare, sisteme de gestiune a bazelor de date, limbaje de programare, medii vizuale de

    programare, etc.)

    Pentru a nelege relaia sistem de calcul - limbaj de programare, reamintim c, potrivit arhitecturii von Neumann, un sistem de calcul electronic are urmtoarele componente:

    - Sistemul de introducere a datelor (S.I.D);

    - Unitatea central de prelucrare i comand (U.C.P.C);

    - Memoria principal (M.P.);

    - Memoria secundar (M.S);

    - Sistemul de extragere a rezultatelor (S.E.R.).

    Limbajul prin care se transmit datele ctre un sistem de calcul electronic, SCE la nivelul cel mai de jos se numete limbaj main. Alfabetul unui astfel de limbaj este format de simboluri aparinnd mulimii {0,1}.

    Enunurile formulate de cunosctorii limbajelor main i adresate unitii centrale de prelucrare i comand n vederea decodificrii i execuiei se compun din ordine (comenzi) destinate procesorului pentru a efectua, n ultim analiz, diverse calcule aritmetico-logice sau transferuri de date ntre memoria principal i memoria secundar. Numrul celor dispui s programeze n cod main este foarte mic datorit faptului c "o bun" programare n cod main presupune, pe lng capacitatea de a gndi binar, o bun cunoatere a detaliilor de funcionare a unitii centrale de prelucrare i comand. Pentru a se mri productivitatea n programare s-au specificat o serie de limbaje al cror alfabet coincide n mare parte cu alfabetul limbajelor naturale, fcndu-se, prin aceasta, loc programrii simbolice, mult mai aproape de modul de gndire al oamenilor dect programarea n limbaj main. n aceast categorie intr: limbajele de asamblare, limbajele de programare de nivel nalt iar, mai recent, limbajele de programare vizuale.

    Tendina permanent n definirea limbajelor de programare este de apropiere de limbajul natural. Apropierea de modul de gndire al oamenilor a generat, implicit, o ndeprtare de modul n care lucreaz un sistem de calcul electronic SCE. Acesta este motivul pentru care un program scris ntr-un limbaj care nu este limbaj main sufer un proces de translatare (de regul n mai multe etape) de la codul surs la codul executabil de ctre unitatea central de prelucrare i comand al sistemului de calcul electronic SCE. Astfel c, ntr-un limbaj de programare de nivel nalt (categorie n care intr i limbajul Pascal asupra cruia ne vom ndrepta atenia n continuare) drumul de la enunul problemei pn la forma executabil a programului care o rezolv este similar celui descris n continuare:

    enunul problemei

    stabilirea algoritmului

    prezentarea soluiei specificat n pseudocod (sspc)

    codificarea soluiei specificat n pseudocod n limbajul de programare ales

    editarea codului surs pentru gsirea soluiei

    translatarea codului surs n cod executabil

    execuia codului executabil i afiarea soluiei

    n practica programrii operaia de translatare este realizat de nite "programe speciale" numite compilatoare sau, uneori, interpretere. Datele de intrare pentru compilator sau interpreter

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    244

    sunt reprezentate de codul surs al soluiei unei probleme (cod recunoscut de compilator sau interpreter).

    Etapele parcurse de codul surs pn la obinerea codului executabil cu ajutorul unui compilator sunt :

    Analiza lexical a programelor, are ca scop descompunerea codului surs n uniti lexicale (numite token-uri) specifice limbajului recunoscut de compilator (cuvinte rezervate, identificatori,

    constante, etc.).

    Analiza sintactic, are ca scop verificarea corectitudinii sintactice a codului surs. Existena acestei faze dovedete faptul c obinerea codului surs corect al unei aplicaii-utilizator este un demers ntemeiat pe respectarea unor exigene de natur sintactic. Pentru nceptori aceste exigene sunt percepute ca nite constrngeri care pot diminua drastic apetitul pentru exerciiul de a realiza programe adevrate i utile.

    Verificare semantic, se refer la anumite compilatoare care pot semnala situaii contraproductive de genul: "tip de dat declarat i nefolosit, variabil declarat i nefolosit, etc".

    Generare cod intermediar, reprezint n aceast faz, codul acceptat lexical, sintactic i semantic este transformat n cod binar intermediar.

    Optimizare cod i Generare cod executabil, sunt dou faze n urma crora, n cazul compilatoarelor moderne (cum este cazul i la compilatorul Borland Pascal) se genereaz cod executabil optimizat.

    Optimizarea codului se refer, n esen, la memoria RAM ocupat de cod (lungimea codului generat, n octei) i la viteza de execuie a codului generat. Deci un programator care vrea s scrie programe ntr-un limbaj P trebuie s se integreze n binomul sistem de calcul-limbaj de programare P, sub generoasa ndrumare a compilatorului limbajului P iar, mai nou, i cu sprijinul capabilitilor oferite de mediul n care este integrat compilatorul limbajului P.

    7.4. PROIECTAREA LIMBAJELOR DE PROGRAMARE

    7.4.1. Procesul de creare a software-ului

    Limbajele de programare sunt instrumente pentru scrierea de programe,iar prin proiectarea i implementarea lor respect etapele componente ale acestui proces. Realizarea unui limbaj nou este structural identic cu realizarea unei aplicaii software complexe, prin faze bine definite ale procesului de creare .

    1. Analiza i specificarea cerinelor - Orice aplicaie software este conceput pentru a veni n sprijinul unui anumit grup de utilizatori poteniali. Cerinele sunt stabilite sub forma unui document care trebuie s precizeze ceea ce trebuie s fac aplicaia respectiv i nu cum. La elaborarea documentului particip att potenialii utilizatori, ct i specialitii n dezvoltarea de software. Acest document conine specificaii privind manualele utilizator, studii de cost i fezabilitate, cerine privind performanele .a.

    2. Proiectarea i specificarea - De la cerinele specificate n faza precedent, echipa care realizeaz aceast etap (proiectanii de software) realizeaz specificaiile de proiectare, care identific fiecare modul al sistemului, precum i interfeele dintre module. Metodologia de proiectare utilizat n aceast faz are o mare importan pentru alegerea limbajului de programare utilizat n faza imediat urmtoare.

    3. Implementarea - Aceast faz este singura n care este utilizat explicit un limbaj de pro-gramare. Implementarea nseamn scrierea de uniti de program corespunztoare modulelor descrise n specificaiile de proiectare i editarea documentaiei corespunztoare. Rezultatul acestei faze este un sistem implementat i documentat complet.

    4. Certificarea - Scopul acestei etape este verificarea cerinelor impuse n prima etap i se realizeaz de obicei prin testarea sistemului n raport cu fiecare cerin specificat, utilizndu-se o baterie de teste, adic un set de programe (cnd este vorba de un limbaj de programare) sau un set de exemple (cnd este vorba de o aplicaie oarecare) care acoper toate necesitile impuse. Din

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    245

    punctul de vedere al testrii, nu se poate face o distincie clar ntre fazele 3 i 4. Astfel, este normal ca n faza de implementare s se realizeze testarea la nivel de modul, efectuat de fiecare programator, i parial testarea interfeelor inter-module (testarea de integrare), care se realizeaz prin legarea ctorva dintre modulele aplicaiei. n faza de certificare se realizeaz testarea sistemului, care verific sistemul n ansamblul su. Rezultatul acestei faze este un sistem verificat i certificat complet, livrabil utilizatorilor. n afara testrilor propriu-zise, tot n aceast faz se includ toate activitile care sunt legate de verificarea corectitudinii programelor scrise.

    5. ntreinerea - Dup intrarea n exploatare a aplicaiei, pot apare necesare modificri n aceasta, provocate fie de detectarea unor erori nedepistate n faza 4, fie de dorina de a-i aduga noi specificaii (cerine). De obicei, costul ntreinerii unei aplicaii ntrece costul tuturor celorlalte faze (1-4) luate mpreun.

    Toate fazele de dezvoltare a unui sistem software pot fi realizate cu ajutorul calculatorului. In

    mod normal, faza de implementare necesit prezena calculatorului i a unui set de utilitare (editoare de texte, asambloare, link-editoare, biblioteci), dar i n celelalte faze utilizarea calculatorului este benefic, mrind productivitatea muncii.

    n general, orice produs software trebuie s satisfac urmtoarele cerine: - s fie fiabil; - s fie uor de ntreinut; - s se execute eficient. Exist alte 10 criterii de calitate.

    7.4.2. Aspecte ale calitii softului

    Toat lumea dorete ca programele s fie: rapide, fiabile, uor de folosit, lizibile, modulare, structurate .a.m.d.

    Calitatea produselor program se definete ca o compunere a mai multor trsturi (factori). McCall (n 1977) mparte pentru prima dat aceti factori de calitate n factori externi i factori interni. Factorii externi de calitate unt sesizai de cei care interacioneaz direct cu produsul final i care cumpr produsul, contracteaz dezvoltarea i ntreinerea lui. Factorii interni de calitate se pot detecta doar de ctre persoanele implicate n procesul de dezvoltare de software.

    Factorii externi de calitate sunt enumerai mai jos: 1. Corectitudinea, este abilitatea produsului de a executa exact sarcinile sale, n conformitate cu

    cerinele i specificarea sa. 2. Robusteea, este abilitatea sistemului de a funciona chiar i n condiii anormale. Termenul

    fiabilitate este folosit uneori n loc de robustee; trebuie precizat c fiabilitatea este un concept mai general i se interpreteaz cel mai bine ca acoperind att corectitudinea ct i robusteea.

    3. Extensibilitatea, este uurina cu care produsele software se pot adapta la schimbri ale specificaiilor.

    Dou principii sunt eseniale pentru mbuntirea extensibilitii: a. Simplitatea proiectului: o arhitectur mai simpl va fi ntotdeauna mai uor de adaptat la

    modificri dect una complicat. b. Descentralizarea: cu ct sunt mai autonome modulele ntr-o arhitectur software, cu att

    va fi mai mic numrul de consecine ale unei modificri simple; ea va trebui s afecteze doar modulul n cauz sau un numr ct mai mic de alte module.

    4. Reutilizabilitatea, este abilitatea produselor software de a fi reutilizate, n ntregime sau

    parial, la noi aplicaii. 5. Compatibilitatea, este uurina cu care produsele software pot fi combinate ntre ele (pot

    interaciona). 6. Eficiena, nseamn folosirea raional (buna folosire) a resurselor hardware ca:

    procesoare, memorie intern i extern, dispozitive de comunicare. 7. Portabilitatea, este uurina cu care produsele software se pot transfera n diverse medii

    hardware i software.

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    246

    8. Verificabilitatea, este uurina de elaborare a procedurilor de acceptare (n particular date de test) i a procedurilor de detectare i trasare (transformare n erori) a cderilor (failures) n timpul fazelor de validare i exploatare.

    9. Integritatea, este abilitatea produselor software de a-i proteja componentele lor (pro-grame, date, documente) fa de accese i modificri neautorizate.

    10. Uurina n utilizare, se refer la nvarea utilizrii sistemului, operarea, pregtirea datelor de intrare, interpretarea rezultatelor i recuperarea din situaii de eroare.

    Factorii interni de calitate sunt strns legai de natura intim a procesului de elaborare a produselor program, n mod esenial, aici contribuie:

    - metodele de analiz i proiectare a produselor program;

    - facilitile oferite de limbajele de programare folosite la implementare;

    - aspectele organizatorice ale industriei soft;

    Ca factori interni de calitate menionm:

    1. modularitatea

    Structural, produsul program trebuie s fie alctuit din module, urmrindu-se principiul descentralizrii.

    2. documentarea complet

    Presupune existena unei documentaii clare i adus la zi pentru fiecare faz a ciclului de via a programului.

    Un limbaj de programare fiabil trebuie s posede urmtoarele caliti:

    s permit o descriere ct mai natural a problemei care se rezolv, permind programatorului s se concentreze asupra problemei, i nu asupra detaliilor de adresare, indexare etc;

    s aib un grad de lizibilitate ct mai ridicat, adic un program s poat fi uor de descifrat (sintactic i semantic) de oricine l consult;

    s permit gestiunea excepiilor (depiri aritmetice, erori de intrare-ieire etc).

    7.4.3. Criterii de proiectare a unui limbaj de programare

    Horowitz enumer 11 criterii de care trebuie s se in seama la proiectarea unui limbaj de programare. Aceste criterii sunt prezentate n continuare i se consider c primele ase sunt cele mai importante.

    1. O descriere sintactic i semantic bine definit

    Aceast cerin este cea mai important dintre toate.

    Descrierea sintactic se poate realiza cu mai multe metode (forma Backus-Naur, grafele de sintax, gramaticile context-free).

    Semantica poate fi, la rndul ei, descris

    interpretativ (engl. interpretive semantics) cu ajutorul unei maini abstracte,

    axiomatic (engl. axiomatic semantics) atunci cnd se folosete un set de axiome, sau

    denotaional (engl. denotational semanlics), cnd programele sunt definite ca funcii matematice. Diversele tipuri de descrieri ale semanticii care se folosesc au izvort din necesiti diferite. Astfel, descrierea interpretativ este util la implementarea limbajului, descrierea ax-iomatic este un prim pas spre verificarea programelor, iar cea denotaional este folosit la studiul unui limbaj, independent de implementri.

    2. Fiabilitate, n afar de calitile enumerate, prin fiabilitate se mai nelege i faptul c limbajul este proiectat astfel nct descurajeaz greelile de programare (att cele sintactice, ct i cele de logic). De asemenea, este important rolul pe care l joac comentariile n textul surs i conveniile utilizate pentru comentarii (dac se definesc linii comentariu sau dac comentariul se poate pune n aceeai linie surs cu instruciunile sau comenzile limbajului).

    3. Traducere rapid. Prin intermediul programelor traductoare se realizeaz decodificarea unui program surs i obinerea codului main corespunztor. Sunt dezvoltate multe metode de analiz sintactic, n general aceast operaie de traducere realizndu-se ntr-unul sau mai muli pai.

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    247

    Este de preferat s se acorde o importan sporit fazei de analiz sintactic pentru a fi detectate instruciunile eronate, caz n care nu se vor mai continua celelalte faze ale traducerii (analiza semantic, generarea de cod etc.).

    4. Cod obiect eficient este un criteriu esenial pentru un compilator. Limbajul FORTRAN a avut un asemenea obiectiv la specificare i obiectivul a fost realizat la implementare. Eficiena codului obiect generat de un compilator este n strns legtur cu informaiile de care compilatorul dispune n momentul compilrii. De exemplu, limbajul Pascal necesit cunoaterea tuturor detaliilor n faza de compilare. Un limbaj se numete puternic tipizat (engl. strong typed) dac tipul tuturor expresiilor este cunoscut la compilare. De obicei dac alocarea variabilelor se face static, atunci se poate genera un cod eficient, pe cnd dac acest lucru este fcut dinamic (n timpul execuiei), atunci eficiena codului scade, rmnnd mai multe aciuni de efectuat la momentul execuiei.

    5. Ortogonalitatea, se refer la faptul c limbajul posed un numr relativ mic de elemente de baz, independente, care pot fi aplicate ortogonal (aceste elemente se pot utiliza independent sau pot fi concatenate n orice combinaie a lor). Ortogonalitatea este una dintre caracteristicile de baz ale limbajului ALGOL68.

    6. Independena de main, este un deziderat aprut odat cu conceptul de portabilitate, concept care exprim proprietatea unui program surs de a putea fi implementat n medii hard i soft diferite fr a fi supus modificrilor sau cel mult s fie supus unor modificri minime. Dificultile ntlnite n realizarea acestei cerine sunt datorate ntre altele aritmeticii mainii, dimensiunii cuvntului main i sistemului de codificare a caracterelor i instruciunilor main, precum i sistemului de intrri/ieiri. Toate aceste caracteristici in de aspectele constructive (hard) ale calculatorului respectiv.

    7. Demonsirabilitatea, reprezint cerina ca un limbaj s fie demonstrabil fiind strns legat de aspectele privind corectitudinea programelor. Dac exist o definiie formal a tuturor elementelor unui limbaj, atunci cu ajutorul acesteia se poate realiza verificarea formal a programelor scrise n limbajul respectiv,

    8. Consistena, a dou sau mai multe afirmaii reprezint compatibilitatea logic a acestora, n limbajele de programare se urmrete consistena notaiilor folosite pentru operaii sau funcii cu cele folosite n limbajul matematic. Astfel, pentru realizarea consistenei este util definirea de sensuri multiple pentru un acelai operator (reprezentat printr-un acelai simbol). De exemplu, operatorii aritmetici (+,-,*,/), care sunt folosii n FORTRAN pentru a construi expresii aritmetice, pot fi utilizai pentru a exprima operaii aritmetice de tipuri diferite.

    9. Existena subseturilor. Ideea de baz a apariiei subseturilor este c nu se impune cunoaterea ntregului limbaj atunci cnd se utilizeaz doar o parte din specificaiile lui. Exemplul clasic este furnizat de familia de subseturi SP/k a limbajului PL/1. Astfel, SP/1 conine numai instruciuni de ieire .i pentru lansarea n execuie a unui program, SP/2 posed n plus variabilele i instruciunile de atribuire i de intrare, iar SP/3 introduce i instruciuni simple de control. In acest caz, se observ c, din punctul de vedere al incluziunii, avem SP/1 C SP/2 C SP/3 C PL/1.

    Exist ns i dialecte ale unui limbaj. Poate c exemplul cel mai elocvent aici este cel al limbajului BASIC, pentru care exist sute de dialecte. Toate aceste dialecte au n comun acelai subset al limbajului. Ele ns difer prin ceea ce s-a adugat la acest subset, n special fiind vorba de instruciuni grafice sau de generare a sunetelor. Aceste caracteristici suplimentare pltesc un tribut greu dependenei de caracteristicile constructive ale calculatoarelor pe care sunt implementate, motiv pentru care portabil itatea programelor este aproape nul.

    Acest motiv a condus la restricia (prezent la unele limbaje) de interzicere a subseturilor. Exemplul tipic este oferit de limbajul Ada, pentru care, nc din faza de specificare, s-a interzis existena subseturilor.

    10. Uniformitatea este conceptul care trebuie neles n urmtoarea accepiune: lucrurile similare trebuie s aib nelesuri similare, sau, mai exact, construcii asemntoare din punct de vedere sintactic trebuie s aib nelesuri ct mai apropiate. Un contraexemplu n acest sens este oferit de limbajul FORTRAN, care nu respect acest principiu n cazul instruciunilor GO TO

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    248

    calculat i GO TO asignat: ele au sintactic aproape identic, ns au o semantic total diferit, avnd n comun doar faptul c amndou sunt instruciuni de transfer.

    11. Extensibilitatea, reprezint un motiv pentru care apare aceast cerin n general translatoarele sunt forate s aleag, pentru un anumit obiect de un tip precizat, o reprezentare prestabilit, fapt care contribuie la scderea eficientei codului. De exemplu, n APL toate tablourile sunt reprezentate pe Unii (sau coloane), ceea ce, n cazul tablourilor rare (cu puine elemente nenule) i de dimensiuni mari, devine foarte ineficient din punctul de vedere al utilizrii memoriei. Un alt exemplu este limbajul LISP, n care listele sunt reprezentate sub form de arbori binari, metod eficient cnd se lucreaz n memorie, dar foarte ineficient atunci cnd se folosete suportul extern. Aceste exemple conduc la ideea c ar fi util ca programatorul s dispun de mecanisme prin care s poat defini i utiliza reprezentri mai compacte ale datelor, mpreun cu operaiile efectuate asupra acestora. Au existat mai multe ncercri pentru proiectarea de astfel de limbaje, dar nici una n-a fost n ntregime reuit.

    Aceste 11 criterii trebuiesc considerate doar ca linii generale n proiectarea specificaiilor unui nou limbaj. Domeniul de utilizare al limbajului respectiv poate s stabileasc prioritatea unora dintre cerinele enumerate i eventuala renunare la altele. Succesul unui limbaj este legat att de aspecte tehnice (existena unui manual de utilizare clar i concis, existena unui transla tor eficient, existeni unui suport adecvat pentru dezvoltarea de aplicaii) ct i de aspecte de alt natur.

    Exist diverse soluii pentru realizarea unui nou limbaj de programare i pentru impunerea cerinelor specificate. De exemplu, n unele situaii chestiunea fiabilitii este lsat pe seama compilatorului, nefiind tratat n faza de specificare a limbajului, fapt care poate produce rezultate nedorite. Astfel, cnd se ncearc compilarea de programe incorecte comportarea compilatorului nu poate fi controlat; de asemenea, cnd se testeaz aplicaiile scrise n limbajul respectiv se poate ajunge la timpi de testare mari. Compilarea rapid se poate obine utilizndu-se compilarea separat, adic posibilitatea de a compila n momente de timp diferite pri separate (module) ale unei aplicaii. Dezavantajele compilrii separate provin din imposibilitatea verificrii tipurilor i a corespondenei parametrilor formali cu cei actuali (la nivelul limbajelor anilor '60) sau, n cazul cnd acest lucru este posibil, necesarul de informaie suplimentar care trebuie memorat la compilarea fiecrui modul este mare. FORTRAN-ul este primul limbaj n care apare conceptul de modul, concept pe care limbajul ALGOL60 nu-1 are. Intre limbajele de tip ALGOL, Modula este

    probabil primul limbaj care introduce compilarea separat, trstur luat n considerare i de proiectanii limbajului Ada. Super-seturile Pascal ale firmei Borland (Turbo i Borland Pascal) utilizeaz module numite unit-uri care se compileaz separat.

    O alt problem deosebit de disputat este optimizarea compilrii. Principalele dezavantaje al unui compilator optim sunt ncetineala i consumul sporit de resurse.

    Nu exist o regul general n ceea ce privete etapele care trebuie parcurse pentru proiectarea unui limbaj de programare. Horowitz recomand metoda celor 10 pai, ilustrat mai jos:

    1. alegerea unui domeniu de aplicaii;

    2. stabilirea unui comitet (grup) de proiectani ct mai mic;

    3. definirea unor trsturi precise de proiectare;

    4. distribuirea primei versiuni a proiectului unui grup restrns de persoane interesate;

    5. revizuirea definiiei limbajului (dup primirea observaiilor de la 4);

    6a. ncercarea de a realiza un prototip de compilator; sau

    6b. ncercarea de a obine o definiie formal a semanticii limbajului;

    7. revizuirea definiiei limbajului (a doua revizuire);

    8. realizarea unui manual al limbajului, clar i concis, i distribuirea acestuia;

    9. producerea unui compilator de calitate i distribuirea lui pe scar larg;

    10. scrierea unor manuale de nvare (engl. primers), foarte clare, care s explice cum se utilizeaz limbajul i care s conin un numr mare de exemple.

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    249

    7.5. EVOLUIA l CLASIFICAREA LIMBAJELOR DE PROGRAMARE

    Prin limbaj de programare (LP) nelegem o notaie sistematic prin care este descris un proces de calcul. Rolul unui limbaj de programare este de a pune la dispoziia programatorilor construcii sintactice pentru organizarea calculelor. Procesul de calcul (PC) este constituit dintr-o mulime de pai pe care o main i poate executa pentru a rezolva o anumit problem, pai care sunt exprimai n comenzi elementare pe care maina (calculatorul) tie s le execute. Prin urmare, pentru descrierea procesului de calcul este necesar cunoaterea setului de comenzi (instruciuni) al mainii la care ne referim.

    7.5.1. Limbaj main. Limbaj de nivel nalt

    Limbajul nativ al unui computer este aa-numitul limbaj main al tipului de calculator respectiv, acest limbaj reprezentnd notaia la care calculatorul rspunde n mod direct.

    Setul de comenzi elementare al unui calculator este constituit din:

    - operaii aritmetice i logice; - operaii de intrare-ieire; - unele funcii speciale, numite funcii de control. Comenzile i instruciunile limbajului main sunt scrise ntr-o form codificat, foarte

    compact, fapt ce ngreuneaz foarte mult nelegerea textului surs. Din pcate, limbajul main este foarte legat de arhitectura fizic a mainii, fiind constituit din succesiuni de codificri binare.

    Datorit apropierii de main, executarea unei operaii complexe necesit scrierea unei secvene lungi de instruciuni i comenzi.

    Limbajul de asamblare al unui calculator face din acest punct de vedere un pas nainte prin

    atribuirea de nume simbolice (aa numitele mnemonici) codificrilor operaiilor mainii, precum i locaiilor de memorie asociate. Secvena de coduri binare de mai sus are, pe o anumit arhitectur, echivalentul mnemonic:

    LOAD I ADD J STORE K

    ns nici una din variantele prezentate nu este la fel de clar i semnificativ ca echivalentul lor:

    K:=I+J

    Din acest motiv, limbajele main i cele de asamblare se numesc limbaje de nivel sczut. Aceste limbaje sunt foarte departe de limbajul natural, aa c s-a cutat elaborarea altor

    limbaje, mai apropiate de exprimarea natural. Rezultatul este ceea ce numim acum limbaje de programare de nivel nalt (engl. high-level programming languages, echivalate uneori cu termenul

    de limbaje de programare). Aceste limbaje utilizeaz notaii mai puin primitive dect limbajele de asamblare, n care exprimarea aciunilor de urmat devine uoar, clar i concis.

    Nivelul nalt are semnificaia unei distanri suficient de mari fa de nivelul de exprimare al mainii. Un limbaj de nivel nalt mrete considerabil numrul celor ce vor utiliza echipamentele disponibile la un moment dat. Putem spune c proiectarea i implementarea limbajelor de programare este activitatea capital de a crei calitate depinde lrgirea comunitii programatorilor care s poat realiza eficient dezvoltarea unor aplicaii de larg interes.

    Orice notaie utilizat care este diferit de limbajul main nu poate fi executat direct, ea trebuind s fie tradus n limbajul main al calculatorului gazd. Activitatea de traducere (numit generic translatare) este preluat de programe specializate numite compilatoare (dac textul surs iniial este scris ntr-un limbaj de nivel nalt) sau asambloare (dac textul surs este scris n limbaj de asamblare).

    Etapele tehnologiei de programare presupune trecerea de la codul unui program surs (PS) scris ntr-un limbaj de programare, prin programul obiect (PO) la un program obiect executabil

    (POE) care poate fi neles de calculator (fig.7.2.) Operaia de traducere (translatare) corespunde transformrii progarmului surs n programul

    obiect (fig. 7.2.b.).

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    250

    Operaia de interpretare realizeaz direct trecerea din progarm surs n program obiect executabil (fig. 7.2.c.) i este specific limbajelor cu program interpretor ca limbajul BASIC. Este specific i operaiei de asamblare prin programul asamblor (cod main), obinndu-se un program direct executabil, ca n cazul limbajului de asamblare (ASSEMBLER, M80).

    Operaia de compilare corespunde unui program compilator ca n cazul limbajelor PASCAL, C, FORTRAN (fig. 7.2.d.).

    Figura 7.2. a. etapele tehnologiei de programare, b. translatarea, c. interpretarea, d. compilarea.

    Execuia unui program se poate realiza n dou moduri : - cu ajutorul unui COMPILATOR

    dup verificrile de corectitudine, traduce programul n cod OBIECT, iar prin operaia de ediie de legturi este convertit ntr-un program OBIECT EXECUTABIL neles de main,

    dup conversie programul poate fi utilizat independent, indiferent de limbajul n care a fost scris.

    n acest mod sunt realizate utilitarele cele mai performante.

    - prin intermediul unui INTERPRETOR

    conversia nu mai este necesar,execuia fcndu-se pe msura verificrii i traducerii programului fr a mai iei din interpretor,

    metoda nu este foarte eficient Deficiene :

    necesitatea ncrcrii limbajului n memorie la fiecare execuie, viteza de lucru sensibil sczuta datorit diferitelor verificri i controale.

    Datorit interpunerii compilatoarelor i asambloarelor este evident c odat cu creterea claritii i accesibilitii, limbajele de programare de nivel nalt aduc cu ele i o scdere a performanei de execuie fa de variantele de program scrise direct n limbaj main. Aceste scderi se manifest pe dou planuri:

    timp main cerut de procesul de compilare;

    codul rezultat n urma translatrii este de obicei mai lung i necesit mai mult timp de execuie dect varianta codificat direct n limbaj main.

    Trecerea la utilizarea pe scar larg a limbajelor de nivel nalt a adus cu sine o caracteristic foarte important a programelor scrise n astfel de limbaje: portabilitatea, adic posibilitatea ca programele s fie rulate pe arhitecturi de calcul de tipuri diferite fr ca programele surs s fie supuse unor modificri (sau cel mult s fie supuse unor modificri cu totul minore). Acest moment a fost foarte important pentru dezvoltarea unei comuniti de programatori, pentru rspndirea soft-ului i pentru crearea de biblioteci de programe reutilizabile.

    Elementele eseniale pe care le promoveaz un limbaj de programare de nivel nalt sunt:

    a. Modelul de calcul (computation model)

    Reflect principiile de lucru ale programelor scrise n acel limbaj (am amintit n acest sens c limbajele imperative promoveaz modelul de calcul von Neumann). Din acest punct de vedere un limbaj poate reflecta prin modelul de calcul adoptat arhitectura mainii pe care ruleaz sau poate reflecta o arhitectur diferit.

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    251

    Spre exemplu, limbajele de programare concurente promoveaz un model de calcul care simuleaz execuia simultan a unor entiti de programe (deci reflect o arhitectur multiprocesor), chiar dac arhitectura pe care ruleaz acestea este de tip monoprocesor.

    b. Tipuri de date i operaii

    Calculatorul dispune de un set de tipuri de baz (ntreg, caracter, real). Este rolul limbajului s pun la dispoziie mecanisme de generare a unor structuri combinate pe baza tipurilor de baz (tablouri, nregistrri, liste). Fiecare tip de dat necesit operaii asociate pentru manipularea valorilor sale.

    c. Faciliti de abstractizare

    Funciile i procedurile reprezint abstractizri ale operaiilor i aciunilor necesare dintr-un program. De exemplu, un program poate defini funcia radpat (pentru extragerea rdcinii ptrate dintr-un numr), dup care aceasta poate fi folosit ca orice funcie predefinit a limbajului. Definirea de noi tipuri de dat reprezint o alt utilizare a facilitilor de abstractizare: un program poate defini tipul de dat coad, dup care acest tip de dat va avea acelai regim ca i tipul predefinit tablou, spre exemplu.

    d. Verificare

    Faza de compilare poate detecta pe lng clasicele erori de sintax o clas larg de erori posibile la execuie: de exemplu, o incompatibilitate de tip (de exemplu, ncercarea de utilizare a unei variabile ntregi pe post de variabil de tablou), chiar dac nu este o eroare tipic de sintax, face parte din categoria erorilor de execuie detectabile n faza de compilare. Aadar, faza de translatare, n ciuda unor dezavantaje menionate anterior, sporete sigurana programelor procesate.

    Majoritatea limbajelor de nivel nalt (Pascal, C, Modula, FORTRAN, ALGOL, Oberon)

    reflect la orice nivel acest principiu, din aceast cauz ele numindu-se limbaje dirijate de control (control-flow languages), adic limbaje n cadrul crora execuia este dirijat de instruciuni de control al execuiei (instruciuni care dirijeaz fluxul modificrilor celulelor de memorie la care programul are acces). Dintre aceste instruciuni, rolul central l are instruciunea de atribuire, iar limbajele dirijate de control se mai numesc i limbaje imperative (termen derivat din caracterul "imperativ", tranant, ferm, al aciunii instruciunilor de atribuire). Un limbaj de programare imperativ poate fi privit ca o extensie a tipului de arhitectur hard pe care se implementeaz, iar un program poate fi privit ca o extensie a limbajului de programare respectiv.

    Coninutul volumului de fa se va axa principal pe problematica ridicat de aceste limbaje imperative. Chiar dac vor fi discutate comparativ elemente noi, introduse de limbaje i stiluri de programare mai recente (programare funcional, programare logic etc.), trebuie s recunoatem c n ciuda numeroaselor imperfeciuni de proiectare i implementare, limbajele imperative, prin eficiena de execuie pe care o etaleaz (i aceasta se ntmpl tocmai pe baza principiului von Neumann de care acestea in cont) rmn nc principalele instrumente soft de proiectare i implementare a aplicaiilor importante.

    7.5.2. Generaii de limbaje

    Un sumar al evoluiei n timp a limbajelor de programare s-ar putea exprima astfel:

    1954-1958 Limbaje de prima generaie (FORTRAN I, ALGOL58). Acestea au meritul de a fi fcut pasul decisiv de la limbajul de asamblare la limbajele de nivel nalt. Rolul lor primordial a constat n promovarea i dezvoltarea conceptelor ce stau la baza limbajelor de programare de nivel nalt precum i a implementrii lor.

    1959-1961 Limbaje de generaia a doua (ALGOL60, FORTRAN II, Cobol, Lisp). Sunt considerate limbaje stabile, durabile, care se utilizeaz intens i astzi. Chiar dac ALGOL60 nu a atins un grad de rspndire suficient de mare, influena sa a fost imens n dezvoltarea limbajelor Pascal, PL/1, Simula i Ada.

    1962-1971 Limbaje de generaia a treia (PL/1, ALGOL68, Pascal, Simula). Chiar dac au reprezentat teoretic un pas nainte, succesul lor nu se poate compara nici pe departe cu cel al

    limbajelor de generaia a doua. ncercarea acestor limbaje de a le nlocui pe cele de generaia a doua a

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    252

    fost sortit eecului, facndu-l pe Hoare s remarce c "ALGOL60 reprezint un pas nainte fa de succesorii si". Limbajul PL/1 a combinat elemente de FORTRAN, ALGOL i COBOL rezultnd un limbaj puternic, dar mult prea complex, deosebit de dificil de nvat i de implementat, ncercarea limbajului ALGOL68 de a generaliza limbajul ALGOL60 a fost caracterizat drept elegant dar neacceptat practic de marea mas a programatorilor. Limbajul Pascal, dei cu un enorm succes din punct de vedere didactic, nu este considerat nici astzi suficient de robust pentru utilizare la scar industrial.

    1972-1979 Limbaje de generaia a patra (CLU, CSP, Ada, Smalltalk). Au avut o rspndire i mai redus dect cele de generaia a treia, justificnd pe bun dreptate denumirea acestei perioade drept "gol de generaie" (generation gap). Aceast perioad a fost ns o perioad de cercetare intens i de reevaluare a obiectivelor proiectrii limbajelor de programare. Criza software de la sfritul anilor '60 a condus la o schimbare de optic n acest sens, accentul cznd pe structurare. La nivel micro acest lucru s-a fcut prin eliminarea instruciunilor goto i nlocuirea lor cu instruciuni de tip while, iar la nivel macro s-a pus mare accent pe modularizarea programelor prin utilizarea intensiv de funcii i proceduri i prin promovarea conceptului de abstractizare a datelor.

    1980-1990 Paradigme ale limbajelor de programare. Deceniul al noulea se caracterizeaz printr-o intens activitate de cercetare, concentrat nu att pe studiul i dezvoltarea unor limbaje particulare, ct pe studiul paradigmelor asociate claselor de limbaje. n acest sens, se remarc clasele de limbaje funcionale, logice, orientate obiect i distribuite, ele reprezentnd i cele patru paradigme de programare cel mai intens studiate la ora actual.

    7.5.3. Paradigme de programare

    Paradigmele de programare sunt colecii individualizate de caracteristici de evaluare i criterii de abstractizare care determin i difereniaz clasele de limbaje de programare. Ca exemple de astfel de criterii amintim structura programului, noiunea de stare a execuiei, metodologia programrii etc.

    n 1990 Wegner d urmtoarea clasificare relativ la paradigmele de programare acceptate i la exponenii lor cei mai reprezentativi:

    a. paradigma programrii procedurale i structurate

    Este caracterizat prin faptul ca un program este privit ca o mulime ierarhic de blocuri i proceduri. Exponent: ALGOL60.

    b. paradigma programrii bazate obiect i orientat obiect

    Un program este constituit dintr-o colecie de obiecte care interacioneaz. Exponeni: Simula, Smalltalk, C++.

    c. paradigma programrii concurente i distribuite

    Execuia unui program este constituit din aciuni multiple posibil a fi executate n paralel pe una sau mai multe maini. Execuia aciunilor poate fi independent sau aciunile pot depinde una de alta, situaie n care este nevoie de primitive de sincronizare i comunicare. Exponeni: CSP, extensii concurente ale limbajelor imperative (C, Pascal, FORTRAN), Linda, Occam.

    d. paradigma programrii funcionale

    Un program este descris pe baza unor funcii de tip matematic (n sensul lipsei efectelor secundare), utilizate de obicei recursiv. Funciile sunt considerate obiecte cu "drepturi egale" n cadrul limbajului, adic la fel ca elementele oricrui tip de dat ele pot constitui elementul de baz n structurarea unor date (putem avea de exemplu tablouri de funcii), pot fi returnate ca rezultat al unor funcii (funcia compunere de funcii returneaz de exemplu o alt funcie) .a.m.d. Exponeni: Lisp ('60), Miranda ('70), ML('80),Haskell('90).

    e. paradigma programrii logice

    Un program este descris printr-un set de relaii ntre obiecte precum i de restricii ce definesc cadrul n care funcioneaz acele obiecte. Execuia nseamn aici activarea unui proces deductiv care va furniza concluzii posibile pe baza datelor de intrare. Exponent: Prolog.

  • CAPITOLUL 7. LIMBAJE DE PROGRAMARE

    253

    f. paradigma programrii la nivelul bazelor de date

    Aciunile programului sunt dictate de cerinele unei gestiuni corecte i consistente a bazelor de date asupra crora acioneaz programul. Exponeni: SQL, DBase.

    Paradigmele prezentate nu sunt mutual exclusive. De exemplu, Ada este att un limbaj

    structurat ct i unul bazat pe obiecte, iar Parlog este att un limbaj concurent ct i unul logic. Sistemele de gestiune a bazelor de date orientate obiect (Encore, O2) combin paradigmele b) i f). Astfel de limbaje se numesc sisteme multiparadigm (MP).

    Limbajele PL/1 i Ada reprezint dou bune exemple n acest sens, rezultatul fiind n ambele cazuri un limbaj foarte complex care a slbit aplicabilitatea paradigmelor constituente printr-o inadecvat generalizare a acestora.

    Viitorul n aceast direcie este privit ca fiind al sistemelor distribuite cu independen individual sporit (loosely coupled distributed systems), capabile sa suporte subsisteme MP cooperante. O astfel de soluie conserv integritatea paradigmelor asociate, pstrnd avantajele fiecreia dintre ele. Sistemele n timp real dezvoltate n prezent la nivelul corporaiilor i grupurilor largi de cercetare respect deja aceste principii de proiectare.

    7.5.3.1. Ciclul de via i paradigmele dezvoltrii software

    O greeal obinuit facut n privina software-ului este presupunerea c partea principal a dezvoltrii software este programarea (codarea). Programarea (codarea) este doar o parte a procesului de dezvoltare software. Muli ali pai sunt implicai n succesul dezvoltrii de software pentru computere. Toi aceti pai poart denumirea de ciclu de via software.

    Cea mai mare parte a modelelor ciclului de via software includ urmtoarele ase etape:

    ingineria cerinelor, proiectare, codare, integrare, livrare i ntreinere. n continuare se vor

    descrie fiecare dintre aceste procese.

    Ingineria cerinelor

    n timpul acestui proces, proiectanii i clienii se ntlnesc pentru a discuta ideile pentru noul produs software. Proiectanii utilizeaz o varietate de tehnici pentru a aprecia necesitile reale ale clientului. O asemenea tehnic este prototiparea rapid, n care se construiete un model prototip care poate simula funcionarea software-ului dorit.

    Procesul ingineriei cerinelor este complet cnd sunt scrise specificaiile pentru noul produs software ntr-un document formal denumit documentul specificaiilor cerinelor.

    Proiectarea

    n timpul acestui proces proiectanii decid cum vor construi programul astfel nct s satisfac cerinele prevzute n documentul specificaiilor cerinelor. Proiectarea programului trece prin cteva stadii, n care se divide din ce n ce mai detaliat, constituind rafinarea n pai i permite programatorilor s conduc complexitatea software-ului prin amnarea deciziilor privind detaliile pentru a se concentra pe alte aspecte importante ale proiectrii. Cnd proiectarea este complet, este nregistrat n documentul specificaiilor de proiectare.

    Codarea

    n timpul acestui proces, echipele de programatori scriu codul pentru software. Software-ul

    este mprit n uniti separate denumite module, datorit complexitii procesului de codare. Aceste echipe sunt responsabile att pentru codarea modulelor lor, ct i pentru documentarea adecvat a codului i pentru testarea acestuia n vederea asigurrii corectitudinii.

    Integrare

    n timpul acestui proces, modulele individuale ale produsului software sunt combinate

    pentru a forma produsul software. Deoarece modulele au fost dezvoltate separat, testarea este

    cruciala pentru procesul de integrare. Chiar i n cazul unui proiect bun, este posibil s existe imcompatibiliti ntre module. Aceste probleme trebuie identificate i corectate pentru a completa integrarea.

    Livrare

  • INFORMATICA APLICAT IN INGINERIA LEMNULUI

    254

    n timpul acestui proces, proiectanii livreaz clientilor software-ul complet. De obicei clienii vor realiza teste asupra software-ului pentru a determina dac satisface sau nu cerinele din documentul specificaiilor cerinelor. O dat software-ul acceptat, acesta este instalat i utilizat de ctre client.

    ntreinere

    n timpul acestui proces, software-ul sufer variate modificri dup livrare pentru a repara erori, adaug noi funcionaliti, instaleaz software-ul pe noi platforme, sau adapteaz software-ul la noi tehnologii. Dei s-ar parea c software-ul trebuie s fie finalizat nainte de livrare, aceasta este departe de adevr. Toate produsele software de succes evolueaz n timp pentru a prentampina necesitile schimbatoare ale clienilor.

    Muli ani produsele software au fost realizate pe principiul programrii structurate, metod care are la baz realizarea secvenial a operaiilor de calcul n conformitate cu principiul de lucru al echipamentelor hardware ale calculatoarelor.

    n acest gen de programe datele i programul sunt separate, ceea ce duce la necesitatea scrierii de subrutine pentru realizarea driverelor, operaiilor cu date, multe task-uri. Task-urile lucreaz serial i secvenial. Acest mod de realizare a software-ului se numete paradigma procedural sau a programrii structurate.

    Aceast paradigm are avantajul unui program compact, o execuie rapid i dejavantaje cum ar fi slaba flexibilitate a programelor, reutilizare sczut, depanare dificil. Dintre toate procese descrise, ntreinerea este dominant n privina costurilor din cadrul ciclului de via.

    Deoarece costurile de ntreinere sunt att de importante (cca. 60-70%), muli proiectani ncep s utilizeze metode de