+ All Categories
Home > Documents > Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6...

Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6...

Date post: 31-Dec-2019
Category:
Upload: others
View: 16 times
Download: 0 times
Share this document with a friend
25
Capitolul 6 Dezvoltarea aplicat , iilor 6.1 Introducere În momentul de fat , ˘ a avem o varietate mare de dispozitive electronice cu care interact , ion ˘ am, de la sisteme complexe, cum ar calculatoarele personale sau laptop-urile, la telefoanele mobile sau chiar ceasurile inteligente pe care le folosim intens zilnic. Des , i foarte diferite, toate aceste sisteme electronice au un lucru în comun: toate ruleaz ˘ a software. Având în vedere marea varietate a sistemelor fizice pe care ruleaz˘ a aplicat , iile pe care le dezvolt ˘ am, este foarte important s ˘ a înt , elegem toate aspectele dezvolt ˘ arii unui program s , i toate opt , iunile pe care le avem la dispozit , ie în acest proces. Astfel, putem face alegerile corecte pentru a dezvolta eficient o aplicat , ie adaptat ˘ a dispozitivului fizic pe care va rula. De exemplu, dac˘ a dezvolt˘ am o aplicat , ie ce va rula pe un ceas inteligent, trebuie s˘ a t , inem cont c ˘ a avem resurse limitate comparativ la o aplicat , ie ce va rula pe un computer. În cazul unui ceas inteligent, avem mai put , in˘ a memorie s , i putere de procesare s , i, mai mult, trebuie s˘ at , inem cont de consumul de energie pe care îl are dispozitivul. Alegerea unui limbaj potrivit pentru un program este esent , ial ˘ a pentru succesul acestuia. În funct , ie de tipul aplicat , iei, trebuie ales limbajul adecvat având în vedere diverse propriet ˘ at , i precum: viteza de execut , ie, us , urint , a de scriere a codului, num˘ arul de biblioteci existente, utilitarele existente, portabilitatea s , i comunitatea din jurul limbajului. 6.2 Limbaje de programare Un limbaj de programare defines , te un set de reguli folosite pentru a formula instruct , iuni pe care calculatorul s ˘ a le execute. Regulile limbajului constau în cuvinte cheie, instruct , iuni care pot fi folosite s , i gramatica acestora, care se mai numes , te s , i sintax ˘ a. Folosind un limbaj de programare, putem defini operat , ii pe care dorim s˘ a le execut˘ am într-o anumite ordine. Acesta este practic programul pe care îl scriem. Operat , iile sunt rulate pe procesorul sistemului pe care dorim sa îl program ˘ am, dar înainte de a fi executate, ele trec printr-un proces de transformare. Fiecare procesor cunoas , te un anumit set de instruct , iuni pe care le poate executa. Codul scris folosind aceste 110
Transcript
Page 1: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

Capitolul 6

Dezvoltarea aplicat,iilor

6.1 Introducere

În momentul de fat,a avem o varietate mare de dispozitive electronice cu careinteract, ionam, de la sisteme complexe, cum ar fi calculatoarele personale saulaptop-urile, la telefoanele mobile sau chiar ceasurile inteligente pe care le folosimintens zilnic. Des, i foarte diferite, toate aceste sisteme electronice au un lucru în comun:toate ruleaza software.

Având în vedere marea varietate a sistemelor fizice pe care ruleaza aplicat, iile pe care ledezvoltam, este foarte important sa înt,elegem toate aspectele dezvoltarii unui program s, itoate opt, iunile pe care le avem la dispozit, ie în acest proces. Astfel, putem face alegerilecorecte pentru a dezvolta eficient o aplicat, ie adaptata dispozitivului fizic pe care va rula.

De exemplu, daca dezvoltam o aplicat, ie ce va rula pe un ceas inteligent, trebuie sat, inem cont ca avem resurse limitate comparativ la o aplicat, ie ce va rula pe un computer.În cazul unui ceas inteligent, avem mai put, ina memorie s, i putere de procesare s, i, maimult, trebuie sa t, inem cont de consumul de energie pe care îl are dispozitivul.

Alegerea unui limbaj potrivit pentru un program este esent, iala pentru succesul acestuia.În funct, ie de tipul aplicat, iei, trebuie ales limbajul adecvat având în vedere diverseproprietat, i precum: viteza de execut, ie, us, urint,a de scriere a codului, numarul debiblioteci existente, utilitarele existente, portabilitatea s, i comunitatea din jurul limbajului.

6.2 Limbaje de programare

Un limbaj de programare defines, te un set de reguli folosite pentru a formula instruct, iunipe care calculatorul sa le execute. Regulile limbajului constau în cuvinte cheie,instruct, iuni care pot fi folosite s, i gramatica acestora, care se mai numes, te s, i sintaxa.

Folosind un limbaj de programare, putem defini operat, ii pe care dorim sa le executamîntr-o anumite ordine. Acesta este practic programul pe care îl scriem. Operat, iile suntrulate pe procesorul sistemului pe care dorim sa îl programam, dar înainte de a fiexecutate, ele trec printr-un proces de transformare. Fiecare procesor cunoas, te unanumit set de instruct, iuni pe care le poate executa. Codul scris folosind aceste

110

Page 2: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 111

instruct, iuni se numes, te cod mas, ina s, i este singurul limbaj pe care un procesor îlînt,elege s, i îl executa. Prin urmare, programul scris de noi într-un limbaj de programareeste transformat în cod mas, ina pentru a putea fi înt,eles s, i executat.

La început, calculatoarele erau nis, te mas, ini cu capacitate de calcul mult mai reduse, careputeau executa operat, ii simple, în general stocate pe benzi magnetice sau perforate.Odata cu evolut, ia procesoarelor s, i a mediilor de stocare, a aparut limbajul de asamblare,folosit pentru a scrie programe mai complexe. Limbajul de asamblare este un limbajspecific fiecarui procesor s, i are în general o corespondent,a de aproximativ unu-la-unuîntre instruct, iunile de asamblare s, i cele are procesorului. Practic, putem considera cafiecare instruct, iune a limbajului de asamblare este tradusa printr-o alta instruct, iune aprocesorului. Codul sursa scris în limbaj de asamblare este transformat în cod mas, inade un asamblor.

Figura 6.1: Program scris pe cartela perforata1

În general, producatorul unui procesor defines, te s, i limbajul de asamblare specificacestuia, pentru a oferi o varianta lizibila a instruct, iunilor procesorului. Scopul limbajuluide asamblare a fost de a permite scrierea de aplicat, ii într-o maniera us, oara, la începutacesta fiind singura modalitatea de a dezvolta programe. Des, i mai us, or de folosit decâtcodul binar, s, i limbajul de asamblare era dificil de urmarit mai ales pentru programelungi. De aceea, în timp, au aparut limbajele mai complexe din punct de vedere allogicii, limbaje ce folosesc comenzi apropiate ca structura de limbajul natural, s, i caresunt mai us, or de urmarit. Acestea permit programatorilor sa se concentreze pe logicaaplicat, iei, nu pe limbajul efectiv s, i implementarea acestuia. Ele se numesc limbaje denivel înalt.

În prezent, majoritatea aplicat, iilor sunt dezvoltate folosind limbaje de programare de nivelînalt, care sunt mult mai us, or de “citit” de catre programatori. Totus, i, pentru dezvoltareade aplicat, ii care controleaza dispozitive hardware s, i care trebuie sa fie foarte eficiente înfolosirea resurselor (ex. drivere) se foloses, te uneori limbajul de asamblare, des, i cazurileacestea sunt destul de rare.

În mare parte, limbajele de programare folosite în zilele noastre sunt limbaje de nivel

1https://en.wikipedia.org/wiki/Computer_programming_in_the_punched_card_era#/media/File:FortranCardPROJ039.agr.jpg CC BY-SA 2.5

Page 3: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

112 INTRODUCERE ÎN SISTEME DE OPERARE

înalt. Astfel, programatorii folosesc o sintaxa apropiata de limbajul natural pentrudezvoltarea aplicat, iilor, ceea ce us, ureaza întregul proces (se folosesc cuvinte precumwhile, if, else). Atunci când scriem un program, totul pornes, te de la ideea clara a cevrem sa obt, inem prin acel program. Mai exact, trebuie sa stabilim clar ce vrem sa facaprogramul. Dupa aceea, urmatorul pas este sa structuram ideea s, i sa o traducem înlimbajul de programare folosit. As, a obt, inem programul final ce apoi poate fi rulat.

Figura 6.2: TODO

Fis, ierele pe care programatorii le scriu se numesc fis, iere cod sursa, ele cont, in practicinstruct, iuni scrise într-un anume limbaj de programare, de cele mai multe ori, limbajde nivel înalt. Codul sursa scris astfel nu poate fi executat pentru ca procesorul nu îlînt,elege. Cum am ment, ionat deja, procesorul înt,elege doar codul mas, ina, drept urmare,pentru a executa programul, e necesar sa transformam codul sursa în cod mas, ina.

