BluePink BluePink
XHost
Gazduire site-uri web nelimitata ca spatiu si trafic lunar la doar 15 eur / an. Inregistrare domenii .ro .com .net .org .info .biz .com.ro .org.ro la preturi preferentiale. Pentru oferta detaliata accesati site-ul BluePink
Capitolul II

    Instrumente de programare

Un calculator este o maşină foarte utilă pentru utilizatorul care îşi desfăşoară activitatea prin intermediul acestuia mai ales dacă trebuie să proceseze un volum mare de date sau informaţii şi totodată ştie cum să-l exploateze, transferând cât mai multe dintre abilităţile lui calculatorului prin intermediul unor aplicaţii eficiente – un utilizator (angajat) bun ştie că recompensele maxime se obţin prin rezultate, nu prin efort. Activităţi ca evidenţa personalului sau evidenţa contabilă sunt activităţi în care elementele de rutină sunt dominante şi ca atare sunt transferabile computerelor cu succes. În măsura în care anumite aspecte din viaţa de zi cu zi posedă atribute care se pot încadra în anumiţi algoritmi, ele pot fi simulate de către lumea informaticii. Însă nu orice fenomen poate fi reprezentat de către un sistem informatic. Din aceste considerente calculatoarele sunt intens utilizate în domeniile de activitate precum: instituţiile guvernamentale, administraţie publică, mediile de afaceri, transporturi, sectorul financiar-bancar, sănătate, învăţământ, cercetare, etc. Ca atare există o paletă largă de aplicaţii care deservesc aceste domenii.

Aceste softuri care dau suflet calculatorului sunt realizate prin intermediul unor instrumente de programare precum:

    • limbaje de programare
    • compilatoare
    • interpretoare
    • depanatoare
    • medii integrate de dezvoltare

În principiu putem afirma că Linux este o platformă completă pentru dezvoltarea de aplicaţii în diverse domenii ale programării – atât la nivel scăzut (nucleu, drivere) cât şi la nivel înalt – în urma trecerii în revistă a limbajelor de programare şi a mediilor integrate de dezvoltare ce se regăsesc în SUSE Linux 10.0. Aceste instrumente de programare sunt următoarele: C şi C++, Kdevelop, Java, JavaScript, Perl, Python, PHP, Lisp, Scheme, Tcl/Tk, Glade, Qt Designer, My SQL şi PostgreSQL, Fortran şi Basic.

Dacă dorim să creăm propriile noastre aplicaţii, în Linux ne stau la dispoziţie instrumentele de programare necesare gratuit, indiferent că dorim să utilizăm un limbaj de programare de nivel înalt sau ne folosim de un sistem de gestiune a bazelor de date relaţionale pentru crearea unor evidenţe proprii.

 Pentru realizarea propriei noastre aplicaţii care ne va ajuta în desfăşurarea unor activităţi permanente respectiv ne va uşura munca, trebuie să ne decidem asupra limbajului de programare pe care dorim să-l utilizăm pentru scrierea codului. Pentru alegerea limbajului potrivit trebuie luate în calcul mai multe aspecte precum faptul că diferitele limbaje de programare au fost create pentru rezolvarea unor probleme diferite (specifice). Alt aspect important se referă la cunoştinţele şi îndemânarea programatorului legat de un anumit limbaj de programare sau altul ştiind că programarea este o sarcină serioasă care presupune cunoaştere şi experienţă.

 Deci dacă avem suficientă experienţă în domeniul utilizării calculatoarelor, putem să încercăm şi programarea acestuia nu doar simpla utilizare. Prin intermediul programării pot fi create aplicaţii care la o simplă apăsare de buton sau tastă execută automat o serie de proceduri şi operaţiuni care de altfel ar lua mult timp dacă ar fi efectuate manual în mod repetat. Bine înţeles realizarea unei aplicaţii atunci este recomandabilă când este vorba despre executarea de operaţii în mod repetat şi de multe ori. În acest context se poate spune că programarea nu este altceva decât înşiruirea operaţiilor ce trebuiesc executate împreună cu definirea condiţiilor şi împrejurărilor în care se execută acestea folosind un limbaj de programare. Nu vor fi descrise aici etapele realizării programelor care sunt: analizarea problemei, proiectarea soluţiei, editarea codului, compilarea, testarea şi corectarea, documentarea şi ulterior întreţinerea programului.

