You are on page 1of 52

B mn Cng ngh phn mm

Khoa Cng ngh thng tin


Trng i hc Khoa hc T nhin
true class
cout
C++ operator
catch
virtual throw
try
friend bool
cin new
inline private OOP
delete using false STL
public
1
T h S . n g B n h P h n g
d b p h u o n g @f i t . h c mu s . e d u . v n
VCBB

3.0
17
this
PP LT HNG I TNG
PHONG CCH LP TRNH
2
VC

BB

Ni dung
Phong cch lp trnh
Quy c t tn (naming convention)
Quy tc trnh by tng th chng trnh
Quy tc trnh by dng lnh
Quy tc lin quan n hng s
Quy tc lin quan n kiu t nh ngha
Quy tc lin quan n bin
Quy tc lin quan n hm
Quy tc ch thch chng trnh
#include <iostream>
using namespace std;

void main()
{
cout << Hello World;
cout << endl;
3
VC

BB

Quy c t tn (naming convention)
Sc mnh ca lm vic nhm
Phong cch lp trnh
Phim qung co ca hng Coca-Cola
4
VC

BB

Quy c t tn (naming convention)
V sao phi c chun v quy c?
Phong cch lp trnh
5
VC

BB

Quy c t tn (naming convention)
Quy c t tn trong lp trnh
Ngoi tnh ng n, chng trnh my tnh
cn phi d c v d hiu.




Hai chun ang c s dng rng ri:
Quy tc t tn theo kiu lc
Quy tc t tn theo phong cch Hung-ga-ri.
Phong cch lp trnh
vs.
6
VC

BB

Quy c t tn (naming convention)
Quy tc lc (Camel Case)
Khi nim
Cch vit trnh s dng cc khong trng
gia cc t, c s dng trong hu ht cc
ngn ng lp trnh hin i v ph bin nh
C, C++, Visual Basic (VB) v JavaScript.

Phong cch lp trnh
7
VC

BB

Quy c t tn (naming convention)
Quy tc lc (Camel Case)
Mt s t ng ngha vi k hiu CamelCase
BumpyCaps, BumpyCase
CamelCaps, CamelHumpedWord
CapWordsPython
mixedCase trong Python (lowerCamelCase)
ClCl (Capital-lower Captital-lower)
HumpBackNotation
InterCaps, NerdCaps, InternalCapitalization
WordsStrungTogether, WordsRunTogether
Phong cch lp trnh
8
VC

BB

Quy c t tn (naming convention)
Quy tc lc (Camel Case)
Phn loi
UpperCamelCase (thng gi l PascalCase)
nu k t u tin ca cu c vit hoa.
V d:
TheQuickBrownFoxJumpsOverTheLazyDog

lowerCamelCase (thng gi l camelCase)
nu k t u tin ca cu c vit thng.
V d:
theQuickBrownFoxJumpsOverTheLazyDog
Phong cch lp trnh
9
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
Khi nim
L quy c t tn trong lp trnh my tnh
c pht minh bi Charles Simonyi.
Thng s dng trong mi trng lp trnh
Windows nh C, C++ v Visual Basic.
Tn ca bin cho bit kiu, nh s dng
hoc thm ch l tm vc ca bin :
Tin t vit thng cha thng tin v kiu ca bin.
Phn cn li bt u bng k t hoa cho bit bin
cha thng tin g.
Phong cch lp trnh
10
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
Phn loi theo mc ch ca tin t
K hiu Hung-ga-ri hng h thng
(Systems Hungarian notation) s dng tin t
th hin kiu d liu thc s, v d:
lAccountNum: bin c kiu l s nguyn di
(l long integer)
arru8NumberList: bin l mt mng cc s
nguyn 8 bit khng du
(arru8 array of unsigned 8-bit integers)
szName: bin l mt chui c k t kt thc
(sz zero-terminated string)
Phong cch lp trnh
11
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
Phn loi theo mc ch ca tin t
K hiu Hung-ga-ri hng ng dng
(Apps Hungarian notation) s dng tin t
th hin mc ch s dng ca bin, v d:
rwPosition: bin th hin mt dng
(rw row)
usName: bin th hin mt chui khng an ton
(us unsafe), ngha l n cn c x l trc
khi s dng.
strName: bin th hin mt chui cha mt tn
(str string).
Phong cch lp trnh
12
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
V d
bBusy: kiu lun l (b boolean)
cApples: s lng (c count)
dwLightYears: kiu t kp (dw double word)
fBusy: c trng thi (f flag)
nSize: kiu s nguyn v lu s lng
(n count)
iSize: kiu s nguyn v lu ch s
(i index)
fpPrice: kiu s chm ng (fp floating-point)
Phong cch lp trnh
13
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
V d
dbPi: kiu s thc di (db double)
pFoo: kiu con tr (p pointer)
pfnFunc: con tr hm (pfn pointer to function)
rgStudents: mng hoc mt vng (rg range)
szLastName: chui c k t kt thc
(sz zero-terminated string)
u32Identifier: kiu s nguyn 32-bit khng
du (u32 unsigned 32-bit integer)
stTime: cu trc thi gian (st structure)
Phong cch lp trnh
14
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
i vi con tr v mng thng c kiu
ca phn t i km:
pszOwner: con tr n chui k t c kt thc
(psz pointer to zero-terminated string)
rgfpBalances: mng cc s chm ng
(rgfp array/range of floating-point)
aulColors: mng cc s nguyn di khng du
(aul array of unsigned long)

Phong cch lp trnh
15
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
Thng thy trong lp trnh Windows (trong
sch Programming Windows, sch u tin v
lp trnh Windows API ca Charles Petzold):
wParam: tham s kiu word (w word-size)
lParam: tham s kiu s nguyn di
(l long-integer)
hwndFoo: bin qun l ca s
(hwnd handle to a window)
lpszBar: bin con tr s nguyn di n mt
chui c kt thc (lpsz long pointer to a
zero-terminated string)
Phong cch lp trnh
16
VC

BB

Quy c t tn (naming convention)
K hiu Hung-ga-ri
i khi c m rng trong C++ cho bit
phm ca bin, phn cch bi du gch di:
g_nWheels: bin ton cc (g global) v l s
nguyn (integer).
_wheels: bin cc b (local) v khng xc nh
kiu.
s_wheels: bin tnh (s static).
m_nWheels: thnh vin (m member) ca mt
cu trc/lp v l s nguyn (n integer).
m_wheels: thnh vin (m member) ca mt
cu trc/lp v khng xc nh kiu.
Phong cch lp trnh
17
VC

BB

Quy c t tn (naming convention)
nh gi k hiu Hung-ga-ri
u im
Kiu bin c th thy c t tn bin .
Nhiu bin cc nhau vi cng ng ngha c th
c s dng trong cng mt khi m ngun:
iWidth, fWidth, dWidth
Cc tn bin c thng nht hn.
C th pht hin d dng vic p kiu khng ph
hp hoc cc biu thc s dng kiu khng
tng thch khi c m ngun.
Trnh s dng nhm thao tc:
heightWindow = window.getWidth()
Phong cch lp trnh
18
VC

BB

Quy c t tn (naming convention)
nh gi k hiu Hung-ga-ri
Khuyt im
Vic kim tra bng mt l tha khi vic kim tra
kiu c thc hin t ng bi trnh bin dch.
Mt s IDE hin i t ng nh du nhng ch
s dng kiu khng tng thch.
Khi kiu ca bin thay i, tn ca bin cng
phi thay i nu khng s khng thng nht.
Trong a s trng hp, vic bit ngha s
dng ca mt bin bao hm vic bit kiu ca n.
V vy, nu khng bit bin dng lm g th
vic bit kiu ca n cng v ch!
Phong cch lp trnh
19
VC

BB

Quy c t tn (naming convention)
Mt s quan im ng ch
Linus Torvalds (cha ca h iu
hnh m ngun m Linux)
khng ng h k hiu Hung-ga-ri
hng h thng.
Encoding the type of a function into the name (so-called Hungarian
notation) is brain damagedthe compiler knows the types anyway and can
check those, and it only confuses the programmer
Phong cch lp trnh
20
VC

BB

Quy c t tn (naming convention)
Mt s quan im ng ch
Steve McConnell (tc gi ca nhiu
sch CNPM ni ting, c tp ch
Software Development xem l mt
trong ba ngi c nh hng nht
trong cng nghip phn mm cng vi Bill Gates
v Linus Torvalds) ng h k hiu Hung-ga-ri.
Although the Hungarian naming convention is no longer in widespread use,
the basic idea of standardizing on terse, precise abbreviations continues to
have value. ... Standardized prefixes allow you to check types accurately
when you're using abstract data types that your compiler can't necessarily
check
Phong cch lp trnh
21
VC

BB

Quy c t tn (naming convention)
Mt s quan im ng ch
Bjarne Stroustrup (nh khoa hc ngi
an Mch pht trin NNLT C++)
khng ng h k hiu Hung-ga-ri
hng h thng cho NNLT C++.
No I don't recommend Hungarian. I regard Hungarian (embedding an
abbreviated version of a type in a variable name) a technique that can be
useful in untyped languages, but is completely unsuitable for a language
that supports generic programming and object-oriented programmingboth
of which emphasize selection of operations based on the type an arguments
(known to the language or to the run-time support). In this case, 'building the
type of an object into names' simply complicates and minimizes abstraction
Phong cch lp trnh
22
VC

