Sunteți pe pagina 1din 47

Cursul 3

Dezvoltarea programelor
Utilizarea Sistemelor de Operare (USO)
20 octombrie 2014
Departamentul de Calculatoare
CSE Dep Cursul 3, Dezvoltarea programelor 1/54
Moto
There are only two kinds of programming languages: those people
always bitch about and those nobody uses.
Bjarne Stroustrup
One of the main causes of the fall of the Roman Empire was that
lacking zero they had no way to indicate successful termination
of their C programs.
Robert Firth
CSE Dep Cursul 3, Dezvoltarea programelor 2/54
Utilizarea sistemului de s
,
iere
separator director
ierarhie
ier
dimensiune
cale
nume
director
r d cin
creare
tergere
listare
a are
opera ii
recursive
trunchiere
redirectare
concepte
opera ii
nume
binar/text
ASCII
editare
arhivare
comprimare
copiere
mutare
schimbare
director
CSE Dep Cursul 3, Dezvoltarea programelor 3/54
Utilizarea sistemului de s
,
iere
http://www.geekarmy.com/geeks/2906/file-transferring/
CSE Dep Cursul 3, Dezvoltarea programelor 4/54
Suport curs

Suport (Introducere n sisteme de operare)

Capitolul 11 Compilare s
,
i linking

Capitolul 14 Utilitare pentru dezvoltare


CSE Dep Cursul 3, Dezvoltarea programelor 5/54
Ce ne ofera software-ul?

automatizare

ecientizare

divertisment

extensibilitate

us
,
urint
,
a n distribuire/copiere
CSE Dep Cursul 3, Dezvoltarea programelor 7/54
De ce dezvoltam software?

creativitate

us
,
urint
,
a n distribuire

reutilizare

provocare

dezvoltare continua
CSE Dep Cursul 3, Dezvoltarea programelor 8/54
Prole de persoane implicate

utilizatori

dezvoltatori, progrmatori, ingineri

antreprenori s
,
i oameni de afaceri

manageri

proiectant
,
i s
,
i arhitect
,
i software

proiectant
,
i de interfet
,
e

administratori de sistem/ret
,
ea
CSE Dep Cursul 3, Dezvoltarea programelor 9/54
Procesul de dezvoltare software

trasare specicat
,
ii

proiectare

implementare

testare

integrare

instalare (deployment)

mentenant
,
a
CSE Dep Cursul 3, Dezvoltarea programelor 10/54
Implementare

programatori, dezvoltatori, ingineri software

scrierea de programe conform specicat


,
iilor s
,
i proiectarii

se ncepe sau nu de la zero; se poate porni de la alt cod deja


scris

folosirea altor pachete software acolo unde este cazul

folosirea limbajelor de programare


CSE Dep Cursul 3, Dezvoltarea programelor 11/54
Folosirea limbajelor de programare

se aleg limbajele adecvate proiectului

depind de opt
,
iunile dezvoltatorilor, ale proiectului s
,
i ale
pachetelor care vor folosite

performant
,
a s
,
i legaturi cu sistemul de operare: C

dezvoltare rapida: Python, Ruby

scripting s
,
i automatizare: Perl, Python, Bash

web: PHP, Perl, Python, Java

enterprise: Java, C++


CSE Dep Cursul 3, Dezvoltarea programelor 12/54
Biblioteci
Program calls library.
Library is functionality. Program uses functionality.
http://stackoverow.com/questions/148747/what-is-the-dierence-between-a-framework-and-a-library
program
library
CSE Dep Cursul 3, Dezvoltarea programelor 13/54
Framework-uri
Framework calls program.
Framework is skeleton. Program is meat.
http://stackoverow.com/questions/148747/what-is-the-dierence-between-a-framework-and-a-library
framework
program
CSE Dep Cursul 3, Dezvoltarea programelor 14/54
Cod sursa pentru un limbaj

un s
,
ier al unui program este denumit s
,
ier cod sursa

codul sursa este codul citibil al unui limbaj de programare:


format text