În acest capitol vor fi prezentate pe scurt instrumentele de inginerie software oferite de distribuţia SUSE Linux 10.0 pentru programatori.

Sus

Limbaje de programare

Este ciudat cum calculatorul nostru ştie să facă multe lucruri interesante şi dificile. Când ne uimim de performanţele unui computer de obicei tragem concluzia că acesta este o sculă deşteaptă. În realitate calculatorul are cunoştinţe foarte limitate. Microprocesorul nu cunoaşte altceva decât cifrele 0 şi 1 care alcătuiesc codul binar. Cifrele 0 şi 1 – denumiţi biţi - sunt grupate câte opt formând octeţi. Deci când calculatorul execută un program, el parcurge şirul lung de octeţi grupaţi în instrucţiuni.

Pentru a determina calculatorul să execute un lucru dorit de programator, acesta trebuie să-i spună în cod binar ceea ce doreşte. Este limpede că în asemenea condiţii programarea este o muncă titanică şi pentru utilizatorul de rând nu merită efortul.

Pentru simplificarea scrierii de programe şi implicit uşurarea muncii programatorilor a fost creat limbajul de asamblare, care este limbajul procesorului şi este alcătuit dintr-un număr restrâns de instrucţiuni şi tipuri de date pe care le poate înţelege un anumit tip de microprocesor, limbaj prin intermediul căruia se obţin programe foarte rapide în ceea ce priveşte execuţia lor de către procesor. O caracteristică foarte importantă al limbajului de asamblare este acela că fiecare clasă de microprocesoare are propriul limbaj de asamblare, adică limbajul de asamblare al procesoarelor Intel nu este identică cu cea a procesoarelor Motorola.

Limbajul de asamblare reprezintă un limbaj de nivel coborât adică apropiat de maşină. Programarea în limbaj de asamblare este dificilă deoarece programatorul pe lângă modul de utilizare al limbajului mai trebuie să cunoască şi structura internă a calculatorului precum: regiştri, organizarea şi adresarea memoriei, porturi de intrare – ieşire etc. Din acest motiv s-a mers mai departe şi s-a reuşit simplificarea mult mai accentuată a scrierii programelor prin dezvoltarea unor medii de programare mai avansate, luînd naştere limbajul de programare care are deja în componenţă entităţi ca instrucţiuni şi comenzi, variabile, operatori, tipuri de date.

Un limbaj de programare este o tehnică de comunicare standardizată pentru transmiterea de instrucţiuni către un computer. Un limbaj de programare are definite un set de reguli sintactice şi semantice. Un limbaj dă posibilitatea programatorului să specifice cu ce fel de date va lucra computerul şi ce acţiuni va executa acesta în anumite situaţii precizate.

Limbajele de programare utilizează diferite construcţii sintactice (cuvinte cheie) provenite din limba engleză ca de exemplu: input, let, if, for, print, open sau exit, în acest fel scrierea de programe devenind mult mai simplă şi rapidă.

Până în zilele noastre au luat naştere multe sute de limbaje de programare, unele generale, altele specializate, unele mai simple, altele mai complexe şi foarte puternice. O caracteristică foarte importantă ale acestor limbaje de programare este modul în care sunt executate de procesor. Există două metode clasice prin care poate fi obţinută executarea unui cod scris într-un oarecare limbaj de programare: prin compilare sau prin interpretare.

Sus

Compilatoare şi interpretoare

Teoretic un program este creat de un compilator. Programatorul scrie un text care conţine "propoziţii" (combinaţii de cuvinte cheie) şi care sunt înţelese de compilator. Compilatorul traduce textul respectiv în cod maşină singurul pe care-l poate înţelege şi executa procesorul. Mai există şi programe care sunt create pentru interpretoare. Astea sunt rulate cu ajutorul unor programe speciale numite interpretoare spre deosebire de cele direct executabile pe care sistemul de operare le trimit direct la procesor.