Procesul de transformare a codului sursa în cod mas, ina se numes, te compilare.

Bazat pe modul în care codul de nivel înalt este transformat s, i rulat pe procesor, putemclasifica limbajele de programare în limbaje compilate sau interpretate. Diferent,a întrecele doua este ca pentru a rula un limbaj compilat, acesta este întâi transformat înlimbaj mas, ina, rezultând un fis, ier executabil, care apoi poate fi rulat oricând. Pe de altaparte, un limbaj interpretat este executat direct, prin intermediul unui interpretor.Interpretorul este cel care ia fiecare instruct, iune, o transforma în cod mas, ina iaraceasta este executata imediat.

Fiecare dintre cele doua tipuri de a rula cod sursa, compilare sau interpretare, areavantaje s, i dezavantaje de care este important sa t, inem cont când alegem limbajul deprogramare pentru dezvoltarea unei aplicat, ii.

Principalul avantaj al unui limbaj compilat este viteza de execut, ie. Odata generat fis, ierulexecutabil, acesta va fi rulat de catre procesor de oricâte ori dorim, astfel compilareaeste un proces separat de execut, ia programului s, i are loc o singura data. În schimb, încazul unui limbaj interpretat, la fiecare rulare, codul sursa va fi interpretat linie cu linie decatre interpretor, acesta fiind de fapt cel care executa act, iunile programului, proces caree mai lent.

Unele interpretoare mai eficienta vor încerca sa compileze part, ial codul sursa s, i sa îlexecute direct pe procesor. Practic, în acest caz, codul sursa se compileaza la fiecarerulare.

Pe de alta parte, un limbaj interpretat are mai multa portabilitate. Cum am precizat deja,codul mas, ina rezultat în urma compilarii poate rula doar pe un anumit tip de procesor.Deci pentru a rula aceeas, i aplicat, ie pe arhitecturi (procesoare) diferite, avem nevoiede un fis, ier executabil pentru fiecare tip de arhitectura. În aceea ce prives, te limbajeleinterpretate, putem folosi aceleas, i fis, iere care sunt transformate de catre interpretor încodul mas, ina specific procesorului.

Page 4: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 113

Majoritatea limbajelor de programare aparute în ultima perioada sunt considerate limbajehibride. Ele îmbina elemente ale ambelor procese, compilare s, i interpretare, pentru aobt, ine atât portabilitate, cât s, i viteza în execut, ie.

Este important de ret, inut ca indiferent de limbaj (compilat, interpretat sau hibrid),procesorul s, tie sa ruleze doar cod mas, ina, as, a ca orice cod sursa va fi la un momentdat transformat în cod mas, ina, iar pentru programatori este important daca limbajulfolosit este unul compilat, interpretat sau hibrid. Este important sa cunoas, tem tipul unuilimbaj de programare s, i avantaje s, i dezavantaje sale pentru a putea alege în funct, ie denevoile pe care le avem.

De exemplu, daca ne dorim sa dezvoltam un joc tip curse de mas, ini, avem nevoie derapiditate în execut, ie, fat,a de o aplicat, ie de organizare a lucrului în echipa, unde nedorim sa putem acoperi cât mai multe platforme.

6.3 Limbaje compilate

Limbajele compilate sunt cele unde codul sursa este transformat în fis, iere executabile,ce sunt apoi rulate pe procesor, în urma unui proces care se numes, te compilare. Astfel,instruct, iunile specifice limbajului de programare sunt transformate de compilator îninstruct, iuni pe care procesorul le înt,elege.

În procesul de compilare codul sursa este prelucrat s, i trece prin mai multe etapeintermediare:

1. Compilare - codul sursa este transformat în cod în limbaj de asamblare

2. Asamblare - codul în limbaj de asamblare este transformat în cod mas, ina;

3. Link-editare - se fac legaturile catre fis, iere externe care cont, in simboluri sau funct, iiapelate din fis, ierul sursa; daca avem o funct, ie definita într-un fis, ier s, i folosita înaltul, implementarea funct, iei trebuie legata de apelul ei.

TODO - schema

În teorie, pentru fiecare limbaj de programare ar trebui sa existe un compilator care sacunoasca gramatica specifica acestuia, gramatica s, i instruct, iunile specifice unuiprocesor s, i care sa faca transformarea din cod sursa în cod mas, ina.

Pentru ca exista un numar foarte mare de limbaje s, i un numar mare de procesoarediferite, în practica, nu avem cate un compilator diferit. În general, exista framework-uri de compilator care au componente ce înt,eleg mai multe limbaje s, i traduc limbajeleîntr-un limbaj specific compilatorului, respectiv alte componente care cunosc mai multeprocesoare s, i traduc limbajul specific compilatorului în limbajul specific procesorului careva rula programul. Astfel, pentru a putea genera un compilator pentru un limbaj nou, esuficienta integrarea a unui modul care sa transforme limbajul de programare în limbajulcompilatorului.

TODO - schema

Page 5: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

114 INTRODUCERE ÎN SISTEME DE OPERARE

6.3.1 Exemple de programare compilate

Des, i am prezentat avantajele s, i dezavantajele folosirii unui limbaj de programarecompilat, daca alegem ca aceasta este opt, iunea potrivita, avem un numar mare delimbaje compilate din care putem alege. În continuare vom descrie câteva din cele maifolosite s, i particularitat, ile de care trebuie sa t, inem cont în luarea unei decizii.

6.3.1.1 C

C este un limbaj de programare care a fost dezvoltat în anii ‘70 pentru a fi folosit laimplementarea sistemului de operare Unix. Pâna la aparit, ia limbajului C, sistemele deoperare erau scrise în limbaj de asamblare. C aduce un nivel de abstractizare pestelimbajul de asamblare, us, ureaza scrierea programelor, dar presupune o cunoas, tereavansata a funct, ionarii procesorului.

Pentru ca limbajul permite accesarea us, oara a resurselor hardware, aplicat, iiledezvoltate în C prezinta un risc mai mare, daca acestea nu sunt implementate cuatent, ie. Din aceleas, i considerente s, i probabilitatea de a genera erori în timpulimplementarii este mai mare. În plus, C are un nivel de abstractizare foarte redus, adicanu avem la dispozit, ie funct, ii care sa execute operat, ii complexe, de aceea nu este unlimbaj folosit pentru prototipare. Este recomandat sa folosim C daca stapânim binelimbajul s, i nu riscam sa generam erori s, i daca ne dorim o aplicat, ie care sa consume câtmai put, ine resurse.

Preponderent, limbajul C este folosit pentru a dezvolta sisteme de operare s, i driverepentru acestea.

6.3.1.2 C++

C++ este un limbaj de programare de nivel înalt gândit pentru dezvoltarea de aplicat, ii.Este o adaptare a limbajului C pentru a-l face mai us, or de folosit. În comparat, ie cualte limbaje mai noi, C++ este un limbaj complex s, i dificil de utilizat. Din acest motiv,nu recomandam folosirea lui pentru scrierea de aplicat, ii noi. Totus, i, un numar mare deaplicat, ii existente, a caror dezvoltare a început demult, sunt implementate folosind C++,de aceea este un limbaj des folosit.

6.3.2 Pascal

Pascal a fost dezvoltat în anii 1960, având ca scop principal dezvoltarea de programepentru descrierea de algoritmi. Limbajul a fost gândit pentru educat, ie, pentru a fi utilizatîn predarea algoritmilor.

Des, i nu este un limbaj pe care sa îl luam în calcul în dezvoltarea aplicat, iilor, pentru caexista alte limbaje mai moderne, poate fi în continuare luat în calcul în scopuri didactice.

Alte limbaje compilate sunt D, Go (folosit pentru scrierea sistemului de containeredocker) s, i Rust (folosit de Firefox pentru Servo, motorul de randare a paginilor web)

Page 6: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 115

6.4 Limbaje interpretate

Limbajele interpretate sunt cele care sunt transformate în cod mas, ina în timpul execut, iei.

Pentru a putea rula o aplicat, ie dezvoltata într-un limbaj de programare interpretat, avemnevoie de un program care ia fiecare linie din codul sursa s, i o transforma în cod mas, ina.Acest program se numes, te interpretor.

Diferent,a între o aplicat, ie compilata s, i una interpretata este ca spre deosebire decompilator, care genereaza un întreg fis, ier executabil care poate fi apoi rulat,interpretorul ia fiecare linie, genereaza codul mas, ina aferent ei, codul este rulat peprocesor, dupa care operat, ia este reluata. Des, i acest proces cres, te timpul de execut, ieal aplicat, iei, sunt avantaje pe care limbajele interpretate le au fat,a de cele compilate.

