Sunteți pe pagina 1din 35

Introducere

în
Programare
Prof. univ. dr. Gheorghe Grigoraș
https://profs.info.uaic.ro/~grigoras/geo
Care este scopul cursului?

Să devii programator în limbajul Python.

Să înveți să rezolvi probleme utilizând programarea în Python.

Vei înțelege elementele esențiale ale celor mai semnificative


limbaje de programare.

Vei înțelege cum funcționează programarea ca un proces de


modelare a lumii reale.
Evaluare

Teme pentru acasă 50%.

Test scris final 50%.


Bibliografie

https://docs.python.org/3/contents.html
https://www.python.org/
https://wiki.python.org/moin/BeginnersGuide
https://docs.python.org/2/tutorial/
https://www.python.org/downloads/
https://wiki.python.org/moin/IntroductoryBooks
http://it-ebooks.info/read/304/
https://hkn.eecs.berkeley.edu/~dyoo/python/idle_intro/index.html
https://docs.python.org/2/library/idle.html
https://www.tutorialspoint.com/python3/
https://www.youtube.com/watch?v=bOvqYw1SZJg
Plan

Elemente de programare:
Ce este programarea?
Scurtă istorie
Filozofia limbajului Python
Execuția codului Python
Cum scriem cod/Algoritmi
Ce este Programarea?
Să-i spui unui computer ce să facă: folosești un limbaj adecvat (limbaj de
programare), scrii comenzile într-un fișier text sau le transmiți la un
promter.

Astfel, poți să faci tot ce poate face un computer.

Poți re-executa ceea ce ai “programat” fără să apelezi la alte acțiuni


(apăsare de butoane, de meniuri etc).

Poți re-executa programul pentru diverse seturi de date.


Ce este Programarea?
value = 2
answer = 4 + value
if answer > 0 :
print (answer)

Codul este scris în fișier text și este numit cod sursă (uneori “src”). În
Python, fiecare comandă este scrisă pe o linie nouă.
Codul are o sintaxă specifică ce cuprinde cuvinte cheie (keywords) și
operatori care au un înțeles aparte pentru computer. De exemplu if este
control flow keyword: el controlează fluxul programului pe baza unei
condiții.
Unul sau mai multe fișiere(adesea scrise de diverși programatori) constitue
împreună un program.
De ce Python?

Este ușor de folosit.


Este independent de sistemul de operare.
Există o comunitate relativ mare care-l utilizează și o cantitate
mare de cod ce poate fi folosit pentru diverse aplicații.
Este integrat într-o mare măsură în produse software (de
exemplu în ARCGIS) ArcGIS is a geographic information system (GIS) for working
with maps and geographic information.

Este unul dintre primele trei limbaje de programare cele mai


solicitate de către angajatori.(după unii autori)
Învățând Python capeți o mulțime de informații privind alte
limbaje de programare.
Scurtă istorie privind Programarea: 

Limbaje Low Level
1930’s Alan Turing first thought about programmable machines that had
flexible uses.

1940’s First properly flexible computers – programmed in binary code ‘First


Generation Languages’, for example ‘1000 1001 1101 0000 0100 1000
1001 1000 0000 0010 0000 0001 1101 1000’.

Early 1950’s ‘Second Generation Languages’ – used simple ‘machine


language’ or ‘assembler’ codes to represent operations, like ‘mov eax, 4
move ebx, 2 add eax,ebx’ for ‘4 add 2’.

These are sometimes called Low Level Languages as they are close to the
details by which the computer works: they have low levels of abstraction.
Scurtă istorie privind Programarea: 

