Scrigroup - Documente si articole

     

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


Modularizarea programelor

c



+ Font mai mare | - Font mai mic



Modularizarea programelor

De obicei (vezi [Mocanu, 2001] programele C constau din fisiere sursa unice, cu exceptia fisierelor header. Un singur fisier sursa este in general suficient in cazul programelor mici.



Modularizarea interna este un principiu de baza al programarii in C si consta in utilizarea pe scara larga a functiilor definite de utilizator. Scrierea programului principal (main) se concentreaza mai ales pe apelul acestor functii. In cazul in care corpul de definitie al functiilor utilizator se afla dupa corpul de definitie main, este necesar ca sa declaram prototipul functiilor utilizate de main() pentru a informa corect compilatorul despre tipul variabilelor returnate de functii. O alta modalitate este aceea de a defini functiile utilizator inaintea functiei principale main(), caz in care nu mai sunt necesare prototipurile. Programul este modularizat cu ajutorul functiilor prin divizarea sa in nuclee functionale. Acestea pot fi comparate cu niste mici piese de lego cu ajutorul carora se pot construi ulterior structuri (programe) foarte complexe.

Pe scurt, modularizarea interna consta in descompunerea sarcinii globale a unui program in functii de prelucrare distincte.

O functie de uz general este o functie care poate fi folosita intr-o varietate de situatii si, probabil, de catre mai multi utilizatori. Este de preferat ca aceste functii de uz general sa nu primeasca informatii prin intermediul unor variabile globale ci prin intermediul parametrilor. Sporeste astfel foarte mult flexibilitatea in folosirea acestor functii.

Modularizarea externa consta in divizarea unui program foarte complex in mai multe subprograme. Astfel, un fisier sursa mai mare se poate diviza in doua sau mai multe fisiere sursa mai mici. Evident, aceste fisiere sunt strans legate intre ele pentru a forma in final un tot unitar echivalent cu programul complex initial (dinainte de divizare).

In figura de mai sus se prezinta un ecran al Microsoft Visual C++ din MSDN 6.0

Notiunea cea mai cuprinzatoare este aceea de Workspace (spatiu de lucru) care cuprinde in esenta o colectie de proiecte corelate si prelucrabile impreuna. Un workspace cuprinde unul sau mai multe Projects (proiecte) dintre care numai unul este principal si restul sunt subordonate (subprojects). Fiecare proiect este compus la randul sau din mai multe fisiere, de acelasi tip sau de tipuri diferite.

Prezentarea exhaustiva a organizarii acestui mediu de dezvoltare a aplicatiilor C/C++ este un demers in afara prezentei lucrari. Ceea ce merita sa subliniem este faptul ca, in cadrul cel mai intalnit, anume un workspace care include un singur project, acest proiect contine mai ales fisiere sursa si fisiere de tip header. Aceste fisiere se numesc module. Modulul principal este fisierul care contine functia principala main(). Celelalte fisiere sursa, daca exista, se numesc module secundare. De obicei, cu fiecare modul secundar se asociaza un fisier header propriu separat. Acest fisier header trebuie sa contina toate directivele si declaratiile de variabile necesare pentru o corecta compilare separata a modulului cu care se asociaza.

Pentru a exemplifica cele de mai sus, vom modulariza un exemplu anterior, anume al unei baze de date simple.

Workspace-ul va contine un singur project, care va contine urmatoarele 4 fisiere: bd_main.c local.h

bd_bib.c local1.h

bd_main.c (bd - baza de date) este modulul principal, cel care contine functia main(). El are asociat fisierul header local.h.

In mod asemanator, local1.h este fisierul header asociat cu modulul secundar bd_bib.c (bib - biblioteca) care contine toate definitiile functiilor utilizator. Continutul lor este prezentat in continuare.

Modulul bd_main.c este:

# include 'local.h'

void main() }}

Fisierul local.h contine:

# include <stdio.h>

# include <ctype.h>

# include <string.h>

# define SIZE 100

struct addr addr_info[SIZE];

FILE *fp;

extern void init_list();

extern char menu();

extern void enter(),save(),load();

extern void display(),exit();

Modulul bd_bib.c este:

# include 'local1.h'

/* Functia init_list() */

void init_list()

/* Functia menu() */

char menu() while (!strrchr('edlsq',ch));

return tolower(ch); }

/* Functia enter() */

void enter()

printf ('Name: ');

gets (addr_info[i].name);

printf ('Street: ');

gets (addr_info[i].street);

printf ('City: ');

gets (addr_info[i].city);

printf ('State: ');

gets (addr_info[i].state);

printf ('Zip: ');

scanf ('%d',&addr_info[i].zip);}

/* Functia save() */

void save()

for (i = 0; i <= SIZE; i++)

if(*addr_info[i].name)

if(fwrite(&addr_info[i],sizeof(struct addr),1,fp) !=1)

printf (' File write error n ');

fclose (fp);}

/* Functia load() */

void load()

for (i = 0; i < SIZE; i++)

if(fread(&addr_info[i],sizeof(struct addr),1,fp)==1);

else if (feof(fp))

else printf ('File read errorn'); }

/* Functia display() */

void display()    }}

Fisierul local1.h contine:

# include <stdio.h>

# include <ctype.h>

# include <string.h>

# define SIZE 100

extern struct addr addr_info[SIZE];

extern FILE *fp;

Se poate verifica cum fiecare modul in parte este compilabil fara erori, iar la link-editare nu se semnaleaza, de asemenea, erori.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1781
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