BB

Quy c t tn (naming convention)
Mt s quan im ng ch
Joel Spolsky (k s phn mm v tc
gi ca blog v pht trin phn mm
c bit v phn mm Windows) ng h
k hiu Hung-ga-ri hng ng dng.
If you read Simonyis paper closely, what he was getting at was the same
kind of naming convention as I used in my example above where we
decided that us meant unsafe string and s meant safe string. Theyre
both of type string. The compiler wont help you if you assign one to the
other and Intellisense wont tell you bupkis. But they are semantically
different; they need to be interpreted differently and treated differently and
some kind of conversion function will need to be called if you assign one to
the other or you will have a runtime bug. If youre lucky. (...) Theres still a
tremendous amount of value to Apps Hungarian, in that it increases
collocation in code, which makes the code easier to read, write, debug, and
maintain, and, most importantly, it makes wrong code look wrong.
Phong cch lp trnh
23
VC

BB

Quy tc trnh by tng th chng trnh
Quy tc 1
Chng trnh nn c tch thnh
nhiu n th (m-un), mi n th
thc hin mt cng vic v cng
c lp vi nhau cng tt. iu ny
s gip chng trnh d bo dng
hn v khi c chng trnh, ta khng phi
c nhiu, nh nhiu cc on lnh nm ri rc
hiu c iu g ang c thc hin.
Phong cch lp trnh
24
VC