High Level Languages
Mid 1950’s Third Generation Languages: in a human readable form,
e.g. ‘4 + 2’. (Fortran, ALGOL, COBOL, C, C++, C#, Java, BASIC , Pascal)

Fourth Generation Languages try to let people describe what they want to do,
without complicating things with how they’re done.(Visual FoxPro, SQL, MATLAB)

Fifth Generation Languages centre on describing what a problem solution looks like
and getting a computer to find it.

Such languages hide how the computer works, and are therefore called High Level
Languages.

Python is a high level, third generation language.


Transformarea codului sursă în binar
Un compilator este un program ce transformă codul sursă în cod binar. Codul
binar(numit și cod nativ) poate fi executat de oricâte ori. Este greu dacă nu
imposibil de citit de către oameni și poate fi executat de un sistem de operare.

Un interpreter execută codul sursă direct, comandă după comandă, fie


compilând comenzile în binar, fie în așa zisul bytecode – un cod intermediar care
se execută de o mașină virtuală / runtime environment asociată cu interpreterul.

Python este un limbaj interpretat prin bytecode. Asta înseamnă că se poate


distribui codul sursă dar va fi executat doar pe un computer ce dispune de un
interpreter.
Imperative vs. Declarative
Limbajele Imperative sunt cele mai populare. Într-un limbaj imperativ un
program este constituit dintr-o mulțime de afirmații/instrucțiuni ( statements )
care sunt citite secvențial de la început la sfârșit iar execuția lor schimbă
starea computerului(datele memorate).
value = 2
answer = 4 + value
print (answer)

Starea computerului este reprezentată în memoria calculatorului și este


accesibilă prin niște etichete ce pot fi folosite în limbajul de programare: așa
zisele “variabile”. De exemplu eticheta “value” de mai sus este asignată
numărului“2”, eticheta “answer” este asignată evaluării expresiei 4 +
value.
Goto
Foarte rar programele se execută secvențial de la început la sfârșit: există
“salturi” ce depind de anumite condiții ( în exemplul următor, dacă există
sau nu un fișier).

Se folosește un cuvânt cheie pentru control flow numit goto pentru saltul
la o nouă linie:
10: if file missing goto 20 (Pseudocode, not
15: read file goto 25 Python)
20: exit program
25: print file
Programele mari de acest fel sunt denumite spaghetti code.
Proceduri

S-a dezvoltat Programarea Procedurală: unor bucăți de cod li s-au dat


nume - acestea sunt proceduri - și se poate “sări” la ele, se execută și
se revine cu rezultatul scontat.

Procedurile sunt numite - de la limbaj la limbaj - metode, funcții,


rutine, subrutine.
text = input("Type a number to add to four")
value = int(text)
answer = 4 + value
print (answer)

Aici input este o procedură care afișează un text și returnează ceea


ce este tastat de utilizator, int preia textul tastat și returnează un
număr, iar print este procedura care afișează rezultatul fără să
returneze ceva.
Limbaje Declarative
În Limbajele Declarative se descrie de obicei punctul final(rezultatul) și
programul funcționează pentru a ajunge acolo.

O categorie de limbaje imperative sunt Limbajele Funcționale: în


aceste limbaje, programele sunt constituite din proceduri imbricate -
funcții - în care se trece de la una la alta pentru a calcula un anume
rezultat definit în primul nivel de imbricare.

În general aici nu se folosesc variabile pentru a descrie starea; codul


este construit din expresii și nu din comenzi (statements).
text = input("Type a number to add to four")
value = int(text)
answer = 4 + value
print (answer)

print (
4 + int(
input(
"Type a number to add to four“
)
)
)
Limbaje “Object Oriented”
În Limbajele Orientate pe Obiect se construiesc bucăți de cod numite
‘Clase’ care pot conține date și proceduri pentru manipularea acestora.

Clasa grupează datele și unitățile de prelucrare a acestora într-un modul,


unindu-le astfel într-o entitate mult mai naturală. Deși tehnica se numește
"Programare Orientată pe Obiect", conceptul de bază al ei este Clasa.

Clasa desemnează o mulțime de obiecte care partajează o serie de


proprietăți.‘Obiectele’ sunt instanțe ale claselor și pot transmite date și
mesaje unul altuia.
Limbaje “Object Oriented”
Principii de bază:
Abstractizarea – Este posibilitatea ca un program să ignore unele aspecte ale
informației pe care o manipulează, adică posibilitatea de a se concentra asupra
esențialului. Fiecare obiect în sistem are rolul unui “actor” abstract, care poate
executa acțiuni, își poate modifica și comunica starea și poate comunica cu alte
obiecte din sistem fără a dezvălui cum au fost implementate acele facilitați.

Încapsularea – numită și ascunderea de informații: Asigură faptul că obiectele nu


pot schimba starea internă a altor obiecte în mod direct (ci doar prin metode puse
la dispoziție de obiectul respectiv); doar metodele proprii ale obiectului pot accesa
starea acestuia.
Limbaje “Object Oriented”
Principii de bază:

Polimorfismul – Este abilitatea de a procesa obiectele în mod diferit, în


funcție de tipul sau de clasa lor. Mai exact, este abilitatea de a redefini metode
pentru clasele derivate.

Moștenirea – Organizează și facilitează polimorfismul și încapsularea,


permițând definirea și crearea unor clase specializate plecând de la clase
(generale) deja definite - acestea pot împărtăși (și extinde) comportamentul
lor, fără a fi nevoie de a-l redefini.
Scripting languages vs System Programming
Languages
Limbajele mai pot fi împărțite în:
Systems (or Application) Programming Languages:
-utilizate pentru dezvoltarea de sisteme software, și
Scripting Languages:
-crează împreună alt software (glue languages),
-sunt folosite în interiorul altor aplicații pentru programarea
unor facilități(extension languages),
-sunt folosite pentru gestionarea sistemelor (control
languages).
Scripting languages vs System Programming
Languages

În general, limbajele de scripting sunt interpretate (cea ce ajută la


rularea în interiorul altui software) și ascund codul complicat,
făcându-le ușor de învățat, dar cu o capacitatea redusă de a aborda
joburi complexe și de a proiecta codul optimizat pentru viteză.

Python îmbină cele două aspecte: este în mod tradițional un limbaj de


scripting, dar oferă un acces bun la calcule complicate și este supus
unei optimizări continue. Adeseori invocă codul nativ scris în C, un
limbaj foarte eficient.
Python

Python este limbaj de generația 3:

- limbaj imperativ cu facilități funcționale.


- limbaj imperativ, procedural, “object oriented”.
- limbaj de scripting.

Scurtă istorie a limbajului Python
Dezvoltat în 1991 de Guido van Rossum:
I chose Python as a working title for the project,
being in a slightly irreverent mood (and a big fan
of Monty Python's Flying Circus).

Monty Python’s Flying Circus (known during the final series as just Monty Python) is a British
sketch comedy series created by the comedy group Monty Python and broadcast by the BBC from
1969 to 1974.

Python 2 a fost lansat în 2000: a adăugat câteva


elemente noi și a deschis posibilitatea de a contribui
la dezvoltarea sa unei întregi comunități.

Python 3 a fost lansat în 2008: nu este compatibil cu


Python 2. “Sfârșitul” lui Python 2 este stabilit pentru
anul 2020.
Ce conține un program?
Variabile : etichete atașate datelor (inclusiv text sau chiar cod)
Delimitatori: (de exemplu “()") pentru structurarea codului.
Operatori: “+”, “*” etc.
Cuvinte cheie: cuvinte cu înțeles specific care nu pot fi folosite ca
nume pentru variabile ( de exemplu “if” ).
Expresii: combinații de variabile, cuvinte cheie și operatori pentru
evaluarea unei valori.

Acestea sunt folosite în propoziții (instrucțiuni) care spun


computerului ce să facă.
Ce este un program?
Un program constă din instrucțiuni care folosesc:

Line breaks: în Python, fiecare linie este o instrucțiune nouă.


Control flow keywords: cuvinte cheie care controlează fluxul codului.
Delimitatori: de exemplu “:” și tab-urile sunt folosite pentru a
structura codul
Proceduri: sunt bucăți de cod care se execută și returnează rezultatul
codului ce le apelează.
Obiecte: cod care face un job specific.
Biblioteci (Libraries): o colecție de obiecte care sunt proiectate să
facă job-uri similare.
Filozofia limbajului Python
Guido a stabilit o serie de reguli când a proiectat limbajul:

Things should be as simple as possible, but no simpler.


Don’t bother users with details that the machine can handle.
Don’t try for perfection because “good enough” is often just
that.
Borrow ideas from elsewhere whenever it makes sense.

These have resulted in a language which is, to reuse author Luciano


Ramalho’s phrase: “Clear, Concise, and Effective”.
Exemplu de cod Python
Iată două modalități de a afișa numerele pare din tabela înmulțirii cu 5 și cu 10:

[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 10, 20, 30, 40, 50]
for counter1 in {5, 10}:
for counter2 in {1,2,3,4,5,6,7,8,9,10}:
if (counter1 * counter2) % 2 == 0 :
print (counter1 * counter2)

print(list(a*b for a in {5,10} for b in range(1,11)


if not (a*b % 2)))
Execuția programelor Python

Avem nevoie de interpreterul Python, mașina virtuală și biblioteca standard


care conține codul auxiliar necesar execuției (funcții, acces la fișiere etc.).

În plus, se instalează și alte biblioteci specifice.

Pot fi instalate manual toate aceste lucruri dar nu este recomandat

https://www.python.org/downloads/ (Python 3.6.x, Python 3.7.0)

Distribuția Anaconda
Anaconda

Anaconda: o distribuție ce include toate elementele de limbaj,


biblioteci științifice, și multe altele.

Anaconda include Conda, un sistem software pentru gestionarea


bibliotecilor și pentru alegerea între Python 2 și Python 3.

Anaconda poate fi obținută de la:


https://www.continuum.io/downloads
IDE-Integrated Development Environments
În general, pentru scrierea programelor se folosește un mediu de dezvoltare
(IDE), un softawre pentru editare de text care adaugă funcționalități
relative la cod:
Colorare sintaxă
Numere pentru linii
Butoane push
Identificare erori și ajutor
Autocompletare pentru cuvinte cheie, nume de proceduri, etc.

Anaconda conține IDLE, mediul de dezvoltare standard Python dar și Spyder


(Scientific PYthon Development EnviRonment), care este foarte utilizat.
Read–Eval–Print loop (REPL)

O diferență majoră între Limbajele de Scripting și Limbajele de Sistem este


aceea că primele au abilitatea de a executa comenzi interactiv la un promter.

Limbajele capabile REPL au asociate un promter care implementează un mediu


pentru înregistrarea valorilor variabilelor și permite să scrii o linie de cod care
este citită și evaluată iar răspunsul este afișat pe ecran.

Promterul Python REPL arată așa:

>>>
Identificarea și eliminarea erorilor (Debugging)

La executarea codului pot fi semnalate erori:


Erori semnalate la compilare: erori asociate cu probleme de sintaxă.
Erori importate: erori asociate cu căutarea de software necesar programului
Erori de execuție: erori asociate cu logica programului.

Interpreterul va descrie eroarea și locul apariției. Programatorul trebuie să o


elimine, să reexecute codul, să elimine alte erori, etc., până programul rulează.

Nu înseamnă că nu știi să programezi, așa funcționează programarea: 50% scrierea


codului, 50% “repararea” lui.
Algoritmi
Algoritm = rețetă pentru rezolvarea unei probleme.
Cum se calculează media a trei numere?
1. Obține 3 numere.
2. Adună numerele.
3. Împarte suma la 3.
4. Afișează rezultatul.
Recomandare:
Scrie sub formă de comentariu (linie #) algoritmul
Scrie 2-3 instrucțiuni
Compilează
Corectează erorile
Continuă
Documentație pentru biblioteca standard:
https://docs.python.org/3/library/index.html

Referințe la limbaj:
https://docs.python.org/3/reference/index.html

Tutorialul oficial Python:


https://docs.python.org/3/tutorial/index.html
but it assumes experience in other languages.

Python Wiki:
https://wiki.python.org/moin/