Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Scurt istoric al metodelor de programare

c



+ Font mai mare | - Font mai mic



Scurt istoric al metodelor de programare

Vom prezenta in continuare cateva metode de programare dar nu exhaustiv, nefiind aici cadrul adecvat (eventual intr-un curs de Software Engineering). O clasificare cronologica a ceea ce vrem sa prezentam ar fi urmatoarea:



a)      programarea artizanala;

b)      programarea procedurala;

c)      programarea modulara;

d)      programarea structurata;

e)      programarea prin abstractizarea datelor;

f)        programarea orientata spre obiecte.

1. Programare artizanala

Aceasta metoda de fapt nu este o metoda propriu-zisa ci este prima modalitate de programare odata cu aparitia calculatoarelor. Intuitia si experienta programatorului joaca un rol important. Fiecare programator isi are propriile reguli de programare. Programele sunt monolitice (un singur corp de instructiuni), lungi si greu de inteles de alt programator. Insusi cel ce a elaborat un astfel de program intampina dificultati de intelegere a propriului program dupa un timp oarecare.

2. Programare procedurala

Odata cu aparitia primelor limbaje de inalt nivel se utilizeaza programarea procedurala. Necesitatea ca anumite secvente de program sa fie folosite de mai multe ori duce la organizarea acestora in unitati distincte de program numite in diverse limbaje subprograme, subrutine, proceduri, etc. De multe ori procedurile trebuie sa fie generale deci procesarea sa faca abstractizare de valorile datelor. De exemplu o procedura de calcul al radicalului de ordinul 2 trebuie sa calculeze acest lucru din orice numar real pozitiv iar pentru cele negative sa semnaleze eroare. Procedurile trebuie deci parametrizate cu anumite variabile numite parametri formali. Valorile de la apel ale parametrilor formali se numesc parametri efectivi. Programarea procedurala are la baza deci utilizarea procedurilor, iar acestea realizeaza o abstractizare prin parametri. La apelare o procedura functioneaza dupa principiul cutiei negre (black box): se cunosc intrarile si iesirile rezultate din acestea dar nu si modul de transformare care nu e important in acest moment.

In majoritatea limbajelor procedurale de programare se considera 2 categorii de proceduri:

proceduri care definesc o valoare de revenire (denumite si functii);

proceduri care nu definesc o valoare de revenire.

In limbajele C si C++ procedurile de ambele categorii se numesc functii.

3. Programare modulara

Pe masura ce complexitatea aplicatiilor a crescut, a aparut ideea de a descompune problemele in subprobleme mai simple care la randul lor pot fi descompuse in altele mai simple si asa mai departe. In felul acesta se ajunge la o descompunere arborescenta a problemei date in subprobleme mai simple. Programarea subproblemelor devine o problema mai simpla si fiecare subproblema are o anumita independenta fata de celelalte subprobleme. De asemenea, interfata ei cu celelalte subprobleme este limitata si bine precizata prin procesul de descompunere a problemei initiale. De obicei, programarea unei subprobleme, componenta a descompunerii arborescente a problemei initiale, conduce la realizarea unui numar relativ mic de proceduri (functii). Aceste functii pot prelucra in comun anumite date. Unele dintre ele sunt independente de functiile realizate pentru alte subprobleme componente ale descompunerii arborescente. Altele realizeaza chiar interfata cu subproblemele invecinate.

Despre functiile obtinute in urma programarii unei subprobleme se obisnuieste sa se spuna ca sunt inrudite. De obicei, aceste functii, impreuna cu datele pe care le prelucreaza, se pastreaza intr-un fisier si se compileaza independent.

O colectie de functii inrudite, impreuna cu datele pe care le prelucreaza in comun formeaza un modul. In felul acesta, problema initiala se realizeaza printr-un program alcatuit din module.

Programarea modulara are la baza elaborarea programelor pe module.

O parte din datele utilizate in comun de functiile modulului, sau chiar toate datele modulului, nu sunt necesare si in alte module. Aceste date pot fi protejate sau cum se mai spune, ascunse in modul.

Limbajul C si C++, permite ascunderea datelor in modul folosind date care au clasa de memorie static. Mai mult, pot fi declarate si functiile ca statice si atunci ele vor fi ascunse in modul (nu pot fi apelate din afara modului). Ascunderea functiilor in modul se face pentru acele functii care nu se utilizeaza la realizarea interfetei modulului cu celelalte module. Ascunderea datelor si functiilor in module permite protejarea datelor si preintampina utilizarea eronata a functiilor.

4. Programare structurata

Descompunerea unei probleme in subprobleme mai simple se poate face succesiv in mai multe etape, pana cand subproblemele sunt direct programabile sub forma unor proceduri sau module. Aceasta descompunere succesiva se mai numeste rafinare pas cu pas (stepwise refinement).. Evident ca se obtine o descompunere arborescenta. Procedurile se pot organiza sau nu in module. In cadrul procedurilor se folosesc anumite structuri de control a executiei. Aceasta impune o anumita disciplina a programarii. Structurile de control de sunt:

a)      secventa

b)      iteratia (pretestata, posttestata, cu numar prestabilit de ciclari)

c)      alternativa (simpla, completa, generalizata).

Instructiunea de baza (primitiva) in cadrul acestor structuri de control este instructiunea de atribuire.

