programare-750x458.jpg

Plan

  • Programarea calculatoarelor
  • Paradigme de programare
  • Evoluția limbajelor de programare
  • Caracteristicile C++
  • Compilare și interpretare. Depanare
  • Test de evaluare a cunoștințelor

 

Programarea calculatoarelor

  • Programarea este o activitate informatică de elaborare a produselor-program, a programelor (software) necesare.
  • Programarea conține următoarele subactivități: specificarea, proiectarea, implementarea, documentarea și întreținerea produsului program.
  • Este un proces ce conduce de la formularea unei probleme (de calcul) la un program executabil pe un calculator
  • Sarcini înrudite sunt testarea, depanarea, întreținerea codului sursă, implementarea sistemului construit, managementul acestuia etc; acestea pot fi considerate ca părți ale procesului de programare, dar cel mai adesea sunt asociate termenului de dezvoltare software
  • Ingineria software (ingineria programării) combină tehnici inginerești cu practici de dezvoltare software
  • În ingineria software, programarea (implementarea) este privită ca una din fazele procesului de dezvoltare  software
  • Există o permanentă dezbatere dacă scrierea de programe este o formă de artă, un meșteșug sau o disciplină inginerească

Paradigme de programare

Paradigmele de programare  reprezintă o modalitate de a clasifica limbajele de programare în funcție de caracteristicile lor.

Caracteristici

  • Programarea structurată este o paradigmă a programării apărută după anul 1970 datorită complicării crescânde a programelor de calculatoare. A apărut ca un model nou de programare, în scopul de a crea noi tehnici de programare apte de a produce programe care să fie sigure în funcționare, pe o durată mai lungă.
  • Exemplu programare nestructurată vs structurată pe tablă.
  • Programarea imperativă, în contrast cu programarea declarativă, este o paradigmă de programare care descrie calculul ca instrucțiuni ce modifică starea unui program. În aproape același fel în care modul imperativ din limbajele naturale exprimă comenzi pentru acțiuni, programele imperative sunt o secvență de comenzi pentru acționarea calculatorului. Programarea procedurală este o metodă obișnuită de executare a programării imperative și de aceea cei doi termeni sunt folosiți deseori ca sinonime.
  • Programarea declarativă este un stil de programare în care se descrie logica unui calcul, fără să se prezinte modul de execuție; programarea declarativă răspunde la întrebarea ce trebuie calculat și nu la întrebarea cum se face acest lucru.
    • Programarea funcțională este o paradigmă de programare care tratează calculul ca evaluare de funcții matematice și evită starea și datele muabile. Se pune accent pe aplicarea de funcții, spre deosebire de programarea imperativă, care folosește în principal schimbările de stare.
    • Programarea logică, programarea funcțională și programarea bazată pe reguli se înscriu în paradigma programării declarative.
    • Exemplu programare logică pe tablă.
  • Programarea orientată spre obiecte (sau programarea orientată-obiect) este o paradigmă de programare, axată pe ideea încapsulării, adică grupării datelor și codului care operează asupra lor, într-o singură structură. Un alt concept important asociat programării orientate obiect este polimorfismul.

Videoclip de prezentare a paradigmelor de programare

Evoluția limbajelor de programare

Discuție despre evoluția limbajelor de programare în sala de curs

tabel1.png

tabel2.png

tabel3.png

tabel4.png

Arborele genealogic al limbajelor de programare

arborele_genealogic.png

Despre C++

Istorie și origini

  • Este unul din cele peste 2000 limbaje de programare.
  • Originile C++
    • limbajele de programare de nivel scăzut (cod maşină, limbaje de asamblare)
    • limbajele de programare de nivel înalt (C, ADA, COBOL, FOTRAN)
    • programarea orientată pe obiecte
  • 1979: Bjarne Stroustrup – Simula, C cu clase … ->
  • 1983: C++ (comparat cu C)
    • clase
    • moştenire
    • inlining (inline keywords și Class Member Functions)
    • argumente implicite pentru funcţii
    • verificare puternică a tipurilor
    • funcții virtuale
    • supraîncărcarea funcțiilor
    • referințe cu simbolul &
    • cuvântul cheie const
  • 1998: STL, C++98 – primele standarde C++
  • 2003, 2005, 2011, 2014 – C++03, C++0x, C++11, C++14
  • 2017 – e plănuită o nouă revizuire

