Sunteți pe pagina 1din 6

Fundamentele programării 2020-2021

Curs 1

1. Concepte de bază. Dată, informaţie, cunoştinţe. Calculator, informatică

Data
Prin dată se întelege un număr, mărime, relaţie etc., reprezentarea unui fenomen, lucru
sau fapt, fiind susceptibilă de a fi memorată, transformată sau vehiculată.
Alte definiţii pentru dată (N. Pelin, 2015):
 date = materii prime de informaţii;
 date = unele detalii (fapte, idei), care pot fi înregistrate, transmise, prelucrate şi
afişate. Datele nu dispun neapărat de sens în contextul problemei date.
 date = un set de fapte obiective, eterogene despre un proces sau un eveniment care
au o utilitate redusă dacă nu sunt transformate în informaţii.

Informaţie
În sens larg, informaţia desemnează un element nou, necunoscut anterior. În sens
restrâns, informaţia poate fi definită ca o măsură a incertitudinii înlăturate prin realizarea unui
eveniment dintr-un set de evenimente posibile.
Alte definiţii pentru informaţie (N. Pelin, 2015):
 informaţii = date care după prelucrare, au obţinut sens în contextul problemei
date.
 informaţii = date înzestrate cu relevanţă şi scop.

Cunoştinţe
Putem defini cunoştinţele ca fiind informaţii înregistrate şi verificate în practică şi care
de mai multe ori pot fi utilizate în luarea deciziilor.
Alte definiţii pentru cunoştinţe (N. Pelin, 2015):
 cunoştinţe = informaţii citite, auzite sau văzute şi înţelese.
 cunoştinţe = o combinaţie fluidă de experienţe, valori, informaţii contextuale şi
intuiţie care oferă cadrul pentru evaluare şi încorporarea unor noi experienţe şi
informaţii.

Pentru o mai bună înţelegere a noţiunilor de dată, informaţie, cunoştinţe, să considerăm


următorul exemplu:
- Date: Ion este tatăl lui George. George este tatăl lui Alex.
- Informaţie: Ion este bunicul lui Alex.
- Cunoştinţe: X este bunicul lui Y, dacă X este tatăl lui Z şi Z este tatăl lui Y.

Calculatorul este sistemul fizic care prelucrează datele introduse într-o formă prestabilită
şi furnizează rezultate fie într-o formă accesibilă utilizatorului, fie ca semnale destinate acţionării
unor echipamente. În functie de modul de reprezentare a datelor există:
· calculatoare numerice – datele sunt codificate numeric;
· calculatoare analogice – pentru codificare se utilizează elemente de tip continuu;
· calculatoare hibride – se îmbină elemente de tip numeric cu elemente de tip continuu.
În acest curs ne referim la calculatoarele numerice.

1
Fundamentele programării 2020-2021
Curs 1
Informatica este ştiinţa pluridisciplinară având ca scop proiectarea, dezvoltarea şi
exploatarea unor tehnici şi sisteme, pentru organizarea, memorarea şi distribuirea mai eficientă a
informaţiei.

2. Etapele rezolvării unei probleme cu calculatorul

O listă a etapelor pe care programatorul le parcurge în mod uzual în rezolvarea


problemelor poate fi privită ca un important ajutor în obţinerea unor rezultate bune. Evident,
etapele enumerate mai jos trebuie privite mai degrabă ca un ghid, în sensul că parcurgerea lor
conştiincioasă nu va conduce în mod obligatoriu la rezultatul scontat. A ignora aceste etape este
însă la fel de dăunător cu a exagera importanţa lor. În general, se acceptă ca fiind necesare
următoarele faze în rezolvarea unei probleme cu calculatorul:
1. analiza problemei;
2. proiectarea algoritmului de rezolvare;
3. descrierea algoritmului;
4. codificarea algoritmului (obţinerea programului);
5. testarea programului;
6. execuţia programului, obţinerea rezultatelor şi interpretarea lor;
7. întreţinerea programului.