În primul rând, programele scrise în astfel de limbaje pot fi direct rulate pe oricearhitectura, atâta timp cât exista un interpretor instalat. Asta înseamna ca putem copiacodul sursa de pe un sistem care ruleaza Windows pe unul care ruleaza MacOS. Înplus, pentru ca toate instruct, iunile trec prin interpretor, limbajele interpretate nu oferaacces direct la resursele hardware, ceea ce le face mai sigure, dar s, i mai ineficiente.De aceea astfel de limbaje sunt recomande pentru dezvoltarea de aplicat, ii care nu t, inde sistemul de operare.

Pe de alta parte, limbajele interpretate presupun ca orice mas, ina care va rula aplicat, iadezvoltata, trebuie sa cont, ina codul sursa ce va fi rulat. Sunt cazuri în care nu se dores, tepublicarea codului sursa ar fi de preferat un limbaj compilat, care permite distribuirea unuiexecutabil.

6.4.1 Exemple de limbaje de programare interpretate

În prezent utilizarea limbaje de programare pur interpretate este în scadere. Acestea auajuns sa fie înlocuite de alte limbaje de programare, majoritatea hibride. Totus, i, dacavom ajunge sa lucram la aplicat, ii complexe dezvoltate cu ani în urma, exista posibilitateasa ajungem sa scriem cod sursa în limbaje precum PHP sau Perl.

6.4.1.1 PHP

PHP este un limbaj folosit preponderent pentru dezvoltarea de servere web. Mai noueste înlocuit de Node.js, dar înca mai putem gasi aplicat, ii web dezvoltate în PHP.

6.4.2 Perl

Perl e un alt limbaj interpretat folosit pentru dezvoltare web. Este consideratpredecesorul PHP, deci este tot mai rar întâlnit.

Page 7: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

116 INTRODUCERE ÎN SISTEME DE OPERARE

6.5 Limbaje hibride

Limbajele de programare hibride îmbina elemente de compilare cu elemente deinterpretare, pentru a rezulta în aplicat, ii portabile, rapide s, i sigure.

Pentru ca principalul dezavantaj al programelor interpretate este timpul mare deexecut, ie, una din îmbunatat, irile aduse interpretoarelor este posibilitatea de atransforma codul sursa într-un cod intermediar, care se numes, te bytecode, care va fiapoi interpretat. Bytecode-ul este practic codul mas, ina al interpretorului, decitransformarea acestuia în cod mas, ina este mult mai rapida. Practic, la rularea unuiprogram, este generat un fis, ier intermediar care cont, ine bytecode, iar interpretorul iaapoi instruct, iuni din bytecode s, i le transforma în cod mas, ina. Putem deci considera caavem doua etape în procesul de rulare: compilare catre bytecode s, i apoi interpretare.

Pentru ca în acest caz interpretorul are propriul limbaj mas, ina, el nu cunoas, te un limbajde programare anume, ci el transforma bytecode-ul specific în cod mas, ina, interpretorulse mai numes, te s, i mas, ina virtuala (ex. Java Virtual Machine). Un avantaj pe caremas, ina virtuala îl aduce este posibilitatea de a genera bytecode-ul s, i de a distribui fis, ierebytecode în locul codului sursa. Astfel codul sursa al aplicat, iei nu este facut public odatacu distribut, ia aplicat, iei.

Odata generat bytecode-ul, acesta poate fi transformat în cod mas, ina în doua moduridiferite. Fie se ia tot bytecode-ul s, i se transforma în cod mas, ina, dupa care codul mas, inaeste executat (compilare ahead-of-time), fie se iau bucat, i din bytecode s, i se transformaîn cod mas, ina în timpul rularii (compilare just-in-time).

Compilarea ahead-of-time funct, ioneaza ca procesul normal de compilare, doar ca setransforma bytecode în cod mas, ina. Odata generat codul mas, ina acesta este executat.Avantajul acestei metode este timpul rapid de execut, ie. În schimb, timpul de pornire aaplicat, iei cres, te (timpul necesar pentru a transforma bytecode în cod mas, ina).

Compilarea just-in-time presupune ca bucat, i de cod care urmeaza sa fie executate sa fietransformate în cod mas, ina în timpul rularii. Interpretorul analizeaza blocul de cod careurmeaza sa fie executat s, i îl transforma în cod mas, ina.

În plus, interpretorul are anumite mecanisme care îi permit sa t, ina cont de factori precumfrecvent,a de execut, ie a unui anumit bloc de cod s, i eficientizeaza procesul prin stocareaîn memorie a codului mas, ina, pentru a nu transforma acelas, i cod de mai multe ori, decifacând procesul s, i mai eficient. Totus, i, spre deosebire de compilarea ahead-of-time, JITare un timp de execut, ie mai mare, dar timpul de pornire al aplicat, iei scade.

TODO - schema trebuie schimbata (e luata de pe Internet)

6.5.1 Exemple de limbaje de programare hibride

În general, limbajele pe care le întâlnim cel mai frecvent astazi sunt limbaje hibride,precum Java, Python sau JavaScript. Cum multe din aplicat, iile pe care le folosim zi dezi au devenit aplicat, ii web, limbajele orientate spre as, a ceva au crescut în popularitate.

Page 8: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 117

Figura 6.3: Etapele compilarii

Page 9: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

118 INTRODUCERE ÎN SISTEME DE OPERARE

6.5.1.1 Java

Java este un limbaj de programare folosit pentru dezvoltarea de aplicat, ii enterprise carea fost dezvoltat de Sun Microsystems. Oracle a cumparat Sun Microsystems, as, a caastazi Java este întret, inut de catre Oracle. Paradigma pe care se bazeaza Java esteprogramarea orientata pe obiecte. Acesta faciliteaza scrierea unui cod cât maimodularizat s, i refolosibil.

Idee de baza care a stat la baza limbajului Java a fost portabilitatea. Se dorea scriereaunui program o singura data s, i rularea lui pe multe platforme diferite fara a face vreomodificare s, i fara a fi necesara distribuirea sursei. Init, ial a fost folosit în programe denavigare sub forma de Java Applets, mici aplicat, ii scrie care se putea include intr-opagina.

Pe de alta parte, pâna s, i aplicat, iile simple dezvoltate în Java necesita o structuracomplexa. De aceea nu recomandam folosirea limbajului pentru programe simple sauîn educat, ie.

Fiind destinat dezvoltarii de aplicat, ii pentru companii, platforma Java este are douacomponente, compilatorul care genereaza bytecode-ul (Java Development Kit - JDK ) s, imas, ina care ruleaza bytecode-ul (Java Runtime Environment - JRE ). Astfel pentrudistribut, ia aplicat, iei nu este necesara distribut, ia codului sursa.

Recomandam folosirea limbajului Java daca dorim sa dezvoltam aplicat, iilor de maridimensiuni, în general folosite în scop industrial.

6.5.1.2 C#

C# este un limbaj de programare similar cu Java, dezvoltat de Microsoft. Este principalullimbaj de dezvoltare pentru platforma Windows, fiind integrat inclusiv în motoare de jocuri(de exemplu Unity).

6.5.1.3 Python

Python este un limbaj dezvoltat init, ial cu scopul de a fi folosit pentru a învataprogramare, principalul avantaj fiind ca ofera o lizibilitatea mare codului. A devenitfoarte popular datorita unor proiecte precum GNOME (init, ial) s, i OpenStack, precum s, idatorita bibliotecilor de matematica avansate.

Python este folosit pentru automatizarea administrarii sistemului, prin scripturi simple.Este de asemenea foarte folosit în educat, ie, codul sursa fiind us, or de urmarit. În plus,Python impune reguli de indentare, ceea ce îl face potrivit ca prim limbaj de programarecare obis, nuies, te elevii cu necesitatea de a indenta codul. Limbajul mai este folosit încercetare, find o varianta mai “us, oara” fat,a de alte limbaje s, tiint, ifice cum ar fi Matlab, Rsau Julia.

O alta utilizare a limbajului Python este pentru dezvoltarea de servere web, cu ajutorulbibliotecilor Flask s, i Django. În ultimii ani a început sa piarda teren în acest domeniu.

Page 10: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 119

6.5.1.4 JavaScript

JavaScript este un limbaj folosit pentru dezvoltarea de aplicat, ii web. Are o sintaxasimilara cu limbajele C s, i Java. Des, i se numes, te JavaScript, în afara de sintaxasimilara, nu are nimic în comun cu Java.

La început JavaScript a fost folosit pentru partea de interfat,a a aplicat, iilor web,interpretorul de JavaScript fiind integrat în browsere. Odata cu aparit, ia platformeiNode.js, aplicat, iile JavaScript pot fi rulate s, i în afara browser-ului. Astfel, JavaScripteste folosit pentru aplicat, ii simple, pentru automatizarea operat, iilor, dar mai ales pentrudezvoltarea de servere web, prin intermediul bibliotecii Express.

