Bài giảng kỹ thuật lập trình

110 1 0
Bài giảng kỹ thuật lập trình

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng kỹ thuật lập trình 1. Ôn lại máy tính số, ngôn ngữ, thể hiện dữ liệu. 2. Phân tích topdown bottomup. 3. Cấu trúc dữ liệu giải thuật. 4. Cấu trúc ₫iều khiển gọi hàm. 5. Lặp và ₫ệ qui. 6. Cơ bản về kiểm thử phần mềm. 7. Ôn lại hướng ₫ối tượng. 8. Xây dựng phầm mềm bằng cách lắp ghép những linh kiện cơ bản. 9. Tính tổng quát hoá. 10. Thừa kế trong xây dựng class ₫ối tượng mới. 11. Tính ₫a xạ. 12. Tính thường trú

MƠN KỸ THUẬT LẬP TRÌNH Đối tượng : SV ₫ại học quy ngành CNTT Nội dung gồm 12 chương : Ơn lại máy tính số, ngơn ngữ, thể liệu Phân tích top-down & bottom-up Cấu trúc liệu & giải thuật Cấu trúc ₫iều khiển & gọi hàm Lặp ₫ệ qui Cơ kiểm thử phần mềm Ôn lại hướng ₫ối tượng Xây dựng phầm mềm cách lắp ghép linh kiện Tính tổng qt hố 10 Thừa kế xây dựng class ₫ối tượng 11 Tính ₫a xạ 12 Tính thường trú Tài liệu tham khảo : ƒ Tập slide giảng & thực hành môn học ƒ CD MSDN Microsoft Visual Studio Môn : Kỹ thuật lập trình Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM Slide MƠN KỸ THUẬT LẬP TRÌNH Chương ƠN LẠI MÁY TÍNH SỐ, NGƠN NGỮ LẬP TRÌNH, THỂ HIỆN DỮ LIỆU Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Các khái niệm máy tính số ƒ Máy tính số thiết bị thực số hữu hạn chức (tập lệnh), chế thực lệnh tự ₫ộng, bắt ₫ầu từ lệnh ₫ược ₫ịnh ₫ó lệnh cho ₫ến lệnh cuối Danh sách lệnh ₫ược thực ₫ược gọi chương trình ƒ Các lệnh mà máy hiểu thực ₫ược ₫ược gọi lệnh máy Ta dùng ngôn ngữ ₫ể miêu tả lệnh Ngôn ngữ lập trình cấu thành từ yếu tố : cú pháp ngữ nghĩa Cú pháp qui ₫ịnh trật tự kết hợp phần tử ₫ể cấu thành lệnh (câu), ngữ nghĩa cho biết ý nghĩa lệnh ₫ó ƒ Bất kỳ cơng việc (bài tốn) ngồi ₫ời ₫ược phân chia thành trình tự nhiều cơng việc nhỏ Trình tự cơng việc nhỏ ₫ược gọi giải thuật giải công việc ngồi ₫ời Mỗi cơng việc nhỏ ₫ược chia nhỏ cịn phức tạp, ⇒ cơng việc ngồi ₫ời ₫ược miêu tả trình tự lệnh máy (chương trình ngơn ngữ máy) Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Các khái niệm máy tính số (tt) ƒ vấn ₫ề mấu chốt việc dùng máy tính giải cơng việc ngồi ₫ời lập trình (₫ược hiểu nơm na qui trình xác ₫ịnh trình tự ₫úng lệnh máy ₫ể thực công việc) Cho ₫ến nay, lập trình cơng việc người (với trợ giúp ngày nhiều máy tính) ƒ Với cơng nghệ phần cứng nay, ta chế tạo máy tính mà tập lệnh máy sơ khai, lệnh máy thực công việc nhỏ ₫ơn giản ⇒ công việc ngồi ₫ời thường tương ₫ương với trình tự lớn (hàng triệu) lệnh máy ⇒ Lập trình ngơn ngữ máy phức tạp, tốn nhiều thời gian, công sức, kết khó bảo trì, phát triển ƒ Ta muốn có máy luận lý với tập lệnh (₫ược ₫ặc tả ngơn ngữ lập trình) cao cấp gần gủi với người Ta thường thực máy máy vật lý + chương trình dịch Có loại chương trình dịch : trình biên dịch (compiler) trình thơng dịch (interpreter) Khoa Cơng nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Các khái niệm máy tính số (tt) ƒ Gọi ngôn ngữ máy vật lý N0 Trình biên dịch ngơn ngữ N1 sang ngơn ngữ N0 nhận ₫ầu vào chương trình ₫ược viết ngơn ngữ N1, phân tích lệnh N1 chuyển thành danh sách lệnh ngơn ngữ N0 có chức tương ₫ương Để viết chương trình dịch từ ngôn ngữ N1 sang N0 dễ dàng, ₫ộ phức tạp lệnh ngôn ngữ N1 không cao so với lệnh ngơn ngữ N0 ƒ Sau có máy luận lý hiểu ₫ược ngôn ngữ luận lý N1, ta ₫ịnh nghĩa thực máy luận lý N2 theo cách tiếp tục ₫ến ta có máy luận lý hiểu ₫ược ngơn ngữ Nm gần gũi với người, dễ dàng miêu tả giải thuật toán cần giải ƒ Nhưng qui trình chưa có ₫iểm dừng, với yêu cầu ngày cao kiến thức ngày nhiều, người ta tiếp tục ₫ịnh nghĩa ngôn ngữ với tập lệnh ngày gần gũi với người ₫ể miêu tả giải thuật dễ dàng, gọn nhẹ sáng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Các cấp ₫ộ ngơn ngữ lập trình ƒ Ngơn ngữ máy vật lý loại ngôn ngữ thấp mà người lập trình bình thường dùng ₫ược Các lệnh tham số lệnh ₫ược miêu tả số nhị phân (binary) hay hexadecimal Đây loại ngôn ngữ mà máy vật lý hiểu trực tiếp, người gặp nhiều khó khăn việc viết bảo trì chương trình cấp ƒ Ngôn ngữ assembly gần với ngôn ngữ máy, lệnh ngôn ngữ assembly tương ứng với lệnh máy ₫ược biểu diễn dạng gợi nhớ Ngoài ra, người ta tăng cường thêm khái niệm "lệnh macro" ₫ể nâng sức mạnh miêu tả giải thuật ƒ Ngơn ngữ cấp cao theo trường phái lập trình cấu trúc Pascal, C, Tập lệnh ngôn ngữ mạnh gần với tư người bình thường ƒ Ngơn ngữ hướng ₫ối tượng C++, Visual Basic, Java, C#, cải tiến phương pháp cấu trúc chương trình cho sáng, ổn ₫ịnh, dễ phát triển thay linh kiện Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Thí dụ chương trình VC++ ƒ Các lệnh chương trình (code) truy xuất (₫ọc và/hoặc ghi) thơng tin (dữ liệu) ƒ Chương trình giải tốn ₫ó truy xuất nhiều liệu khác với tính chất ₫a dạng Để quản lý việc truy xuất liệu cụ thể, ta cần thơng tin liệu ₫ó : - tên nhận dạng (identifier) xác ₫ịnh vị trí liệu - kiểu liệu (type) miêu tả cấu trúc liệu - tầm vực truy xuất (visibility) xác ₫ịnh lệnh ₫ược phép truy xuất liệu tương ứng ƒ Chương trình cổ ₫iển = liệu + giải thuật ƒ Chương trình (function, subroutine, ) ₫oạn code thực chức ₫ược dùng nhiều lần nhiều vị trí chương trình, cho phép cấu trúc chương trình, sử dụng lại code Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Thí dụ chương trình VC++ ƒ VC++ sử dụng tập ký tự ASCII ký tự ngôn ngữ Trong chuỗi, VC++ cho phép dùng ký tự ANSI ƒ Để xác ₫ịnh câu lệnh (statement), VC++ dùng từ khóa (key word) if, else, for, while, Khơng ₫ược dùng từ khóa cho mục ₫ích riêng người lập trình ƒ VC++ phân biệt rõ ràng chữ hoa chữ thường (có thể dùng If, IF ₫ể ₫ặt tên biến mà không sợ trùng với từ khóa if) ƒ Chương trình VC++ danh sách câu lệnh VC++ với ₫ộ dài ₫ó trình tự ₫ó tùy thuộc vào vấn ₫ề cần giải giải thuật giải vấn ₫ề ₫ó ƒ Nếu chương trình nhỏ, ₫ược chứa file *.cpp, chương trình lớn, thường ₫ược chia nhỏ thành nhiều module chức năng, module thường ₫ược lưu file *.cpp Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Cấu trúc chương trình cổ ₫iển Chương trình = cấu trúc liệu + giải thuật module (package) global data local data of module entry 'start' local data of function Mơn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơ hình máy tính số Von Neumann chứa code data ₫ang thực thi Bộ nhớ (Memory) thực thi lệnh chương trình Đơn vị xử lý (CPU) giao tiếp với bên (thường người) ₫ể nhập/xuất tin Các thiết bị vào (I/O) Bus giao tiếp Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 10 Cơ việc lưu trữ xử lý tin máy tính Phần tử nhớ nhỏ máy tính số chứa giá trị : (ta gọi bit) Ta kết hợp nhiều phần tử nhớ ₫ể miêu tả ₫ại lượng lớn Thí dụ ta dùng bit ₫ể miêu tả 28 = 256 giá trị khác Dãy bit nhớ ₫ược gọi byte, ₫ây ô nhớ nhớ máy tính Bộ nhớ máy tính ₫ược dùng ₫ể chứa liệu code chương trình ₫ang thực thi Nó dãy ₫ồng ô nhớ bit, ô nhớ ₫ược truy xuất ₫ộc lập thông qua ₫ịa (tên nhận dạng) Thường ta dùng số từ - n ₫ể miêu tả ₫ịa nhớ Mặc dù ngồi ₫ời ta ₫ã quen dùng hệ thống số thập phân, phần cứng bên máy tính, máy chứa xử lý trực tiếp liệu dạng nhị phân Do ₫ó chương này, ta giới thiệu khái niệm tảng hệ thống số cách miêu tả liệu máy tính Khoa Cơng nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 11 Cơ hệ thống số Hệ thống số (number system) công cụ ₫ể biểu thị ₫ại lượng Một hệ thống số gồm thành phần : số : số lượng ký số (ký hiệu ₫ể nhận dạng số bản) qui luật kết hợp ký số ₫ể miêu tả ₫ại lượng ₫ó phép tính số Trong thành phần trên, có thành phần khác hệ thống số, thành phần giống hệ thống số Thí dụ : - hệ thống số thập phân (hệ thập phân) dùng 10 ký số : 0,1,2,3,4,5,6,7,8,9 - hệ nhị phân dùng ký số : 0,1 - hệ bát phân dùng ký số : 0,1,2,3,4,5,6,7 - hệ thập lục phân dùng 16 ký số : ₫ến 9,A,B,C,D,E,F Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 12 Cơ hệ thống số - Qui luật miêu tả lượng Biểu diễn lượng Q hệ thống số B (B>1) : dndn-1 d1d0d-1 d-m ⇔ Q = dn*Bn + dn-1*Bn-1 + +d0*B0 +d-1*B-1 + +d-m*B-m ₫ó di ký số hệ thống B Trong thực tế lập trình ngơn ngữ cấp cao, ta thường dùng hệ thống số thập phân ₫ể miêu tả liệu số chương trình (vì ₫ã quen) Chỉ số trường hợp ₫ặc biệt, ta dùng hệ thống số nhị phân (hay thập lục phân) ₫ể miêu tả vài giá trị nguyên, trường hợp này, qui luật biểu diễn lượng nguyên Q hệ thống số B ₫ơn giản : dndn-1 d1d0 ⇔ Q = dn*Bn + dn-1*Bn-1 + +d1*B1+d0*B0 ₫ó di ký số hệ thống B Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 13 Cơ hệ thống số - Vài thí dụ Thí dụ biểu diễn lượng hệ thống số : - lượng "mười bảy" ₫ược miêu tả 17 hệ thập phân : 17 = 1*101+7*100 - lượng "mười bảy" ₫ược miêu tả 11 hệ thập lục phân : 11 = 1*161+1*160 - lượng "mười bảy" ₫ược miêu tả 10001 hệ nhị phân : 10001 = 1*24+0*23+0*22+0*21+1*20 Trong môi trường sử dụng ₫ồng thời nhiều hệ thống số, ₫ể tránh nhằm lẫn biểu diễn lượng khác nhau, ta thêm ký tự nhận dạng hệ thống số ₫ược dùng biểu diễn liên quan Thí dụ ta viết : - 17D ₫ể xác ₫ịnh biểu diễn hệ thống số thập phân - 11H (hệ thống số thập lục phân.) - 10001B (hệ thống số thập nhị phân.) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 14 Cơ hệ thống số - Các phép tính Các phép tính hệ thống số : phép cộng (+) phép trừ (-) phép chia (/) phép nhân (*) phép dịch trái n ký số (> n) Ngoài ₫ặc ₫iểm hệ nhị phân, hệ cịn cung cấp số phép tính sau (các phép tính luận lý) : phép OR bit (|) phép AND bit (&) phép XOR bit (^) Mơn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 15 Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Thí dụ phép cộng, trừ, nhân Thí dụ phép tính (các giá trị ₫ều ₫ược biểu diễn hệ nhị phân : 1 0 1 0 + 0 1 - 0 1 * 1 0 1 1 0 0 0 0 1 1 Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 16 Thí dụ phép chia Thí dụ phép tính (các giá trị ₫ều ₫ược biểu diễn hệ nhị phân) : số bị chia 1 - 1 số chia 1 thương số - 0 1 - dư số Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 17 Thí dụ phép dịch ký số Thí dụ phép tính dịch ký số (các giá trị ₫ều ₫ược biểu diễn hệ nhị phân) : 0 0 1 bị dịch trái bit thành 0 0 1 0 (tương dương với nhân 22) 0 0 0 0 1 bị dịch phải bit thành 0 0 1 (tương dương với chia 22) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 18 Các phép tính ₫ại số Boole Đại số Boole nghiên cứu phép toán thực biến có giá trị 1, tương ứng với hai thái cực luận lý "sai" "₫úng" (hay "khơng" "có") ₫ời thường Các phép tốn gồm : x y 0 1 1 not x x and y x nand y x or y x nor y x xor y 1 0 1 1 1 1 0 Biểu thức Boole biểu thức toán hoc cấu thành từ phép toán Boole toán hạng biến chứa trị Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 19 Các ₫ơn vị nhớ thường dùng Các ₫ơn vị ₫o lường nhớ thường dùng : byte : 8bit, miêu tả ₫ược 28 = 256 giá trị khác word : byte, miêu tả ₫ược 216 = 65536 giá trị khác double word : byte, miêu tả ₫ược 232 = 4.294.967.296 giá trị khác KB (kilo byte) = 210 = 1024 byte MB (mega byte) = 220 = 1024KB = 1.048.576 byte GB (giga byte) = 230 = 1024MB = 1.073.741.824 byte TB (tetra byte) = 240 = 1024GB = 1.099.511.627.776 byte Thí dụ, RAM máy bạn 256MB, ₫ĩa cứng 40GB Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 1: Ơn lại máy tính số, ngơn ngữ lập trình, thể liệu Slide 20 10 Tổng quát cách tạo dùng COM VC++ cho phép tạo linh kiện phần mềm COM nhờ loại Project ATL COM AppWizard Qui trình chi tiết ₫ể tạo COM ₫ược trình bày slide kèm theo chương ‰ Việc dùng COM gần giống dùng thư viện phần mềm, ta “import” vào file cần dùng, khai báo biến thuộc kiểu COM gởi thơng ₫iệp ₫ến ₫ể nhờ thực tác vụ danh sách tác vụ : // import COM trước dùng #import "d:\samples\COMBkTrans\BkTrans.dll" rename( "EOF", "adoEOF" ) //khai báo biến COM BKTRANSLib::IBkTransLibPtr m_bktrans; //khởi tạo COM ::CoInitialize(NULL); if (m_bktrans.CreateInstance ( uuidof(BKTRANSLib::BKTRANSLib)) != S_OK) MessageBox("Khong khoi dong duoc VietLib"); else { ccont = m_bktrans->GetVnCodeCount(); … } Mơn : Kỹ thuật lập trình ‰ Khoa Cơng nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 191 Thí dụ cách dùng COM ‰ ‰ Để thấy việc dùng COM hầu xây dựng phần mềm dễ dàng nào, thử viết trình demo việc chuyển mã chuyển tên font tiếng Việt Giả sử người ta ₫ã viết COM với tên “BKTRANSLib” cung cấp tác vụ hỗ trợ cho việc chuyển mã chuyển tên font tiếng Việt sau : ƒ Init() : khởi ₫ộng trạng thái ₫ầu COM ƒ GetCodeCount(int color) : tìm số mã ₫ược COM quản lý ƒ GetCodeName(int id, wchar_t *pname) : chuyển từ số sang tên gợi nhớ m㠃 GetCodeId(wchar_t *pname) : chuyển từ tên gợi nhớ sang số m㠃 FindVnCode(wchar_t *pstr) : tìm số mã ₫ược dùng chuỗi ƒ TransStr(int ids, int idd, wchar_t *psrc, wchar_t *pdst) : chuyển chuỗi từ mã ids sang mã idd ƒ TransFont(int ids, int idd, wchar_t *psrc, wchar_t *pdst) : chuyển tên font từ mã ids sang mã idd Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 192 96 Thí dụ cách dùng COM (tt) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 193 Tổng quát truy xuất database ‰ Trong chương 11, ₫ã giới thiệu qui trình truy xuất liệu file Một dạng file chứa danh sách record liệu có cấu trúc ₫ộ dài giống nhau, record chứa nhiều field liệu, thí dụ file chứa hồ sơ sinh viên, file chứa hồ sơ nhà, file chứa hồ sơ ₫ường xá ‰ Hầu hết ứng dụng (nhất ứng dụng nghiệp vụ) ₫ều phải truy xuất file dạng Việc quản lý file bao gồm nhiều tác vụ tạo file với cấu trúc record cụ thể, thêm/bớt/hiệu chỉnh/duyệt record, tìm kiếm record thỏa mãn tiêu chuẩn ₫ó, Để thực tác vụ (nhất tìm kiếm record) hiệu quả, tin cậy, ta cần nhiều kiến thức khác phải tốn nhiều công sức ‰ File chứa nhiều record (với số cải tiến tăng cường) ₫ược gọi database quan hệ Có nhiều format database quan hệ khác ₫ang ₫ược dùng Để giải phóng ứng dụng khỏi việc quản lý database, người ta ₫ã xây dựng ứng dụng ₫ặc biệt : DBMS (Database Management System) Ứng dụng nhờ DBMS ₫ể truy xuất database ₫ược dễ dàng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 194 97 Các giao tiếp lập trình truy xuất database ‰ Về nguyên tắc, ứng dụng VC++ (hay viết ngơn ngữ khác) truy xuất database giao tiếp lập trình sau ₫ây : ADO (ActiveX Data Objects) DAO (Data Access Objects) ODBC (Open Database Connectivity) DBMS-Specific Language Direct to database (file) ‰ Trong giao tiếp truy xuất database có ADO dễ dàng cả, ₫ại ₫a số trường hợp ta tạo trực quan ActiveX Control khai báo thuộc tính chúng ₫ã truy xuất ₫ược database mà không cần viết code Trong trường hợp phải viết code ngắn dễ dàng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 195 Truy xuất database dùng ADO thông qua ActiveX Control ‰ Truy xuất database dùng ADO thông qua ActiveX Control phương pháp truy xuất database trực quan dễ dàng ‰ Đa số database Windows Access tạo ₫ó file database chứa nhiều table, table danh sách n record có cấu trúc chung ₫ó Qui trình ₫iển hình truy xuất record table database Access dùng ₫ối tượng sau : ‰ ƒ Dùng ₫ối tượng ADODB thư viện "Microsoft ActiveX Data Objects 2.x Library" ₫ể liệt kê table database Access ƒ Dùng ₫ối tượng Microsoft ADO Data Control 6.0 ₫ể quản lý RecordSet chứa tập record table thỏa mãn ₫iều kiện ₫ó ƒ Dùng ₫ối tượng Microsoft DataGrid Control 6.0 ₫ể hiển thị record Data Control cho phép user thêm/bớt/hiệu chỉnh record Để thấy rõ việc truy xuất database dễ dàng, ta viết ứng dụng truy xuất database dạng Access có giao diện slide sau : Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 196 98 Giao diện ₫ề nghị ứng dụng truy xuất database TextEdit qui ₫ịnh file cần truy xuất ComboBox liệt kê Table file ADODC quản lý record thỏa mãn ₫iều kiện mong muốn (có thể ẩn ₫í) DataGrid hiển thị record ADODC ₫ể user khảo sát hiệu chỉnh Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 197 Qui trình xây dựng ứng dụng slide trước ‰ Ta tạo project dạng "Dialog Based", ₫ể dùng ₫iều khiển Form ta cần 'add' ActiveX Control sau vào Project : ƒ Microosft ADO Data Control 6.0 ₫ể quản lý RecordSet chứa tập record table ƒ Microsoft DataGrid Control 6.0 ₫ể hiển thị record Data Control cho phép user thêm/bớt/hiệu chỉnh record ƒ class MFC CFileDialog ₫ể hiển thị cửa sổ duyệt file chọn file cần truy xuất ‰ Để dùng ₫ược ₫ối tượng ADODB Project, ta thêm lệnh import sau vào ₫ầu file *.cpp dùng : ƒ #import rename( "EOF", "adoEOF" ) ‰ Thiết kế trực quan form theo slide trước, tạo hàm xử lý kiện cho button Browse kiện Click cho ComboBox Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 198 99 Chi tiết thủ tục xử lý kiện ' Thủ tục xử lý click button Browse void CADODataBaseDlg::OnBrowse() { CFileDialog dlg(TRUE); if (dlg.DoModal() != IDOK) return; UpdateData(TRUE); m_database = dlg.GetPathName(); UpdateData(FALSE); ListAccessTables(m_database); } ' Thủ tục xử lý user chọn Table danh sách void CADODataBaseDlg::OnSelendokTables() { CString buf; CString strDBPath; int i; UpdateData(TRUE); strDBPath = m_database; i = m_tables.GetCurSel(); m_tables.GetLBText(i,buf); m_datagrid.SetCaption (strDBPath+" : " + buf); m_adodc.SetConnectionString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+strDBPath); m_adodc.SetCommandType (CMDTABLE); m_adodc.SetRecordSource (buf); m_adodc.Refresh (); UpdateData(FALSE); } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 199 Chi tiết thủ tục hiển thị danh sách Table database void CADODataBaseDlg::ListAccessTables(CString strDBPath) { // Xoa danh sach cac Table hien hanh m_tables.ResetContent(); ADODB::_ConnectionPtr Con; ADODB::_RecordsetPtr Rs; CString csTemp; _variant_t varCriteria[4]; LONG lIndex = 0; HRESULT hr = 0; try { // Getting primary key information for table "Authors" _bstr_t bstrTableType("Table"); varCriteria[0].vt = VT_EMPTY; varCriteria[1].vt = VT_EMPTY; varCriteria[2].vt = VT_EMPTY; varCriteria[3].vt = VT_BSTR; varCriteria[3].bstrVal = bstrTableType; VARIANT varData; SAFEARRAY FAR* psa; SAFEARRAYBOUND rgsabound[1]; rgsabound[0].lLbound = 0; rgsabound[0].cElements = 4; psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound); Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 200 100 Chi tiết thủ tục hiển thị danh sách Table database // Fill the safe array for( lIndex = ; lIndex < ;lIndex++) { hr = SafeArrayPutElement(psa, &lIndex,&varCriteria[lIndex]); } // Initialize variant with safearray varData.vt = VT_VARIANT | VT_ARRAY; V_ARRAY(&varData) = psa; Con.CreateInstance( uuidof(ADODB::Connection)); Con->Open( _bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+strDBPath), _bstr_t(""), _bstr_t(""), -1); Rs = Con->OpenSchema(ADODB::adSchemaTables,varData); int nFieldCount = Rs->Fields->GetCount(); VARIANT varValue; UpdateData(TRUE); while (VARIANT_TRUE != Rs->GetadoEOF()) { // Traversing through the Fields collection to get the values varValue = Rs->Fields->GetItem(_variant_t((long)2))->Value; if(varValue.vt == VT_BSTR) { csTemp = varValue.bstrVal; m_tables.AddString(csTemp); } else Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 201 Chi tiết thủ tục hiển thị danh sách Table database if(varValue.vt == VT_UI4) { csTemp.Format("%l",csTemp,varValue.lVal); m_tables.AddString (csTemp); } Rs->MoveNext(); } UpdateData(FALSE); //OutDebugString(csTemp); } catch(_com_error &e) { // Exception handling DumpError(e); } } // Hàm hiệu chỉnh kích thước phần tử form void CADODataBaseDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CRect rect; if (fstart==0) { m_datagrid.GetWindowRect(&rect); this->ScreenToClient (&rect); m_datagrid.MoveWindow(rect.left,rect.top,cx-20, cy -rect.top -20,TRUE); } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Xây dựng phầm mềm cách lắp ghép linh kiện Slide 202 101 MÔN KỸ THUẬT LẬP TRÌNH Chương TỔNG QT HĨA TRONG XÂY DỰNG HÀM & CLASS Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Tổng quát hóa xây dựng hàm & class Slide 203 T nh t ̉ng quat hoa (Generalization) ‰ Như ta ₫ã biết, xây dựng ứng dụng theo hướng ₫ối tượng xây dựng class có ₫ối tượng ₫ược dùng ₫ể phục vụ ứng dụng ₫ó Cơng việc xây dựng class xây dựng method cấu thành interface class ₫ó Có thể có nhiều method class khác dùng giải thuật (₫oạn lệnh thực thi) tác ₫ộng liệu có số lượng cấu trúc (kiểu) khác Tương tự có nhiều class khác cung cấp interface giống tác ₫ộng liệu có số lượng cấu trúc khác ‰ Thí dụ ta cần method hoán vị số nguyên, method hoán vị chuỗi, method hoán vị dãy,… Ta cần class quản lý danh sách n số nguyên, class quản lý m chuỗi, class quản lý k dãy… Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương : Tổng qt hóa xây dựng hàm & class Slide 204 102 T nh t ̉ng quat hoa (tt) ‰ Hàm tổng quát hóa (function templates) cho phép ta ₫ặc tả tập hàm mà dùng chung ₫oạn lệnh thực thi tác ₫ộng liệu thuộc kiểu hay class khác và/hoặc với số lượng khác ‰ Class tổng quát hóa (function templates) cho phép ta ₫ặc tả tập class có tính chất giao diện giống tác ₫ộng liệu thuộc kiểu hay class khác và/hoặc với số lượng khác Class t ̉ng quat hoa cho phep san sinh tư ₫ ng cac class b nh thương, cac class b nh thương tư no co th ̉ tao ₫ ́i tương Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Tổng quát hóa xây dựng hàm & class Slide 205 Function template Function templates cho phép ta ₫ặc tả tập hàm mà dùng chung ₫oạn lệnh thực thi tác ₫ộng liệu thuộc kiểu hay class khác Thí dụ hàm IntSwap() sau ₫ây : void IntSwap(int& a, int& b ) { int c = a; a = b; b = c; } cho phép swap số nguyên, template MySwap() sau : template void MySwap( T& a, T& b ) { T c( a ); a = b; b = c; } ₫ịnh nghĩa họ hàm swap liệu có kiểu Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương : Tổng quát hóa xây dựng hàm & class Slide 206 103 Function template (tt) ƒ Ta gọi hàm “template function” y gọi hàm bình thường, khơng có khác biệt : int i, j; char k; MySwap( i, j ); //OK MySwap( i, k ); //Sai khác kiểu ƒ Ta ₫ặc tả tham số rõ ràng gọi hàm “template function”, thí dụ : MySwap(i,j); //tạo hàm MySwap (int&, int&) gọi với (i,j) Mơn : Kỹ thuật lập trình Chương : Tổng quát hóa xây dựng hàm & class Slide 207 Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Class template Class templates cho phép ta ₫ặc tả tập class mà dùng chung interface cấu trúc liệu tác ₫ộng liệu thuộc kiểu hay class khác Thí dụ class IntStack sau ₫ây : class IntStack { int StackBuffer[100]; int cItems; public: void IntStack( void ) : cItems( 100 ) {}; void push( const int item ); int pop( void ); }; void IntStack::push( const int item ) { if ( cItems > ) StackBuffer[ cItems] = item; else throw "Stack overflow error."; return; } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM int IntStack::pop ( void ) { if ( cItems < 100) return StackBuffer[cItems++]; else throw "Stack underflow error."; } Môn : Kỹ thuật lập trình Chương : Tổng qt hóa xây dựng hàm & class Slide 208 104 Class template Cú pháp khai báo class template : template-declaration : template < template-argument-list > declaration template-argument-list : template-argument template-argument-list , template-argument template-argument : type-argument argument-declaration type-argument : class identifier typename identifier declaration : ₫ặc tả class bình thường có nhiều vị trí có dùng tham số template Mơn : Kỹ thuật lập trình Chương : Tổng qt hóa xây dựng hàm & class Slide 209 Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Class template (tt) template class MyStack { T StackBuffer[i]; int cItems; public: void MyStack( void ) : cItems( i ) {}; void push( const T item ); T pop( void ); }; template void MyStack< T, i >::push( const T item ) { if( cItems > ) StackBuffer[ cItems] = item; else throw "Stack overflow error."; return; } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương : Tổng qt hóa xây dựng hàm & class Slide 210 105 Class template (tt) template T MyStack< T, i >::pop( void ) { if( cItems < i ) return StackBuffer[cItems++]; else throw "Stack underflow error."; } Cho phép ₫ặc tả class miêu tả stack gồm nhiều liệu ₫ó MyStack intstack; // biến quản lý stack có tối ₫a 20 số nguyên MyStack strstack; // biến quản lý stack có tối ₫a 40 chuỗi MyStack dblstack; // biến quản lý stack có tối ₫a 100 số thực Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương : Tổng quát hóa xây dựng hàm & class Slide 211 Class template Xem phần phụ lục chương ₫ể biết chi tiết, cụ thể template MFC ₫ược dùng phổ biến CArray CList Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương : Tổng qt hóa xây dựng hàm & class Slide 212 106 MÔN KỸ THUẬT LẬP TRÌNH Chương 10 THỪA KẾ TRONG XÂY DỰNG CLASS MỚI Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 10 : Thừa kế xây dựng class Slide 213 Lợi ích thừa kế xây dựng class ‰ Như ta ₫ã biết, xây dựng ứng dụng theo hướng ₫ối tượng xây dựng class có ₫ối tượng ₫ược dùng ₫ể phục vụ ứng dụng ₫ó Để giảm nhẹ công sức, thời gian xây dựng class mới, ta thường dùng tính thừa kế : ₫ịnh nghĩa class dựa hay nhiều class sẵn có tăng cường, cá nhân hóa vài chi tiết ‰ Thí dụ ứng dụng VC++ có giao diện SDI thường ₫ược cấu thành loại ₫ối tượng : ƒ Đối tượng miêu tả ứng dụng (Application), ƒ ₫ối tượng miêu tả cửa sổ giao diện ứng dụng chứa title bar, menu bar, toolbar, statusbar vùng chứa tài liệu ứng dụng (Frame) ƒ Đối tượng miêu tả vùng chứa tài liệu ứng dụng (View) ƒ Đối tượng lưu giữ thông tin ₫ang ₫ược hiển thị ₫ối tượng View (Document) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 10 : Thừa kế xây dựng class Slide 214 107 Lợi ích thừa kế xây dựng class (tt) ‰ Mặc dù ₫ối tượng Application, Frame, View, Document cấu thành ứng dụng ₫ó có nét riêng phụ thuộc vào ứng dụng, chúng có tính chất chung giống Do ₫ó Microsoft ₫ã ₫ịnh nghĩa class CWndApp, CFrameWnd, CView, CDocument làm tảng ₫ể ứng dụng thừa kế thêm số tính chất ₫ặc thù mình, nhờ tối thiểu hóa công sức, thời gian viết ứng dụng SDI ‰ Qui trình Wizard VC++ cho phép ta xây dựng class cấu thành ứng dụng cách ₫ặc tả tính chất riêng ban ₫ầu ứng dụng Giả sử ta tạo Project VnIE ₫ể quản lý ứng dụng SDI Wizard tạo class : ƒ ƒ ƒ ƒ class CVnIEApp : public CWinApp { //phần tăng cường thêm } class CMainFrame : public CFrameWnd { //phần tăng cường thêm } class CVnIEView : public CView { //phần tăng cường thêm } class CVnIEDoc : public CDocument { //phần tăng cường thêm } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 10 : Thừa kế xây dựng class Slide 215 Lợi ích thừa kế xây dựng class (tt) ‰ Để thấy rõ lợi ích to lớn tính thừa kế, ta thử xây dựng ứng dụng duyệt Web có khả tương ₫ương với trình Internet Explorer Microsoft, phải mạnh chỗ hiển thị ₫úng trang Web tiếng Việt dùng mã tiếng Việt Nếu xây dựng từ ₫ầu ứng dụng này, ta phải bỏ nhiều công sức phải nắm vững kiến thức thiết yếu sau : ƒ lập trình mạng dùng socket, nắm vững giao thức HTTP ₫ược dùng client server Web ƒ ngôn ngữ HTML, script, lý thuyết chương trình dịch ₫ể thơng dịch trang Web hiển thị kết lên hình ƒ ₫ồ họa máy tính ₫ể hiển thị kết dạng văn hay ₫ồ họa trang web ƒ chế tương tác máy người dùng ₫ể tương tác với yêu cầu người dùng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 10 : Thừa kế xây dựng class Slide 216 108 Lợi ích thừa kế xây dựng class (tt) ‰ Tuy nhiên ta biết Microsoft ₫ã xây dựng sẵn class tên CHtmlView thực hết chức duyệt Web tích hợp class sẵn Windows ta viết ứng dụng duyệt Web nhanh chóng dễ dàng cách thừa kế lại class CHtmlView ‰ Qui trình ₫iển hình ₫ể xây dựng ứng dụng duyệt Web theo ý tưởng thừa kế VC++ tạo Project dạng SDI chuẩn (thí dụ với tên VnIE) khai báo lại class cha class CVnIEView sau : ƒ ‰ class CVnIEView : public CHtmlView { //phần tăng cường thêm } Nếu chưa tăng cường thêm chi tiết vùng làm việc ứng dụng ta có chức y ₫ối tượng CHtmlView Như ta cần thiết kế giao diện ứng dụng : thiết kế menu, toolbar, ₫ịnh nghĩa hàm xử lý kiện kết hợp với option menu hay icon toolbar, hàm xử lý chủ yếu làm "cò", cần gọi hàm sẵn có class cha (CHtmlView) thực chức mà người dùng yêu cầu Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 10 : Thừa kế xây dựng class Slide 217 Lợi ích thừa kế xây dựng class (tt) ‰ Do class cha CHtmlView chưa có khả hiển thị ₫úng trang web tiếng Việt nhiều mã khác nhau, nên ta muốn ứng dụng duyệt WEB giải ₫ược tính ta dùng khả "override" method class cha ₫ể tăng cường sức mạnh method ₫ó ‰ Nếu tìm hiểu kỹ class CHtmlView, ta thấy Microsoft ₫ã tạo sẵn nhiều ₫iểm mở rộng, thí dụ ta override hàm xử lý kiện OnDownloadComplete ₫ể chèn thêm ₫oạn code nhận dạng mã tiếng Việt nội dung vừa download ₫ược chuyển mã nội dung mã có font ₫ang dùng máy khách hàng trước hiển thị trang web ₫ược hiển thị ₫úng thơi ‰ Ở ₫ây, lần tính thừa kế cần thiết, ta có class cung cấp chức nhận dạng mã chuyển mã tiếng Việt (có thể chưa hồn chỉnh), ta thừa kế class ₫ó hồn chỉnh tính chất cịn thiếu, nhờ ₫ó tối thiểu hóa cơng sức, thời gian Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Mơn : Kỹ thuật lập trình Chương 10 : Thừa kế xây dựng class Slide 218 109 Lợi ích thừa kế xây dựng class (tt) Xem phần phụ lục chương 10 ₫ể biết chi tiết, cụ thể qui trình xây dựng ứng dụng VnIE có chức duyệt Web tiếng Việt ₫ã trình bày slide trước Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Kỹ thuật lập trình Chương 10 : Thừa kế xây dựng class Slide 219 110

Ngày đăng: 25/08/2023, 14:49

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan