You are on page 1of 0

B mn Cng ngh phn mm- Khoa CNTT- HCN

Email: vynv@coltech.vnu.vn
K ngh phn mm
Software Engeneering
B mn Cng ngh phn mm HCN
2
NguynVnV
Ni dung
Bi 8: Lp trnh
Ngn ng lp trnh
Phong cch lp trnh
Lp trnh trnh li
Lp trnh hng hiu qu
B mn Cng ngh phn mm HCN
3
NguynVnV
TI LiU THAM KHO
1. Nguyn Vn V, Nguyn Vit H. Gio trnh k ngh phn
mm. Nh xut bn i hc Quc gia H ni, 2008
2. Grady Booch, James Rumbaugh, Ivar Jacobson. The Unified
Modeling language User Guid. Addison-Wesley, 1998.
3. M. Ould. Managing Software Quality and Business Risk, John
Wiley and Sons, 1999.
4. Roger S.Pressman, Software Engineering, a Practitioners
Approach. Fifth Edition, McGraw Hill, 2001.
5. Ian Sommerville, Software Engineering. Sixth Edition, Addison-
Wasley, 2001.
6. Nguyn Vn V. Phn tch thit k h thng thng tin hin i.
Hng cu trc v hng i tng, NXB Thng k, 2002, H
Ni.
B mn Cng ngh phn mm HCN
4
NguynVnV
Khi nim lp trnh hiu qu
Sn phm phn mm tt khi
phn tch tt
thit k tt
lp trnh tt
kim th cht ch
k thut lp trnh tt
chuyn nghip (tun theo cc chun)
n nh
hiu qu
B mn Cng ngh phn mm HCN
5
NguynVnV
Lp trnh hiu qu hn, sn phm r tin hn
Tc pht trin cao hn
nng lc biu din cao hn
kh nng s dng li cao hn
D bo tr hn
d hiu, d sa i, thch nghi
Cht lng cao hn
s dng cc cu trc an ton hn
chng trnh cn d hiu
Khi nim lp trnh hiu qu
B mn Cng ngh phn mm HCN
6
NguynVnV
Tc vit m ngun
Tc pht trin cao lm ngn chng trnh ngun
Tc khng t l thun vi s dng lnh
Cu lnh phc tp lm gim d hiu
Ngn ng mc cao (4GL)
nng lc biu din cao
tc pht trin nhanh
B mn Cng ngh phn mm HCN
7
NguynVnV
Tin ha ca k thut lp trnh
Lp trnh tun t (tuyn tnh)
Lp trnh c cu trc (th tc)
Lp trnh hng chc nng
Lp trnh hng i tng
K thut th h th 4
B mn Cng ngh phn mm HCN
8
NguynVnV
Lp trnh tun t
khng c/thiu cc lnh c cu trc
(for, while, do while)
lm dng cc lnh GOTO
thiu kh nng khai bo bin cc b
ghp ni cao
chng trnh kh hiu, kh sa, d sinh li
Ngn ng dng: th h 1, 2: assembly, basic,...
B mn Cng ngh phn mm HCN
9
NguynVnV
Lp trnh c cu trc
s dng cc lnh c cu trc
(for, while, do while)
hn ch/cm dng GOTO
s dng chng trnh con, bin cc b
d hiu hn, an ton hn
Ngn ng dng: th h 2, 3: Fortran, Pascal, C,
B mn Cng ngh phn mm HCN
10
NguynVnV
Lp trnh hng chc nng
Da trn nguyn tc ghp ni d liu
trao i d liu bng tham s v gi tr tr li
loi b hon ton d liu dng chung
Loi b cc hiu ng ph khi sa i cc moun
chng trnh; nng cao tnh ti s dng
V d: Lisp
B mn Cng ngh phn mm HCN
11
NguynVnV
Lp trnh hng i tng
Bao gi & che du thng tin
thao tc vi d liu qua cc giao din xc nh
k tha
Ngn ng hng i tng: C++, Java, C#
cc b hn
d ti s dng hn
thun tin cho cc ng dng ln
B mn Cng ngh phn mm HCN
12
NguynVnV
Lp trnh logic
Tch tri thc v bi ton khi k thut lp trnh
M t tri thc
cc qui tc
cc s thc
mc tiu
H thng t chng minh
tm ng i n mc tiu
V d:Prolog
B mn Cng ngh phn mm HCN
13
NguynVnV
V d. Prolog: 8 hu
member(X,[X|L]).
member(X,[Y|L]):-member(X,L).
solution([]).
solution([X/Y|Other]):-
solution(Other),
member(Y, [1,2,3,4,5,6,7,8]),
noattack(X/Y, Other).
noattack(_,[]).
noattack(X/Y, [X1/Y1 | Other]):-
Y =\= Y1, Y1-Y =\= X1-X, Y1-Y =\= X-X1,
noattack(X/Y , Other).
B mn Cng ngh phn mm HCN
14
NguynVnV
La chn ngn ng
c trng ca ngn ng
nng lc (kiu bin, cc cu trc)
tnh kh chuyn
mc h tr ca cc cng c
Min ng dng ca ngn ng
lp trnh h thng
nghip v, kinh doanh
khoa hc k thut
tr tu nhn to
Nng lc, kinh nghim ca nhm pht trin
Yu cu ca khch hng
B mn Cng ngh phn mm HCN
15
NguynVnV
Nng lc ca ngn ng
Ngn ng bc cao:
c cu trc, cu lnh phong ph
h tr nhiu kiu d liu
h tr con tr, qui
h tr hng i tng
th vin phong ph
nn dng ngn ng bc cao (hn)
B mn Cng ngh phn mm HCN
16
NguynVnV
Tnh kh chuyn
Yu t quan trng ca ngn ng, cn khi
thay i phn cng
thay i OS
Java kh chuyn
Cc ngn ng thng dch (script) kh chuyn
s dng cc tnh nng chun ca ngn ng
s dng script khi c th
B mn Cng ngh phn mm HCN
17
NguynVnV
C cng c hiu qu
Trnh bin dch hiu qu
bin dch tc cao
kh nng ti u cao
khai thc cc tp lnh, kin trc phn cng mi
Cc cng c tr gip hiu qu
editor, debugger, linker, make...
IDE (Integrated Develop Environment)
mi trng Unix thng khng dng IDE
B mn Cng ngh phn mm HCN
18
NguynVnV
Min ng dng v ngn ng
Phn mm h thng:
hiu qu, vn nng, d m rng
C, C++
H thi gian thc: C, C++, Ada, Assembly
Phn mm nhng: C++, Java
Phn mm khoa hc k thut:
tnh ton chnh xc, th vin ton hc
mnh,d dng song song ha
Fortran vn ph bin
B mn Cng ngh phn mm HCN
19
NguynVnV
Min ng dng v ngn ng (t)
Phn mm nghip v:
CSDL: Oracle, DB2, SQL Server, MySQL...
ngn ng: FoxPro, COBOL, VB, VC++
Tr tu nhn to:
Lisp, Prolog, OPS5,...
Lp trnh Web/CGI:
Perl, ASP, PHP, Java, Java script, Python...
B mn Cng ngh phn mm HCN
20
NguynVnV
Phong cch lp trnh
Hng ti phong cch lm cho m ngun
d hiu, d sa i
an ton (t li)
Bao gm cc yu t:
cch t tn hm v bin
cch xy dng cu lnh, cu trc chng trnh
cch vit ch thch
Ngi khc c th hiu c, bo tr c
B mn Cng ngh phn mm HCN
21
NguynVnV
Ti sao cn d hiu
Phn mm lun cn sa i
sa li
nng cp
ko di tui th, nng cao hiu qu kinh t
Nu khng d hiu
bo tr tn thi gian, chi ph cao
tc gi phi bo tr sut vng i ca phn mm
bn thn tc gi cng khng hiu
B mn Cng ngh phn mm HCN
22
NguynVnV
Ch thch
Mi iu c Ch thch trong chng trnh
Mc ch s dng ca cc bin
Chc nng ca khi lnh, cu lnh
cc lnh iu khin
cc lnh phc tp
Ch thch cc m un
mc ch, chc nng ca m un
tham s, gi tr tr li (giao din)
cc m un thuc cp
cu trc, thut ton
nhim v ca cc bin cc b
tc gi, ngi kim tra, thi gian
B mn Cng ngh phn mm HCN
23
NguynVnV
t tn
t tn bin, tn hm c ngha, gi nh
S dng cc k hiu, t ting Anh c ngha
Lm cho d c
dng DateOfBirth hoc date_of_birth
khng vit dateofbirth
Trnh t tn qu di
khng t tn di vi cc bin cc b
Thng nht cch dng
i cho vng lp, tmp cho cc gi tr tm thi...
B mn Cng ngh phn mm HCN
24
NguynVnV
Cu lnh
Cc cu lnh phi m t cu trc
tt l, d c, d hiu
Lm n gin cc lnh
mi lnh trn mt dng
trin khai cc biu thc phc tp
hn ch truyn tham s l kt qu ca hm, biu thc
printf("%s", strcpy(des, src));
Trnh cc cu trc phc tp:
cc lnh if lng nhau
iu kin ph nh if not
B mn Cng ngh phn mm HCN
25
NguynVnV
Hm v bin cc b
Chng trnh cn c chia thnh nhiu m un
(hm)
Khng vit hm qu di
khng qu 2 trang mn hnh
to ra cc hm th cp gim di tng hm
Khng dng qu nhiu bin cc b
khng th theo di ng thi hot ng
ca nhiu bin
(vd. khng qu 7 bin cc b)
B mn Cng ngh phn mm HCN
26
NguynVnV
X l li
C th pht hin li trong khi thc hin
li chia 0
li input/output,
X l li
nht qun trong x l: phn loi li; thng nht
nh dng thng bo,
phn bit output v thng bo li
cc hm th vin nn trnh vic t x l, t a ra
thng bo li
B mn Cng ngh phn mm HCN
27
NguynVnV
Output v thng bo (li)
Output l d liu, cn c dng lm input
cho phn mm khc
Thng bo (li) l cc thng tin nht thi,
trng thi h thng, li v cch khc phc
Cn tch output v thng bo li
OS thng cung cp 3 lung d liu chun
stdin (cin): input chun (bn phm)
stdout (cout): output chun (mn hnh)
stderr (cerr): lung thng bo li chun
(khng nh hng li c)
B mn Cng ngh phn mm HCN
28
NguynVnV