cod sursa: instruct


,
iuni ntr-un limbaj

codul sursa respecta sintaxa acelui limbaj

pentru a nt
,
elege un program este necesara cunoas
,
terea
sintaxei limbajului

codul sursa este scris de programator


CSE Dep Cursul 3, Dezvoltarea programelor 16/54
Editoare s
,
i IDE-uri

folosite pentru scrierea codului sursa

editoare

scriu n general text, printre care s


,
i cod sursa

Vim, Emacs, Notepad++, Sublime Text

IDE

Integrated Development Environment

integreaza editor, compilator, debugger, biblioteci

Eclipse, Visual Studio, Code::Blocks, NetBeans

facilitat
,
i

syntax higlighting, auto indentation, utilitare pentru debugging


integrate

code folding, code completion (autocompletion)


CSE Dep Cursul 3, Dezvoltarea programelor 17/54
Coding Style

convent
,
ii s
,
i recomandari pentru scrierea codului sursa

us
,
urint
,
a n a nt
,
elege codul sursa

consecvent
,
a

n general cu suport din partea editoarelor s


,
i IDE-urilor

aspecte acoperite

indentare

nume de funct
,
ii, variabile, constante, macro-uri

spat
,
iere

comentarii de cod

Steve Oualline: C Elements of Style

Python PEP 8
CSE Dep Cursul 3, Dezvoltarea programelor 18/54
Controlul versiunii

VCS (Version Control System), SCM (Source Code


Management)

codul este t
,
inut ntr-un repository

modicarile din program sa e t


,
inute ntr-o istorie

un element din istorie este o versiune

permite revenirea la o stare anteriora n caz de probleme

permite ramuri de dezvoltare s


,
i lucru n echipa

Git, Subversion, Darcs, Mercurial, Bazaar


CSE Dep Cursul 3, Dezvoltarea programelor 19/54
GitHub

serviciu de hosting pentru repository-uri Git

Git, issue tracking, wiki

us
,
or de creat repository-uri, de lucrat n echipa

contribut
,
ii la alte proiecte

codul este deschis (open source)

pentru cod nchis (teme de casa), putet


,
i cere repository-uri
gratis pentru student
,
i

alternative: BitBucket, GitLab

instant
,
a GitLab n facultate

https://gitlab.cs.pub.ro/

autenticare folosind LDAP (contul de pe cs.curs.pub.ro)


CSE Dep Cursul 3, Dezvoltarea programelor 20/54
Best Practices

nume sugestive

cod nengramadit, bine spat


,
iat

cod comentat relevant

cod indentat

funct
,
ii de dimensiune rezonabila

funct
,
ionalitat
,
i diferite n s
,
iere/module diferite

evitarea hard coding-ului: folosit


,
i macro-uri sau variabile n
loc de valori hard codate

limitata dimensiunea maxima a liniilor

evitarea duplicarii codului

consecvent
,
a
CSE Dep Cursul 3, Dezvoltarea programelor 21/54
Operat
,
iile utilizatorului cu aplicat
,
iile

instalare

dezinstalare

parcurgere documentat
,
ie

congurare s
,
i personalizare

rulare (cu diverse opt


,
iuni)

dezvoltatorul trebuie sa-i faca viat


,
a cat mai us
,
oara
utilizatorului
CSE Dep Cursul 3, Dezvoltarea programelor 23/54
Pachete software

arhive cu s
,
ierele necesare pentru instarea aplicat
,
iei

s
,
iere de date, s
,
iere de congurare, s
,
iere executabile

s
,
ierele executabile sunt folosite pentru a rula aplicat
,
ia

utilizatorul instaleaza pachetele software s


,
i apoi foloses
,
te
s
,
ierele din acestea
Cont
,
inutul pachetului tcpdump
user@host:~$ dpkg -L tcpdump
[...]
/usr/share/man/man8/tcpdump.8.gz # pagina de manual
[...]
/usr/sbin/tcpdump # executabilul din pachet
CSE Dep Cursul 3, Dezvoltarea programelor 24/54
Fis
,
iere executabile

