Bài 6 - Kỹ thuật lập trình. Đây là tài liệu rất bổ ích đối với các sinh viên thuộc ngành Công nghệ thông tin. Nội dung của bài giảng bao gồm: Lập trình cấu trúc, lập trình hướng đối tượng, che dấu thông tin, các nguyên lý lập trình, chuẩn mã nguồn, qui ước Files, phát triển Code tăng dần (Incrementally), xây dựng và quản lý Source Code... Mời các bạn cùng tham khảo.
Trang 1K THU T L P TRÌNH Ỹ Ậ Ậ
BM CNPM – Khoa CNTT –
HVKTQS 10/2012
Trang 3 Tuy nhiên, th i gian dành cho l p trình ờ ậ
t ườ ng đ i ít h n th i gian dành cho ki m ố ớ ờ ể
th và b o trì. ử ả
Tính d đ c/hi u là m c tiêu hàng đ u ễ ọ ể ụ ầ
c a khâu l p trình ủ ậ
Trang 6L p trình h ậ ướ ng đ i t ố ượ ng
Là kĩ thu t l p trình h tr công ngh đ i t ậ ậ ỗ ợ ệ ố ượ ng. OOP đ ượ c xem là giúp tăng năng su t, ấ
đ n gi n hóa đ ph c t p khi b o trì cũng nh m r ng ph n m m b ng cách cho ơ ả ộ ứ ạ ả ư ở ộ ầ ề ằ phép l p trình viên t p trung vào các đ i t ậ ậ ố ượ ng ph n m m b c cao h n. Ngoài ra, nhi u ầ ề ở ậ ơ ề
ng ườ i còn cho r ng OOP d ti p thu h n cho nh ng ng ằ ễ ế ơ ữ ườ i m i h c v l p trình h n là các ớ ọ ề ậ ơ
ph ươ ng pháp tr ướ c đó.
M t cách gi n l ộ ả ượ c, đây là khái ni m và là m t n l c nh m gi m nh các thao tác vi t mã ệ ộ ỗ ự ằ ả ẹ ế cho ng ườ ậ i l p trình, cho phép h t o ra các ng d ng mà các y u t bên ngoài có th ọ ạ ứ ụ ế ố ể
t ươ ng tác v i các ch ớ ươ ng trình đó gi ng nh là t ố ư ươ ng tác v i các đ i t ớ ố ượ ng v t lý ậ
Nh ng đ i t ữ ố ượ ng trong m t ngôn ng OOP là các k t h p gi a mã và d li u mà chúng ộ ữ ế ợ ữ ữ ệ
đ ượ c nhìn nh n nh là m t đ n v duy nh t. M i đ i t ậ ư ộ ơ ị ấ ỗ ố ượ ng có m t tên riêng bi t và t t c ộ ệ ấ ả các tham chi u đ n đ i t ế ế ố ượ ng đó đ ượ c ti n hành qua tên c a nó. Nh v y, m i đ i t ế ủ ư ậ ỗ ố ượ ng
có kh năng nh n vào các thông báo, x lý d li u (bên trong c a nó), và g i ra hay tr l i ả ậ ử ữ ệ ủ ử ả ờ
đ n các đ i t ế ố ượ ng khác hay đ n môi tr ế ườ ng.
Ra đ i t nh ng năm 1980 ờ ừ ữ
Che d u thông tin, đ m b o tính toàn v n, đúng đ n c u d li u ấ ả ả ẹ ắ ả ữ ệ
Trang 7Che d u thông tin ấ
Ph n m m luôn luôn s d ng m t s c u ầ ề ử ụ ộ ố ấ
trúc d li u đ l u tr thông tin.ữ ệ ể ư ữ
M i m t c u trúc d li u s đỗ ộ ấ ữ ệ ẽ ược truy xu t ấ
b i m t s h u h n các thao tác ở ộ ố ữ ạ
(operations). Các thao tác khác s không th ẽ ểtruy nh p thông tin này đậ ược => đây chính là nguyên lý che d u thông tin.ấ
Ph n l n các ngôn ng LT HĐT cho phép ầ ớ ữ
làm đi u nàyề
Trang 8Các nguyên lý l p trình ậ
Nhi m v chính c a l p trình viên là ệ ụ ủ ậ
t o ra code v i ít l i nh t v i th i gian ít ạ ớ ỗ ấ ớ ờ
Trang 11M t s l u ý th c t ộ ố ư ự ế
Nesting: Nên tránh các L p sâu (deep nesting). For ặ example, consider the following construct of nested
Trang 12M t s l u ý th c t ộ ố ư ự ế
Module Size: Vi c s d ng hàm v i nhi u ệ ử ụ ớ ề
bi n s ph i h t s c c n th n (>= 100). Kích ế ố ả ế ứ ẩ ậ
thước l n có th làm cho vi c qu n lý k t ớ ể ệ ả ếdính và k t n i khó khăn.ế ố
Module Interface: (rule of thumb), b t k ấ ỳ
m t giao di n module mà có nhi u h n 5 ộ ệ ề ơtham s thì ph i đ c bi t c n th n và nên ố ả ặ ệ ẩ ậ
được chia thnàh nhièu module nh h nỏ ơ
Trang 14M t s l u ý th c t ộ ố ư ự ế
Switch Case with Default: Đ m b o ả ả hành vi c a CT n đ nh. ủ ổ ị
Trang 15M t s l u ý th c t ộ ố ư ự ế
Empty Catch Block: nên có ch n b t l i, ặ ắ ỗtránh đ tr ng.ể ố
Trang 17M t s l u ý th c t ộ ố ư ự ế
Read Return to Be Checked: Giá tr tr v ị ả ềsau l nh đ c nên đệ ọ ược ki m traể
VD: if read from scanf() is more than expected, then it may cause a buffer overflow. Hence, the value of read should be checked before accessing the data read. (This is the reason why most languages provide a return value for the read operation.)
Trang 18M t s l u ý th c t ộ ố ư ự ế
Return from Finally Block: One should not return
from finally block, as it can create false beliefs. For example, consider the code
Trang 19M t s l u ý th c t ộ ố ư ự ế
Correlated Parameters: Thông th ng, s t n t i ườ ẽ ồ ạ
m i quan h gi a các tham s ố ệ ữ ố
VD: in the code segment given below, “length” represents the size of BUFFER. If the correlation does not hold, we can run into a serious problem like buffer overflow (illustrated in the code fragment below).
Vì v y, nên ki m tra m i quan h này h n là gi thi t ậ ể ố ệ ơ ả ế
nó đã th a mãn. ỏ
void (char *src , int length , char destn []) {
strcpy (destn , src); /* Can cause buffer overflow if length > MAX_SIZE */
}
Trang 20M t s l u ý th c t ộ ố ư ự ế
Trusted Data Sources: ki m tra d ể ữ
li u nên đ ệ ượ c th c hi n tr ự ệ ướ c khi truy
nh p chúng ậ
For example, while doing the string copy operation, we should check that the source string is null terminated, or that its size is
as we expect.
Give Importance to Exceptions: Chú
tr ng đi u khi n ngo i l ọ ề ể ạ ệ
Trang 21Chu n mã ngu n ẩ ồ
Th c t là chúng ta tiêu t n r t nhi u ự ế ố ấ ề
trong vi c đ c hi u mã ngu n ệ ọ ể ồ
Vì v y c n nh ng chu n m c nh t đ nh ậ ầ ữ ẩ ự ấ ị trong l p trình ậ
Trang 22 Method names should be verbs starting with lowercase: Ph ươ ng th c ứ nên là đ ng t và b t đ u b ng ch th ộ ừ ắ ầ ằ ữ ườ ng (e.g., getValue()).
Exception classes should be suffixed with Exception: Tên các l p ngo i ớ ạ
l nên k t thúc b i h u t ệ ế ở ậ ố Exception (e.g., OutOfBoundException)
Trang 23Qui ướ c v đ t tên ề ặ
Bi n Private nên ch t ế ỉ ườ ng minh (e.g., “private int
value ”)
Bi n v i ph m vi r ng nên có tên dài và ng ế ớ ạ ộ ượ ạ c l i;
bi n ch y vòng l p nên đ ế ạ ặ ượ c đ t tên là i, j, k, …. ặ
Ti n t ề ố is nên đ c s d ng cho các bi n bool và ượ ử ụ ế các ph ươ ng th c đ thánh nh m l n (e.g., isStatus ứ ể ầ ẫ nên đ ượ c s d ng thay cho tên status); bi n ch ph ử ụ ế ỉ ủ
đ nh negative boolean c n tránh ị ầ
T ừ compute có th s d ng cho các hàm tính toán.ể ử ụ
Trang 24Qui c Files ướ
T n t i m t s qui ồ ạ ố ố ướ c v đ t tên và d ề ặ ữ
li u t p ệ ệ
Java source files should have the extension java—this is enforced by most compilers and tools
Kích th ướ c dòng nên nh h n 80 c t, ỏ ơ ộ tránh kí t đ c bi t ự ặ ệ
Trang 25Qui c v Statements ướ ề
Không có qui ướ c chung đáng k ể
Các bi n nên đ ế ượ c kh i t o t i n i khai báo và nên đ ở ạ ạ ơ ượ c khai báo trong ph m ạ
vi nh nh t có th ỏ ấ ể
Khai báo các bi n liên quan v i nhau cùng trong m t đo n l nh. Các bi n ế ớ ộ ạ ệ ế không liên quan đ n nhau nên đ ế ượ c khai báo các đo n l nh khác nhau ở ạ ệ
Các thu c tính c a l p không nên đ public ộ ủ ớ ể
Ch s d ng các l nh ki m tra vòng l p trong vòng l p for ỉ ử ụ ệ ể ặ ặ
Các bi n vòng l p nên đ ế ặ ượ c kh i t o ngay tr ở ạ ướ c vòng l p ặ
Trang 26Qui c v Commenting and ướ ề Layout
Chú thích d ng text đ cho ng ạ ể ườ ọ i đ c
d hi u code c a mình. ễ ể ủ
Chú thích c n gi i thích c th ch c ầ ả ụ ể ứ
năng, tham s c a CT ố ủ
Layout giúp cho ch ươ ng trình sáng s a ủ
có c u trúc rõ dàng ấ
Trang 27Phát tri n Code tăng d n ể ầ
(Incrementally)
Ho t đ ng l p trình b t đ u khi m t s ạ ộ ậ ắ ầ ộ ố thi t k hoàn thành. ế ế
M i module s do m t ho c nhi u l p ỗ ẽ ộ ặ ề ậ trình viên đ m rnhi m. ả ệ
Chính vì v y mà nhu c u qu n lý qui ậ ầ ả trình này là r t cao. Trong ph n này, ta ấ ầ tham kh o mô hình tăng d n ả ầ
Trang 29đi m ki m th code, trong TDD ể ể ử
ng ườ ậ i l p trình viên vi t các ế
k ch b n test tr ị ả ướ c, sau đó m i ớ
vi t code, code đ ế ượ c vi t sau ế
ph i v ả ượ t qua đ ượ c các k ch ị
b n test này ả
Toàn b quá trình đ ộ ượ c th c ự
hi n t ng b ệ ừ ướ c, các k ch b n ị ả
test đ ượ c xây d ng d a trên ự ự
các đ c t , còn code đ ặ ả ượ c vi t ế
ph i v ả ượ c qua đ ượ c k ch b n ị ả
test. Ti n trình TDD đ ế ượ c th ể
hi n trên hình Figure 7.2 ệ
Trang 30Ti n trình l p trình c p Pair ế ậ ặ Programming
Trong l p trình theo c p, code đ ậ ặ ượ c
vi t b i m t c p l p trình viên ch ế ở ộ ặ ậ ứ không ph i b i m t ng ả ở ộ ườ i. Theo đó, công vi c vi t code s đ ệ ế ẽ ượ c phân b ố cho t ng c p l p trình viên ừ ặ ậ
=>Chi phí cao.
Trang 31Xây d ng và qu n lý Source ự ả Code
Trong m t d án th ộ ự ườ ng có nhi u nhóm ng ề ườ i khác nhau cùng tham gia phát tri n code. M i l p trình viên làm vi c v i m t file ể ỗ ậ ệ ớ ộ
mã ngu n, nh ng file này s đ ồ ữ ẽ ượ c biên d ch v i nhau đ t o ị ớ ể ạ nên ph n m m. ầ ề
Trong quá trình phát tri n code, các l p trình viên th ể ậ ườ ng luôn thay đ i các file mã ngu n do h t o ra, cũng nh nh ng file ổ ồ ọ ạ ư ữ không do h t o ra. ọ ạ
V i m c đích ki m soát t t c các file mã ngu n và quá trình ớ ụ ể ấ ả ồ thay đ i c a chúng, các công c ki m soát mã ngu n nh CVS ổ ủ ụ ể ồ ư trong Linux (www.cvshome.org) hay Visual Source Safe (VSS) trong Windows (msdn.microsoft.com/vstudio/previous/ssafe)
th ườ ng đ ượ c s d ng ử ụ
Trang 32 Get a local copy.
Make changes to file(s).
Get reports.
Trang 33C p nh t thay đ i – refactoring ậ ậ ổ
Thay đ i c u trúc bên trong mà không ổ ấ làm thay đ i hành vi c a PM. ổ ủ
Trang 34 4. Dánh sách tham s dài ố Long Parameter List.
5. các câu l nh Switch ệ Switch Statements.
Trang 35Thanh tra mã ngu n ồ
Thanh tra Mã ngu n đồ ược th c hi n b i ự ệ ở
ngườ ậi l p trình và dành cho ngườ ậi l p trình
Là m t ti n trình v i các qui đ nh v vai trò rõ ộ ế ớ ị ềràng
Tr ng tâm tìm ra l i defects.ọ ỗ
D li u thanh tra đữ ệ ược ghi l i và dùng đ ạ ể
đánh giá m c đ hi u qu c a quá trình ứ ộ ệ ả ủ
thanh tra
Trang 36L p k ho ch ậ ế ạ
M c tiêu c a giai đo n l p k ho ch là đ ụ ủ ạ ậ ế ạ ểchu n b cho thanh tra. ẩ ị
Đ i thanh tra độ ược thành l p s bao g m các ậ ẽ ồ
l p trình viên mà code c a h đang c n xem ậ ủ ọ ầxét.
Đ i thanh tra nên bao g m ít nh t ba ngộ ồ ấ ười,
m c dù đôi khi có b n ho c năm thành viên. ặ ố ặ
Đ i thanh tra ph i có m t ngộ ả ộ ười ph trách.ụ
Trang 37T ki m tra (Selfreview) ự ể
Ng ườ i LT t ki m tra mã ngu n c a ự ể ồ ủ mình
Trang 39Ki m tra theo nhóm ể
Trang 40 Tuy nhiên, hi n nay đã có m t s pp ệ ố ố ước
lượng d a trên s lự ố ượng toán t và toán ử
h ngạ
Trang 42K tthúc. Câu h i ế ỏ
Trang 43 Đoàn Văn Ban. Phân tích, Thi t k và L p ế ế ậtrình Hướng đ i tố ượng 1997 Nxb Th ng kê ố
Vi t nam.ệ