1. Analiza problemei. În această primă etapă, se are în vedere stabilirea modelului logico-
matematic al problemei. Se identifică funcţia (sau funcţiile) problemei, se stabilesc datele de
ieşire şi datele de intrare. Această etapă are ca scop înţelegerea cât mai exactă a problemei
pe care dorim să o rezolvăm.
2. Etapa de proiectare a algoritmului are ca scop stabilirea algoritmului de rezolvare a
problemei. Este etapa în care se precizează operaţiile pe care trebuie să le execute un
calculator, pentru a rezolva problema. În cazul problemelor complexe este recomandabilă
descompunerea problemei în subprobleme care pot fi rezolvate mai uşor. Această tehnică,
numită top-down (de sus în jos) va avea ca efect final obţinerea unui sistem de module
conectate între ele după logica impusă de rezolvarea problemei. Practic, într-o primă fază se
obţine o schiţă generală de rezolvare care se rafinează succesiv până la obţinerea comenzilor
necesare execuţiei pe calculator. Împărţirea problemei în subprobleme prezintă avantajul
lucrului eficient în echipă - subproblemele pot fi rezolvate simultan de către membrii
echipei. De asemenea, obţinerea modulelor program prin implementarea fiecărei
subprobleme uşurează munca de depanare (depistarea erorilor) şi de întreţinere a
programului.
3. Descrierea algoritmului. Pe măsură ce creşte complexitatea problemelor de rezolvat, creşte
şi dificultatea de a descrie algoritmii cât mai exact, fără ambiguităţi, utilizând un limbaj
natural. Din acest motiv s-au imaginat diferite forme de descriere (diagrama de structură,
scheme logice, pseudocod etc.) care, pe de o parte permit reprezentarea corectă a
algoritmilor într-o manieră prietenoasă, naturală, iar pe de altă parte facilitează codificarea
cu uşurinţă într-un limbaj de programare.
4. Codificarea algoritmului. Se codifică algoritmul într-un limbaj de programare. Practic, în
această etapă, se obţine programul care rezolvă problema. În etapa de codificare, o

2
Fundamentele programării 2020-2021
Curs 1
importanţă deosebită trebuie acordată stilului de programare. În general, se consideră că
stilul de programare este bun dacă îndeplineşte condiţii cum ar fi:
 programul este însoţit de documentaţia de analiză şi proiectare care trebuie să conţină
elementele minimale - descrierea funcţiilor programului (ce face programul), diagrama
de structură (schiţa generală a programului), tabele de descriere a variabilelor de
intrare şi ieşire etc.
 există procedee de validare a datelor. Se pot utiliza diverse procedee (sume de control,
coduri autocorectoare, intervale de apartenenţă, scrierea cu ecou, verificarea unor
relaţii existente între variabilele de intrare etc.)
 programul este lizibil. Acest lucru se poate realiza prin folosirea scrierii indentate (în
fierăstrău) a liniilor de program, prin alegerea unor nume sugestive pentru
identificatori, prin folosirea (neabuzivă) a comentariilor etc.
5. Etapa de testare este etapa în care se elimină erorile programului. Erorile pot fi de natură
sintactică sau de natură logică. Eliminarea erorilor de natură sintactică se face în urma
listelor de erori afişate de compilatoare. Stabilirea corectitudinii din punct de vedere logic a
programului se poate face prin demonstraţie matematică sau prin testarea programului
folosind date de test.
Deoarece demonstrarea matematică a corectitudinii este dificilă, chiar şi pentru programe
mici, metoda uzuală este metoda datelor de test. Datele de test trebuie alese cu grijă, astfel
încât să se poată valida toate ramurile programului. Dacă sunt erori se încearcă localizarea
acestora folosind diverse metode. O metodă rapidă constă în afişarea unor mesaje din loc în
loc, prin analiza cărora se poate stabili zona unde se află eroarea. Mediile actuale de
programare, care asistă programatorul în punerea la punct a programului oferă şi alte
facilităţi de depanare, cum ar fi: ferestre de observare în timpul execuţiei a unor variabile şi
expresii, execuţia pas cu pas a liniilor de program, puncte de oprire a execuţiei etc.
6. Execuţia programului. O dată îndepărtate erorile de sintaxă şi de logică, programul poate fi
executat. Rezultatele obţinute sunt analizate, şi în urma interpretării lor se iau deciziile
corespunzătoare.
7. Întreţinerea programului. În mod normal, programele sunt proiectate spre a fi rulate
(executate) la diverse intervale de timp, pe seturi de date diferite. Aplicaţia informatică
obţinută din unul sau mai multe programe trebuie privită şi ca un produs care suferă în timp
un proces de uzură morală. Activitatea de întreţinere a programului constă în modificări ale
programelor ori de câte ori este nevoie, făcute tocmai în scopul de a menţine aplicaţia la zi.
Depanarea şi întreţinerea programelor sunt două din activităţile care pun în lumină, în cel
mai înalt grad, importanţa unui stil bun de programare. Este evident că aceste activităţi vor fi
îngreunate dacă programele nu sunt suficient documentate, dacă lipsesc comentariile,
scrierea este neindentată, etc.