folosite pentru rularea aplicat


,
iei

dublu click n GUI, rulare de comanda n linia de comanda

obt
,
inute din codul sursa

n Unix se gasesc, n general n /bin, /sbin, /usr/bin s


,
i
/usr/sbin

pot binare sau text

binare pentru cod sursa compilat (C, C++, Java)

text pentru cod sursa interpretate (Perl, Python, Ruby)


CSE Dep Cursul 3, Dezvoltarea programelor 25/54
Compilare s
,
i interpretare

un s
,
ier cod sursa poate compilat sau interpretat

deosebirea ntre compilare s


,
i interpretare

compilare: codul sursa este translatat de un program denumit


compilator n cod mas
,
ina, dupa care poate executat

interpretare: un program este executat direct din cod sursa


prin intermediul unui interpretor

compilatoare s
,
i interpetoare

GCC (GNU Compiler Collection) compilator de C, C++,


Ada, Fortran

MSVC (Microsoft Visual C) compilator de C, C++

GCL (GNU Common Lisp) interpretor de Common Lisp

Python: interpretor de Python

Perl: interpretor de Perl


CSE Dep Cursul 3, Dezvoltarea programelor 26/54
Linking

n urma procesului de compilare, din modulul cod sursa


rezulta un modul obiect

modulul obiect este s


,
ier binar (.o, .obj)

mai multe s
,
iere obiect (+biblioteci) sunt legate (linked)
ntr-un s
,
ier executabil

cod sursa compilat modul obiect

module obiect s
,
i biblioteci linkate executabil
CSE Dep Cursul 3, Dezvoltarea programelor 27/54
Documentat
,
ie

pentru a nt
,
elege funct
,
ionarea aplicat
,
iei

de utilizator, user manual : congurare, opt


,
iuni de rulare,
indicat
,
ii de instalare

de dezvoltator, technical manual : arhitectura, coding style,


module, indicat
,
ii de compilare s
,
i testare

pot documente, s
,
iere PDF, wiki-uri, pagini de manual
CSE Dep Cursul 3, Dezvoltarea programelor 28/54
De la dezvoltator la utilizator

cod surs
ier
cod surs
ier
obiect
ier
obiect
ier
executabil
pachet
software
ier
de date
ier de
congurare
bibliotec
compilare
compilare
linking
dezvoltator
utilizator
CSE Dep Cursul 3, Dezvoltarea programelor 29/54
De ce programare n limbajul C?

limbaj foarte cunoscut

limbaj foarte puternic

limbaj aproape de hardware s


,
i sistemul de operare, ecient

documentat
,
ie, tutoriale, cart
,
i
CSE Dep Cursul 3, Dezvoltarea programelor 31/54
Procesul de dezvoltare pentru programe C

scriere de s
,
iere cod sursa: surse (.c) s
,
i headere (.h)

urmarirea unui coding style

compilarea s
,
ierelor cod sursa n s
,
iere obiect

linkarea s
,
ierelor cod obiect s
,
i a bibliotecilor n s
,
ier executabil

pe Unix/Linux, pentru compilare/linking folosim gcc (GNU C


Compiler)
CSE Dep Cursul 3, Dezvoltarea programelor 32/54
Compilare de program simplu n C
Compilare cu gcc
user@host$ ls -F
hello-world.c
user@host$ gcc hello-world.c
user@host$ ls -F
a.out* hello-world.c
user@host$ ./a.out
Hello, World!
user@host$ rm a.out
user@host$ ls -F
hello-world.c
user@host$ gcc -Wall hello-world.c -o hello-world
user@host$ ls -F
hello-world* hello-world.c
user@host$ ./hello-world
Hello, World!
CSE Dep Cursul 3, Dezvoltarea programelor 33/54
Compilare s
,
i linking de program simplu n C
Compilare cu gcc
user@host$ ls -F
hello-world.c
user@host$ gcc -Wall -c hello-world.c
user@host$ ls -F
hello-world.c hello-world.o
user@host$ gcc hello-world.o -o hello-world
user@host$ ls -F
hello-world* hello-world.c hello-world.o
user@host$ ./hello-world
Hello, World!
CSE Dep Cursul 3, Dezvoltarea programelor 34/54
Modularizare s
,
i module