Caracteristici

  • uşor de programat (mai puţin timp de scris, mai scurt şi mai uşor de citit); dezbatere în sală
  • portabil – programele pot rula pe diferite calculatoare fără modificări sau cu puţine modificări
  • limbaj nesigur puternic tipizat (programatorul trebuie să ştie exact ce trebuie să facă)
  • acceptă atât variabile de tipuri definite explicit, cât şi deduse
  • acceptă verificarea statică (la compilare), dar şi dinamică a tipurilor (în timpul execuţiei programului)
  • oferă o gamă variată de paradigme de programare
  • colecţie foarte mare de biblioteci
  • limbaj ce acceptă mai multe paradigme de programare:
    • generică: se pot folosi tipuri ce vor fi specificate mai tărziu şi vor fi instanţiate în funcţie de necesităţi
    • structurată: control intuitiv (ordinea în care instrucţiunile sunt executate)
    • imperativă: cum (secvenţe de instrucţiuni ce trebuie executate de calculator)
    • orientată pe obiecte: obiecte + atribute + proceduri (metode)
    • declarativă: ce (ce calcule trebuie făcute şi nu cum să fie făcute)
    • funcţională: programele văzute ca evaluarea unor funcţii matematice

De ce C++

  • Puternic, flexibil (conversii)
  • Structurat
  • Portabilitate (Windows, Apple, Linux, UNIX)
  • Eficient, elegant
  • Perspective în alte limbaje de programare (discuție în clasă)
  • Limbaj al programatorului

De ce Code::Blocks ?

  • sunteţi obişnuit cu el din liceu (discuție în clasă)
  • gratuit
  • editor simplu și sugestiv
  • permite aranjarea automată a codului (Format use AStyle)

Compilare și interpretare. Depanare

Un fişier cod sursă poate fi compilat sau interpretat.

  • Compilare: codul sursă este translatat de un program (denumit compilator) încod maşină, după care poate fi executat
  • Interpretare: un program este executat direct din cod sursă prin intermediulunui program (numit interpretor), care traduce și execută instrucțiune cu instrucțiune codul sursă
  • Exemplu la curs

Diferențe între compilator și intepreter

No Compilator Interpretor/Interpreter
1 Compilatorul ia întregul program ca intrare. Interpretorul (Interpreterul) ia  fiecare instrucțiune ca intrare. (El traduce instrucțiune cu instrucțiune.)
2 Se generează un cod obiect intermediar. Nu se generează un cod obiect intermediar.
3 Instrucțiunile de control condiționale se execută mai rapid. Instrucțiunile de control condiționale se execută mai încet.
4 Necesarul de memorie: Mai mare (deoarece este generat un cod obiect (object code) Necesarul de memorie este mai redus.
5 Programul trebuie să fie compilat de fiecare dată. De fiecare dată un program de nivel înalt este convertit într-un program de nivel scăzut.
6 Erorile sunt afișate după verificarea întregului program. Erorile sunt afișate pentru fiecare instrucțiune interpretată (dacă sunt)
7 Examplu : C Compiler Exemple: Interpretor BASIC

Explicație video:

Schema compilării în C++

schema_compilare_cpp.pngDepanare (debugging)

  • Bug – eroare de programare, greu de sesizat
  • Erorile de compilare:
    • probleme suprinse de compilator, în general rezultând din încălcarea regulilor de sintaxă
    • sau prin folosirea incorectă a tipurilor de date, alocării memoriei
    • sau erori în etapa de link-editare;
  • Erori din timpul rulării: programul nu face ceea ce te aştepţi să facă („calculatorul face ceea ce i-ai spus să facă, nu ceea ce ai vrea să facă”

Dacă limbajele de programare ar fi vehicule…

C a fost marele multi-funcţional: compact, puternic, merge oriunde şi de încredere în situaţii în care viaţa ta depinde de el.

vehicul1.png

C++ este noul C— de două ori mai puternic, de două ori mai mare, lucrează în medii ostile, dar dacă încerci să-l foloseşti fără atenţie şi fără antrenament special, probabil te vei prăbuşi.

vehicul2.png

C♯ este C++ cu mai multe caracteristici de siguranţă, astfel încât să îl poată folosi şi civilii obişnuiţi. Arată puţin stupid, dar are în cea mai mare parte aceeași putere, atât timp cât stai în apropierea pompelor de carburant, de magazine auto și de confortul civilizației.

vehicul3.png

Java este o altă încercare de a îmbunătăți C. Într-un fel îşi face treaba, dar e mult mai lent, mai voluminos, poluează peste tot, iar oamenii vor crede că ești un țărănoi.

vehicul4.png