void main()
{
int count = 0;
char buf[128];
while (NULL != scanf(%s, buf)) {
upcase(buf);
printf(%s, buf);
count += strlen(buf);
}
fprintf(stderr, number of chars: %d\n, count);
}
#convert < normal.txt > uppercase.txt
number of chars: 678
convert.c
B mn Cng ngh phn mm HCN
29
NguynVnV
X l li trong hm th vin
Ngi vit v ngi s dng th vin l khc nhau
Ngi s dng thng mun c cch x l ring
Hm th vin tr li trng thi li, khng t x l
tr trng thi bng gi tr tr li
tr trng thi bng tham s
tr li bng nm ngoi l (trong cc OOL)
int lookup(int a[], int key, int& err_code)
{
if (not found) err_code = 0;
else err_code =1;
}
B mn Cng ngh phn mm HCN
30
NguynVnV
Ngoi l
L cch thc x l li tin tin trong cc ngn ng
hng i tng
mun x l nm ra mt ngoi l (i tng cha
thng tin li)
mun iu khin bt ngoi l (nu c)
Tch phn x l li khi phn ci t thut ton
thng thng, lm cho chng trnh d c hn
D dng hn, an ton hn
B mn Cng ngh phn mm HCN
31
NguynVnV
Nm ngoi l
double MyDivide(double num, double denom)
{
if (denom == 0.0) {
throw invalid_argument(The denom cannot be 0.);
}
else {
return num / denom;
}
}
B mn Cng ngh phn mm HCN
32
NguynVnV
Bt ngoi l
try {
result = MyDivide(x, y);
}
catch (invalid_argument& e) {
cerr << e.what() << endl;
... // m x l vi ngoi l
};
B mn Cng ngh phn mm HCN
33
NguynVnV
Giao din ca m un
Thng nht nh dng
th t truyn tham s
strcpy(des, src)
Kim tra tnh hp l ca d liu
ch thc hin x l vi d liu hp l
Lm n gin giao din (gim ghp ni)
khng truyn tha tham s
tm cch kt hp cc khon mc lin quan
B mn Cng ngh phn mm HCN
34
NguynVnV
Phong cch lp trnh tt
Tun theo cc chun thng dng
Chun c chp nhn rng ri hn d hiu hn
Ch gii y mi khi khng tun theo chun
"Ngi khc c hiu c khng?"
B mn Cng ngh phn mm HCN
35
NguynVnV
K thut lp trnh trnh li
K thut lp trnh tt da trn cc yu t
lp trnh c cu trc
dng cc lnh c cu trc
moun ha
hn ch dng cc cu trc nguy him
ng gi/che du thng tin
xy dng kiu d liu tru tng
hn ch thao tc trc tip ln thuc tnh
B mn Cng ngh phn mm HCN
36
NguynVnV
Trnh cc cu trc nguy him
S thc
cc php ton c lm trn, kt qu khng
chnh xc tuyt i
so snh (=) hai s thc l khng kh thi
Con tr
khi nim mc thp
c kh nng gy li nghim trng
d nhm
double r;
int* n = &r;
B mn Cng ngh phn mm HCN
37
NguynVnV
Trnh cc cu trc nguy him
Cp pht b nh ng
qun cp pht
qun gii phng
ch nn dng vi ngn ng hng i tng
(C++)
qui
kh hiu
d nhm iu kin dng
B mn Cng ngh phn mm HCN
38
NguynVnV
B nh ng vi C++
T ng ha cp pht b nh
T ng ha gii phng
class Stack {
private:
int* buf;
int pos;
public:
Stack (int size) { buf = new int[size]; }
int push(int);
int pop();
~Stack() { delete[] buf; }
}
hm khi to i tng
hm hy i tng
B mn Cng ngh phn mm HCN
39
NguynVnV
int use_stack()
{
int m;
Stack s(10);
...
s.push(m);
...
return 0;
}
i tng s c khi to,
hm khi to c gi t ng
ht phm vi s dng,
i tng s c hy,
hm hy c gi t ng
B nh ng vi C++
B mn Cng ngh phn mm HCN
40
NguynVnV
nh kiu d liu
Nhiu li lp trnh do gn d liu sai kiu
Cc ngn ng bc cao cung cp nhiu kiu d liu v
cho php c t min d liu
Tn kiu c ngha lm cho chng trnh d hiu
typedef enum {Green, Yellow, Red} TLColor;
...
TLColor CurrentColor;
CurrentColor = Red;
CurrentColor = 4;
pht hin cc li sai kiu khi bin dch
B mn Cng ngh phn mm HCN
41
NguynVnV
Lp/kiu d liu tru tng
Mc cao hn ca nh kiu d liu l xy dng lp i tng
Kim tra ng v tnh ng n ca d liu
class PrimeNumber {
private:
int value;
public:
...
int set(int val, int& err_code) {
// verify val
// if val is not a prime number
// set err_code = 1
...
}
};
B mn Cng ngh phn mm HCN
42
NguynVnV
...
PrimeNumber p;
int n, err_code;
err_code = 1;
while (err_code) {
cout << "input a prime number: ";
cin >> n;
p.set(n, err_code);
}
gn v kim tra tnh hp l t ng
Lp/kiu d liu tru tng
B mn Cng ngh phn mm HCN
43
NguynVnV
Lp trnh phng th (Defensive programming)
Nhiu lnh c kh nng sinh li
lnh vo/ra
cc php ton
thao tc vi b nh
truyn tham s sai kiu
D on kh nng xut hin li
Khc phc li
lu trng thi an ton
quay li trng thi an ton gn nht
B mn Cng ngh phn mm HCN
44
NguynVnV
Lnh vo ra
d liu khng hp l
trn b m (kiu k t)
li thao tc file (sai tn, cha c m, )
Cc php ton
li chia 0
trn s
so snh s thc (bng nhau)
Lp trnh phng th (Defensive programming)
B mn Cng ngh phn mm HCN
45
NguynVnV
Thao tc b nh
qun cp pht, qun gii phng b nh
thiu b nh
sai a ch, trn b nh
Lp trnh phng th (Defensive programming)
B mn Cng ngh phn mm HCN
46
NguynVnV
Lp trnh phng th
FILE* fp;
fp = fopen("data", "r");
FILE* fp;
if (NULL == (fp = fopen("data", "r")) {
fprintf(stderr, "can not open file...");
...
}
B mn Cng ngh phn mm HCN
47
NguynVnV
Lp trnh th li
Fault tolerance programming
Khng th loi tr hon ton li
Cn c cc h thng c tin cy c bit
Dung th li: chp nhn s xut hin li lp trnh
Pht hin, khc phc li
Khi nguyn t th li phn cng
Da trn nguyn tc song song ha chc nng
B mn Cng ngh phn mm HCN
48
NguynVnV
Nguyn l th li
Song song ha thit b
Dng thng tin d tha khi phc d liu
system 1
system 2
system N
...
xc sut c li <1
xc sut c h thng
ngng hot ng

N
Error Correction Code ECC
parity check, check sum
B mn Cng ngh phn mm HCN
49
NguynVnV
N - version programming
version 1
version 2
version 3
comparison
s dng nhiu nhm lp trnh
so snh kt qu
cng thut ton th c xu hng mc cng li
B mn Cng ngh phn mm HCN
50
NguynVnV
Khi phc hi (Recovery block)
Thut ton 1
s dng cc thut ton khc nhau
kim tra tnh hp l ca kt qu
Kim th chp nhn
Thut ton 2 Thut ton 3
quick sort
bubble sort
simple sort
B mn Cng ngh phn mm HCN
51
NguynVnV
Th li d liu (Data fault tolerance)
Phc hi li
kim tra tnh hp l ca d liu mi khi bin i
ch chp nhn cc d liu hp l
Phc hi tin
dng d liu d tha
kim tra v khi phc d liu
B mn Cng ngh phn mm HCN
52
NguynVnV
Hng hiu qu thc hin
Phn mm ngy cng phc tp, a dng
m phng
ng dng thi gian thc
phn mm nhng
tr chi
Hiu qu thc hin lun cn c xem xt
thut ton hiu qu
k thut lp trnh hiu qu
ngn ng lp trnh hiu qu
B mn Cng ngh phn mm HCN
53
NguynVnV
Ci thin tc
Ti u ha chu trnh
a php ton bt bin ra ngoi chu trnh
tnh sn gi tr c s dng nhiu ln
Hn ch gi hm nh vi tn s cao
ph tn cho gi hm nh
dng hm inline, dng macro
Hn ch truyn tham s tr l cu trc phc tp
tham s c copy ln stack
truyn tham s bin (tham chiu)
B mn Cng ngh phn mm HCN
54
NguynVnV
Ph tn cho gi hm/th tc
Copy tham s ln stack
Copy gi tr tr li t stack
Chuyn iu khin chng trnh
mt tnh lin tc ca dng lnh
mt tnh cc b ca cache
B mn Cng ngh phn mm HCN
55
NguynVnV
Macro v hm inline
#define CUBE(x) (x*x*x)
CUBE(n+1)
inline int cube(int x)
{
return x*x*x;
}
khng c kiu
khng an ton
B mn Cng ngh phn mm HCN
56
NguynVnV
Truyn tham s
Tham s tr
copy gi tr (b nh) ca tham s ln stack
khng hiu qu vi bin kiu cu trc ln
khng an ton vi cc cu trc phc tp
Tham s bin/tham chiu
copy a ch ca tham s ln stack
a ch c ln c nh (4 bytes)
ni dung c th b thay i (dng t kha
const)
B mn Cng ngh phn mm HCN
57
NguynVnV
Ci thin tc (tip)
Trnh dng mng nhiu chiu
Trnh dng bin con tr
Dng cc kiu d liu n gin
double --> float
Rt gn cc biu thc
Dng cc php ton nhanh
++i;
n<<2;
B mn Cng ngh phn mm HCN
58
NguynVnV
Ci thin tc (trnh lnh r nhnh)
Trnh gi hm (chng trnh con)
Trnh vng lp
Trnh iu kin (if)
tn dng hiu qu pipeline
B mn Cng ngh phn mm HCN
59
NguynVnV
Pipeline
F D R E W
F D R E W
F D R E W
F D R E W
F D R E W
lnh i
lnh i+1
time
lnh i+2
lnh i+3
lnh i+4
B mn Cng ngh phn mm HCN
60
NguynVnV
Hiu qu vo/ra
Ti thiu cc yu cu input/output
tc thit b ngoi vi chm
loi b cc inp/out khng cn thit
for (i=0; i<10000000; i++) {
...
printf("i = %d\n", i);
}
Input/Output theo khi
ti thiu s ln gi th vin input/output
tn dng hiu qu b m input/output
B mn Cng ngh phn mm HCN
61
NguynVnV
Person a[N];
...
for (i=0; i<N; i++) {
fread(&a[i], sizeof(Person), 1, fp);
...
}
fread(a, sizeof(Person), N, fp);
for (i=0; i<N; i++) {
...
}
B mn Cng ngh phn mm HCN
62
NguynVnV
Phong cch lp trnh vi C/C++
Phn mm c cu thnh bi nhiu tp, cc
tp thng c bin dch ring r
.c: khai bo d liu, hm
.h: nh ngha cc kiu d liu dng chung
Khng khai bo d liu, nh ngha hm trong
cc tp header (.h)
B mn Cng ngh phn mm HCN
63
NguynVnV
Cc bc xy dng phn mm trn C/C++
Son tho (edit)
Tin bin dch (pre-compile)
Bin dch (compile)
Kt ni (link)
Thc hin (execute)
B mn Cng ngh phn mm HCN
64
NguynVnV
date.h
typedef struct {
int year, mon, day;
} Date;
Date my_birthday;
void print_date(Date d)
{
printf(year: %d, mon: %d, day: %d,
d.year, d.mon, d.day);
}
B mn Cng ngh phn mm HCN
65
NguynVnV
date.h
typedef struct {
int year, mon, day;
} Date;
void print_date(Date);
#include date.h
void print_date(Date d)
{
printf(year: %d, mon: %d, day: %d,
d.year, d.mon, d.day);
}
date.c
date.h
B mn Cng ngh phn mm HCN
66
NguynVnV
.c
.o
.c
.o
...
.exe
compile
link
source
object
include
header
.h
date.h
B mn Cng ngh phn mm HCN
67
NguynVnV
calender.c
calender.o
date.h
tools.c
tools.o
print_date()
print_date() print_date()
link error
date.h
B mn Cng ngh phn mm HCN
68
NguynVnV
calender.
c
calender.o
date.h
tools.c
tools.o
calender.exe
date.c
date.o
print_date()
print_date()
print_date()
date.h
B mn Cng ngh phn mm HCN
69
NguynVnV
Pre-compile
Ch th chng trnh dch (tin bin dch)
To ra cc macro
To ra cc phin bn phn mm khc nhau
Qun l cc tp header
#include
#define
#ifdef
#ifndef
#endif
B mn Cng ngh phn mm HCN
70
NguynVnV
#define Cube(x) (x*x*x)
...
void main()
{
...
m = Cube(n);
...
}
Pre-compile
B mn Cng ngh phn mm HCN
71
NguynVnV
Pre-compile
#define DEBUG
...
int foo()
{
#ifdef DEBUG
fprintf(stderr, "foo() called");
#endif
...
}
To cc phin bn phn mm khc nhau
B mn Cng ngh phn mm HCN
72
NguynVnV
Header & Precompile
Date.h
Calender.h Schedule.h
JobManager.c
include
include
B mn Cng ngh phn mm HCN
73
NguynVnV
date.h
#ifndef DATE_H
#define DATE_H
typedef struct {
int year, mon, day;
} Date;
void print_date(Date);
#endif
Header & Precompile
B mn Cng ngh phn mm HCN
74
NguynVnV
#ifndef CALENDER_H
#define CALENDER_H
#include date.h
...
#endif
calender.h
#ifndef SCHEDULE_H
#define SCHEDULE_H
#include date.h
...
#endif
schedule.h
Header & Precompile
B mn Cng ngh phn mm HCN
75
NguynVnV
#include calender.h
#include schedule.h
...
void main()
{
...
}
JobManager.c
Header & Precompile
B mn Cng ngh phn mm HCN
76
NguynVnV
Cu hi n tp
1. K tht lp trnh tt th hin ch no? H qu ca n?
2. Nu cc k thut lp trnh c? c trng ca mi loi
l g?
3. Tiu chun la chn ngn ng lp trnh?
4. Th no l ngn ng kh chuyn? Cho v d?
5. Nu cc min ng ng dng v ngn ng thch hp vi
n?
6. Cc yu t to ra phong cch lp trnh l gi? N hng ti
phn mm c c trng g?
B mn Cng ngh phn mm HCN
77
NguynVnV
Cu hi n tp
7. GiI thch cch lm: ch thch?, t tn?, vit cu lnh?,
t hm v bin cc b?, x l li v thng bo? X l li
trong th vin? X l ngoi l?
8. Tiu chun cho phong cch lp trnh tt?
B mn Cng ngh phn mm HCN
78
NguynVnV
Cu hi v tho lun

You might also like