Aceasta abordare a programarii s-a nascut din necesitatea eliminarii instructiunii de control GO TO care face saltul neconditionat la o instructiune precizata, alta decat instructiunea urmatoare ei. Profesorul Dijsktra de la Universitatea din Eindhoven spunea, prin anul 1965, "calitatea unui programator este invers proportionala cu numarul de instructiuni GO TO folosite" si a impus D-structurile de control:

a)      secventa;

b)      iteratia pretestata;

c)      alternativa simpla.

D-structurile se regasesc in toate limbajele procedurale. Corespondenta ar fi:

a)      secventa este echivalenta cu executia instructiunilor in ordinea scrierii lor in programul sursa;

b) iteratia pretestata echivalenta cu WHILE DO;

c) alternativa simpla echivalenta cu IF THEN.

O ilustrare grafica a celor trei D-structuri se da in continuare.


da

S1 C


nu da

S2 S C


S nu

.


Sn


S-a demonstrat ulterior (Bohm si Jacopini) ca orice algoritm se poate descrie doar cu D-structurile dar pentru o mai buna lizibilitate si intelegere a programelor sursa s-au adaugat si iteratia postestata (REPEAT UNTIL), iteratia cu numar prestabilit de ciclari (FOR DO), alternativa completa (IF THEN ELSE) si alternativa generalizata (CASE OF).

In unele limbaje se folosesc si alte structuri pe langa cele de mai sus pentru o cat mai fidela reflectare a algoritmului.

5. Programare prin abstractizarea datelor

In toate aceste tehnologii anterioare se urmareste mai mult organizarea programului si mai putin rezolvarea cat mai naturala a problemei. Programarea prin abstractizarea datelor si programarea orientata spre obiecte propun metodologii in care conceptele deduse din analiza problemei sa poata fi reflectate cat mai fidel in program si sa se poata manevra cu instantieri ale acestor concepte cat mai natural. Se realizeaza o mai mare fidelitate a programului fata de problema. De exemplu daca intr-o problema in care se proceseaza numere complexe e nevoie sa se lucreze intr-o forma cat mai apropiata cu forma matematica se poate introduce tipul COMPLEX (tip care nu exista in limbajele de programare) si apoi se pot declara variabile de acest tip. Mai mult ar trebui sa se poata face toate operatiile matematice asupra datelor de tip COMPLEX. In general un TAD (Tip Abstract de Date) are doua componente fundamentale:

- datele membru (reflecta reprezentarea tipului);

- functiile membru (reflecta comportamentul tipului).

6. Programarea orientata spre obiecte

Un neajuns al programarii prin abstractizarea datelor este faptul ca nu permite exprimarea legaturilor dintre diferite concepte (TAD-uri). Singura legatura dintre concepte care se poate exprima, este aceea ca datele membru ale unei clase pot fi obiecte ale unei alte clase. Acest lucru nu este suficient in cazul in care conceptele sunt strans dependente intre ele formand structuri ierarhice. Exprimarea ierarhiilor conduce la atribute suplimentare cum sunt cele de mostenire. Aceste atribute conduc la un nou model de programare pe care il numim programare orientata obiect.

In varful unei ierarhii se afla fenomenul sau forma de existenta care are trasaturi comune pentru toate celelalte componente ale ierarhiei respective. Pe nivelul urmator al ierarhiei se afla componentele care pe langa trasaturile comune de pe nivelul superior, mai au si trasaturi suplimentare, specifice. O ierarhie, de obicei, are mai multe nivele, iar situarea unui element pe un nivel sau altul al ierarhiei este uneori o problema deosebit de complexa. Dam in exemplul urmator o ierarhie arborescenta pentru conceptele de paralelogram, dreptunghi, romb si patrat.

Paralelogram


Dreptunghi Romb


Patrat


Daca paralelogramul se afla in varful ierarhiei atunci pe nivelul imediat inferior se aseaza dreptunghiul (paralelogramul cu un unghi drept) dar si rombul (paralelgramul cu 2 laturi alaturate congruente). Apoi patratul se poate defini fie ca un dreptunghi cu laturile congruente fie ca un romb cu un unghi drept. Conceptul de pe fiecare nivel se observa ca mosteneste proprietatile conceptului imediat superior din care este derivat.

La ora actuala, toate ramurile cunoasterii stiintfice sunt pline de ierarhii rezultate in urma clasificarii cunostintelor acumulate in perioada lunga de observare a fenomenelor si formelor de existenta a lumii materiale si spirituale. Clasificarile ierarhice ale cunostintelor pot fi intalnite atat in domeniile care pleaca de la cele mai concrete forme ale lumii materiale, cum sunt botanica, zoologia, biologia, etc cat si in domenii care studiaza concepte dintre cele mai abstracte, cum ar fi matematica sau filozofia.

Aceste ierarhii sunt rezultatul definirii conceptelor dupa regula includerii "genul proxim si diferenta specifica".

Limbajul C dispune de un set bogat de instructiuni care permit scrierea de:

programe structurate

programe flexibile

programe compacte

Totodata limbajul C permite aplicarea metodelor de programare procedurala, programare modulara si programare structurata. Pe langa aceste metodologii limbajul C++ permite si programarea prin abstractizarea datelor si programarea orientata spre obiecte.

Vom descrie in continuare instructiunile limbajului C. Ca o caracteristica sintactica toate instructiunile limbajului se termina prin caracterul ";", exceptie facand instructiunile care se termina cu acolada inchisa.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 891
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved