intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

TÌM HIỂU CÔNG NGHỆ DESIGN BY CONTRACT VÀ XÂY DỰNG CÔNG CỤ HỖ TRỢ CHO C# - 9

Chia sẻ: Cao Tt | Ngày: | Loại File: PDF | Số trang:12

102
lượt xem
8
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# Danh sách các đối tượng xử lý: STT 1 2 3 Tên PreConditionCheck PostConditionCheck InvariantCheck Lớp/Kiểu bool bool bool Ý nghĩa Xác định có sử dụng PreCondition hay không. Xác định có sử dụng PostCondition hay không. Xác định có sử dụng Invariant hay không. Xác định có sử dụng 4 BasePreConditionCheck bool PreCondition của những lớp dẫn xuất hay không. Xác định có sử dụng 5 BasePostConditionCheck bool PostCondition của những lớp dẫn xuất hay không. Xác định có sử dụng Invariant 6 BaseInvariantCheck...

Chủ đề:
Lưu

Nội dung Text: TÌM HIỂU CÔNG NGHỆ DESIGN BY CONTRACT VÀ XÂY DỰNG CÔNG CỤ HỖ TRỢ CHO C# - 9

  1. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# Danh sách các đối tượng xử lý: STT Tên Lớp/Kiểu Ý nghĩa Xác định có sử dụng 1 PreConditionCheck bool PreCondition hay không. Xác định có sử dụng 2 PostConditionCheck bool PostCondition hay không. Xác định có sử dụng Invariant 3 InvariantCheck bool hay không. Xác định có sử dụng 4 BasePreConditionCheck bool PreCondition của những lớp dẫn xuất hay không. Xác định có sử dụng 5 BasePostConditionCheck bool PostCondition của những lớp dẫn xuất hay không. Xác định có sử dụng Invariant 6 BaseInvariantCheck bool của những lớp dẫn xuất hay không. Danh sách các biến cố : STT Thể hiện Biến cố Xử lý Hiển thị màn hình Configuration cho phép người dùng enable hoặc disable chức năng 1 Form Load kiểm tra của PreCondition, PostCondition, Invariant. Lưu những thông số đã chọn trên màn hình và 2 btnOK Click thoát khỏi màn hình 3 btnClose Click Thoát khỏi màn hình. 97
  2. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# 16.2.2.2 Lớp Connect Hình 16-4: Lớp Connect Danh sách các biến thành phần: STT Tên Kiểu/Lớp Ý nghĩa Lưu trữ thông tin của Project hiện 1 projectInfo ProjectInfo hành. Danh sách các biến cố: STT Thể hiện Biến cố Xử lý RightClick vào màn hình soạn thảo code, xuất hiện pop-up menu. Click vào command này, màn hình Configuration hiển thị cho 1 Command Exec phép người dùng enable hoặc disable chức năng kiểm tra của PreCondition, PostCondition, Invariant. Bắt đầu chạy chương trình: Lưu thông tin của project hiện hành: thông tin của các phương thức trong các lớp (tên phương thức, precondition, 2 Project BuildBegin postcondition) và Invariant của mỗi lớp trong project. Đổi tên tất cả các phương thức có liên quan đến contract. 98
  3. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# Lưu thông tin về contract của những lớp dẫn xuất cho lớp kế thừa. Phát sinh source code để kiểm tra những Assertion. 3 Project BuildDone Trả source code về như cũ. 16.2.2.3 Lớp ProjectInfo Hình 16-5: Lớp ProjectInfo Danh sách biến thành phần: STT Tên Kiểu/Lớp Ý nghĩa Mảng các đối tượng ClassInfo, mỗi 1 classInfo ClassInfo[] đối tượng lưu trữ thông tin một lớp của project. 2 NumFile int Số file trong project này. 99
  4. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# Danh sách hàm thành phần: STT Tên Tham số Kết quả Xử lý Đếm số file của project, 1 FileCount lưu vào biến NumFile Duyệt qua từng lớp, gọi 2 ChangeAllFuncName phương thức đổi tên hàm của mỗi lớp đó. Duyệt qua từng lớp, gọi phương thức lưu thông SaveAssertionOfBase 3 tin về assertion của Classes những lớp dẫn xuất của từng lớp đó Duyệt qua từng lớp, gọi phương thức thêm vào 4 GenerateCode phần code kiểm tra Assertion của từng lớp đó. Duyệt qua từng lớp, gọi 5 ReturnOriginalCode phương thức trả code về như cũ của từng lớp đó. 100
  5. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# 16.2.2.4 Lớp ClassInfo Hình 16-6: Lớp ClassInfo Danh sách biến thành phần: STT Tên Kiểu/Lớp Ý nghĩa Ghi chú Mảng các đối tượng FunctionInfo, mỗi đối 1 functionInfo FunctionInfo[] tượng lưu trữ thông tin một hàm của lớp. 2 NumFunc int Số hàm trong class này. Đối tượng lớp Assertion để 3 Invariant Assertion lưu trữ thông tin về Invariant của lớp. Mảng đối tượng lớp 4 BaseInvariant Assertion[] Assertion để lưu trữ thông tin về Invariant của những 101
  6. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# lớp dẫn xuất. Mỗi file chỉ được 5 FileName string Tên file chứa lớp. chứa 1 lớp 6 ClassName string Tên lớp. 7 BaseClassName string[] Mảng tên các lớp dẫn xuất. Đối tượng lớp Extra, dùng để gọi những hàm riêng, 8 extra Extra không thuộc trách nhiệm của những lớp chính. Danh sách hàm thành phần: STT Tên Tham số Kết quả Xử lý Đếm số hàm của lớp, lưu 1 FuncCount vào biến NumFunc Phân tích code để lấy tên 2 GetClassName của lớp, lưu vào ClassName. Phân tích code để lấy tên của những lớp dẫn xuất 3 GetBaseClassesName của lớp này, lưu vào BaseClassName. Lưu Invarian, SaveAssertionOfBase ClassInfo PreCondition, 4 PostCondition của những Class [] lớp dẫn xuất. 102
  7. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# Lưu thông tin Invariant 5 SaveInvariantInfo của lớp vào biến Invariant. Duyệt qua từng hàm trong lớp, lưu thông tin của từng hàm (tên hàm, 6 ChangeFuncName PreCondition, PostCondition), sau đó đổi tên hàm. Tìm vị trí thích hợp trong code, gọi hàm 7 GenerateCode CodeGenerated để phát sinh code vào đó. Duyệt qua từng hàm, gọi phương thức phát sinh 8 CodeGenerated string code của từng hàm tương ứng, trả ra chuỗi code đã được phát sinh. Xoá phần code phát sinh 9 ReturnOriginalCode và điều chỉnh tên hàm về như cũ. 103
  8. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# 16.2.2.5 Lớp FunctionInfo Hình 16-7: Lớp FunctionInfo Danh sách biến thành phần: STT Tên Kiểu/Lớp Ý nghĩa Đối tượng lớp Assertion để lưu trữ 1 PreCondition Assertion thông tin về PreCondition của hàm. Đối tượng lớp Assertion để lưu trữ 2 PostCondition Assertion thông tin về PostCondition của hàm. 3 FunctionName string Biến lưu tên hàm. Mảng đối tượng lớp Assertion để lưu 4 BasePreCondition Assertion[] trữ thông tin về PreCondition của những lớp dẫn xuất. Mảng đối tượng lớp Assertion để lưu 5 BasePreCondition Assertion[] trữ thông tin về PostCondition của những lớp dẫn xuất. Đối tượng lớp Extra, dùng để gọi 6 Extra Extra những hàm riêng, không thuộc trách nhiệm của những lớp chính. 104
  9. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# Danh sách hàm thành phần: STT Tên Tham số Kết quả Xử lý Ghi chú Đổi tên hàm theo 1 ChangeName dạng @origin_[Tên cũ] Lưu thông tin PreCondition và PostCondition của 2 SaveContractsInfo hàm vào biến PreCondition và PostCondition. dùng cho Phân tích một những mệnh đề của mệnh đề 3 GetVar string string[] Assertion để lấy có từ ra biến và kiểu dữ khoá liệu OLD Chỉ làm Với mỗi mệnh đề việc với của một đối tượng những GetVarHaveOLD Assertion, gọi 4 Assertion string[][] mệnh đề Keyword hàm GetVar để có từ lấy biến và kiểu khoá dữ liệu. OLD Dùng những tên hàm đã lưu, phát 5 GenerateCode sinh ra những hàm mới. Những hàm này sẽ gọi lại 105
  10. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# những hàm gốc (đã bị đổi tên) cùng với code kiểm tra những PreCondition, PostCondition và Invariant của hàm. 16.2.2.6 Lớp Assertion Hình 16-8: Lớp Assertion Danh sách biến thành phần: STT Tên Kiểu/Lớp Ý nghĩa Ghi chú Lưu tên thủ tục(tên Giá trị rỗng đối với 1 Routine string hàm) chứa Assertion Invariant này. Lưu trữ toàn bộ mệnh 2 ConditionFull string[] đề của Assertion. 106
  11. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# Khác ConditionFull ở chỗ không lưu Lưu trữ toàn bộ mệnh 3 Condition string kiểu dữ liệu của đề của Assertion. biến có từ khoá OLD Lưu những Message đi 4 Message string[] kèm với mỗi Condition Đối tượng lớp Extra, dùng để gọi những 5 Extra Extra hàm riêng, không thuộc trách nhiệm của những lớp chính. Danh sách hàm thành phần: Kết STT Tên Tham số Xử lý quả Dựa vào FuncName và Type (Precondition, PostCodition, Invariant, GenerateAssertion string FuncName, BasePreCondition, 1 string Code string Type BasePostCondition, BaseInvariant) để phát sinh hàm kiểm tra Assertion. Phát sinh trong hàm FuncName những dòng string FuncName, 2 GenerateCode string Type, code kiểm tra gọi đến string[][] OLDVar những hàm kiểm tra Assertion đã tạo ra bằng 107
  12. Tìm hiểu công nghệ Design By Contract và Xây dựng công cụ hỗ trợ cho C# GenerateAssertionCode. OLDVar là mảng chứa những biến có từ khoá OLD của PostCondition và kiểu dữ liệu tương ứng để phát sinh code kiểm tra đối với những biến này. Dựa vào FuncName và Type (Precondition, PostCodition, Invariant, BasePreCondition, BasePostCondition, BaseInvariant) để phát Assertion ass, sinh hàm kiểm tra GenerateAssertion string FuncName, 3 string Assertion. CodeBasePre string Type Hàm này tương tự hàm GenerateAssertionCode nhưng chỉ dùng trong trường hợp lớp dẫn xuất có PreCondition, lúc này cần truyền tham số kiểu Assertion cho hàm. Chức năng giống hàm GenerateCode nhưng hỉ string FuncName, dùng trong trường hợp GenerateCode_Ba 4 Assertion[] sePre lớp dẫn xuất có chứa BasePreCondition PreCondition, vì trường hợp này code phát sinh 108
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2