Pagina documente » Informatica, Matematica » Algebra liniara numerica. Aplicatii ale POO in C++

Despre lucrare

lucrare-licenta-algebra-liniara-numerica.-aplicatii-ale-poo-in-c-
Aceasta lucrare poate fi descarcata doar daca ai statut PREMIUM si are scop consultativ. Pentru a descarca aceasta lucrare trebuie sa fii utilizator inregistrat.
lucrare-licenta-algebra-liniara-numerica.-aplicatii-ale-poo-in-c-


Cuprins

EXTRAS DIN DOCUMENT

?~ Prefata ~

Programarea orientata pe obiecte este un concept intalnit sub diverse denumiri, printre care: programare obiectuala, programare orientata spre obiect, sau, pe scurt, OOP: Object Oriented Programming.

Dintre stilurile de programare contemporane, ea favorizeaza cel mai mult apropierea de lumea reala.

O dorinta mai veche a programatorilor a fost aceea de a utiliza soft deja scris. În acest fel, exista posibilitatea ca programatorii sa devina cu mult mai eficienti atunci cand au de scris o aplicatie,

Metoda de a refolosi munca altora nu este noua. Zeci de ani, singura posibilitate de refolosire a soft-ului a fost data de utilizarea subprogramelor. Au aparut colectii de subprograme grupate pe teme. Chiar in C++ exista o serie de fisiere antet care permit apelarea multor functii specializate. Programarea orientata pe obiect prezinta avantaje cu mult mai mari decat utilizarea subprogramelor. Cunostintele dobandite in acest moment nu ne permit nici macar o enumerare a acestora.

O aplicatie a POO este Programarea Vizuala. Orice apare pe ecranul nostru atunci cand folosim Windows, este realizat cu ajutorul OOP. Fereastra este un obiect, meniul atasat ferestrei este un alt obiect, butoanele sunt obiecte, bara cu instrumente este un obiect s.a.m.d.

Astazi este imposibil sa realizam un program cerut pe piata fara ajutorul OOP. Doar sa ne imaginam ce ar insemna ca programatorul sa scrie secventa prin care se deseneaza o fereastra, de cate ori programul sau o va folosi. Ar fi o munca titanica si inutila.

În aceasta lucrare, prezint in prima parte conceptele generale ale Programarii orientate pe obiecte, precum si o evolutie a limbajelor de programare pana in prezent, particularizand apoi pentru Programarea in C++. Definesc notiunea de obiect care sta la baza acestui tip de programare si continui cu notiunea de clasa, care este un tip abstract. Cele cateva caracteristici alese, cum ar fi clase si functii prietene, constructori si destructori ai unei clase, supraincarcarea operatorilor, insotite de cateva exemple, sunt doar o mica parte din ce inseamna cu adevarat Modul de programare in C++. În capitolul 2 al lucrarii, incep aplicatiile. Si, am ales eu doua probleme ce fac referire la geometria analitica. Fiecare din probleme are clasa ei reprezentativa: Punct2D, pentru un punct dat in plan de 2 coordonate si Vector3D pentru un vector din spatiu. La fiecare, am realizat cateva operatii, astfel incat sa scot in evidenta posibilitatea de a folosi mai multe metode pentru acelasi rezultat, dar intr-o scriere sau un apel mai elegant. Si aici, fac referire in mod special la functiile de supraincarcare a operatorilor.

În ultima parte, realizez o aplicatie de algebra liniara si anume, dintre metodele directe de rezolvare a unui sistem liniar de ecuatii Ax=b, am ales metoda lui Gauss cu pivotare partiala. Pentru acest program, am folosit si o biblioteca personala, Vecmat.h, unde sunt implementate clasele vector si matrix, impreuna cu metodele lor.

111

1.1. Introducere in universul obiectelor

Programul (informatic) este definit in mod traditional ca fiind transpunerea intr-un limbaj de programare a algoritmului de rezolvare a unei probleme. Se spune pe buna dreptate ca, in terminologie informatica, nimic nu este mai usor si totodata mai greu de definit decat notiunea de obiect.

O definitie aproximativa pentru obiect ar fi aceea de entitate cu o existenta concreta sau abstracta, caracterizata printr-un identificator (nume, cod sau ceva similar), o serie de proprietati si care executa sau suporta anumite actiuni.

Ce legatura au obiectele din lumea reala cu programele informatice? Ei bine, orice program incearca sa solutioneze o problema decupata din realitate, deci implicand sub anumite forme obiecte. Orientarea-obiect se poate defini ca fiind modelarea software-ului prin tehnicile de dezvoltare care faciliteaza construirea de sisteme complexe din componente individuale.