BB

Quy tc trnh by tng th chng trnh
Quy tc 2
Nn s dng cc tham s khi truyn
thng tin cho cc chng trnh con.
Trnh s dng cc bin ton cc
truyn thng tin gia cc
chng trnh con v nh vy s lm mt tnh
c lp gia cc chng trnh con v rt
kh khn khi kim sot gi tr ca chng khi
chng trnh thi hnh.
Phong cch lp trnh
25
VC

BB

Quy tc trnh by tng th chng trnh
Quy tc 3
Cch trnh by chng trnh cng
nht qun s cng d c v d hiu.
T , ta s mt t thi gian ngh
v cch vit chng trnh v
nh vy s c nhiu thi gian hn
ngh v cc vn cn gii quyt.
Phong cch lp trnh
26
VC

BB

Quy tc trnh by tng th chng trnh
Quy tc 4
Chng trnh nn gi c tnh
n gin v r rng trong hu ht
cc tnh hung. Vic s dng cc
mo lp trnh ch th hin s
kho lo ca lp trnh vin v lm
tng hiu qu chng trnh ln mt cht,
trong khi iu s nh mt i tnh n gin
v r rng ca chng trnh.
Phong cch lp trnh
27
VC

BB

Quy tc trnh by tng th chng trnh
Quy tc 4
V d
Phong cch lp trnh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
a[i++] = 1;
a[i] = 1;
i++;