Indiferent că vrem să folosim limbajul de asamblare sau nu, acesta oricum este utilizat de compilatorul limbajului de programare în procesul de generare a codului obiect (fişierul executabil). Conţinutul fişierelor executabile, obţinute în urma compilării programului sursă, poate fi înţeles şi depanat doar dacă se utilizează un asamblor care să afişeze programul respectiv în limbaj de asamblare.

În rândul programatorilor există tendinţa de a evita programarea în limbaj de asamblare datorită dificultăţii acestuia, însă multe componente ale programelor de sistem (nucleu, drivere) sunt scrise în limbaj de asamblare deoarece acesta permite scrierea de coduri foarte puternice în ceea ce priveşte viteza de execuţie ale acestora şi consumul minim de memorie internă. Programele de sistem sunt hibride în sensul că ele sunt scrise în limbaje de nivel înalt, dar includ şi părţi critice din punct de vedere al timpului de execuţie şi al resurselor ocupate care sunt scrise în limbaj de asamblare. Există anumite resurse ale calculatorului la care accesul nu este realizabil din limbajele de nivel înalt.

Sistemele de operare UNIX au fost scrise în limbajul de programare C. De fapt scopul primordial pentru care a fost creat limbajul C a fost rescrierea sistemului de operare UNIX, pentru a-l face portabil pe toate platformele. În anul 1972 a fost lansată prima versiune oficială a limbajului C care a fost creat de Dennis M. Ritchie şi Brian W. Kernighan de la Bell Laboratories. Acesta este un limbaj de nivel relativ inferior care are o destinaţie universală.

Scopul pentru care a fost realizat limbajul C, portabilitatea programelor, a fost realizat prin „înlăturarea” instrucţiunilor de intrare/ieşire deoarece aceste operaţii sunt dependente de particularităţile hardware. De asemenea limbajul C nu dispune de operaţii pentru lucrul cu fişiere şi nici instrucţiuni de alocare a memoriei. Toate aceste mecanisme, de nivel înalt, pot fi utilizate prin intermediul funcţiilor de bibliotecă. În acest fel limbajul C a câştigat următoarele facilităţi:

    • portabilitate mare a programelor;
    • flexibilitate în programare;
    • programe compacte de mici dimensiuni;
    • lucrul pe biţi;
    • calcul de adrese.

Limbajul C se consideră că este un intermediar între limbajele de nivel înalt şi cele de asamblare. El se bucură de o mare popularitate datorită facilităţilor amintite mai sus. Programele scrise în C care utilizează doar bibliotecile standard pot fi compilate şi executate pe orice combinaţie maşină-compilator, fără nici o modificare, în acest fel fiind perfect portabile.

În limbajul C pentru a crea un program (fişier executabil) se parcurg următorii paşi:

    • se creează fişierul sursă, prin intermediul unui editor de texte;
    • se compilează fişierul sursă în acest fel generând fişierul obiect;
    • se link-editează fişierul obiect, generându-se fişierul executabil.

Dacă se utilizează un mediu integrat de dezvoltare precum KDevelop, acesta include şi un editor de texte.

 Procesul de creare a fişierului executabil se numeşte compilare. După cum se vede şi din operaţiile de mai sus, efectuate la compilare, compilatorul C este alcătuit din trei programe distincte:

    • preprocesorul
    • compilatorul propriu-zis
    • link-editorul