În principiu, daca ne dorim sa dezvoltam o aplicat, ie web, JavaScript, împreuna cuNode.js sunt o opt, iune importanta de luat în calcul. În prezent, majoritatea aplicat, iilorweb tind spre aceasta tehnologie.

6.6 Etapele dezvoltarii unui program

Pâna acum am discutat despre limbajele de programare uzuale s, i cum acestea sediferent, iaza între ele s, i despre cum codul sursa pe care noi îl scriem ruleaza peprocesor. Întrebarea pe care urmeaza sa o punem este: ce presupune dezvoltarea unuiprogram?

6.6.1 Scrierea codului sursa

În primul rând, dezvoltarea unui program consta în scrierea efectiva a codului sursa;practic, acest pas se rezuma la a crea fis, iere text s, i a le edita. De aceea, aplicat, iaprincipala de care avem nevoie în dezvoltarea unui program este un editor de text.

În ceea ce prives, te editoarele de text, avem un numar mare de editoare diferite din careputem alege, pornind de la unele foarte simple care au ca scop editarea unui fis, ier text,la aplicat, ii complexe adaptate dezvoltarii de programe. În mod normal, orice editor poatefi folosit pentru scrierea de cod, chiar s, i Notepad din Microsoft Windows, totus, i este depreferat sa folosim unul adaptat scrierii de cod, pentru a ne us, ura munca.

Editoarele adaptate dezvoltarii de programe vin cu anumite caracteristici care ne ajutaîn procesul de dezvoltare cum ar fi:

• indentarea automata a codului

• evident, ierea cuvintelor cheie

• semnalarea erorilor.

T, inând cont de numarul mare de limbaje de programare existente, fiecare cuparticularitat, ile sale, este imposibil ca un editor sa cuprinsa toate aspectele fiecaruilimbaj. De aceea, majoritatea acestor editoare permit instalarea de extensii care aducfunct, ionalitat, i în plus sau aduc funct, ionalitat, i specifice pentru un anumit limbaj.

În continuare vom descrie cele mai populare editoare folosite pentru scriereaprogramelor.

Page 11: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

120 INTRODUCERE ÎN SISTEME DE OPERARE

6.6.2 Editoare în mod text

6.6.2.1 Vim

Vim este un editor care funct, ioneaza în linie de comanda, fiind versiunea îmbunatat, ita avi, editor care se gases, te pe toate sistemele Unix. El nu este neaparat adaptat pentruscrierea de cod sursa, dar pe de alta parte, poate fi configurat s, i adaptat acestui scop,acesta fiind s, i unul din avantajele principale ale sale. Este un editor foarte configurabil,dar nu foarte us, or de folosit pentru începatori. Acest lucru este datorat lipsei interfet,eigrafice, tot meniul fiind transpus prin comenzi. Des, i pentru utilizatorii experimentat, i acestlucru poate reprezenta un avantaj aducând rapiditate în folosire, pentru începatori, lipsacursorului s, i necesitatea de a memora comenzi îngreuneaza folosirea editorului.

Deoarece multi programatori sunt foarte familiari cu comenzile din vim, o parte dineditoarele de text ce au interfat,a grafica ofera s, i posibilitatea folosirii comenzilor din vim.

Chiar daca exista multe variante de editoare mai intuitive, va recomandam familiarizareacu vim, sau chiar cu varianta redusa, vi, tocmai pentru ca este unul din put, inele editoaredisponibile pe orice sistem Unix.

Pentru familiarizarea cu vim s, i comenzile de baza, recomandam parcurgerea tutorialuluivimtutor. Este suficient sa rulat, i comanda vimtutor în terminal s, i tutorialul va începe.

Des, i putem gasi vi pe orice sistem Unix, doar unele distribut, ii vin cu editorul vim instalat.Pentru a instala vim este suficient sa rulam comanda apt-get install vim.

6.6.2.2 Nano, Pico s, i Emacs

Alte editoare similare cu vim, care funct, ioneaza tot în linie de comanda, sunt nano s, iemacs. La fel ca vim, este se gasesc frecvent pe sistemele Unix, sunt folosite la editarearapida, cum ar fi editarea unor fis, iere de configurare.

Similar cu vim, pentru instalarea nano sau emacs, este suficient sa rulam în terminalcomanda apt-get install nano, apt-get install pico sau apt-getinstall emacs.

6.6.3 Editoare în interfat, a grafica

6.6.3.1 Sublime Text

Sublime Text este un editor de cod avansat. El permite crearea sau editarea facilaa unor programe complexe, alcatuite din mai multe fis, iere. Pe lânga posibilitatea dea edita structura de fis, iere s, i directoare a proiectului, editorul recunoas, te limbajele deprogramare cele mai folosite s, i evident, iaza cuvintele cheie specifice fiecarui limbaj. Înplus, el recunoas, te variabilele definite de utilizator s, i le sugereaza acestuia în timpulscrierii codului.

Pe lânga caracteristicile de baza, cum am ment, ionat s, i mai sus, Sublime Text suportaextensii care aduc funct, ionalitat, i cum ar fi integrarea cu sisteme de versionare a codului

Page 12: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 121

(ex. git), recunoas, terea unor limbaje de programare mai put, in populare sau chiar diverseteme.