Dintr-o perspectiva istorica, geneza si evolutia limbajelor de programare, ca si a tehnicilor de programare s-a legat aproape intotdeauna de evolutia sistemelor de calcul. Se cunosc mai multe generatii de limbaje de programare, pornind de la cele de nivel scazut (codmasina) si ajungand la limbajele de generatia a patra. La inceput (adica timp de vreo doua decenii si jumatate) conceperea de programe era apanajul specialistilor (care trebuiau sa cunoasca amanuntit hardware-ul pe care lucrau). Pe masura insa ce s-au construit calculatoare mai puternice si mai accesibile (din punct de vedere al pretului), limbajele de programare s-au orientat mai mult catre utilizatorul obisnuit si activitatea de programare a putut fi abordata de un cerc mai larg de persoane. De exemplu, prima versiune a limbajului BASIC (Beginner’s Allpurpose Symbolic Instruction Code) a fost scrisa de Kurz si Kemeny, de la Dartmouth College, SUA, in 1965 pentru familiarizarea studentilor cu lucrul la calculator. Aceasta versiune cuprindea doar 12 instructiuni care erau cuvinte din limba engleza (INPUT, PRINT etc.). Problema accesului la calculator era insa una spinoasa, timpul de prelucrare a unui mainframe din acea vreme fiind costisitor (se folosea sistemul time-sharing).

Doua sunt paradigmele sau stilurile de programare care au marcat evolutia programarii calculatoarelor ca fenomen: paradigma procedurala si cea declarativa (figura 1).

Fig. 1 – Evolutia limbajelor de programare (dupa Giumale, C., Limbajele de programare la sfarsit de secol, o bariera de cultura profesionala, in PCReport nr. 8/1997)

La sfarsitul anilor ’60 s-a instaurat asa-zisa “criza a programarii”: multitudinea situatiilor “de pe teren” solicitau programatori tot mai multi si tot mai bine pregatiti, precum si multe sute de ore-om de munca. Criza aceasta persista si in zilele noastre, desi s-au cautat multe solutii pentru depasirea ei.

În domeniul tehnicilor de programare, un loc important il ocupa inca programarea

structurata, printre ai carei promotori ii citam pe E. Djikstra (cunoscut in anii 70 si prin infierarile aduse limbajelor de generatia a treia), O. Dahl, F. Knuth. Programarea structurata se bazeaza pe principiul “divide et impera”, pe separarea activitatii de proiectare a algoritmilor de codarea lor, a introdus structurile de control si a reprezentat un pas insemnat in contracararea “crizei programarii”.

Curente mai noi includ programarea bazata pe evenimente (proprie mediilor cu interfata grafica – Windows, MacOS), programarea vizuala si programarea orientata pe obiecte. În cele mai multe dintre mediile moderne de dezvoltare a aplicatiilor (Visual Basic, Delphi, Visual C++ s.a.), coexista elemente din programarea obiectuala, cea vizuala si cea “evenimentiala”.

Majoritatea conceptelor care se regasesc astazi in programarea orientata obiect au fost inventate in ’60, insa limbajele orientate obiect au ajuns in prim plan in anii ’80, cand au avut loc doua evenimente semnificative: publicarea in revista Byte (august 1981) a unui articol cu larga audienta descriind limbajul Smalltalk si prima conferinta avand in vedere limbajele de programare orientate obiect in Portland, Oregon – 1986.

Toate limbajele de programare dau posibilitatea abstractizarii: limbajul de asamblare este o “usoara” abstractizare a masinii pentru care este proiectat. În programarea “clasica” (folosind limbajele de generatia a treia, mai precis cele imperative), abstractizarea se intalneste pe larg, dar ea implica totusi judecarea problemei in termeni de structura a calculatorului, adica tinand cont de arhitectura von Neumann (vom numi in continuare calculatorul “spatiul solutiilor”, in opozitie cu lumea reala, care este “spatiul problemei”). Rolul programatorului, simbolizat in figura 2, este de a realiza o “mapare” cat mai fidela a spatiului solutiilor pe spatiul problemei, operatie care nu intotdeauna reprezinta un succes total, ea depinzand de flexibilitatea limbajului folosit si de abilitatea programatorului. De aceea, programele–sursa sunt deseori dificil de inteles, greu de intretinut si de modificat ulterior.