Preprocesarea este primul pas distinct din compilare care constă în adăugarea la textul sursă scris de programator a textului conţinut de fişierele antet corespunzător în urma căruia se obţine deci un fişier sursă extins. În faza de preprocesare, pe lângă includerea fişierelor antet, se mai includ substituţiile de tip macro şi se execută compilarea condiţionată ale unor părţi al codului sursă în cazul în care există asemenea opţiuni specificate.

 După terminarea operaţiei de preprocesare se trece automat la compilarea propriu-zisă în urma căruia se obţine un fişier obiect care conţine codul sursă tradus în cod maşină şi o serie de informaţii necesare în faza de link-editare (editare de legături).

 În urma compilării, programul creat încă nu este complet deoarece o parte din el este conţinut de biblioteci. Link-editarea constă în completarea codului iniţial cu codul maşină al bibliotecilor în cauză, referinţelor obiectelor globale şi adunarea tuturor modulelor într-un singur fişier executabil care în final are dimensiune mult mai mare ca fişierul sursă care conţine codul scris iniţial de programator.

 În ultimă instanţă este apelat asamblorul care pe baza traducerii în limbaj maşină a programului, în urma compilării şi link-editării, generează codul binar care în sfârşit poate fi executat de calculator, în acest fel obţinându-se un fişier executabil binar.

 În cazul în care s-a reuşit compilarea fără erori, fişierul executabil obţinut poate fi lansat în execuţie şi utilizat în scopul pentru care a fost creat.

 În cazul utilizării unui interpretor, la fel se scrie programul instrucţiune cu instrucţiune în fereastra pusă la dispoziţie de interpretor, însă programul nu se compilează şi nu se construieşte fişierul executabil, codul scris fiind executat incremental, instrucţiune cu instrucţiune, de către interpretor, ne mai efectuînd traduceri în alte limbaje. La fiecare instrucţiune interpretorul execută o acţiune.

 Interpretoarele sunt mai lente şi pentru executarea programului scris este nevoie de însăşi interpretorul în cauză (ex. BASIC, Perl, Python), dar avantajul lor este că programul scris poate fi rulat imediat, pe când în cazul compilatoarelor codul scris trebuie compilat dar fişierul executabil obţinut – fiind tradus în cod binar – poate fi rulat pe orice calculator.

 Mai există un instrument de programare compus, care combină compilarea cu interpretarea, ca de exemplu în cazul limbajului de programare Java.

 La crearea programelor în Java, de regulă se urmează aceiaşi paşi ca şi în cazul altor limbaje: se utilizează un editor petru crearea fişierului sursă după care se compilează programul utilizând un compilator Java care generează un fişier nou, independent de platformă, care conţine instrucţiuni în cod de octeţi (bytecode). La fel ca programele standard, un cod de octeţi constă din cifre de 0 şi 1. Însă acest cod de octeţi nu este specific unui anumit procesor. Prin utilizarea unui interpretor Java sau a unui vizualizator de appleturi, poate fi executat codul de octeţi.

Java fiind un limbaj de programare proiectat pentru crearea aplicaţiilor Internet, s-a urmărit ca programele Java să ruleze pe toate platformele existente. Pentru realizarea acestui scop a fost dezvoltat maşina virtuală Java (Java Virtual Machine – JVM). La fel cum computerul utilizează microprocesorul pentru executarea instrucţiunilor dintr-un fişier executabil, JVM utilizează un software (şi nu microprocesorul) pentru a citi fişierul cod de octeţi şi a executa acţiuni. Desigur JVM fiind un software acesta utilizează microprocesorul, fiind doar un intermediar între procesor şi codul de octeţi. Pentru a rula astfel codul de octeţi, JVM converteşte seria de cifre 0 şi 1 independente de platformă într-o serie de cifre 0 şi 1 pe care o înţelege procesorul calculatorului (Pentium, Motorola, Apple etc).

 Aşa cum microprocesoarele au în componenţă un set de regiştri, un set de instrucţiuni, memorie integrată ş.a.m.d., la rândul său şi JVM dispune de aceste elemente. Prin plasarea procesorului Java în software, şi nu în hardware, poate fi rulat acelaşi program pe orice calculator. Acest avantaj se obţine în detrimentul vitezei de execuţie.

Sus

Depanatoare

Se mai întâmplă că un program, în timpul execuţiei, se opreşte brusc şi nu-şi mai face treaba. Acesta este un lucru nedorit de utilizatori iar dacă aceştia nu reuşesc să remedieze situaţia sunt obligaţi să apeleze la programatorul care cunoaşte „dedesubturile” aplicaţiei respective pentru a lua măsurile care se impun în vederea remedierii softului în cauză, bine înţeles dacă acest lucru este posibil.