if (doSomething() == false)
bool bResult = doSomething();
if (bResult == false)

*x += (*xp = (2*k < (n m) ? c[k + 1] : d[k--]));
if (2 * k < n m)
*xp = c[k + 1];
else
*xp = d[k--];
*x = *x + *xp;
28
VC

BB

Quy tc trnh by tng th chng trnh
Quy tc 5
Chng trnh nn thc hin nh mt dng chy t
trn xung di
Cc ch th #include, #define trn cng.
Sau n khai bo cc bin ton cc,
class hay struct.
Khng nn c nhng thay i bt cht do s
dng goto hay continue.
Phong cch lp trnh
29
VC

BB

Quy tc trnh by dng lnh
Quy tc 6
Mi cu lnh nn c t ring trn mt dng
chng trnh d c v d quan st
cch thc hin trong qu trnh tm li (debug).
Phong cch lp trnh
1
2
3
4
5
6
7
8
9
10
x=a+b-c*d;for(int i=0; i<n; i++) // Kh c!

x = a + b c * d; // Vit thnh 2 dng
for (int i = 0; i < n; i++) // d c hn

// Thc hin bao nhiu ln khi debug?
while (i < 100) i++;

// Phi theo di i bit if c thc hin khng!
if (i < 100) i++;
30
VC

BB

Quy tc trnh by dng lnh
Quy tc 7
Cu lnh phi th hin ng cu trc chng trnh
bng cch s dng hp l tht u dng (tab)
Phong cch lp trnh
1
2
3
4
5
6
7
if (nCount == 0) printf(No data!\n);

if (nCount == 0)
printf(No data!\n);

if (nCount == 0)
printf(No data!\n);
31
VC

BB

Quy tc trnh by dng lnh
Quy tc 8
Cc du { } bao cc khi lnh phi c canh
thng hng theo mt trong hai cch sau:






Nn vit cp du { } trc ri vit cc lnh vo
gia trnh thiu cc du ngoc ny.
Phong cch lp trnh
1
2
3
4
5
6
7
8
9
// Cch 1 // Cch 2
if () if () {
{
}
} else {
else
{ }

}
32
VC

BB

Quy tc trnh by dng lnh
Quy tc 9
Cc cu lnh nm gia cp du { } c vit
tht vo mt khong tab (cc lnh ngang cp
th phi tht vo nh nhau).
Phong cch lp trnh
1
2
3
4
5
6
7
8
if (a == 1)
{
printf(Mot\n);
if (a == 2)
printf(Hai\n);
else
printf(Khac Mot va Hai!\n);
}
33
VC

BB

Quy tc trnh by dng lnh
Quy tc 10
Cc ton t v ton hng trong mt biu thc nn
c tch ri nhau bi 1 khong trng nhm lm
biu thc d c hn (tr cc ton t ++, , )
Phong cch lp trnh
1
2
3
4
5
6
7
8
a=b*c; // Kh c!
a = b * c; // D c hn!

a = b ++; // Khng nn!
a = b++; // Nn!

a = - b; // Khng nn!
a = -b; // Nn!
34
VC

BB

Quy tc trnh by dng lnh
Quy tc 11
C khong trng ngn cch gia du phy hay
chm phy vi cc tham s.
Phong cch lp trnh
1
2
3
4
5
6
7
8
9
10
11
// Khong trng sau du , trong khai bo hm
void hoanVi(int a,int b);
void hoanVi(int a, int b);

// Khong trng sau du , trong li gi hm
hoanVi(x,y);
hoanVi(x, y);

// Khong trng sau du ; trong vng lp for
for (int i = 1;i < n;i++)
for (int i = 1; i < n; i++)
35
VC

BB