Do one thing, do one thing well!

funct
,
ionalitat
,
ile diferite intra n s
,
iere sursa diferite

evitam ngramadirea funct


,
ionalitat
,
ilor ntr-un singur s
,
ier

ecare s
,
ier poarta numele de modul
CSE Dep Cursul 3, Dezvoltarea programelor 35/54
Compilare s
,
i linking din surse multiple
Compilare cu gcc din mai multe surse
user@host$ ls -F
debug.h http_reply_once.c sock_util.c sock_util.h util.h
user@host$ gcc -Wall -c sock_util.c
user@host$ gcc -Wall -c http_reply_once.c
user@host$ ls -F
debug.h http_reply_once.o sock_util.h util.h
http_reply_once.c sock_util.c sock_util.o
user@host$ gcc http_reply_once.o sock_util.o -o http_reply_once
user@host$ ls -F
debug.h http_reply_once.c sock_util.c sock_util.o
http_reply_once* http_reply_once.o sock_util.h util.h
CSE Dep Cursul 3, Dezvoltarea programelor 36/54
Cauze frecvente pentru erori de compilare s
,
i linking

nu sunt denite variabile

nu sunt denite funct


,
ii, nu se linkeaza toate modulele

se uita punct s
,
i virgula de la sfars
,
itul unei instruct
,
iuni

nu se nchid acolade sau paranteze


CSE Dep Cursul 3, Dezvoltarea programelor 37/54
Procesul de build

building: obt
,
inerea unui executabil, a unui set de executabile
sau a unui pachet software din cod sursa

o versione de nalizare se mai cheama s


,
i un build

pentru programe scrise n C nseamna compilare, linking etc.


CSE Dep Cursul 3, Dezvoltarea programelor 39/54
Sisteme de build

cele care permit automatizarea procesului de build

make: folosit foarte mult n lumea Unix/Linux

Ant, Maven: folosite pentru Java

Scons: scris n Python

Rake: folosit pentru Ruby


CSE Dep Cursul 3, Dezvoltarea programelor 40/54
Make

sistem de build s
,
i automatizare

folosit ndeosebi pentru automatizare procesului de compilare


(dar nu numai)

se scriu reguli ntr-un s


,
ier denumit n general Makefile

se ruleaza comenzile aferente regulilor, n mod automat,


