Portabilitate

Portabilitatea programelor (produselor software) este una din problemele importante ale informaticii. Se știe că există o mare varietate de echipamente de calcul, dotate cu diferite sisteme de operare. În timpul execuției, atât programul, cât și datele trebuie să se gasească în memoria calculatorului codificate binar, într-un format specific calculatorului respectiv. Din această cauză, programul executabil (binar) nu poate fi mutat de pe un tip de calculator pe altul. Din același motiv, nu pot fi "portate" nici programele scrise într-un limbaj care este dependent de arhitectura calculatorului, cum sunt limbajele de asamblare. A scrie însă, pentru aceeași problemă, câte un alt program pentru fiecare tip de calculator ar însemna, desigur, o mare risipă de efort de programare, cu consecințele economice negative corespunzătoare.

În mod tradițional, portabilitatea programelor se asigură la nivelul programului sursă. Programul se scrie într-un limbaj de programare de nivel superior (de ex.: C, C++, Pascal, Fortran, Cobol, Basic, etc). Acest program sursă este prelucrat de un compilator, obținându-se astfel un program obiect, codificat binar pentru tipul de calculator pe care va fi executat. Trebuie să existe, deci, câte un compilator pentru fiecare pereche (limbaj de nivel superior, platforma de execuție), prin platforma de executie înțelegând, în acest caz, un anumit tip de calculator, dotat cu un anumit sistem de operare. De exemplu, pentru un program scris în limbajul C va trebui să existe un compilator pentru a obține codul binar pentru un calculator cu procesor Pentium IV care lucrează sub sistem de operare Windows 2000, alt compilator pentru un calculator cu procesor Sparc sub sistem de operare Solaris etc.

În principiu, un program sursă nu depinde de platforma de execuție. Totuși, trebuie avut în vedere că limbajele de programare înseși evoluează, apărând noi versiuni. La nivelul programelor sursă se poate asigura cel mult portabilitatea "de jos în sus", adică programele scrise pentru o versiune mai veche pot fi tratate cu un compilator pentru o versiune mai nouă, dar nu și invers. Există, de asemenea, diferite "dialecte" ale acestor limbaje, astfel că uneori, pentru a trece de la un tip de compilator la altul, pot fi necesare unele modificari în programul sursă.

Pe platforma Java, compilatorul translatează programul sursă (scris de, regulă, în limbajul Java) într-un cod de octeți standardizat (în engleză: bytecode) , care nu este destinat unui echipament de calcul existent efectiv, ci unei mașini abstracte, numita "mașina virtuală Java" (în engleza: JVM - Java Virtual Machine). Pe fiecare echipament de calcul, pe care se execută astfel de programe, trebuie să existe o anumită implementare a mașinii virtuale Java, realizată fie sub forma de produs software, fie de echipament (hardware). Codul de octeți furnizat de compilator este interpretat de mașina virtuală Java, obținându-se astfel executarea programului. În consecință, portabilitatea se realizează la nivelul codului de octeți, adică programul sub forma de bytecode poate fi mutat de pe un calculator pe altul. Această proprietate este foarte importantă, atunci când transferul de programe se face între calculatoare de tipuri diferite, legate într-o rețea eterogena. Ea permite, de asemenea, să se creeze biblioteci de clase portabile la nivel de cod binar, care sa fie puse la dispoziția programatorilor, indiferent de platforma pentru care aceștia lucrează, reducandu-se astfel considerabil efortul de programare.
 



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați