![]() |
![]() |
Trecut, prezent si
|
"Comunicarea este esenta stiintei."
FRANCIS CRICK
Prezentul capitol cuprinde un scurt istoric al extensibilitatii, urmat de o incursiune in universul limbajelor vizuale ( sa nu uitam ca LEDA este un limbaj vizual ) si al noilor paradigme ale programarii.
Conceptul de extensibilitate a aparut inca pe la sfirsitul anilor '60, ca o cautare de imbunatatire a vechilor limbaje de programare existente la acea ora ( FORTRAN, ALGOL60 ).
Cercetarile din acei ani au dus la urmatoarele:
Asa cum observa Alan J. Perlis in anul 1969, a vorbi despre limbajele extensibile inseamna a lamuri ce inseamna, ce reprezinta un limbaj de programare. Stim cu totii ca un limbaj se poate defini prin trei aspecte - control, date, operatii - si, desigur, sintaxa prin care le reprezentam pe acestea. Cu anii, limbajele de programare au evoluat, adaugindu-li-se noi constructii pentru facilitarea dialogului dintre om si masina:
De aceea, ca o alternativa la numeroasele limbaje specializate sau a unui singur limbaj universal, notiunea de limbaj extensibil a capatat o tot mai mare importanta si raspindire. Astfel s-au dezvoltat diverse tehnici de extindere din care mentionam:
In lume exista mii de limbaje de programare concepute, din care implementate sint sute, pornind de la limbaje generale ( Pascal, C ) la cele specializate ( Prospero, Nebula - utilizate la descrierea sistemelor de fisiere, EXSYS - in sistemele expert, la editarea bazelor de cunostinte si formarea regulilor, J sau Mathematica - pentru prelucrari matematice, HPGL - pentru manipularea imprimantelor ), de la limbaje imperative ( ALGOL, Oberon ) la cele declarative ( Prolog ), de la limbaje functionale ( LISP, Haskell, ML ) la limbaje de prelucrare a bazelor de date ( COBOL, dBASE, PAL ), de la limbaje iconografice ( Authorware STAR ) la cele orientate obiect ( SmallTalk, C++, Eiffel, Sather ), de la cele de specificare ( Z ) la limbajele editoarelor de texte si hiper-texte ( HTML, TeX, PostScript ), de la limbajele interactive, in ultima vreme vizuale ( LOGO, Visual BASIC ) la limbajele shell ( csh, bash ), de la limbajele de nivel scazut ( Assembler ) pina la limbajele destinate mediilor concurente/distribuite ( Modula-2, SQL, Clean, Orca ), de la limbaje foarte vechi, clasice ( FORTRAN ) la cele foarte recente ( Java, MISA, Oz, Python ).
Fiecare dintre ele are avantaje si dezavantaje, insa remarcam tendintele de apropiere de limbajul natural formalizat, de simplificare a constructiilor foarte des folosite, de a structura in mod logic diverse sectiuni ale programelor scrise in limbajul respectiv, de modularizare si de a pune la dispozitia programatorului biblioteci vaste ( sa amintim aici doar Borland VCL - Visual Component Library, ierarhia de clase de la IBM VisualAge sau MFC - Microsoft Foundation Classes ).
Cu trecerea anilor, atentia programatorului s-a deplasat, gradat, de la scrierea liniilor de cod la abordarea riguroasa a fazelor de design si analiza a cerintelor programelor. Tehnologia de realizare a sistemelor informatice a devenit mult mai performanta ca in trecut si aplicatiile rezultate sint cu mult mai complexe si fiabile decit cele concepute in primele perioade ale informaticii.
Totusi abia in ultimii ani s-au putut dezvolta limbaje puternice, concise, cu adevarat extensibile si acestea sint cele orientate obiect ( C++, ADA, Object Pascal, Oz, Java ).
Ca exemple ( foarte ) recente de limbaje si aplicatii orientate-obiect si, totodata, extensibile putem enumera:
In prezent, desi nu mai comunicam cu calculatorul folosindu-ne de cifre binare si nici de limbaje greoaie apropiate de masina, continuam sa generam programe pornind de la citeva primitive structurale de tip bucle si conditii plus directive de calcul si transfer de informatii. Programarea logica, functionala sau cea orientata obiect nu extind blocurile de baza cu care actionam asupra ordinatorului, ci le fac doar mai accesibile pentru modul nostru de gindire.
De fiecare data cind se creeaza un nou limbaj de programare, speram ca acesta sa permita o exprimare mai usoara, mai flexibila, mai bogata, cautam sa remarcam facilitatile sale in comunicarea om-computer.
Un pas decisiv a fost facut de programarea vizuala, care prin paradigmele sale a revolutionat ingineria programarii. Pe la sfirsitul anilor '70, Muriel Cooper fondeaza la MIT un grup de cercetare denumit Visible Language Workshop ( VLW ) cu scopul de a se studia relatia dintre inteligenta artificiala si grafica computationala sau mai general de interactiunea om-computer. Unele din ideile lansate de acest grup sint: invatarea din exemple vizuale ( learning from visual examples ), reprezentarea instructiunilor dintr-un limbaj ca entitati tridimensionale ( 3D programming languages ), cercetari in directia limbajelor functionale vizuale ( sistemul Thinker - o varianta de LISP vizual ).
Mai recent, in 1990, animatia jocurilor video ca Mario Brothers (
NINTENDO ) devine cod sursa al limbajului de programare: ToonTalk e
un nou limbaj al carui cod sursa este animat. Aceasta nu inseamna ca avem la
dispozitie un limbaj vizual ale carui icon-uri statice au fost inlocuite de
unele animate, ci inseamna ca mijlocul de comunicare dintre utilizatorul
uman si calculator este insasi animatia. Citeva exemplificari: un intreg
proces de calcul in ToonTalk este un oras. Majoritatea activitatilor au loc
in case. Comunicatia dintre case este facilitata de pasari. Acestea din urma
pot cara obiecte, zbura la cuiburile lor, lasa obiecte si zbura inapoi.
Casele sint locuite de roboti care sint antrenati ( invatati ) de utilizator
pentru a indeplini sarcini limitate, elementare. Prezentam in continuare o
paralela intre calculul computational si ToonTalk:
|
|
calcul | oras |
agent (actor/proces/obiect) | casa |
metode (clauze/fragmente de program conventional) | roboti |
tuple (masivi de date/mesaje) | cutii |
constante | imagini/text |
capabilitati de transmitere a datelor | pasari |
capabilitati de receptionare a datelor | cuib |
In 1994, apare termenul de telesenzatie ( telesensation ), concept care combina grafica computationala, realitatea virtuala, programarea vizuala si telecomunicatiile. Astfel, cu ajutorul telesenzatiei imaginile transmise de la distanta sint percepute global. Aceasta deschide interesante perspective, nu doar in medicina, arhitectura, teleconferinte etc., cit si pentru programatori care vor invata sa perceapa programele ca virtuale entitati tridimensionale, mai usor de intuit si de manipulat.
Putem imparti tehnicile de programare, cronologic, in trei stadii:
Putem considera ca primul stadiu este cel orientat spre computer, pe cind urmatoarele doua sint orientate spre utilizator: cererile utilizatorului domina oferta sistemelor de calcul si a aplicatiilor. Cerintele impuse de utilizatori implica tot mai largi aspecte ca:
![]() |
|
Aceste cerinte extinse necesita o varietate de tehnici dispuse pe nivele. In prezent, exista un gol intre infrastructura conventionala ridicata in primul stadiu al programarii si noua infrastructura adusa de al doilea si al treilea stadiu.
Avem asadar nevoie de o noua infrastructura, denumita Agent-Oriented Programming ( programarea orientata-agent ) care are abilitatea de a descrie calculul computational drept organizare sociala corespondind organizarii sociale umane.
In termeni simpli, din perspectiva ingineriei programarii, AOP este echivalenta cu Knowledge Programming ( KP ) plus Object-Oriented Programming ( OOP ).
O aplicatie dezvoltata in metodologia AOP este o colectie de agenti ( entitati semi-autonome similare celor din metodologia orientata obiect ), rulind in paralel si interactionind intr-un mod organizat.
Din perspectiva programarii, AOP poate fi vazuta ca o specializare a OOP: agentii constind din anumite cunostinte despre lumea exterioara, despre alt agent sau despre el insusi si tehnici de a manipula aceste cunostinte. Interactiunea dintre agenti inseamna a comunica, adica a schimba mesaje ( informatii ) intre ei. Agentii pot comunica in mod paralel si independent cu altii ceea ce duce la aparitia notiunii de concurenta dintre agenti.
![]() |
|
Fiecare agent are atasata o multime de stari in functie de cunostintele pe care le detine, aceasta multime fiind interdependenta de metodele asociate agentului respectiv. Asemenea abordare duce la un model de organizare sociala asignat AOP ( similar, poate, programarii evolutive si a algoritmilor genetici ).
Timpul va decide daca aceasta paradigma va avea succes sau nu. Din punctul de vedere al adaptabilitatii, AOP ofera suport pentru dezvoltarea tehnicilor de extindere a limbajelor de programare.
De aceea, prognozam ca in urmatorii ani vom asista la o unificare a principalelor limbaje de programare intr-unul unic, apropiat de cel natural, avind o baza puternica si permitind definirea facila a extinderilor in orice domenii de activitate. Deja se experimenteaza o fuziune a unora dintre trasaturile limbajelor de programare existente ( imperative, functionale, logice, orientate-obiect etc. ), astfel aparind Maude, FOOPS, Oz, Clean, Escher si altele.