Quy tc trnh by dng lnh
Quy tc 12
Nn c khong trng gia t kha v du (,
nhng khng nn c khong trng gia tn hm
v du (
Phong cch lp trnh
1
2
3
4
5
6
7
8
9
10
// Khng nn c khong trng gia hoanVi v (
void hoanVi (int a, int b);
void hoanVi(int a, int b);

// Nn c khong trng gi if v (
// Khng nn c khong trng gia strcmp v (
if(strcmp (strInput, info) == 0)

if (strcmp(strInput, info) == 0)

36
VC

BB

Quy tc trnh by dng lnh
Quy tc 13
Nn s dng cc du ( ) khi mun trnh cc li v
u tin ton t
Phong cch lp trnh
1
2
int i = a >= b && c < d && e <= g + h;
int i = (a >= b) && (c < d) && (e <= (g + h));
37
VC

BB

Quy tc trnh by dng lnh
Quy tc 14
Nn dng cc dng trng phn chia cc on
lnh trong mt hm nh: on nhp/xut d liu,
on tng ng vi cc bc x l khc nhau.
Phong cch lp trnh
1
2
3
4
5
6
7
8
9
10
11
void main()
{
// (Cc) on lnh nhp y


// (Cc) on lnh x l y


// (Cc) on lnh xut Xut

}
38
VC

BB

Quy tc trnh by dng lnh
Quy tc 15
Mi dng lnh khng nn di qu 80 k
t, iu ny gip vic c chng trnh
d dng hn khi khng phi thc hin
cc thao tc cun ngang mn hnh.
Trong trng hp dng lnh qu di
th nn ngt thnh nhiu dng.
Phong cch lp trnh
1
2
3
4
5
6
int myComplexFuncuntion(unsigned int uiValue, int iValue,

int myComplexFuncuntion(unsigned int uiValue,
int iValue,
char cValue,
int *piValue);
39
VC

BB

Quy tc lin quan n hng s
Quy tc 16
Tn hng khng theo quy tc PascalCase,
camelCase hay k hiu Hung-ga-ri m c vit in
ton b v gia cc t cch nhau bng du _
Phong cch lp trnh
1
2
3
4
5
const int NumberOfElements 100;

const int NUMBEROFELEMENTS 100;

const int NUMBER_OF_ELEMENTS 100;
40
VC

BB

Quy tc lin quan n hng s
Quy tc 17
Cc hng s khng nn vit trc tip vo chng
trnh m nn s dng #define hay const nh
ngha. iu ny s gip lp trnh vin d kim sot
nhng chng trnh ln v gi tr ca hng s khi
cn thay i th ch phi thay i mt ln duy nht
gi tr nh ngha ( #define hay const).
Tuy vy, khng nn dng #define thng xuyn
nh ngha cc hng s, bi v trong qu trnh
debug, ta s khng th xem c gi tr ca mt
hng s nh ngha bng #define.
Phong cch lp trnh
41
VC

BB

Quy tc lin quan n kiu t nh ngha
Quy tc 18
Tn kiu t nh ngha l danh t c t theo
PascalCase v bt u bng mt k t i din:
TMyTypeName: Kiu nh ngha bng typedef
SMyStructName: Kiu cu trc (structure)
UMyUnionName: Kiu hp nht (union)
EMyEnumName: Kiu tp hp (enumeration)
CMyClassName: Lp i tng (class)
Phong cch lp trnh
42
VC

BB

Quy tc lin quan n bin
Quy tc 19
Tn bin c t theo k hiu Hung-ga-ri sao
cho ngha, c th l l cc t hon chnh hoc
vit tt nhng phi d c (d pht m)
Phong cch lp trnh
1
2
3
4
5
int ntuso, nmauso;

int nTuso, nMauso;

int nTuSo, nMauSo;
43
VC

BB

Quy tc lin quan n bin
Quy tc 20
Tn bin kiu d liu t nh ngha (typedef,
struct, union, class, ) c vit theo camelCase
v khng c tin t.
Phong cch lp trnh
1
2
3
4
5
CPhanSo psPhanSo;

CPhanSo PhanSo;

CPhanSo phanSo;
44
VC

BB

Quy tc lin quan n bin
Quy tc 21
Bin nn c khai bo gn v tr
m n bt u c s dng nhm
trnh vic khai bo mt lot cc
bin d tha u hm hay
chng trnh.
Trong C chun, tt cc bin bt buc phi
khai bo u khi trc khi s dng.
Trong C++ bin c th khai bo bt k ni
u trc khi s dng.
45
VC

BB

Quy tc lin quan n bin
Quy tc 22
Mi bin nn khai bo trn mt dng nhm d ch
thch v ngha ca mi bin.
Phong cch lp trnh
1
2
3
4
float fHeSoA, fHeSoB, fNghiem; // !

float fHeSoA, fHeSoB; // H s a, b ca pt bc 1
float fNghiem; // Nghim ca pt bc 1
46
VC

BB

Quy tc lin quan n bin
Quy tc 23
Cc bin khng nn c s dng li vi nhiu
ngha khc nhau trong cng mt hm.
Phong cch lp trnh
1
2
3
4
5
for (i = 0; i < n; i++) // n l s ln lp


for (n = 0; n < 10; n++) // n l bin iu khin

47
VC

BB

Quy tc lin quan n hm
Quy tc 24
Tn hm c vit theo camelCase v phi l
ng t phn nh cng vic hm s thc hin
hoc gi tr tr v ca n.
Phong cch lp trnh
1
2
3
4
5
int SoLonNhat(int a[], int n); // Khng r hnh ng

int TimSoLonNhat(int a[], int n); // Sai quy tc t tn

int timSoLonNhat(int a[], int n); // OK
48
VC

BB

Quy tc ch thch chng trnh
Quy tc 25
Nn s dng du // v du ny khng
c nh hng khi s dng cp k
hiu /* */ v hiu ha mt on
lnh trong qu trnh sa li chng
trnh. Nn nh rng trong C/C++
khng cho php cc cp du /* */ lng nhau.
Phong cch lp trnh
// ...
/*

*/
49
VC

BB

Quy tc ch thch chng trnh
Quy tc 26
Nn vit ch thch ngn gn nhng
y , d hiu qua vic trnh by
chng trnh r rng, n gin v
cch t tn hp l. Vi cc ch
thch ngn, nn t n trn cng
dng lnh cn ch thch. Vi cc ch thch di
hn, hoc ch thch cho c mt on lnh hy
t cu ch thch trn mt dng ring ngay pha
trn cu lnh cn ch thch.
Phong cch lp trnh
50
VC

BB

Quy tc ch thch chng trnh
Quy tc 26
V d
Phong cch lp trnh
1
2
3
4
5
6
7
8
9
10
11
12
13
if (a == 2)
return true; // Trng hp c bit
else
return laSoNguyenTo(a)); // Trng hp khc

if (argc > 1)
{
// M v x l tp tin
FILE *fp = fopen(argv[1], rb);
if (fp != NULL)

fclose(fp);
}
51
VC

BB

Quy tc ch thch chng trnh
Quy tc 27
Khng nn lm dng ch thch, c gng gi cho
chng trnh ca bn d c, d hiu.
Phong cch lp trnh
1
i++; // Cu lnh ny nhm tng i thm 1 n v!!!
52
VC

BB

Quy tc ch thch chng trnh
Quy tc 28
Vit ch thch cho tng hm v cho tng tp tin
m ngun (.h v .cpp).

Phong cch lp trnh
1
2
3
4
5
6
7
8
9
10
11
12
// M t : Chng trnh x l mng mt chiu
// Tc gi : ng Bnh Phng
// Email : dbphuong@fit.hcmus.edu.vn
// Ngy cp nht : 15/06/2011

// Tn hm : timSoLonNhat
// M t : Tm s ln nht trong mng cho trc
// Kiu tra v : int
// Tham s: int a[] Mng mt chiu cc phn t kiu int
// Tham s: int n S lng phn t
int timSoLonNhat(int a[], int n);

You might also like