La elaborarea unui program se pornește de la specificația acestuia, în care se precizează CE trebuie sa facă programul respectiv (CE problemă trebuie rezolvată, CE rezultate trebuie obținute) și se ajunge în final la programul propriu-zis, care arată CUM trebuie acționat pentru a se obține aceste rezultate. De cele mai multe ori, programul elaborat conține un număr mare de instrucțiuni, cu numeroase ramificații și cicluri. Scrierea unui astfel de program poate fi o sarcină extrem de dificilă și greu de îndeplinit, dacă nu se procedează sistematic. În plus, dacă programul nu este suficient de clar și de bine documentat, va fi extrem de greu sau chiar imposibil să fie depanat (să se corecteze eventualele erori de programare) și să fie modificat ulterior, dacă se modifică specificația.
Tehnica rafinărilor succesive oferă o cale de a parcurge acest drum de la CE la CUM în mai mulți pași, astfel încât să se pornească de la un număr mic de enunțuri (pseudoinstrucțiuni) de nivel de abstractizare ridicat, după care - la fiecare pas de rafinare - fiecare din aceste instrucțiuni se descompune în mai multe instrucțiuni de nivel de abstractizare mai coborât (mai "concrete"), până când se ajunge la instrucțiuni scrise direct în limbajul de programare folosit (de exemplu în Java). Se pune deci un accent deosebit pe abstractizarea datelor si a instrucțiunilor. Dupa cum arăta E.W.Dijkstra, abstractizarea este calea prin care omul stapânește complexitatea.
Dacă privim schemele logice ale structurilor
de control fundamentale, permise de metoda programării structurate,
constatăm cu ușurință că atât blocurile care conțin instrucțiuni,
cât și structurile de control admise de metoda programarii structurate
au fiecare un singur punct de intrare și un singur punct de ieșire.
Aceasta înseamnă că orice bloc care conține o instrucțiune poate fi
înlocuit în schema respectivă printr-o structură de control. Ca urmare,
se poate aplica următoarea cale de elaborare a programului, specifică
tehnicii rafinărilor succesive:
- inițial se consideră că programul este alcatuit dintr-o singură
pseudoinstrucțiune, de înalt nivel de abstractizare, care constă chiar
din specificația problemei pe care o va "rezolva" programul
respectiv;
- la pasul de rafinare următor, această "problemă" se descompune în
două sau mai multe "subprobleme"; aceasta înseamnă că unica
pseudoinstrucțiune existentă inițial se înlocuiește prin una din structurile admise de metoda programării
structurate (structura secvențială, alternativă sau repetitivă);
această structură conține în ea una sau mai multe instrucțiuni sau
pseudoinstrucțiuni;
- la pașii de rafinare următori, fiecare pseudoinstrucțiune, care
nu are corespondenta directă în limbajul de programare utilizat, se
inlocuiește, de asemenea, prin una din structurile de control admise;
textul pseudoinstrucțiunii înlocuite poate fi, totusi, menținut sub
formă de comentariu, astfel încât să se înțeleagă mai ușor programul;
- se continuă acest proces de rafinări succesive, până când toate
instrucțiunile astfel obținute au corespondent în limbajul de
programare utilizat.