În unele situaţii nu există altă soluţie decât cea a reinstalării programului, caz care poate duce foarte uşor la pierdere de date, ceea ce este coşmarul tuturor utilizatorilor.

Însă distribuţiile de Linux oferă programatorilor alături de editoare, compilatoare, editor de legături, asamblor sau interpretor şi alte instrumente utile precum depanatoarele.

Programele pot fi depanate prin rularea pas cu pas, prin inspectarea zonelor de memorie pe care acestea le folosesc utilizând diversele depanatoare disponibile atât în linie de comandă, cât şi în mediu grafic.

Aşa cum n-au fost descrise amănunţit celelalte instrumente de programare, nici depanatoarele nu vor fi prezentate detaliat. Pentru a ilustra în linii mari utilitatea acestor instrumente vom prezenta câteva aspecte legate de programul GDB.

Acest program de depanare se utilizează pentru monitorizarea evenimentelor ce au loc în timpul rulării unui program sau în momentul producerii erorii care opreşte în mod forţat execuţia programului în cauză.

GDB a fost creat în anul 1988 de Richard Stallman. Pentru a putea fi folosit trebuie să fie instalat pachetul gdb.

Programul de depanare GDB se utilizează pentru depanarea programelor scrise în C sau C++. Acesta poate opri din execuţie un program în orice moment dorit de programator, poate examina conţinutul variabilelor la un moment dat, şi chiar modifica valoarea acestora şi continua execuţia programului, în vederea depistării cât mai uşor a erorilor din programul monitorizat, ba mai mult GDB poate fi utilizat chiar pentru depanarea programelor rulate pe maşini aflate la distanţă.

Programul se lansează în execuţie prin comanda run. Pe parcursul monitorizării unui program cu GDB, programul respectiv poate fi oprit la întâlnirea unui semnal, unui punct de oprire sau la solicitarea utilizatorului care îl depanează. Starea programului poate fi consultată în orice moment cu ajutorul comenzii info program.

Mai multe informaţii despre GDB pot fi obţinute apelând comanda info gdb. Programele de depanare pot fi instrumente de programare foarte utile în momente foarte dificile.

Sus

Medii integrate de dezvoltare

Linux pune la dispoziţia programatorului diverse medii grafice de programare, atât pentru facilitarea editării de cod sursă, cât şi pentru generarea de interfeţe grafice, realizarea de aplicaţii software fiind mult simplificat prin oferirea posibilităţii de lucru, în mare măsură, prin intermediul mouse-ului. Cel mai important mediu integrat de dezvoltare este KDevelop, acesta fiind şi cel mai flexibil.

KDevelop este un mediu integrat de dezvoltare pentru C şi C++. Acesta include un editor de texte, o interfaţă pentru depanatorul GDB, un manager de proiect şi un browser sofisticat pentru sursele programelor. Prin intermediul KDevelopului pot fi dezvoltate uşor aplicaţii KDE bazate pe biblioteca Qt, cu interfeţe grafice deosebite.

Acest program a fost realizat de către Sandy Meier, prima versiune fiind lansată în anul 1998.

Interfaţa KDevelop este alcătuită din trei zone distincte:

    • în partea stângă a ecranului se găseşte browserul proiectului;
    • în dreapta-sus al ecranului aflându-se editorul de texte;
    • în partea inferioară fiind situată zona rezervată mesajelor.

KDevelop este dotat cu o multitudine de wizarduri care uşurează într-o măsură foarte mare munca programatorului contribuind la automatizarea unor operaţii pretenţioase precum:

    • generarea automată a scheletului aplicaţiei;
    • generarea structurii de directoare şi a fişierelor de configurare;
    • generarea automată a codului corespunzător interfeţei grafice a aplicaţiei ţinând cont de limbajul în care este implementat (C ori C++).

Sus

[Index] [Partea I-a] [Partea II-a] [Capitolul I] [Capitolul II] [Capitolul III] [Capitolul IV] [Bibliografie]