Lập trình ứng dụng trong kỹ thuật - Cơ Điện Tử - Chương 4: C++/CLI NÂNG CAO.
lượt xem 39
download
Theo khoa học máy tính, thư viện là một thuật ngữ dùng để chỉ các tài nguyên (resources) dùng để phát triển phần mềm (software) hay chương trình (program). Các tài nguyên này có thể là các chương trình con (sobroutine), các class, các biến hay hằng số đã được xây dựng sẵn. Nói một cách đơn giản, chúng ta có thể xem chương trình là một đoạn chương trình đã được viết sẵn. Trong đoạn chương trình đó đã khai báo và xây dựng các biến, hằng số, các hàm và các class. Khi xây dựng một chương trình...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập trình ứng dụng trong kỹ thuật - Cơ Điện Tử - Chương 4: C++/CLI NÂNG CAO.
- Lập trình ứng dụng trong kỹ thuật Chương 4 TÓM TẮT CHƯƠNG 4 : C++/CLI NÂNG CAO. 1) Thư viện (Library): Theo khoa học máy tính, thư viện là một thuật ngữ dùng để chỉ các tài nguyên (resources) dùng để phát triển phần mềm (software) hay chương trình (program). Các tài nguyên này có th ể là các chương trình con (sobroutine), các class, các biến hay hằng số đã được xây dựng sẵn. Nói một cách đơn giản, chúng ta có thể xem chương trình là một đo ạn chương trình đã đ ược vi ết s ẵn. Trong đo ạn chương trình đó đã khai báo và xây dựng các biến, hằng s ố, các hàm và các class. Khi xây d ựng m ột chương trình mới, chúng ta có thể sử dụng lại các bi ến, hằng s ố, hàm hay class đã đ ược xây d ựng trong thư viện bằng cách gọi thư viện trong chương trình. Trong C++/CLI, chúng ta thường gặp các thư viện có dạng là cái tập tin có đuôi .h, t ập tin đuôi .lib hay .dll. Trước khi tìm hiểu về sự khác nhau giữa các thư vi ện .h, .lib và .dll, chúng ta hãy tìm hiểu về quá trình dịch (compile) và thực thi (execute) một chương trình. Hình trên mô tả quá trình dịch và thực thi một chương trình trong C++/CLI. Biên dịch (Compile) là quá trình chuyển các câu lệnh được viết bằng m ột ngôn ngữ l ập trình nào đó sang ngôn ngữ máy có thể được thi hành trực tiếp trên máy tính. Chương trình ngôn ngữ cấp cao được chuyển đổi được gọi là chương trình nguồn (source program) và chương trình ngôn ng ữ máy được tạo ra được gọi là chương trình đối tượng (object program) ho ặc mã đối tượng (object code). Khi người dùng muốn chạy chương trình, chương trình đối tượng sẽ đ ược n ạp lên b ộ nh ớ chính c ủa CPU và các chỉ thị của chương trình sẽ được thi hành. Khi đ ược h ướng d ẫn b ởi các ch ỉ th ị c ủa ch ương trình, CPU sẽ truy xuất dữ liệu và tạo ra các kết quả. Cụ thể, trong C++/CLI, biên dịch là quá trình chuyển từ file lập trình (file .cpp) sang file đối tượng (file .obj). Sau khi biên dịch một chương trình, sẽ có rất nhi ều các file .obj đ ược t ạo ra. Ngoài ra, trong chương trình còn sử dụng các thư viện có sẵn. Do đó, cần phải kết hợp tất c ả l ại thành m ột file th ực thi duy nhất, quá trình này được gọi là liên kết (linker). Trang 1 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 Liên kết (Linker) là quá trình kết hợp các file đối tượng được tạo ra từ quá trình biên d ịch và các thư viện có sẵn thành một file thực thi duy nhất (file. Exe). Có hai ki ểu liên k ết là liên k ết tĩnh (static linker) và liên kết động (dynamic linker). Liên kết tĩnh : Các file .h, .cpp được dịch thành file .obj. Sau đó các file.obj đ ược liên k ết v ới nhau và liên kết với các file thư viện .lib. Cách này có ưu đi ểm là khi chạy ch ỉ c ần file .exe mà không cần thêm thư viện nào khác. Tuy nhiên có nhược điểm là file .exe có kích thước lớn, nặng. Liên kết động : Cũng tương tự như liên kết tĩnh. Tuy nhiên k hi liên kết, các file .lib chỉ là trung gian chứa thông tin giả. Các thông tin thật được lấy ra từ các file .dll trong quá trình th ực thi. Đo đó, khi thực thi, chương trình sẽ tự động liên kết đến các file .dll. N ếu thi ếu các file .dll này thì quá trình th ực thi sẽ bị lỗi. Các file .lib và .dll là hai loại thư viện thường gặp nhất trong C++/CLI : th ư vi ện liên k ết đ ộng (dynamic linking library), thư viện liên kết tĩnh (static library). 2) Header file và source file : Trong các ví dụ đã đề cập trong các chương trước, chương trình ứng d ụng mà chúng ta xây dựng chỉ bao gồm một file duy nhất. Tuy nhiên, cách này ch ỉ thích h ợp đ ối v ới các ch ương trình nh ỏ không phức tạp. Đối với những chương trình ứng dụng lớn, phức tạp, nên chia thành nhiều thành phần nhỏ, mỗi thành phần thực hiện một nhiệm vụ nhất định. Việc chia ch ương trình thành nh ững ph ần nhỏ có thể được thực hiện bằng nhiều cách; cách thông dụng nhất là chia mã code thành nh ững nhóm nhỏ, mỗi nhóm này được gọi là một thư viện (library). M ỗi th ư vi ện này th ực ch ất là m ột file riêng; khi biên dịch, mỗi file được biên dịch thành m ột file đ ối t ượng riêng (file .obj), sau đó các file này s ẽ được liên kết lại trong quá trình liên kết thành một file thực thi duy nhất (file .exe). Việc khai báo các thư viện này còn có một ưu điểm nữa là nếu như ta xây d ựng m ột ch ương trình ứng dụng khác và trong chương trình mới này có sử dụng nh ững tài nguyên (hàm, bi ến hay class) đã được xây dựng trong một thư viện của chương trình trước, ta có th ể sử d ụng lai nh ững tài nguyên này mà không cần phải xây dựng lại bằng cách sử dụng lại thư viện này. Hầu hết các thư viện thường được tách thành hai dạng file : header file và source file. a) Header file : Header file cũng tương tự như các file lập trình mà chúng ta đã làm quen trong các ch ương tr ước. Đi ểm khác biệt là header file thường được lưu với đuôi .h thay vì .cpp. Chúng ta có th ể dùng notepad đ ể xây dựng header file giống như cách chúng ta xây dựng các file .cpp trước đây (nh ưng l ưu file v ới đuôi .h), hoặc xây dựng trực tiếp trong 1 project. Để tạo một header file trong 1 project, trong cửa sổ Solution Explorer c ủa project, click chu ột ph ải vào dòng Header Files và chọn Add ->New Item (trong trường hợp mu ốn sử d ụng m ột header file đã có s ẵn thì chọn Existing Item). Trang 2 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 Trong cửa sổ Add New Item, chọn kiểu file là header và nhập tên của file vào ô Name. Thông thường, một thư viện sẽ bao gồm một header file và source file. Trong đó, header file ch ỉ ch ứa các khai báo về biến, hàm hay class còn source file chứa mã lệnh đ ầy đ ủ c ủa các bi ến, hàm và class đã được khai báo trong header file. Header file + Source file = Complete source VD : //Sinh_vien.h using namespace System; int x,y,z; String^ A,B,C; Trang 3 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 void Print(String^ A); UInt32 Fractorial (UInt16 a); ref class Sinh_vien { public: String^ Ho_ten; UInt32 MSSV; String^ Nganh_hoc; void Show(); }; Trong ví dụ trên, trong header file đã khai báo các bi ến x,y,z và A,B,C cùng các hàm Print() , Fractorial() và class Sinh_vien. Chú ý là đây chỉ là các khai báo về biến, hàm và class. b) Source file : Nếu như header file chứa các khai báo thì source file sẽ chứa mã l ệnh th ực thi các khai báo. Source file có đuôi .cpp. Để tạo một source file trong 1 project, trong c ửa sổ Solution Explorer c ủa project, click chu ột ph ải vào dòng Source Files và chọn Add ->New Item (trong tr ường h ợp mu ốn s ử d ụng m ột source file đã có s ẵn thì chọn Existing Item). Trong cửa sổ Add New Item, chọn kiểu file là C++ File và nhập tên của file vào ô Name. Trang 4 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 Trong source file ta sẽ xây dựng các hàm đã khai báo trong header file. VD : //Sinh_vien.cpp #include “Sinh_vien.h” using namespace System; x = 10; y = 20; z = 8111; A = “Nguyen Van A”; B = “Co dien tu”; C = “SPKT”; void Print(String^ A) { Console::WriteLine(A); } UInt32 Fractorial (UInt16 a) { if (a > 1) return (a*Factorial(a-1)); else return 1; } void Sinh_vien::Show() { Console::WriteLine(Ho_ten); Console::WriteLine(MSSV); Console::WriteLine(Nganh_hoc); } Trang 5 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 Trong ví dụ trên, việc xây dựng các biến và hàm cũng không khác so v ới cách chúng ta đã th ực hiện qua các chương trước. Hai điểm mới là ở đầu chương trình có thêm dòng lệnh #include “Sinh_vien.h” (được gọi là chỉ thị tiền xử lí) và khi tạo phương thức Show() của class Sinh_vien chúng ta cần phải khai báo class quản lí phương thức void Sinh_vien::Show() (khác so với cách khai báo thông thường trong class là void Show()). Lưu ý : Trong header file và source file có thể khai báo hàm main(). Tuy nhiên, n ếu chúng ta ch ỉ s ử dụng header file và source file làm thư vi ện cho chương trình ứng d ụng thì không nên khai báo hàm main(). Nếu trong chương trình ứng dụng, chúng ta muốn sử dụng một th ư viện nào đó, ta có th ể g ọi th ư vi ện đó ra thông qua các chỉ thị tiền xử lí. VD : //Program.cpp #include “Sinh_vien.h” #include “window.h” 3) Chỉ thi tiền xử lí (Preprocessor Directive) : Trước khi biên dịch chương trình sang mã đối tượng, cần có m ột quá trình ti ền x ử lí. Quá trình tiền xử lí có thể là các lệnh định nghĩa các hằng số, ngăn trình biên d ịch biên d ịch 1 đo ạn mã nào đó, xác định các thư viện liên kết với chương trình .v.v… Các chỉ thị ti ền xử lí đ ược khai báo ở đ ầu chương trình và bắt đầu với dấu #. Có rất nhiều các loại chỉ thị tiền xử lí, tuy nhiên chúng ta chỉ đề cập đến hai lo ại khai báo ti ền xử lí thường dùng là include và using. a) Include Directive : Chỉ thị Include có tác dụng chèn một đoạn mã vào mã code chương trình. Thông th ường là chèn các đoạn mã khai báo trong header file và source file. Có hai cách khai báo ch ỉ th ị Include : s ử d ụng c ặp kí tự và “”. Hai cách khai báo này chỉ khác nhau về thứ tự tìm kiếm các header file khi chúng ta không khai báo đường dẫn cụ thể về vị trí lưu trữ của header file. VD : //Program.cpp // Có khai báo đường dẫn. #include // Không khai báo đường dẫn. #include “Sinh_vien.h” #include b) Using Directive : Chỉ thị Using cũng có tác dụng chèn m ột đo ạn mã vào mã code ch ương trình t ương t ự nh ư Include. Điểm khác biệt là Include thì dùng với các file header .h còn using sử dụng với các file thư viện .dll. VD : //Program.cpp // Có khai báo đường dẫn. #using // Không khai báo đường dẫn. #using “Sinh_vien.dll” #iusing Trang 6 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 Lưu ý : Khi không báo đường dẫn cụ thể cho các file .h và .dll, ta phải đặt các file này trong cùng th ư mục với file chương trình hay nằm trong thư mục include đã khai báo. 4) Xử lý ngoại lệ (Exception) : Chương trình luôn luôn gặp phải những tình huống, những l ỗi không mong mu ốn nh ư : người dùng nhập dữ liệu không hợp lệ, ổ cứng bị đầy, truyền đối số cho hàm không hợp lệ… Nh ững l ỗi này n ếu không được xử lý sẽ khiến chương trình bị thoát. Tuy nhiên, trong th ực t ế có nh ững ch ương trình quan trọng không cho phép dừng đột ngột ; do đó cần có một cơ chế để có thể khắc phục được những lỗi phát sinh trong quá trình chạy chương trình. Cách xử lý lỗi truyền th ống là trong quá trình vi ết code, người lập trình luôn phải viết thêm 1 lệnh trả về để thông báo lỗi và sau mỗi lần g ọi hàm đ ều ph ải có lệnh kiểm tra lỗi khiến cho chương trình phức tạp và dài. C++/CLI đã cung cấp một cách thức xử lí lỗi có th ể gi ải quyết đ ược các v ấn đ ề v ửa k ể trên thông qua Exception. Exception là một cơ chế thông báo và xử lý lỗi trong đó tách riêng phần xử lý l ỗi ra kh ỏi phần thuật toán chính. Các thuật ngữ liên quan : Một ngoại lệ là một đối tượng chứa thông tin về một lỗi và được dùng đ ể truy ền thông tin đó • tới cấp thực thi cao hơn Quá trình truyền ngoại lệ từ ngữ cảnh thực thi hi ện hành tới m ức th ực thi cao h ơn g ọi là ném • một ngoại lệ (throw an exception) Khi một ngữ cảnh thực thi tiếp nhận và truy nhập một ngo ại lệ, nó đ ược coi là b ắt ngo ại l ệ • (catch the exception) Bắt và xử lý ngoại lệ: Để bắt và xử lý một lỗi phát sinh trong quá trình chạy ch ương trình, chúng ta dùng c ấu trúc try{} … catch(){} try { //Chứa đoạn code có khả năng phát sinh ra lỗi. } catch () { //Code xử lý lỗi. } catch () { //Code xử lý lỗi. } try : chứa đoạn lệnh mà người lập trình cho rằng có thể phát sinh l ỗi trong qua trình ch ương trình thực thi. Trang 7 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 catch: chứa đoạn mã lệnh xử lý lỗi khi có lỗi phát sinh tùy theo ki ểu l ỗi. Tham s ố c ủa catch cho biết kiểu lỗi xử lý, mỗi kiểu lỗi sẽ có một cách khai báo khác nhau. Trong trường hợp không bi ết kiểu lỗi phát sinh thuộc dạng nào, chúng ta có thể dùng cách khai báo chung (Exception^ e) hoặc (…). Một cấu trúc bắt và xử lý lỗi chỉ có một khối try nhưng có thể có nhiều khối catch; mỗi khối catch chứa một đoạn lệnh xử lý lỗi đối với từng loại lỗi khác nhau. Hoạt động của chương trình xử lý lỗi: ban đầu chương trình thực thi các đo ạn l ệnh ch ứa trong khối try; nếu không có lỗi phát sinh, chương trình bỏ qua khối catch và thực hiện các đo ạn l ệnh tiếp theo. Trong trường hợp có phát sinh lỗi, chương trình sẽ dừng th ực thi ngay t ại dòng l ệnh phát sinh lỗi trong khối try và tiến hành thực thi các đoạn lệnh chứa trong khối catch, sau đó sẽ thực thi tiếp các đoạn lệnh tiếp theo nằm ngoài khối xử lý lỗi. Giả sử chúng ta viết 1 đoạn chương trình giải phương trình trong đó các thông số của phương trình do người dùng nhập vào. Trong trường hợp người dùng nhập sai đ ịnh d ạng (thay vì nh ập s ố thì lại nhập một kí tự chữ cái hoặc kí tự đặc biệt) thì chương trình sẽ bắt lỗi này và x ử lý bằng cách yêu cầu người dùng nhập lại các thông số này. VD : //Exception.cpp #include “stdafx.h” using namespace System; void main() { float a,b,x; X: try { Console::Write (“Nhap thong so a = ”); a = Convert::ToSingle(Console::ReadLine()); Console::Write (“Nhap thong so b = ”); b = Convert::ToSingle(Console::ReadLine()); x = -b/a; } catch (Exception^ e) // Khong biet loi la loai gi, cung co the dung cach khai bao catch(…) { Console::WriteLine (“Ban da nhap sai dinh dang, xin vui lòng nhap lai ”); goto X; } Console::WriteLine(“Nghiem cua phuong trinh la ” + x); } Lưu ý : Thông thường nếu có lỗi, chương trình sẽ chạy lại đoạn lệnh trong khối try nhiều lần. Do đó ta không được đưa các đoạn lệnh khai báo biến vào trong khối try. Class Exception: Đây là Class quản lý các kiểu lỗi phát sinh trong quá trình ch ương trình th ực thi. M ỗi khi có m ột lỗi phát sinh, chương trình sẽ xác định kiểu lỗi và chuyển đến đo ạn ch ương trình x ử lý l ỗi t ương ưng nhờ Class Exception này. Có rất nhiều kiểu lỗi khác nhau, hình dưới đây trình bày m ột s ố ki ểu s ố thường gặp. Trang 8 Bộ môn Cơ điện tử
- Lập trình ứng dụng trong kỹ thuật Chương 4 Các kiểu lỗi thường gặp: - Argument Exception: lỗi do truyền tham số không đúng cho hàm. - ArithmeticException: lỗi khi tính toán (chia cho 0, tràn số). - DataExceptions: lỗi khi tương tác với dữ liệu. Trong trường hợp chúng ta biết nguồn gốc phát sinh lỗi nhưng không bi ết t ừ khóa đ ịnh nghĩa kiểu lỗi, chúng ta có thể kiểm tra thông qua 1 đoạn lệnh đơn giản sau. VD : X: try { …..// Code cần xác định lỗi } catch (Exception^ e) { Console::WriteLine (“Kieu loi ban gap la ” + Convert::ToString(e->GetType()); goto X; } Trang 9 Bộ môn Cơ điện tử
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài thực tập chuyên đề: Thử nghiệm lập trình cho bộ điều khiển khả lập trình (PLC)
15 p | 846 | 478
-
Chương 30: Ứng dụng PLC trong điều khiển công nghiệp
7 p | 1037 | 460
-
BÀI GIẢNG ĐIỀU KHIỂN LẬP TRÌNH 1 - CHƯƠNG 1 MỞ ĐẦU
11 p | 371 | 160
-
Kỹ thuật thi công II - Chương 1
5 p | 407 | 112
-
Chương 31: Ứng dụng trong tự động hóa
6 p | 219 | 99
-
Lập trình ứng dụng trong kỹ thuật - Cơ Điện Tử - Chương 3
19 p | 187 | 55
-
Các phần mềm ứng dụng trong xây dựng phần 11
8 p | 142 | 48
-
ỨNG DỤNG HÀM NGẮT TRONG LẬP TRÌNH CHO HỆ XỬ LÝ NHÚNG
7 p | 223 | 48
-
Lập trình hợp ngữ cho họ vi điều khiển MCS51
8 p | 170 | 37
-
NFC - cách làm việc và ứng dụng thực tế
4 p | 215 | 34
-
Quá trình ứng dụng vi mạch lập trình số trong bộ chuyển mạch BSC p3
10 p | 90 | 12
-
Quá trình ứng dụng vi mạch lập trình số trong bộ chuyển mạch BSC p2
10 p | 82 | 12
-
Quá trình ứng dụng vi mạch lập trình số trong bộ chuyển mạch BSC p4
10 p | 89 | 11
-
Quá trình ứng dụng vi mạch lập trình số trong bộ chuyển mạch BSC p6
10 p | 104 | 8
-
Quá trình ứng dụng vi mạch lập trình số trong bộ chuyển mạch BSC p5
10 p | 93 | 8
-
Quá trình ứng dụng vi mạch lập trình số trong bộ chuyển mạch BSC p1
10 p | 93 | 7
-
Đáp án đề thi cuối kỳ học kỳ I năm học 2017-2018 môn Lập trình ứng dụng trong kỹ thuật – ĐH Sư phạm Kỹ thuật
2 p | 55 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn