|
REZOLVAREA PROBLEMELOR ECONOMICE CU AJUTORUL PROGRAMELOR PE CALCULATOR. PROGRAMARE.
1. Notiuni de baza specifice procesului de prelucrare automata a datelor
Orice sistem de calcul (adica acel sistem tehnic care asigura executia procesului de prelucrare automata a datelor) are in compunere, in esenta, partea de hardware si partea de software. Bill Gates, patronul Microsoft, spunea in anul 2002 ca din totalul costurilor unui sistem de calcul, partea de hardware reprezinta 5%, in timp ce partea de software reprezinta 95% din totalul acelorasi costuri. Problema costurilor unui sistem de calcul devine din ce in ce mai importanta in conditiile cerute de societatea informationala - societatea cunoasterii si in conformitate cu prevederile legale referitoare la respectarea legii drepturilor de autor in domeniul software.
Partea de software a unui sistem de calcul cuprinde, la randul ei, software-ul de baza (sistemul de operare sau sistemul de programe de baza) si software-ul de aplicatie (sau sistemul de programe aplicative). Un sistem informatic are functia de prelucrare automata a datelor pentru obtinerea informatiilor necesare procesului de conducere sau de informare. Procesul de prelucrare automata a datelor presupune existenta simultana a urmatoarelor elemente: sistemul de echipamente (hardware), sistemul de programe de baza, sistemul de programe aplicative, datele de intrare ce sunt supuse proceselor de prelucrare automata si datele de iesire sau rezultatele prelucrarilor. In esenta, acest proces de prelucrare automata a datelor este format din trei etape: introducerea (citirea) datelor de intrare, prelucrarea datelor (efectuarea calculelor) si extragerea (scrierea) rezultatelor.
Este de retinut ca datele de intrare sunt introduse printr-o operatie de citire - read, iar datele ce reprezinta rezultate sunt obtinute printr-o operatie de scriere - write sau de tiparire - print a rezultatelor.
Datele ce sunt prelucrate pe un sistem de calcul sunt organizate intr-o forma avantajoasa pentru aplicatia informatica si sunt reprezentate intr-o structura accesibila calculatorului. Datele sunt organizate in colectii de date in functie de conditiile specifice impuse de sistemul informational existent si de dorintele utilizatorilor finali din procesul de decizie.
Procesul de prelucrare automata a datelor are loc intr-o succesiune controlata de operator, adica, in acceptiunea clasica, de acel utilizator final specializat in operarea pe sistemul de calcul. Etapele procesului de prelucrare a datelor pe calculator sunt materializate in urmatoarele operatii:
. Pregatirea datelor initiale, de regula manual, in vederea introducerii lor in procesul de prelucrare automata (citire), ce presupune verificarea, sortarea si codificarea acestor date in functie de documentele primare existente; verificarea datelor presupune confirmarea concordantei intre valorile prezente in documentele primare si valorile care trebuie sa existe in conformitate cu aplicatia informatica concreta sau problema economica cu urmeaza a fi rezolvata; sortarea datelor semnifica acel tip de prelucrare prin care datele sunt dispuse intr-o anumita ordine, in conformitate cu un anumit sistem sau cu anumite precizari ale utilizatorului; codificarea datelor inseamna operatia de atribuire de semne numerice, alfabetice sau alfanumerice unor date cu scopul de a optimiza numarul de semne cu care se scriu si se prelucreaza, de exemplu, elementele specifice sistemului informational financiar-contabil; notiunea de document primar (de evidenta primara) este cea definita in contabilitate, ca prima etapa a functiei contabile, adica acel document in care se consemneaza pentru prima data o operatie economico-financiara (facturi, chitante, cecuri etc.). Fiecare eveniment ce prezinta un efect economic se inscrie intr-un document primar in momentul si in locatia in care s-a produs.
. Introducerea datelor initiale in calculator, adica in memoria interna sau memoria externa a sistemului de calcul; introducerea datelor initiale poate fi facuta direct de la tastatura (in regim conversational) sau de pe un suport tehnic accesibil calculatorului.
. Prelucrarea propriu-zisa a datelor, ceea ce inseamna executia automata de catre calculator a tuturor operatiilor prestabilite prin program (validari de date, sortari,interclasari, comparari si testari); validarea de date este tipul de prelucrare ce consta in verificarea datelor de intrare daca sunt corecte in raport cu un set de reguli prestabilite (daca sunt reale, coerente, corelate, corect testate, corect transferate dintr-un mediu intr-altul); interclasarea datelor reprezinta tipul de prelucrare prin care se obtine un sir (vector) de date ce contine toate elementele unor vectori initiali ordonati; compararea datelor este tipul de prelucrare prin care se verifica existenta unor relatii de ordine intre doua date; relatia de ordine a fost definita la cursul de matematica si este o relatie binara pe o multime de date ce stabileste ordinea de parcurgere a elementelor multimii; testarea datelor este tipul de prelucrare prin care se verifica un ansamblu de date ce sunt pregatite pentru buna functionare a unui program.
. Prezentarea rezultatelor prelucrarii, adica afisarea pe ecranul monitorului sau imprimarea pe hartie; cand rezultatele sunt folosite in prelucrari ulterioare, ele sunt stocate pe suporti magnetici.
Etapele si operatiile prezentate mai sus se incadreaza in "triada de aur" specifica oricarui sistem de calcul: stocare - prelucrare - prezentare date.
2. Notiuni de baza referitoare la programare
Rezolvarea unei probleme reprezinta procesul de concepere si de implementare a unei strategii de gasire a unei solutii sau de conversie la normalitate a unor stari generate de conditii nedorite sau neasteptate. In activitatea de concepere a programelor destinate calculatoarelor electronice, problema de rezolvat este definita, detaliata si transformata intr-un proiect pe baza caruia se poate realiza un program ce poate fi rulat pe un sistem de calcul.
Inainte de a se scrie efectiv programul, se efectueaza analiza problemei de rezolvat si se realizeaza algoritmul de calcul.
Programul pe calculator este un set de instructiuni (comenzi) ce se executa de sistemul de calcul cu scopul de a efectua o succesiune de actiuni sau un tip prestabilit de activitate. Instructiunea sau comanda semnifica un enunt ce specifica o actiune intr-un limbaj de programare. Programul pe calculator (sau, mai simplu, programul) are in compunere, de regula, doua tipuri de enunturi: declaratii si instructiuni. Declaratia este asocierea dintre un identificator si anumite informatii. Aceasta asociere este formala la realizarea programului si devine efectiva in timpul compilarii sau in timpul executiei programului. Declaratia priveste modul de organizare a datelor de intrare, pe timpul prelucrarii, precum si a datelor de iesire (rezultatelor). Identificatorul reprezinta orice sir de caractere alfanumerice ce se foloseste in calitate de: nume de variabila sau constanta intr-un program; eticheta de regasire a unui punct din program; nume de procedura sau de functie; nume atasat unei unitati logice de memorie externa (hard disc, discheta, compact disc, memorie flash etc.).
Dintr-o alta perspectiva, orice program pe calculator reprezinta un ansamblu format din date (structuri de date) si algoritmi prezentate intr-un limbaj de programare.
Notiunea de algoritm nu are o definitie riguroasa. Algoritmul este o metoda, un procedeu, o reteta, o solutionare a unei probleme, fara insa a realiza echivalenta cu acesti termeni.
Dictionarele de informatica definesc algoritmul ca fiind:
o descriere a schemei de realizare a unui eveniment cu ajutorul unei multimi finite de actiuni elementare predenumite, realizabile a priori si avand o durata limitata in timp;
un concept folosit pentru a desemna o multime finita de operatii cunoscute care, executate intr-o ordine bine stabilita, pornind de la o multime de valori (date) de intrare conduc la obtinerea in timp finit a unei alte multimi de valori, valori (date) de iesire;
o secventa finita de pasi prin care se rezolva o problema logica sau matematica.
In realizarea unui algoritm este necesara satisfacerea urmatoarelor patru conditii (proprietati):
claritatea, ceea ce inseamna ca algoritmul sa fie bine definit (cu specificatii riguroase si fara ambiguitati);
exactitatea (determinismul), adica in fiecare moment al executiei algoritmului, se cunoaste cu exactitate urmatoarea operatie, precum si modul de executie a fiecarei operatii; descrierea cu exactitate asigura executia algoritmului pe un sistem de calcul;
universalitatea, ceea ce semnifica faptul ca orice algoritm, fiind cat mai universal cu putinta, asigura rezolvarea unei clase largi de probleme;
finitudinea, ce consta in faptul ca algoritmul este finit in spatiu (ca descriere) si asigura obtinerea rezultatului intr-un timp determinat de executie, adica dupa un anumit numar finit de pasi.
Dupa gandirea algoritmului, acesta se poate reprezenta sub mai multe forme; dintre aceste forme, cele mai uzuale sunt reprezentarea in limbaj pseudocod si schema logica.
Limbajul pseudocod asigura descrierea algoritmilor prin intermediul a doua enunturi: standard si nestandard; enunturile nestandard sunt fraze in limbajul natural ce se folosesc, de regula, in programare pentru reprezentarea formei initiale a algoritmilor; enunturile standard exprima operatii ce dispun de corespondente directe in instructiunile limbajului de programare.
Schema logica asigura reprezentarea sub forma grafica a algoritmilor. Schema logica de program se deosebeste de schema logica de sistem. Schema logica de sistem descrie operatiile de prelucrare a datelor pe sistemul de calcul, cu focalizare pe sursele de date, documentele primare ce le contin, activitatile ce se executa asupra lor, modul de stocare si de prezentare a rezultatelor prelucrarii. Schema logica de sistem este utilizata pentru a oferi o imagine de ansamblu a fluxurilor de date din sistemul de calcul, in timp ce schemele logice de program sunt folosite pentru detalierea anumitor procese reprezentate in schema logica de sistem. Schemele logice de program sunt independente de limbajul de programare utilizat. Schemele logice utilizeaza simboluri grafice.
Pentru realizarea unui program sunt necesare trei tipuri de structuri de control, caracterizate prin aceea ca au o singura intrare si o singura iesire. Aceasta posibilitate se bazeaza pe teorema lui Bӧhm si Jacopini[1] care arata ca orice algoritm poate fi reprezentat ca o combinatie a celor trei structuri de control fundamentale: secventiala, alternative si repetitive. Structura de control secventiala (liniara) cuprinde o succesiune de blocuri care se executa unul dupa altul. Structurile de control alternative (cu ramificatii) corespund unui bloc de prelucrare care se executa in functie de satisfacerea unei conditii. Aceste structuri de control prezinta urmatoarele forme: structura de control alternativa cu doua ramificatii (If.Then.Else); structura de control alternativa cu mai multe ramificatii (imbricata); structura de control alternativa generalizata (Case-Of). Structurile de control repetitive (de ciclare) asigura repetarea prelucrarii unor secvente de program. Formele structurilor de control repetitive sunt: structura repetitiva fara contor conditionata anterior (While Do); structura repetitiva fara contor conditionata posterior (Repeat.Until); structura repetitiva cu contor conditionata anterior (Do.For); structura repetitiva cu contor conditionata posterior (Do.For).
Din punct de vedere structural, un program poate avea in compunere mai multe subprograme sau module. Pot constitui subprograme, componentele programului de tipul procedurilor si/sau al functiilor. Mai multe programe alcatuiesc impreuna o aplicatie informatica. Clasic, aplicatia informatica are o structura statica arborescenta, adica este formata dintr-un program principal care apeleaza subprograme. Subprogramele sunt independente in conformitate cu principiile programarii structurate (programe constituite din subprograme sau module si folosirea structurilor de control fundamentale).
Aplicatia informatica este dedicata unui anumit domeniu de activitate economica (de exemplu, aplicatie informatica de contabilitate, aplicatie informatica pentru managementul resurselor umane, aplicatie informatica pentru gestiunea creditelor bancare etc.). Notiunea de aplicatie informatica nu este similara cu aceea de sistem informatic.
Limbajul de programare este un limbaj artificial ce se foloseste pentru definirea unui sir de instructiuni care pot fi prelucrate si executate pe un calculator.
Procedura (procedure) este o parte componenta, cu nume, a unui program, careia ii sunt asociate constante, tipuri de date si variabile si care executa, de regula, un task unic. Task-ul este un subprogram sau aplicatie autonoma rulata ca o entitate independenta. Functia (function) este un subprogram sau rutina care returneaza o singura valoare prin insasi numele functiei. Spre deosebire de functie, procedura poate returna mai multe valori atunci cand este rulata. Variabila este, in programare, o locatie de memorie in care se stocheaza date de un anumit tip si care pot fi modificate pe timpul executiei programului. Constanta desemneaza o entitate cu nume ce reprezinta o valoare care nu se modifica pe timpul executiei unui program. Structura de date este o schema de organizare a datelor cu scopul de a simplifica operatiile de prelucrare sau de a usura interpretarea lor. Exista mai multe tipuri de structuri de date: vector, inregistrare, multime etc.
Instructiunea este formata din doua elemente distincte: codul operatorului si operanzii (datele supuse operatiei elementare reprezentate prin cod). In functie de tipul prelucrarii pe care o executa, instructiunile se clasifica in:
instructiuni de prelucrare propriu-zisa;
instructiuni de organizare (structurare) care realizeaza concordanta logica intre algoritm si succesiunea interna a secventelor de program.
Instructiunile de prelucrare propriu-zisa se grupeaza in:
instructiuni de intrare-iesire care stabilesc sensul fluxului de date in sistemul de calcul, fisierul de date asupra caruia se efectueaza operatia si echipamentul periferic pe care se gaseste acest fisier de date; fisierul de date este o colectie de date stocata pe un suport tehnic intr-o succesiune de inregistrari;
instructiunile de calcul, ce precizeaza natura operatiei, adresele operanzilor care participa la calcul si a operatiei aritmetice;
instructiunile de transfer (atribuire), ce realizeaza transferul datelor, precizand sensul transferului si adresele operanzilor.
Instructiunile de organizare sunt urmatoarele:
instructiunile de comparare (decizie logica), care asigura compararea a doi sau mai multi operanzi, rezultatul fiind categorisit ca "adevarat" (True) sau "fals" (False);
instructiunile de salt ce realizeaza trecerea de la secventa de instructiuni curenta din program la o secventa de instructiuni situata in alt punct al programului.
Indiferent de limbajul de programare folosit pentru rezolvarea problemei, realizarea unui program presupune parcurgerea urmatoarelor etape:
1. Analiza problemei de rezolvat si realizarea algoritmului, etapa ce presupune elaborarea unui enunt complet al problemei, stabilirea modalitatilor de organizare si de reprezentare a datelor de intrare si de iesire, elaborarea schemei logica de sistem care defineste echipamentele din configuratia calculatorului ce participa la procesul de prelucrare a datelor, realizarea algoritmului ce presupune elaborarea si reprezentarea acestuia in limbaj pseudocod sau sub forma schemei logice de program.
2. Scrierea (introducerea) programului, ce are drept scop codificarea algoritmului, adica conversia acestuia in conformitate cu instructiunile unui limbaj de programare; pentru aceasta codificare, se foloseste un editor de texte; acest editor poate fi independent sau poate face parte din mediul integrat de dezvoltare (IDE); se obtine astfel programulsursa (codul-sursa al programului) care este scris intr-un limbaj similar cu limbajul natural, dar inca inaccesibil sistemului de calcul.
Compilarea programului, ce realizeaza traducerea programului-sursa scris intrun limbaj de programare de nivel inalt in program-obiect, exprimat in instructiuni codmasina.
Aceasta operatie de traducere se obtine, in mod automat, prin folosirea unei componente a sistemului de operare, numita compilator. Dupa compilare, eventualele erori de codificare existente in program (numite erori de sintaxa ce apar datorita nerespectarii sintaxei generale a unei instructiuni) sunt depistate si afisate. Erorile de sintaxa sunt eliminate prin corectii aduse programului-sursa, dupa care operatia de compilare este reluata. Este important de mentionat faptul ca in etapa de compilare nu se depisteaza erorile logice din program; erorile logice sunt greseli produse la realizarea algoritmului de calcul.
4. Editarea de legaturi (linkeditarea), ce asigura includerea codului obiect al programului (programul-obiect) intr-un ansamblu executabil (programul executabil) care cuprinde si module specifice sistemului de operare, functii de biblioteca etc. cu ajutorul componentei denumita editor de legaturi (linkeditor). Eventualele erori ce apar conduc la corectii in programul-sursa.
5. Testarea logica a programului, ce realizeaza verificarea finala a programului pe baza unui set de date de test care acopera domeniul real de valori ale datelor de intrare ce se vor folosi in timpul exploatarii programului.
Problematica generala a limbajelor de programare
Limbajul de programare reprezinta un limbaj artificial ce se foloseste pentru definirea unui sir de instructiuni care pot fi prelucrate si executate pe un sistem de calcul.
Spre deosebire de limbajele naturale (umane), limbajele artificiale au fost create cu scopuri precise: limbaje de programare, limbaje de specificare a programelor, limbaje de descriere a documentelor structurate, limbaje de schimb de date electronice, EDI (Electronic Data Interchange) etc.
Limbajele de programare se definesc formal prin alfabet, vocabular si gramatici (fapt ce permite compilarea sau interpretarea lor). Alfabetul reprezinta multimea simbolurilor utilizate pentru scriere in limbajul de programare respectiv. Vocabularul este compus din multimea cuvintelor intrebuintate in limbaj. Gramatica limbajului de programare este reprezentata de ansamblul regulilor de scriere, cu preponderenta sub aspect sintactic (multimea regulilor de formare a instructiunilor), cu luarea in consideratie a regulilor de punctuatie si a semanticii (semnificatiilor conferite cuvintelor) si extrem de putin sub aspect morfologic (ansamblul regulilor de modificare a formei cuvintelor, in contextul utilizarii lor). Operatia de interpretare asigura executia instructiune cu instructiune (la comanda pas cu pas a operatorului) a unui program.
Un mare grad de utilizare il prezinta sistemele de gestiune a bazelor de date (SGBD) ce sunt fundamentate pe limbaje de descriere a structurii bazei de date si pe limbaje de manipulare si interogare a bazei de date. SGBD-urile lucreaza cu date organizate in baze de date si programele sunt independente in raport cu descrierea datelor. Se dau ca exemple SGBD-urile FoxPro (cu o larga raspandire in Romania in deceniul 90 al secolului trecut), Informix, Oracle, Sybase, Microsoft Access.
Din categoria limbajelor de programare specializate fac parte limbajele inteligentei artificiale. Se dau ca exemple limbajele Lisp si Prolog.
Limbajele de programare orientate pe obiecte sunt dezvoltate in conformitate cu conceptual de programare orientata pe obiecte, OOP (Object-Oriented Programming).
Programarea orientata pe obiecte semnifica programarea bazata pe obiecte la care se adauga mostenirea si polimorfismul. Programarea bazata pe obiecte, OBP (Object-Based Programming) utilizeaza conceptele de clasa si obiect. Dintre limbajele de programare OOP se mentioneaza Pascal, C++, C#, SmallTalk, Simula, Java etc.
4. Elementele de baza ale programarii orientate pe obiecte
Programarea orientata pe obiecte, OOP (Object-Oriented Programming), specifica limbajelor de programare orientate pe obiecte, inseamna programarea bazata pe obiecte la care se adauga mostenirea si polimorfismul. Programarea bazata pe obiecte, OBP (Object-Based Programming) utilizeaza conceptele de obiect si clasa.
Obiectul este o entitate dinamica (este creat, utilizat si apoi distrus) constituita din oricare unitate programabila si caracterizata prin identitate, metode de comportament si stare. Identitatea individualizeaza un obiect in comparatie cu alte obiecte. Metodele de comportament ale obiectului reprezinta elementele comportamentale ale acestuia in momentul accesarii. Prin comportament, obiectul isi pune in evidenta apartenenta la clasa, precum si individualitatea sa. Starea obiectului este caracterizata cu ajutorul atributelor lui. Orice atribut dispune de nume si valoare sau realizare ce este asociata ca variabila de instanta (ce defineste proprietatile obiectului la un anumit moment).
Elementele ce apartin colectiei de obiecte descrise intr-o clasa reprezinta instante de clasa. Obiectul este definit de un identificator intern unic, independent de valoarea sau adresa de memorie a obiectului. Acest identificator nu este controlat de utilizator si nu se confunda cu diferitele nume utilizate de utilizator cu scopul de a-l numi. Ca entitati complexe, obiectele sunt constituite din alte obiecte si din valori. Distinctia intre obiecte si valori se realizeaza prin intermediul starii obiectului: obiectele dispun de o stare interna care se poate schimba; valoarea nu se schimba niciodata. Obiectele sunt create de utilizatori, prin derivare din tipuri de obiecte create anterior sau printr-o operatie de creare (new).
Clasa reprezinta o implementare a unui tip abstract de date ce incapsuleaza doua tipuri de atribute: campuri sau proprietati si metode sau operatii ale tipului respectiv.
Campurile sunt private adica sunt ascunse in reprezentarea obiectului. Metodele sunt publice adica accesibile utilizatorului. Altfel exprimat, clasa defineste o categorie de obiecte cu proprietati si metode ce se mostenesc intr-o subclasa. Subclasa sau clasa derivata defineste comportamentul obiectului derivat dintr-o clasa considerata de baza.
Clasa este un model de realizare a obiectelor de acelasi tip si se defineste cu ajutorul unui limbaj declarativ sau pe cale grafica. Clasa are un nume, prezinta operatii externe sau metode, are o reprezentare interna (ca expresie a valorilor diverselor stari ale instantelor de clasa) si foloseste cod ce implementeaza atat operatiile externe cat si descrierile reprezentarii interne a obiectelor. Clasa exista conceptual chiar si atunci cand nu contine obiecte si este un sablon pentru generarea si manipularea obiectelor si este accesata de utilizator cu ajutorul interfetei specifice clasei. Specificarea metodei se numeste semnatura, iar modul de implementare constituie corpul metodei. Notiunea de clasa este asociata in special cu faza de executie si presupune: generarea de obiecte (new) si memorarea multimii de obiecte care reprezinta instantele claselor. O clasa descrie obiectele, crearea unui obiect realizandu-se prin luarea in consideratie a unei expresii de tip. Tipul reprezinta o descriere abstracta a unui grup de entitati asemanatoare. Obiectul prezinta valorile lui proprii, lista atributelor si metodelor fiind gestionate de clasa. Pentru majoritatea limbajelor OOP, ansamblul instantelor unei clase reprezinta o colectie care are acelasi nume cu clasa si care se numeste extensie a clasei. Obiectele reprezinta instante (manifestari) ale claselor din care fac parte.
Tipul de data este folosit pentru descrierea unei multimi de obiecte care au aceeasi reprezentare. Fiecarui tip de data i se asociaza anumite operatii cum ar fi de exemplu: operatii aritmetice pentru date numerice, concatenari pentru sirurile de caractere, modificari pentru anumite articole.
Tipul abstract de data este un tip de data care este definit prin accentuarea elementelor de precizare a comportamentului si de specificare a metodelor ce se pot efectua asupra variabilelor de tipul de data respectiv (se specifica atat structura obiectului, cat si mesajele aplicabile lui). Tipul abstract de data ascunde modul in care sunt implementate metodele asociate obiectului, reprezentarea interna a obiectelor si protejeaza algoritmii interni care implementeaza cererile din exterior. Acest tip abstract de data are doua componente: interfata (lista de metode) si implementarea (descrierea structurii interne a datelor obiectului si realizarea procedurilor de implementare a metodelor interfetei). Structura aleasa pentru memorarea tipului abstract de data este ascunsa pentru utilizator, ca urmare algoritmul de reprezentare este incapsulat. Exista o interfata publica, la care au acces utilizatorii, si o interfata privata ce ascunde reprezentarea si implementarea.
Diferenta dintre tipul de data si clasa este urmatoarea: tipul de data este destinat pentru definirea de declaratii utilizate pentru controlul static al expresiilor de limbaj, in timp ce clasele sunt sabloane destinate generarii si manipularii obiectelor care prezinta proprietati si comportament comun.
Intre clase si obiecte se stabilesc relatii astfel: asociatii binare intre doua clase, asociatii n-are intre mai multe clase, relatii intre obiect si clasa din care face parte, relatii intre obiectele aceleiasi clase.
Exista mai multe paradigme ale modelului folosit de OOP: mostenirea, incapsularea, polimorfismul, abstractizarea datelor, persistenta, evenimentul.
Paradigma este un ansamblu ce detaliaza conceptele specifice unui anumit termen utilizat ca model. Paradigma se refera la forme de manifestare ale termenului respectiv.
Mostenirea asigura transferarea de proprietati si metode de la clasa-parinte catre un obiect nou. Prin mostenire sunt generate tipuri noi de obiecte si clase intr-o ierarhie.
Prin mostenire, in OOP se elimina rescrierea si recodificarea programelor, asigurandu-se reutilizarea codului. Un obiect nou mosteneste operatii sau metode, variabile de instanta, atribute. In cazul metodelor, este vorba de partajarea codului, iar in cazul variabilelor, de partajarea structurii intre datele obiectelor.
Proiectarea unei aplicatii prin intermediul OOP consta gruparea informatiilor generale in clase care sunt apoi specializate pas cu pas in subclase cu comportament particular.
Metodele reprezinta operatii ce pot regasi sau actualiza starea unui obiect. Aceasta stare a obiectului este memorata in variabilele instantelor sale. Intr-o ierarhie de mosteniri, o metoda definita pentru o clasa este mostenita de subclasele sale. Mostenirea este implementata static sau dinamic. Mostenirea statica inseamna adaugarea campurilor mostenite, situatie in care redefinirea unei clase obliga la actualizarea tuturor subclaselor.
Mostenirea dinamica se realizeaza fara a se copia campurilor mostenite si obliga la parcurgerea legaturilor de mostenire. In cazul mostenirii dinamice, actualizarea se efectueaza mai rapid, in timp ce executia este mai putin eficienta. Mostenirea poate fi simpla sau multipla. Mostenirea simpla se produce atunci cand o subclasa mosteneste proprietati si metode ale unei singure clase-parinte. Mostenirea multipla se realizeaza cand o subclasa poseda mai multe clase-parinte.
Incapsularea reprezinta proprietatea ce defineste posibilitatea de a ascunde prin mascare atributele proprii ale unui obiect si modul in care se executa metodele. Astfel, sunt protejate obiectele in situatia efectuarii gresite a unor manipulari exterioare. Un obiect poate fi accesat numai prin metodele asociate la crearea sa.
Polimorfismul defineste caracteristica unei metode de a se comporta in mod diferit
in functie de clasa de obiecte careia ii apartine. Polimorfismul asigura invocarea pentru obiectele de diferite tipuri a metodelor cu acelasi nume, dar semantica si implementare diferita. O metoda se comporta diferit in functie de clasa de obiecte careia ii apartine.
Abstractizarea datelor se realizeaza prin faptul ca insasi clasele sunt expresia unei abstractii. Obiectele dintr-o clasa prelucreaza datele modelului clasei careia ii apartin.
Utilizatorul obtine comunicarea cu obiectele prin mesaje ce se transmit prin interfata ce specifica metodele posibile.
Persistenta este o proprietate a obiectelor care implica existenta acestora si dupa incetarea procesului care le-a creat. Starea obiectului si codul corespunzator metodelor sunt memorate in baza de date. Tipurile obiectelor pot fi declarate persistente prin folosirea cuvantului cheie persistent la momentul declararii, variabila fiind si ea constransa la un tip persistent.
Evenimentul reprezinta o actiune efectuata de sistemul de calcul in cazul in care utilizatorul solicita executarea unei comenzi, este aplicat un mesaj al sistemului sau exista o solicitare din partea altei aplicatii informatice. Ca urmare, evenimentele se pot produce in mod interactiv sau programat. Intr-o aplicatie informatica dirijata prin evenimente, codul nu urmareste o cale prestabilita, ci secvente de program executate ca raspuns la aparitia evenimentelor. Succesiunea in care se produc aceste evenimente determina secventa dupa care se executa codul, ceea ce inseamna ca la fiecare rulare a programului, el va parcurge o cale diferita.
[1] C. Böhm, G. Jacopini, 'Flow diagrams, Turing Machines and Languages with only Two Formation Rules', Comm. of the ACM, 9(5): 366-371,1966.