|
Metode de programare: introducere
In dezvoltarea software exista doua abordari ale scrierii programelor:
marea programare sau programarea in mare (programming in the large) si
mica programare sau programarea in mic (programming in the small), termenii aparand prima data intr-o carte scrisa de Frank De Remer si Hans Kron, in anul 1970.
Exista o diferenta intre modul in care este creat un program si modul in care este creat un sistem de produse program.
Programul este scris de un singur programator, in timp ce sistemul de produse program este creat de o echipa consistenta de specialisti, deoarece se ocupa de proiecte mari din industrie, a caror durata poate fi estimata la luni sau ani de zile.
De la grupurile implicate in derularea proiectului rezulta module de program cu interfete pregatite sa permita interconectarea lor pentru a asigura functionalitatea sistemului intreg.
Deci, "programarea in mare" inseamna programe mai mici scrise de programatori diferiti, ceea ce impune necesitatea de a avea limbaje de programare specializate pentru tipul de "programare in mic", si nu limbajul comun de programare care exista acum.
De asemenea, trebuie sa existe un limbaj pentru interconectarea modulelor asigurand astfel functionarea sistemului.
Un limbaj proiectat pentru programare in mare este limbajul BPEL.
Programarea modulelor trebuie sa realizeze o buna coeziune interioara legaturi de cuplaj foarte slabe care sa-i asigure un grad marit de independenta.
Pana cand un modul este terminat el ramane o abstractiune, dupa ce sunt terminate si interfata este apta sa realizeze conexiunile dintre ele rezulta arhitectura finala a sistemului.
Programarea in mic semnifica lucrul unui singur programator sau a unui grup restrans de specialisti, pentru o perioada de timp redusa: zile sau saptamani.
Se poate aborda si problema crearii unui prototip soft care sa poata fi reutilizat dupa unele modificari, deoarece dezvoltarea rapida a softului este mai importanta decat stabilitatea produsului soft.
Mediu de programare
Oricine studiaza programarea trebuie sa-si aleaga un mediu de programare (programming environment) care face posibila programarea, dar si testarea programului.
Acest mediu de programare poate fi divizat in doua tipuri foarte diferite:
- mediul de programare integrat (integrated development environment- IDE) si
- mediul de programare pe linia de comanda (command-line environment).
Mediul de programare integrat este un program - interfata grafica care integreaza toate aspectele programarii, plus unele facilitati (depanarea - debugger, constructor de interfata vizuala, manager de proiect).
Astfel, programatorul isi scrie programul instructiune cu instructiune si este corectat de fiecare cand are o eroare care afecteaza una sau mai multe instructiuni (el nu este singur, ci are in "jurul" sau acest mediu care participa la munca lui).
Mediul de programare pe linia de comanda este constituit dintr-o colectie de de comenzi care efectueaza partial ceea ce face primul tip de mediu de programare.
In general este recomandat pentru incepatori sa foloseasca un mediu de programare pe linia de comanda, celalalt mediu fiind indicat pentru programatorii avansati, deoarece poate sa ajute la conducerea unui proiect de mari dimensiuni.
De exemplu, pentru Java, toate mediile de programare necesita un compilator, programe de editare de legaturi si o cale de a executa aplicatii tipice acestui limbaj.
1. Programarea declarativa - Declarative programming
Programarea declarativa este o metoda de programare care exprima logica prelucrarii datelor fara a tine cont de fluxul de comenzi - instructiuni.
Limbajele care aplica principiul acesta descriu ceea ce programul trebuie sa indeplineasca si nu modul (cum) in care indeplineste un anumit lucru.
Aceasta metoda este in contradictie cu metoda imperativa de programare care impune descrierea si respectarea pas cu pas a unui algoritm, constituit in prealabil.
Programarea declarativa considera programele ca teorii ale logicii formale, iar prelucrarea ca deductii realizate in spatiul logic.
Aceasta metoda a devenit cautata in vremurile actuale, ca o simplificare a programarii paralele (executarea in paralel a mai multor programe simultan prin mai multe CPU ale unui singur computer sau mai multe calculatoare cuplate, lucrand in paralel).
Uneori programarea declarativa este considerata a fi orice programare care nu este imperativa, programele obtinute prin aceasta metoda descriind ce prelucrare a datelor trebuie realizata si nu cum se prelucreaza datele.
In categoria limbajelor care apartin acestei metode sunt:
- programarea functionala,
- programarea logica,
- programarea folosind limbaje specifice unui domeniu (Domain-specific
languages).
Programarea functionala - Functional programming
Este metoda de programare care trateaza prelucrarea datelor ca o evaluare a unor functii matematice si evita starile si fluctuatiile datelor.
Este scoasa in evidenta aplicarea functiilor matematice, in contrast cu programarea imperativa care se bazeaza pe schimbarea starilor.
Functia depinde doar de valoarea argumentului [valoarea functiei F(x) va depinde numai de valoarea pe care o are argumentul x] si pe aceasta constatare se bazeaza dezvoltarea programarii functionale; aceasta nu a cunoscut forme comerciale, fiind folosita mai mult in mediile academice.
Un limbaj care favoriza programarea functionala este LISP, desi acest limbaj se preteaza mai multor metode de programare.
IPL- Information Processing Language este citat ca fiind primul limbaj pe care se bazeaza programarea functionala.
Au aparut mai multe limbaje propice acestei metode de programare, dar sunt si limbaje "universale" care pot fi folosite conform acestei metode de programare.
Programarea folosind limbaje specifice unui domeniu (Domain-Specific Language)
In dezvoltarea software un limbaj specific unui domeniu este un limbaj de programare dedicat unui domeniu particular, si care nu poate fi folosit eficient in afara acestui domeniu, acesta fiind principala lui caracteristica.
Conceptul nu este nou, au existat aproape in permanenta limbaje cu scop special (special-purpose programming languages), dar expresia a devenit populara datorita aparitiei notiunii de "modelare in domeniu specific" - domain-specific modeling, folosit in programarea orientata obiect (OOP - object oriented programming), precum si in Ingineria programarii/Software engineering.
Exemple de astfel de limbaje sunt; Logo pentru copii, Verilog si VHSIC - limbaje pentru descriere hardware, limbajele R, S, Q pentru statistica, SQL pentru cozi in baze de date relationale,.
Limbajele opuse (ca scop) sunt:
-limbajele cu scop general al programarii - general-purpose programming language,
ca C or Java,
-limbaj de modelare cu scop general - general-purpose modeling language, cum ar fi
UML- Unified Modeling Language.
Crearea un limbaj pentru un domeniu specific, cu software care sa-l ajute (compilatoare, editoare de legaturi, biblioteci cu programe utilitare, .) poate fi binevenita daca limbajul permite sa fie exprimate anumite probleme si solutiile acestor probleme mult mai clar decat intr-un oricare alt limbaj cu scop general.
2. Programarea bazata pe fluxul de date - Dataflow programming
Aceasta metoda implementeaza principiile si arhitectura tipice fluxului de date si modeleaza un program ca pe un graf al fluxurilor de date intre mai multe operatii.
Limbajul de programare a fluxului de date are caracteriticile unui limbaj functional si a fost conceput sa aduca ceva functional intr-un limbaj potrivit mai mult pentru procesarea numerelor.
Limbajul este directionat catre "modul cum se conecteaza lucrurile", diferit de limbajul imperativ care se ocupa de "modul in care se petrec lucrurile".
Programarea calculatoarelor, in general, trebuie sa tina cont de notiunea de "stare", definita de valoarea la un moment dat a unor parametri variabili ai sistemului cercetat.
Multe limbaje de programare necesita o mare cantitate de date (informatii) pentru a opera cu eficienta, informatii care sunt invizibile pentru programator.
Limbajele bazate pe fluxuri de date sunt proiectate considerand fluxul de date componenta cea mai importanta a programului.
Limbajele mai vechi sunt concepute in ideea prelucrarii datelor prezentate la intrare si depozitarea rezultatelor pentru a fi oricand extrase, prioritatea avand-o comenzile care stabilesc cum se executa prelucrarile datelor.
Programele conforme cu metoda fluxului de date incep cu introducerea datelor, se stabilesc parametrii liniilor de comanda si ilustreaza cum datele sunt folosite si modificate.
Operatiile asupra datelor constau in prelucrari ale unor "cutii negre" care au intrari si iesiri definite explicit, in fiecare caz si care devin operationale numai cand toate intrtarile sunt valide (si nu cand programul le intalnea, ca in prelucrarile tipice vechilor programe).
Cand o operatie s-a executat, programul cerceteaza lista de operatii pana gaseste prima operatie care are toate intrarile valide si o selecteaza pentru a fi activa.
Limbajele bazate pe fluxul datelor au fost initial dezvoltate pentru a usura programarea paralela, dar a capatat multa atentie din partea marilor laboratoare, astfel incat au aparut diferite limbaje cu diferite performante.
Cel mai popular limbaj bazat pe flux de date este si cel mai practic, faimosul National Instruments LabView, conceput pentru a usura interconectarea echipamentelor din laborator, dar a devenit capabil de alte performante largindu-si domeniul de aplicabilitate.
3. Programarea imperativa - Imperative programming
Programarea imperativa este o metoda de programare in care o anumita expresie comanda executia unei actiuni - operatii, programul imperativ continand secvente de astfel de comenzi.
Programarea imperativa este metoda opusa programarii declarative care stabileste "ce trebuie sa faca" programul si nu "cum trebuie sa faca".
Primele limbaje de programare au fost limbaje imperative, in care instructiunile erau foarte simple, executate de un harwdare proiectat pentru acest lucru.
Structura imperativa s-a pastrat pana la aparitia programarii orientate obiect, care era imperativa ca stil, dar avea posibilitatea de a lucra cu obiecte-soft.
Aparitia limbajului C++ in anul 1985, a marcat clar deosebirea intre conceptele programarii, programarea orientata obiect devenind cea mai folosita metoda de programare dupa anii `90.
4. Programarea procedurala - Procedural programming
Este considerata uneori sinonima cu programarea imperativa (specificand pasii programului care trebuie realizati pentru a se ajunge la rezultatul dorit), dar este legata si de metoda de programare structurata care este bazata pe conceptul "apel procedura" - procedure call (procedura fiind tot o secventa de instructiuni care trebuie executate pas cu pas).
Orice procedura poate fi apelata oricand in oricare punct al programului principal, sau chiar de o alta procedura.
Scopul programarii procedurale este de a desparti o lucrare (un job) in mai multe variabile, structuri de date si subrutine, pe cand programarea orientata obiect tinteste sa separe un job in mai multe obiecte, fiecare obiect avand proriile date si propriile metode- subrutine.
Distinctia dintre cele doua metode de programare consta in faptul ca programarea procedurala foloseste proceduri pentru a opera asupra structurilor de date, pe cand programarea orientata obiect leaga impreuna procedurile si structurile de date in cadrul obiectului, acesta operand datele continute chiar in structura sa.
Redam o comparatie intre termenii folositi de programarea orientata obiect si programarea procedurala:
Programare: orientare obiect procedurala
_____________ ___________
metoda functie
obiect modul
mesaj apel procedura
atribut variabila