3. Limbaje de programare. Paradigme de programare

Un limbaj de programare reprezintă un limbaj artificial proiectat astfel încât să comunice


instrucţiuni unei masini, de exemplu unui calculator.
Există în prezent sute (poate mii?) de limbaje de programare. În permanenţă, ele
evoluează, se maturizează, se transformă, se moştenesc sau se influenţează. Apar mereu şi
limbaje noi, dar sunt şi limbaje care pur şi simplu la un moment dat dispar.

3
Fundamentele programării 2020-2021
Curs 1

Paradigme de programare
Limbajele de programare pot fi clasificate în funcţie de paradigma de programare
utilizată.
Paradigma este o idee, un set de reguli care precizează modul în care se construiește un
program într-un anume limbaj de programare
În articolul “The Paradigms of Programming”, R. Floyd defineşte noţiunea de paradigmă
de programare ca fiind o metodă de conceptualizare a modului de execuţie al calculelor într-un
calculator, precum şi a modului de structurare şi organizare al taskurilor responsabile cu execuţia
calculelor. O noţiune des utilizată în locul celei de paradigmă de programare este cea de stil de
programare.
Principalele paradigme de programare, descrise pe scurt, sunt (A. Vancea, 2018):
 Programare procedurală si structurală - un program este privit ca o mulţime ierarhică
de blocuri şi proceduri. Bloc = Instrucţiune Compusă + Declaraţii Locale (Variabile)
- Limbaje de programare: Pascal, Modula, Delphi, C, C++, etc.
 Programare orientată pe obiecte - un program este constituit dintr-o colecţie de
obiecte care interacţionează, fiecare obiect fiind înzestrat cu un comportament propriu şi
bine definit.
- Limbaje de programare: C++, Java, C#, Python, etc.
 Programare bazată pe evenimente (event-driven) - fluxul de execuţie este bazat pe
apariţia unor evenimente externe programului şi pe reacţia programului la acestea.
- Limbaje de programare: C#, Java etc.
 Programare imperativă – utilizarea unor instrucţiuni ce modifică starea unui program.
La fiecare moment de timp programul are o altă stare în funcție de instrucțiunile care sunt
executate.
- Limbaje de programare: C, C#, Pascal, Fortran, etc.
 Programare funcţională - un program este descris pe baza unor funcţii matematice, a
căror stare nu se schimbă, utilizate de obicei recursiv.
- Limbaje de programare: Lisp, Miranda, Haskell, Erlang etc.
 Programare logică - un program este un set de propoziții, într-o formă logică, în care se
exprimă fapte și reguli despre o problemă. Astfel se descrie ce anume este o soluție
pentru acea problemă, nu modul în care se ajunge la ea. Soluția este căutată în mulțimea
de fapte, cu ajutorul setului de reguli.
- Limbaje de programare: Prolog, ALF, Godel, etc.
 Programare paralelă – execuţia unui program este constituită din acţiuni multiple
posibil a fi executate în paralel pe una sau mai multe maşini. Execuţia acestor acţiuni
poate fi independentă (execuţie pur paralelă) sau acţiunile pot depinde una de alta
(execuţie concurentă).
- Extensii paralele concurente şi distribuite ale limbajelor imperative:
Concurrent C, Parallel C, Super Pascal
- PVM (Parallel Virtual Machine) - suport pentru C, Fortran, Java
 Programare generică - presupune definirea unor modele (şabloane, template-uri) care