Pentru a instala Sublime Text, trebuie sa urmam pas, ii descris, i pe pagina web dedicataeditorului (https://www.sublimetext.com/3). În momentul de fat,a este recomandatafolosirea versiunii 3, care a fost lansata drept versiune stabila de curând. Editorul nueste gratis, el poate fi folosit pentru o perioada limitata, dupa care este necesaraachizit, ionarea unei licent,e de folosire.

6.6.3.2 Atom

Atom este un editor asemanator cu Sublime Text, dezvoltat de GitHub. Principalulavantaj pe care acesta îl are fat,a de Sublime Text este ca are sursa deschisa s, i nu sepercepe nicio taxa pentru folosire, deci poate fi considerat o varianta mai accesibila fat,ade Sublime Text.

Pentru instalarea editorului Atom e suficient sa accesam pagina https://atom.io/.

6.6.3.3 Visual Studio Code

Visual Studio Code (VSCode) este un editor de cod dezvoltat de Microsoft. Similar cuAtom, editorul are sursa deschisa s, i poate fi folosit gratuit.

Precum cele doua editoare descrise mai sus, VSCode poate fi folosit pe sistemeWindows, Linux s, i MacOS. Pentru a-l instala trebuie sa urmam pas, ii descris, i la adresahttps://code.visualstudio.com/Download/.

6.7 Medii integrate de dezvoltare (IDE)

Am vorbit despre editoare s, i important,a lor în dezvoltarea programelor. Pe lângaeditoare avansate, avem posibilitatea de a folosi medii integrate de dezvoltare. La oprima vedere, acestea sunt similare cu editoarele de text. IDE -urile au, în schimb,anumite funct, ionalitat, i avansate, multe din ele fiind adaptate unui singur limbaj deprogramare, sau unui numar redus de limbaje. În primul rând, orice IDE are integrat uncompilator sau interpretor pentru limbajul sau limbajele de programare pe care lesuporta s, i la o simpla apasare de buton programul este rulat.

Având în vedere ca editoare precum Sublime Text sau Visual Studio Code vin cu unnumar mare de extensii care pot adauga funct, ionalitat, i specifice unui anumit limbaj deprogramare, diferent,a între un editor avansat s, i un IDE este de multe ori greu de sesizat.Astfel, unele din funct, ionalitat, ile specifice unui IDE se regasesc s, i în editoarele avansate,cum ar fi depistarea erorilor, cautarea avansata a unei variabile, afis, area definit, iei funct, ieiutilizate, sau chiar rularea programului la o apasare de buton.

Pe de alta parte, exista multe funct, ionalitat, i pe care un IDE le aduce în plus. De exemplu,în ceea ce prives, te interpretarea codului sursa pe masura ce acesta e scris, majoritateaeditoarelor pot sa identifice variabilele declarate, dar nu s, i tipul acestora. De aceea unIDE va oferi sugestii mai relevante programatorului. Un alt avantaj este posibilitatea de a

Page 13: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

122 INTRODUCERE ÎN SISTEME DE OPERARE

refactoriza codul, adica putem alege sa schimbam numele unei variabile s, i schimbareava avea loc în toate fis, ierele, peste tot unde variabila este folosita.

Multe din limbajele de programare existente sunt folosite pentru dezvoltarea de aplicat, iigrafice, cum ar fi Objective-C pentru aplicat, ii iOS. Pentru aceste cazuri, IDE-urile oferaun mediu vizual pentru dezvoltarea interfet,ei grafice în care programatorul poate saconstruiasca vizual interfat,a s, i codul specific este generat automat.

TODO - poza cu exemplu

Un alt avantaj important al mediilor de dezvoltare integrate sunt metodele avansate de adepana programele. Folosind sistemul de depanare integrat în IDE, putem seta puncteîn care sa oprim execut, ia programului, dupa care putem inspecta valoarea curenta avariabilelor folosite sau valorile întoarse de funct, ii. Mai mult, putem chiar modifica valorileunor variabile pentru a influent,a execut, ia programului.

În general, pentru fiecare limbaj de programare ales, avem un IDE adaptat acestuia.Exista totus, i s, i destul de multe IDE-uri ce suporta mai multe limbaje. Se recomandafolosirea unui IDE dedicat limbajului de programare folosit, daca acesta exista, pentruca ne us, ureaza mult munca. Un IDE ne permite sa ne concentram pe scrierea codului,fara a ne consuma timp cu a rula comenzi pentru compilarea, rularea sau depanareaacestuia.

Mai departe vom ment, iona câteva medii de dezvoltare importante pentru cele maifolosite limbaje de programare.

6.7.1 Microsoft Visual Studio s, i MonoDevelop

Microsoft Visual Studio este editorul dedicat dezvoltarii în C/C++ s, i C#. Pentru ca estesuportat doar pe sisteme Windows sau MacOS, pentru sisteme Linux recomandamfolosirea IDE-ului MonoDevelop. MonoDevelop este open source, dar este sust, inut deMicrosoft, împreuna cu Microsoft Visual Studio.

6.7.2 Eclipse

Eclipse este unul din IDE-urile cele mai folosite pentru dezvoltarea de aplicat, ii Java.Înainte de aparit, ia Android Studio, era folosit chiar pentru dezvoltarea de aplicat, iiAndroid, prin instalarea unei extensii.

6.7.3 NetBeans

NeatBeans e un IDE cu sursa deschisa specializat pentru limbajul Java. El ofera omodalitate us, oara de a crea interfet,e grafice pentru aplicat, ii Java, împreuna cu editorulpentru dezvoltarea programelor.

Page 14: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 123

6.7.4 Xcode

Xcode este IDE-ul dezvoltat de Apple pentru crearea în principal de aplicat, ii pentru iOSs, i macOS. Este adaptat pentru C, Objective-C s, i Swift. Objective-C e un limbaj deprogramare ce extinde limbajului C, folosit pentru dezvoltarea de aplicat, ii iOS s, imacOS. Swift este succesorul limbajului Objective-C.

O caracteristica importanta a Xcode este editorul de interfet,e grafice integrat(storyboard-ul), care permite generarea vizuala a interfet,elor grafice s, i conectarea maimultor ferestre fara necesitatea de a scrie cod.

În ceea ce prives, te editorul pentru scrierea codului sursa, oricare din editoareledescrise mai sus suporta un numar mare de limbaje de programare s, i este adaptatpentru acestea. Recomandarea noastra este sa încercat, i mai multe editoare s, i saaleget, i pe cel pe care îl considerat, i cel mai comod în folosire, iar pentru limbajele deprogramare care au un IDE dedicat, se recomanda folosirea IDE-ului.

6.8 Biblioteci s, i framework-uri

Un alt aspect de care trebuie sa t, inem cont în dezvoltarea programelor este folosireabibliotecilor s, i a framework-urilor.

Bibliotecile sunt colect, ii de resurse pe care le integram în aplicat, iile noastre pentru ane us, ura procesul de dezvoltare. De exemplu, daca dorim sa dezvoltam o aplicat, iePython care face cereri HTTP , vom folosi biblioteca requests care expune funct, ia get()pentru a face o cerere. Fara a folosi biblioteca, ar trebui sa scriem noi tot codul carese conecteaza la un server, genereaza pachetul pentru cerere, îl trimite, apoi preia s, iinterpreteaza raspunsul.

O unealta asemanatoare bibliotecilor sunt framework-urile. S, i acestea sunt unelte careus, ureaza procesul de dezvoltare, dar ele ofera un schelet pe care aplicat, ia îl urmeazapentru a beneficia de proprietat, ile framework-ului. Practic putem sa ne gândim cabiblioteca e un modul care odata integrat în aplicat, ie aduce funct, ii sau constante noi pecare le putem folosi când e cazul, în timp ce framework-ul impune anumite funct, ii sauelemente ce trebuie implementate în aplicat, ie s, i aplicat, ia trebuie sa se muleze dupaacea structura.

Pentru a putea integra biblioteci s, i framework-uri în aplicat, iile pe care le dezvoltam,acestea trebuie sa existe pe sistemul pe care lucram. Vom vedea mai departe, ca demulte ori fiecare platforma de dezvoltare specifica unui limbaj vine cu propriul sistem deinstalare a acestor module.

6.9 Rularea programului

Odata ce am scris codul sursa s, i am instalat bibliotecile sau framework-urile folosite,pasul final este sa rulam programul. Complexitatea acestui pas depinde decomplexitatea programului obt, inut. Pentru un program simplu, cu un fis, ier care cont, ine

Page 15: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

124 INTRODUCERE ÎN SISTEME DE OPERARE

codul sursa s, i care nu foloses, te nicio biblioteca, în general, este suficient sa specificamfis, ierul sursa s, i compilatorul sau interpretorul se ocupa de restul procesului.

1 gcc main.c -o main2 ./main

În cazul unui program complex care cont, ine mai multe fis, iere s, i foloses, te biblioteci sauframework-uri, vom rula comenzi mai complexe, care specifica elementele folosite s, idependent,a între fis, iere.

1 gcc -c utils.c2 gcc -c main.c3 gcc utils.o main.o -o main4 ./main

6.9.1 Automatizarea procesului de rulare

Cum am observat mai sus, pentru aplicat, ii complexe, compilarea sau rularea acestoraconsta în rularea unei secvent,e de comenzi. Toate aceste comenzi trebuie rulateindiferent daca se aduc modificari majore programului, sau daca se schimba doar olinie de cod. Astfel, nu e greu sa ne dam seama ca avem nevoie de o modalitate de aautomatiza act, iunile necesare compilarii s, i rularii codului, astfel încât sa rulam ocomanda simpla care sa se ocupe de tot. Practic, putem sa ne gândim ca fis, ierele carealcatuiesc programul pe care l-am dezvoltat sunt ingredientele necesare pentru oprajitura, iar prajitura este executabilul sau chiar rezultatul rularii programului. Astfel,similar unei ret,ete care descrie pas, ii necesari pentru a obt, ine prajitura, vom scrie unfis, ier care cont, ine pas, ii necesari obt, inerii rezultatului programului, iar utilitarul în cauzaeste bucatarul care urmeaza ret,eta.

Unele din utilitarele cele mai folosite pentru automatizarea acestor taskuri sunt Make,Grunt, Gulp.

6.10 Instalarea mediilor de dezvoltare

Pentru fiecare limbaj de programare folosit avem nevoie de mediul (aplicatii, biblioteci,compilator si/sau interpretor) de dezvoltare aferent, pentru a putea rula aplicat, iile pecare le scriem. Bineînt,eles ca putem scrie codul sursa în orice editor, fara a folosi niciunalt program adiacent, dar am obt, ine un fis, ier cu instruct, iuni inutil, pe care nu îl putemcompila sau interpreta. De aceea, în primul rând, în funct, ie de tipul limbajului, avemnevoie de un compilator sau un interpretor, care sa ne permita acest lucru.

Pe lânga compilator sau interpretor, pentru folosirea unui limbaj de programare avemnevoie sa instalam bibliotecile folosite.

Mai departe vom analiza particularitat, i în instalarea compilatorului sau a interpretoruluipentru mai multe limbaje de programare.

Page 16: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 125

6.10.1 C

Pentru limbajul C, compilatorul cel mai cunoscut este gcc (GNU Compiler Collection).Conceput init, ial pentru a compila limbajul C, în momentul de fat,a gcc a fost extins pentrua suporta compilarea s, i a altor limbaje, cum ar fi C++ sau Java.

Pe sisteme Unix compilatorul este deja instalat, exista însa cazuri când ne dorimaducerea la zi a acestuia (update). Pentru a instala o versiune mai noua acompilatorului, este suficient sa rulam comanda standard pentru instalarea pachetelor(apt sau yum în funct, ie de distribut, ia folosita).

Pentru sistemele derivate din Debian, exista un pacet special numit build-essential.

1 apt-get install build-essential

Pentru sistemele derivate din Redat, precum Fedora, CentOS etc. trebuie instalatepachetele separat:

1 yum install make gcc g++

Toate aceste pachete vor instala s, i limbajul C++.

gcc poate fi instalat s, i pe sisteme Windows, prin intermediul unei aplicat, ii care caresimuleaza un sistem Unix (Cygwin, MinGW etc.).

Pentru sisteme Windows, compilatorul de baza este integrat în aplicat, ia MicrosoftVisual C++. Microsoft Visual C++ este un ecosistem de programare s, i consta într-uneditor cu funct, ii avansate (sugestii de completare a codului, sugestii de posibile erorietc.) împreuna cu compilatorul de C s, i C++ s, i se recomanda folosirea acestuia pentrudezvoltarea de programe C.

6.10.2 C++

Pentru C++ se poate folosi aceeas, i colect, ie de compilatoare ca pentru limbajul C, adicagcc. Cum am ment, ionat mai sus, în momentul de fat,a gcc suporta compilarea limbajuluiC++.

La folosirea gcc, sistemul analizeaza fis, ierele de intrare s, i hotaras, te daca limbajulcompilat este C sau C++. Pentru a eficientiza procesul, se poate folosi direct g++, adicacompilatorul de C++ integrat în gcc.

1 g++ main.cpp -o main2 ./main

Listing 6.1: Exemplu compilare si rulare C++

De asemenea, pentru sisteme Windows mediul de dezvoltare recomandat ramâneacelas, i. Microsoft Visual C++ este recomandat s, i pentru dezvoltarea de aplicat, ii C++.

6.10.3 Dezvoltarea în C/C++

Cum mai ment, ionat anterior, compilatorul cel mai folosit pentru C s, i C++ este gcc/g++.Pentru folosirea compilatorului este suficient sa rulam comanda gcc cu parametriiaferent, i.

Page 17: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

126 INTRODUCERE ÎN SISTEME DE OPERARE

În procesul de compilare codul sursa este prelucrat s, i trece prin mai multe etapeintermediare:

1. Preprocesare - se înlocuiesc macro-uri, se numeroteaza fiecare linie de cod;rezultatul e un fis, ier cu extensia .i

2. Compilare - codul sursa este transformat în cod în limbaj de asamblare; rezultatule un fis, ier cu extensia .s

3. Asamblare - codul în limbaj de asamblare este transformat în cod mas, ina;rezultatul e un fis, ier cu extensia .o

4. Link-editare - se fac legaturile catre fis, iere externe care cont, in simboluri sau funct, iiapelate din fis, ierul sursa; daca avem o funct, ie definita într-un fis, ier s, i folosita înaltul, implementarea funct, iei trebuie legata de apelul ei;

La simpla rulare a comenzii gcc, se trece prin toate etapele ment, ionate. De exemplu,pentru un program C simplu (main.c fara nicio biblioteca) vom rula urmatoarea comandapentru a genera executabilul main.out.

1 gcc main.c -o main.out2 ./main.out

În schimb, pentru programe mai complexe, alcatuite din mai multe fis, iere, e necesarsa generam fis, ierul obiect aferent fiecarui fis, ier sursa s, i apoi sa le link-editam pentru aobt, ine executabilul final.

1 gcc -c utils.c2 gcc -c main.c3 gcc utils.o main.o -o main.out4 ./main.out

Cum am ment, ionat mai devreme, este obositor sa rulam toate comenzile de mai suspentru fiecare modificare adusa în codul sursa. De aceea exista posibilitatea de a creaun fis, ier care cont, ine toate aceste comenzi s, i care le poate rula pe toate printr-un singurapel.

Utilitarul de automatizare cel mai folosit pentru aplicat, iile C/C++ este make. Pentru afolosi make e suficient sa cream un fis, ier cu numele Makefile în structura programuluinostru. La rularea comenzii make, utilitarul gases, te acel fis, ier s, i executa instruct, iuniledescrise.

Formatul unui fis, ier makefile este urmatorul:

1 Regula: dependinte2 <TAB> comanda

Fis, ierul poate sa cont, ina mai multe astfel de linii.

1 build: utils.o hello.o help.o2 gcc utils.o help.o hello.o -o hello3

4 all:5 gcc simple_hello.c -o simple6

7 utils.o: utils.c8 gcc -c utils.c9

Page 18: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 127

10 hello.o: hello.c11 gcc -c hello.c12

13 help.o: help.c14 gcc -c help.c15

16 clean:17 rm -f *.o hello

Listing 6.2: Exemplu Makefile

Regula reprezinta numele unei instruct, iuni. La simpla rulare a comenzii make primaregula din fis, ier este cea care va fi executata. În schimb, daca vom scrie make clean, seva executa comanda aferenta regulii clean.

Dependint,ele sunt fis, iere s, i/sau reguli necesare pentru a putea rula o regula. Practic,la rularea unei reguli se verifica daca fis, ierul din dependint,a exista. Daca acesta exista,putem rula regula, daca nu, se cauta o alta regula cu acel nume s, i se va rula acearegula (daca dependint,ele ei sunt îndeplinite, daca nu, se continua lant,ul de dependint,e).Bineînt,eles, sunt cazuri în care dependint,ele pot sa lipseasca.

Acum sa luam cazul programului dezvoltat mai sus, care depinde de mai multe fis, ieres, i sa presupunem ca am schimbat o linie într-un fis, ier. La rularea comenzii make, toatefis, ierele ar fi refacute, ceea ce nu este eficient. De aceea, make t, ine cont de înca unaspect la verificarea dependint,elor. Daca dependint,a (fis, ierul) exista, make va urmarilant,ul de dependint,e pâna ajunge la fis, ierele de baza ale acesteia. Daca fis, ierele au fostmodificate dupa ce dependint,a a fost creata, aceasta va fi regenerata, în caz contrar nuse va regenera dependint,a.

6.10.4 Java

Fiind un limbaj hibrid, pentru Java sistemul de execut, ie a codului sursa este mai complex.Cum am ment, ionat mai sus, în general limbajele hibride trec printr-o etapa de compilareîn urma careia rezulta un fis, ier bytecode, iar apoi acel cod este interpretat.

Pentru majoritatea limbajelor hibride (Python, JavaScript) exista un sistem care cont, ineatât compilatorul de bytecode cât s, i interpretorul, sau mas, ina virtuala. Pentru Java,cele doua elemente sunt separate clar, avem compilatorul care genereaza codul sursaîn bytecode s, i mas, ina virtuala ce executa fis, ierele bytecode. Cele doua se instaleazaseparat, ca doua aplicat, ii diferite s, i independente. Astfel, putem avea un sistem caredoar genereaza fis, ierele bytecode s, i un alt sistem care le executa.

În ceea ce prives, te platformele pentru a compila s, i a rula Java, putem alege între douaplatforme principale: OracleJDK sau OpenJDK. Cum sugereaza s, i numele, OracleJDKeste dezvoltata de Oracle, în timp ce OpenJDK este o platforma open source s, i estespecial conceputa pentru sisteme Unix. Pe lânga JDK (Java Development Kit), puteminstala OracleJRE sau OpenJRE (Java Runtime Environment).

În timp ce JDK este sistemul complet ce compileaza s, i executa aplicat, ii Java, JRE estedoar mas, ina virtuala care ruleaza bytecode-ul generat de catre compilator. Ea esteinclusa în JDK, dar poate fi instalata s, i separat. Astfel, putem avea sisteme care doarruleaza aplicat, ii Java s, i care necesita bytecode-ul generat de JDK.

Page 19: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

128 INTRODUCERE ÎN SISTEME DE OPERARE

Pe sisteme Linux putem instala openJDK folosind comenzile standard de instalare deaplicat, ii.

1 sudo apt-get update2 sudo apt-get install openjdk-8-jdk

Pentru sisteme care ruleaza Windows, se recomanda instalarea OracleJDK. Des, i segasesc versiuni OpenJDK compatibile cu Windows, acestea nu sunt întret, inute s, iprezinta riscuri de securitate.

Pentru a instala OracleJDK pe un sistem Windows, accesat, i site-ul Oracle s, i urmat, iinstruct, iunile (https://www.oracle.com/technetwork/java/javase/overview/install-windows-142126.html).

6.10.4.1 Dezvoltarea în Java

O particularitate a Java este aceea ca bibliotecile sunt împachetate ca nis, te arhive (jar- Java Archive) care sunt incluse în aplicat, iile pe care le dezvoltam. Fis, ierul jar cont, ineresurse diverse, de la definit, ii de clase la imagini sau alte fis, iere multimedia. Fiecareastfel de arhiva poate cont, ine un fis, ier manifest ce ofera informat, ii despre pachet s, idespre utilizarea sa.

6.10.5 C#

Pentru C# sistemul de execut, ie este .NET, dezvoltat de Microsoft. As, adar, sistemele cuWindows au deja sistemul instalat.

Pentru sisteme Unix, se recomanda folosirea mono. Mono este platforma open-sourcepentru C#, sust, inuta tot de Microsoft.

sudo apt install mono-devel

6.10.5.1 Dezvoltarea în C#

Pentru aplicat, iile dezvoltate în C# putem folosi fie Mono, fie .Net. Indiferent de platformafolosita, pentru a putea instala biblioteci putem folosi utilitarul NuGet, dezvoltat deMicrosoft, similar cu pip sau npm. Ca în Java, bibliotecile sunt similare unei arhive.

6.10.6 Python

La fel ca Java, Python e un limbaj de programare hibrid. Diferent,a între cele doua esteca pentru Python nu se diferent, iaza compilatorul de mas, ina virtuala, cele doua suntintegrate.

Pentru a folosi Python pe un sistem Unix este suficient sa rulam comanda apt-getinstall python+<versiune>.

1 sudo apt-get update2 sudo apt-get install python3.6

Page 20: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 129

Pentru sistemele Windows, site-ul python.org ne ofera resursele necesare pentruinstalare.

La instalarea interpretorului de Python este foarte importanta versiunea acestuia. Putemalege între Python2 sau Python3, cele doua fiind diferite. Python 3.0 a fost lansat în anul2008 s, i prezinta o sintaxa diferita de Python 2. De aceea este important sa instalam uninterpretor potrivit pentru versiunea Python pe care o folosim la dezvoltarea aplicat, iilor.

Se recomanda folosirea Python3 deoarece Python2 nu mai este adus la zi.

6.10.6.1 Dezvoltarea în Python

Când vine vorba de dezvoltarea aplicat, iilor folosind Python, abordarea e put, in diferitade C, pentru ca Python e un limbaj interpretat. Drept urmare, pentru a putea rulaprogramul pe care îl scriem, va trebui sa rulam interpretorul s, i sa ii spunem acestuiacare e programul pe care dorim sa îl interpreteze.

Pentru ca în general vom lucra la proiecte complexe, care cont, in mai multe fis, iere, similarcu programele din C, în Python vom avea un fis, ier de baza care depinde de celelaltefis, iere. Astfel, pentru a rula aplicat, ia e suficient sa specificam fis, ierul de pornire.

1 python main.py

Listing 6.3: Exemplu rulare python

Cum am ment, ionat mai sus, Python ofera un numar mare de biblioteci s, i framework-uricare pot fi integrate în programele pe care le dezvoltam. Pentru a putea folosi obiblioteca, aceasta trebuie sa existe pe sistemul care ruleaza programul. Pentruinstalarea unei biblioteci, folosim utilitarul pip.

Pip este un utilitar care permite manipularea pachetelor Python, cum ar fi instalarea saudezinstalarea unor biblioteci. Pentru a instala un astfel de pachet e suficient sa rulamcomanda pip install <pachet>

1 pip install wiringpi

Listing 6.4: Exemplu instalare de framework-uri

S, i acum sa ne gândim ce înseamna sa rulam un program pe un alt calculator. Bineînt,elesca vom avea nevoie de interpretorul de Python instalat. Dar ce facem cu bibliotecile pecare le-am inclus în codul sursa? Trebuie sa le instalam din nou pe toate, adica ar trebuisa rulam pip install urmat de toate modulele externe necesare.

Pentru a us, ura acest pas, avem posibilitatea de a scrie toate bibliotecile necesare într-un fis, ier s, i prin rularea unei singure comenzi fis, ierul este parcurs s, i fiecare bibliotecaeste instalata pe sistem. Utilitarul care permite acest lucru este pipenv. De exemplu,daca instalam biblioteca requests rulând comanda pipenv install requests, seva crea un fis, ier numit pipfile în care apare ment, ionat noul pachet instalat. La rulareacomenzii pipenv install, toate bibliotecile din acel fis, ier sunt instalate.

6.10.7 Node.js

Când ment, ionam Node.js, ne referim deja la mediul de dezvoltare al aplicat, iilorJavaScript.

Page 21: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

130 INTRODUCERE ÎN SISTEME DE OPERARE

JavaScript este un limbaj folosit pentru aplicat, ii web, iar interpretoarele de JavaScriptsunt integrate în browsere. De aceea a aparut Node.js, care e o platforma ce permiteexecutarea codului JavaScript în afara browserului. Unul din interpretoarele deJavaScript este V8, dezvoltat de Google s, i integrat în Google Chrome. Node.jsintegreaza acest interpretor.

Pentru a instala Node.js pe sisteme Linux, se recomanda descarcarea binarului de pesite. Platforma se poate instala si rulând comanda sudo apt-get installnodejs, dar se va descarca o versiune foarte veche a platformei. De aceearecomandam descarcarea binarului.

Urmatorul exemplu ilustreaza instalarea NodeJS versiune 8 pentru Linux pe 64 de bit, i.Pentru alte versiuni sau aritecturi, este suficient sa descarca arhiva corespunzatoare depe pagina https://nodejs.org/en/download/.

1 wget https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.xz2 tar xvfJ node-v8.12.0-linux-x64.tar.xz3 cd node-v8.12.0-linux-x644 sudo cp -R * /usr

În plus, recomandam instalarea unei versiuni LTS (Long Term Support) în detrimentulcelei mai recente versiuni. Versiunea LTS este testata intensiv întainte de a fi lansata s, ieste mult mai stabila decat versiune curenta, care e înca în teste.

Pentru instalarea pe sisteme ce ruleaza Windows, se recomanda descarcarea kitului deinstalare de pe site-ul Node.js.

6.10.7.1 Dezvoltarea folosind NodeJS

În general, daca alegem sa dezvoltam o aplicat, ie folosind Node.js, dorim sa dezvoltamo aplicat, ie web la care atât partea de server, cât s, i cea de client sa fie scrise folosindJavaScript. Pentru partea de server vom folosi Node.js pentru a putea rula programul,în timp ce partea de client va fi interpretata în browser.

Când dezvoltam o aplicat, ie în Node.js, aspectele de care trebuie sa t, inem cont suntsimilare cu cele care au legatura cu Python. Similar cu Python, pentru rularea coduluisursa scris avem nevoie de interpretorul necesar instalat.

Pentru a rula o aplicat, ie Node.js folosim comanda node main.js.

Pentru manipularea modulelor externe se foloses, te utilitarul npm. Pentru instalarea uneibilioteci comanda necesara este npm install <biblioteca>. Similar cu pipenv,putem folosi parametrul –save pentru a obt, ine un fis, ier numit package.json în care sunttrecute toate modulele externe necesare. La rularea comenzii npm install toateacele module sunt instalate.

Cum am ment, ionat mai sus, de cele mai multe ori, când folosim Node.js, vom creaaplicat, ii complexe, de cele mai multe ori, aplicat, ii web. De aceea, dupa ce scriem codulsursa vom dori sa îl prelucram. De exemplu putem alege sa minifiem codul, adica sarestrângem tot codul într-un singur fis, ier, greu inteligibil pentru dezvoltatori, pentru a neasigura ca nu poate fi us, or copiat. Pe lânga asta, putem alege sa trecem tot codul sursaprintr-un utilitar care verifica daca exista gres, eli, cum ar fi nedeclararea unei variabile.

Page 22: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 131

Pentru ca sunt multe astfel de operat, ii pe care vrem sa le aplicam codului sursa înaintede a-l distribui, putem automatiza întregul proces. Unul din utilitarele folosite la aceastaautomatizare este grunt. Putem sa ne gândim la grunt ca la un utilitar semanatorcu make, doar ca operat, iile pe care grunt le efectueaza implica preprocesarea coduluisursa. Similar cu Makefile-ul, pentru grunt, vom crea un Gruntfile care cont, ine toateregulile.

1 module.exports = function(grunt) {2

3 grunt.initConfig({4 jshint: {5 files: [’Gruntfile.js’, ’src/**/*.js’, ’test/**/*.js’],6 options: {7 globals: {8 jQuery: true9 }

10 }11 },12 watch: {13 files: [’<%= jshint.files %>’],14 tasks: [’jshint’]15 }16 });17

18 grunt.loadNpmTasks(’grunt-contrib-jshint’);19 grunt.loadNpmTasks(’grunt-contrib-watch’);20

21 grunt.registerTask(’default’, [’jshint’]);22

23 };

Listing 6.5: Exemplu cod Gruntfile

6.11 Depanarea programelor

Pe masura ce scriem tot mai multe programe, ne dam seama ca de cele mai multeori acestea nu funct, ioneaza cum ne dorim de la început. De multe ori se va întâmplaca programul rulat sa arunce o eroare sau sa nu obt, ina rezultatul dorit. Des, i am dorisa putem spune ca e vina calculatorului, orice eroare sau comportament eronat aparedaca noi nu am scris ceva bine în codul sursa. Erorile pot sa varieze de la un simboluitat, de cele mai multe ori un ; la accesari ilegale de memorie sau chiar erori în logicaprogramului. Astfel, o mare parte din timpul destinat dezvoltarii aplicat, iilor îl dedicamdepanarii. De aceea e de preferat sa fim eficient, i în descoperirea erorilor.

Am ment, ionat mai sus ca unul din aspectele importante ale unui IDE este posibilitateade a seta puncte de oprire în execut, ia programului. Astfel, odata ce o linie de cod esteexecutata, întregul proces se opres, te s, i noi putem monitoriza starea curenta. Adicaputem vizualiza valorile pe care le au variabilele sau adresele de memorie la care segasesc.

TODO - poza cu debug

Unul din cele mai cunoscute utilitare pentru depanare este gdb. El suporta toateoperat, iile ment, ionate mai sus s, i este compatibil cu toate sistemele de operare

Page 23: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

132 INTRODUCERE ÎN SISTEME DE OPERARE

existente. Pe sisteme Linux, este us, or de instalat.

Cea mai simpla metoda de a depana un program este sa afis, am mesaje pe parcursulexecut, iei. Astfel putem vizualiza valorile variabilelor sau blocurile de cod care se executasau nu. Des, i pare un mod primitiv de a face depanare, este cel mai la îndemâna.

De fiecare data când ceva nu funct, ioneaza, se recomanda verificarea pas cu pas a liniilorde cod s, i printarea rezultatului. De foarte multe ori eroarea se observa prin afis, areavariabilelor.

În plus, nu este o practica eficienta sa scriem zeci de linii de cod fara a testa. Erecomandat sa scriem în incremente mici s, i sa ne asiguram ca fiecare blocfunct, ioneaza. Altfel, ne vom trezi pus, i în fat,a a zeci de linii de cod care nu funct, ioneazas, i va fi dificil sa identificam problema.

6.12 Sisteme de management s, i versionare a coduluisursa

De cele mai multe ori, vom lucra la proiecte complexe, în cadrul unei echipe. Astaînseamna ca vom avea multe fis, iere cu cod sursa pe care le vom modifica în paralel cualte persoane. Drept urmare, avem nevoie de o modalitate de a împart, i proiectul într-unmod eficient Des, i la început acest lucru nu pare neaparat dificil, pe masura ce proiectulcres, te, este tot mai greu. Pe lânga partajarea efectiva a întregii structuri a programului,avem nevoie de o modalitate de a urmari modificarile aduse s, i cine ce modificari a facut.Sa ne gândim la situat, ia în care suntem o echipa de 5 oameni s, i cineva face o modificarece rezulta într-un comportament defectuos al programului. Având în vedere ca suntem 5oameni care au adus simultan modificari codului sursa, va fi dificil sa identificam eroarea.În cazul unui proiect avansat, problema e s, i mai mare.

De aceea metode precum folosim un director online comun sau chiar trimitem surselemodificate prin email nu sunt recomandate pentru a lucra în echipa la un proiect s, i deaceea exista sisteme dedicate partajarii de cod sursa. Un astfel de sistem este git.

Git este un sistem de management s, i versionare a codului sursa care permite partajareaunui proiect în cadrul unei echipe. Proiectul este stocat într-un repository. Repository-ulcont, ine fis, ierele efective ale proiectului s, i multe alte informat, ii despre acesta. Folosindgit, fiecare persoana lucreaza la o versiune proprie a proiectului, pe care apoi o urcaonline s, i este automat integrata în proiect. Ceilalt, i colaboratori descarca modificarileaduse când doresc. Sistemul urmares, te modificarile pe care fiecare persoana le aduces, i la orice moment putem descarca o versiune anterioara a codului sursa. Pentru arealiza toate acestea avem la dispozit, ie urmatoarele operat, ii de baza:

• clone - se cloneaza întreg repository-ul pe sistemul local; practic se va crea undirector care cont, ine toate fis, ierele aferente programului, plus nis, te fis, iere carestocheaza informat, ii despre proiect (ex, cine a creat repository-ul, ce modificari aufost aduse etc. );

• commit - se salveaza toate modificarile aduse proiectului; starea actuala estesalvata local; daca modificarile nu sunt publicate online, acestea nu sunt vizibilecolaboratorilor;

Page 24: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

CAPITOLUL 6. DEZVOLTAREA APLICAT, IILOR 133

• push - se publica modificarile salvate prin commit; odata publicate acestemodificari, colaboratorii pot sa vizualizeze cine le-a adus s, i pot sa urmareascaschimbarile linie cu linie

• pull - se descarca local ultimele modificari publicate de ceilalt, i colaboratori s, i seintegreaza în versiunea locala a proiectului.

6.13 Licent,e pentru programe

Un aspect foarte important când vine vorba de dezvoltarea programelor este licent,aacestuia.

Licent,a unui program ofera informat, ii despre dreptul de folosire s, i distribut, ie aprogramului.

De multe ori vom dori sa publicam programele pe care le dezvoltam pentru a permitealtor persoane sa le foloseasca sau chiar sa le integreze în proiectele proprii. Cândfacem acest lucru, este important sa definim scopul aplicat, iei pe care o dezvoltam s, i saîi atribuim o licent,a corespunzatoare. Astfel, cei care vor folosi programul nostru vor s, tice pot s, i ce nu pot sa faca cu el.

Pe de alta parte, în procesul de dezvoltare a unui program vom folosi un numarsemnificativ de biblioteci s, i framework-uri. Când facem acest lucru este foarte importantsa verificam licent,a fiecarui pachet extern pe care îl integram în aplicat, ia noastra.Licent,ele modulelor externe folosite pot influent,a folosirea programului pe care îldezvoltam.

Acum ca s, tim ca e important sa stabilim o licent,a pentru programele pe care ledezvoltam, întrebarea care urmeaza este, cum stabilim aceste reguli s, i cum alegemlicent,a potrivita. De foarte multe ori chiar licent,a unui modul extern folosit poate dictalicent,a pe care trebuie sa o atribuim programului nostru. Ca sa înt,elegem mai bine cecaracteristici poate sa aiba o licent,a, vom ment, iona cele mai cunoscute s, i folositelicent,e software.

6.13.1 GNU GPL

GNU GPL este prescurtarea de la GNU General Public License s, i de cele mai multe orine referim la aceasta licent,a drept GPL.

Un program însot, it de o licent,a GPL poate fi distribuit doar daca sursa acestuia estepublica s, i programul poate fi integrat în orice alt program care este public s, i nu are niciorestrict, ie de folosire. Practic, orice program care foloses, te un modul GPL trebuie sa aibala rândul lui licent,a GPL. În plus, biblioteca integrata poate fi modificata

6.13.2 GNU LGPL

GNU LGPL (simplu LGPL) este o licent,a cu restrict, ii mai reduse fat,a de GNU GPL.Numele vine de la GNU Lesser General Public License. În cazul acestei licent,e

Page 25: Capitolul 6 Dezvoltarea aplicatiilorelf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdfCapitolul 6 Dezvoltarea aplicat,iilor 6.1 Introducere În momentul de fat, a avem o varietate mare

134 INTRODUCERE ÎN SISTEME DE OPERARE

programul în cauza poate fi integrat în alte programe care au orice alta licent,a. Singurarestrict, ie este ca modulul LGPL folosit sa fie facut public în cadrul aplicat, iei. Deasemenea, în cazul în care biblioteca LGPL este modificata s, i abia apoi integrata într-oaplicat, ie, biblioteca modificata trebuie publicata sub licent,a LGPL.

6.13.3 MIT

MIT este o licent,a mai permisiva fat,a de GPL. Orice biblioteca care are licent,a MITpoate fi integrata în orice program s, i acesta poate fi distribuit, fara necesitatea de a faceprogramul public. Singura condit, ie este ca licent,a MIT sa apara în programul principal.

6.14 Sumar

Pe parcursul acestui capitol am prezentat principalele tipuri de limbaje de programare:compilate, interpretate s, i hibride. Am discutat despre avantajele s, i dezavantajelefiecaruia. De asemenea, am trecut în revista principalele limbaje de programare folositedin fiecare categorie, evident, iind unde se foloses, te fiecare.

Sunt importante de ret, inut etapele dezvoltarii unei aplicat, ii. În primul rând, trebuie sahotarâm ce aplicat, ie dorim sa realizam, cine o va folosi s, i care va fi mediul hardwares, i software în care va rula. Odata stabilite acestea, trebuie sa alegem limbajul potrivit,mediul de programare s, i sa instalam bibliotecile necesare.

Urmatorul pas este scrierea codului sursa, compilarea acestuia s, i testarea lui. Acestproces este repetat de foarte multe ori pâna la definitivarea aplicat, iei.

Odata ce aplicat, ia funct, ioneaza corespunzator, trebuie sa îi adaugam o licent,a dedistribut, ie s, i sa facem un pachet de instalare.

Aplicat, ia este gata de lansare.


Recommended