folosind comanda make
CSE Dep Cursul 3, Dezvoltarea programelor 41/54
Folosire simpla a Make
1 hello-world: hello-world.c
2 gcc -Wall hello-world.c -o hello-world
Compilare folosind make pentru s
,
ierul Makele de mai sus
user@host$ ls -F
hello-world.c
user@host$ make
gcc -Wall hello-world.c -o hello-world
user@host$ ls -F
hello-world* hello-world.c
CSE Dep Cursul 3, Dezvoltarea programelor 42/54
Folosire mai avansata a Make
1 all: hello-world
2
3 hello-world: hello-world.c
4 gcc -Wall hello-world.c -o hello-world
5
6 clean:
7 rm -f hello-world hello-world.o
Compilare folosind make pentru s
,
ierul Makele de mai sus
user@host$ ls -F
hello-world.c
user@host$ make
gcc -Wall hello-world.c -o hello-world
user@host$ ls -F
hello-world* hello-world.c
CSE Dep Cursul 3, Dezvoltarea programelor 43/54
Folosire eleganta a Make
1 .PHONY: all clean
2
3 all: hello-world
4
5 hello-world: hello-world.o
6 gcc hello-world.o -o hello-world
7
8 hello-world.o: hello-world.c
9 gcc -Wall -c hello-world.c
10
11 clean:
12 -rm -f hello-world hello-world.o
13 -rm -f *
Compilare folosind make pentru s
,
ierul Makele de mai sus
user@host$ ls -F
hello-world.c
user@host$ make -f Makefile.elegant
gcc -Wall -c hello-world.c
gcc hello-world.o -o hello-world
user@host$ ls -F
hello-world* hello-world.c hello-world.o
CSE Dep Cursul 3, Dezvoltarea programelor 44/54
Folosire eleganta a Make pentru surse multiple
1 .PHONY: all clean
2
3 all: http reply once
4
5 http reply once: http reply once.o sock util.o
6 gcc http reply once.o sock util.o -o http reply once
7
8 http reply once.o: http reply once.c util.h debug.h sock util.h
9 gcc -Wall -c http reply once.c
10
11 sock util.o: sock util.c util.h debug.h sock util.h
12 gcc -Wall -c sock util.c
13
14 clean:
15 -rm -f http reply once http reply once.o sock util.o
16 -rm -f *
Compilare folosind make pentru s
,
ierul Makele de mai sus
user@host$ ls -F
Makefile debug.h http_reply_once.c sock_util.c sock_util.h util.h
user@host$ make
gcc -Wall -c http_reply_once.c
gcc -Wall -c sock_util.c
gcc http_reply_once.o sock_util.o -o http_reply_once
user@host$ ls -F
Makefile http_reply_once* http_reply_once.o sock_util.h util.h
debug.h http_reply_once.c sock_util.c sock_util.o
CSE Dep Cursul 3, Dezvoltarea programelor 45/54
Nice to know: Obt
,
inerea automata a regulilor n Makele
Folosire gcc -MM pentru obt
,
inerea automata a regulilor
user@host$ gcc -MM sock_util.c
sock_util.o: sock_util.c util.h debug.h sock_util.h
user@host$ gcc -MM http_reply_once.c
http_reply_once.o: http_reply_once.c util.h debug.h sock_util.h
CSE Dep Cursul 3, Dezvoltarea programelor 46/54
Compilers: Principles, Techniques and Tools

The Dragon Book

Aho, Sethi, Ullman

2nd Edition, 2006

cartea de baza pentru toate cursurile de compilatoare din


universitat
,
i

expunere exhaustiva a analizei sintactice, semnatice s


,
i
parserelor
CSE Dep Cursul 3, Dezvoltarea programelor 48/54
Guido van Rossum

inventatorul limbajului de programare Python

Benevolent Dictator for Life (BDFL) pentru Python

a activat la Google n perioada 2005-2012

din 2013 lucreaza la Dropbox


CSE Dep Cursul 3, Dezvoltarea programelor 49/54
Google

google.com cel mai folosit site din lume

fondata de Larry Page s


,
i Sergey Brin

lansata n 1998

init
,
ial: search engine + advertising

aplicat
,
ii web

Android

Chrome

YouTube
CSE Dep Cursul 3, Dezvoltarea programelor 50/54
Valgrind

http://valgrind.org

detectarea de probleme la rulare (runtime)

n principal folosit pentru probleme de lucru cu memoria

Linux s
,
i Darwin (Mac OS X)

un engine peste care ruleaza componente dedicate: memcheck


(implicit), cachegrind, callgrind, helgrind
CSE Dep Cursul 3, Dezvoltarea programelor 51/54
Cuvinte cheie

software

implementare

programare

limbaj de programare

biblioteci

framework-uri

cod sursa

coding style

editor

IDE

controlul versiunii

Git

GitHub

GitLab

pachet software

s
,
ier executabil

s
,
ier obiect

compilare

linking

limbajul C

gcc

modularizare

sistem de build

make

Makefile
CSE Dep Cursul 3, Dezvoltarea programelor 52/54
Resurse utile

http://www.oualline.com/style/index.html

http://www.gnu.org/software/make/

http://www.gnu.org/software/libc/manual/

http://git-scm.com/

http://gitimmersion.com/

http://www.moolenaar.net/habits.html
CSE Dep Cursul 3, Dezvoltarea programelor 53/54