ajută la reutilizarea codului. Practic, se scrie cod fără a lua în considerare tipul datelor
pentru care se va utiliza apoi acel cod. Tipul datelor se specifică în momentul utilizării
codului respectiv.
- Limbaje de programare: C++, C#, Java, Python etc.

4
Fundamentele programării 2020-2021
Curs 1
Trebuie subliniat că majoritatea limbajelor de programare sunt multi-paradigmă. Foarte
puţine limbaje de programare sunt “pure” în ceea ce priveşte paradigma folosită. De exemplu,
limbajul C++ permite utilizarea mai multor paradigme de programare: procedurală, orientată pe
obiecte, funcţională, generică.

Cum alegem un anumit limbaj de programare pentru rezolvarea unei anumite


probleme?
Deşi foarte multe limbaje au caracter universal, totuşi anumite trăsături ale problemei de
rezolvat pot recomanda un anumit tip de limbaj. Câteva idei în acest sens:
 Pentru o problemă în care predomină prelucrările numerice se va alege un limbaj în
care există facilităţi specifice de prelucrare şi/sau biblioteci conţinând funcţii/subrutine
specializate, cum ar fi Wolfram, Matlab, R, Python etc.
 Dacă problema necesită utilizarea unor tehnici de inteligenţă artificială se pot folosi
limbaje ca Lisp, Python, C++, Java, Prolog etc.
 Dacă este importantă dezvoltarea rapidă a aplicaţiei, se vor selecta limbaje în care
programarea este simplificată precum Python sau Basic.Net sau limbaje pentru care
există framework-uri specializate pentru dezvoltarea rapidă a aplicaţiilor, precum C#,
Javascript sau PHP.
 Dacă scopul este dezvoltarea unei componente specializate de aplicaţie, precum front-
end-ul sau back-end-ul aplicaţiilor web, se vor alege limbaje care dau rezultate bune în
acest sens, precum Javascript sau PHP.
 Dacă ţinta este obţinerea unor aplicaţii optimizate şi sigure (din punct de vedere al
gestiunii memoriei, al consumului de procesor şi al altor puncte de vedere), pot fi alese
limbaje precum Rust sau Go lang.
 Este important şi tipul de calculator pentru care se dezvoltă aplicaţia respectivă. Dacă
pentru PC-urile care folosesc Windows sau Linux există o multitudine de limbaje de
programare, lucrurile sunt mai puţin variate pentru calculatoarele Apple, pentru
acestea existând un limbaj dominant, numit Swift. Pentru calculatoare mai specializate
cum sunt sistemele cu microcontroller (de exemplu Arduino), sau calculatoarele de tip
SBC (Single Board Computer) cum este Raspberry Pi, se pot utiliza puţine limbaje de
programare, uzual C, C++ sau Python.

Tinând cont de faptul că programarea este o activitate cu caracter comercial/o profesie,


trebuie ţinut cont şi de faptul ca şansa de angajare a unui programator este determinată şi de
popularitatea limbajelor pe care le cunoaşte. Există site-uri specializate care urmăresc tendinţele
în materie de popularitate a limbajelor de programare, site-uri care ar trebui avute în vedere tot
timpul de către un programator care vrea să aibă succes pe piaţa muncii. Exemple de astfel de
site-uri sunt:
- TIOBE Index: https://www.tiobe.com/tiobe-index/
- PYPL: http://pypl.github.io/PYPL.html

În figura următoare, preluată de pe TIOBE Index se poate observa că, deşi popularitatea
unui limbaj poate varia semnificativ în timp, anumite limbaje se menţin totuşi în topul
preferinţelor pieţei, de exemplu Java sau C.

5
Fundamentele programării 2020-2021
Curs 1

Ceva interesant. Primul pas tradiţional în învăţarea unui nou limbaj de programare este
acela în care pe ecran apare textul “Hello World”. Primul program Hello World este considerat
cel introdus în cartea despre C (Kernighan & Ritchie, prima editie ‘The C Programming
Language’, 1978).
http://www.mycplus.com/featured-articles/hello-world-programs-in-300-programming-
languages/ - cum se afişează “Hello World!” în peste 300 de limbaje de programare de
programare.

S-ar putea să vă placă și