Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 79 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
79
Dung lượng
1,64 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Đỗ Duy Hưng ỨNGDỤNGRELATIONALINTERFACECHOJAVA KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin Cán bộ hướng dẫn: Ths. Phạm Thị Kim Dung HÀ NỘI – 2010 ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng I Lời cảm ơn Trước tiên, tôi xin gửi lời cảm ơn và lòng biết ơn sâu sắc đến thạc sỹ Phạm Thị Kim Dung, người đã tận tình chỉ bảo hướng dẫn tôi trong suốt quá trình thực hiện khoá luận tốt nghiệp. Tôi xin bày tỏ lời cảm ơn sâu sắc đến các thầy cô giáo đã giảng dạy tôi trong suốt bốn năm học qua, đã cho tôi nhiều kiến thức quý báu để tôi vững bước trên con đường học tập của mình. Tôi xin gửi lời cảm ơn tới các bạn trong lớp K51CB, và K51CNPM đã ủng hộ khuyến khích tôi trong suốt quá trình học tập tại trường. Và cuối cùng, tôi xin bày tỏ niềm biết ơn vô hạn tới bố mẹ, và những người bạn thân luôn bên cạnh, động viên tôi trong suốt quá trình thực hiện khoá luận tốt nghiệp. Hà Nội, ngày 22 tháng 05 năm 2010 Sinh Viên Đỗ Duy Hưng ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng II TÓM TẮT NỘI DUNG Hiện nay, thiết kế dựa trên thành phần (Component-based design) đang được ứngdụng và phát triền mạnh vì những lợi ích mà nó mang lại cho ngành công nghệ phần mềm. Thiết kế dựa trên thành phần giúp cho việc xây dựng các hệ thống phức tạp, như là hệ thống nhúng, hệ thống vật lý trở nên hiệu quả và đáng tin cậy. Với kích cỡ và độ phức tạp lớn của hệ thống này không cho phép thiết kế toàn bộ từ đầu, hoặc xây dựng nó như là một đơn vị đơn lẻ. Thay vào đó, hệ thống phải được thiết kế như là một tập hợp các thành phần, một số được xây dựng từ đầu, một số kế thừa lại. Giao diện (Interface) đóng một vai trò quan trọng trong thiết kế dựa trên thành phần vì chúng cung cấp phương tiện để mô tả cho thành phần. Một interface có thể được xem như là một bản tóm tắt, một đại diện của thành phần: giữ lại các thông tin cần thiết của thành phần, giấu thông tin không cần thiết và làm cho mô tả thành phần trở nên đơn giản và hiệu quả hơn. Trong khóa luận tốt nghiệp này, bằng việc sử dụng lý thuyết về relational interface, tôi xây dựng một công cụ tự động phân tích, trích rút các thành phần có trong file mã nguồn Java và biến đổi nó thành các relational interface, thực hiện việc kết hợp tự động các interface này với nhau. Để từ đó, ta có thể biết được khả năng kết hợp của các thành phần này với nhau. Interface mới được kết hợp vẫn giữ nguyên tính chất của các interface cũ. Qua đó, ta cũng có thể dự đoán được giá trị đầu ra của các thành phần nếu biết được giá trị đầu vào thông qua các tính chất. ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng III MỤC LỤC Bảng các kí hiệu nghĩa tiếng anh V Danh mục hình vẽ VI CHƯƠNG 1: MỞ ĐẦU 1 1.1 Đặt vấn đề 1 1.2 Nội dung bài toán 1 1.3 Cấu trúc khóa luận 2 CHƯƠNG 2: GIỚI THIỆU CHUNG VỀ ĐẶC TẢ VÀ GIAO DIỆN 3 2.1 Công nghệ phần mềm hướng thành phần 3 2.2 Đặc tả hình thức 3 2.2.1 Các phương pháp hình thức 4 2.2.2 Đặc tả 4 2.2.3 Đặc tả hình thức 5 2.3 Giao diện 5 2.3.1 Đặc tả giao diện 5 2.3.2 Thành phần và giao diện 6 2.3.3 Các loại interface 6 2.3.4 Statelful và stateless interface 7 2.3.5 Relationalinterface 8 CHƯƠNG 3: NỘI DUNG LÝ THUYẾT VỀ RELATIONALINTERFACE 10 3.1 Sơ bộ về bài viết và các ký hiệu 10 3.2 Relational interfaces 12 3.3 Môi trường và khả năng lắp ghép 19 3.4 Kết hợp 23 CHƯƠNG 4: XÂY DỰNG CÔNG CỤ CHUYỂN ĐỔI TỰ ĐỘNG TỪ JAVA SANG RELATIONALINTERFACE 34 4.1 Cở sở lý thuyết 34 4.1.1 Các thành phần của lớp trong ngôn ngữ lập trình hướng đối tượng 34 4.1.2 Relationalinterface 35 4.1.3 Một số kiến thức về logic 36 4.2 Mục tiêu của bài toán 41 4.3 Hướng giải quyết bài toán 41 4.3.1 Tạo relationalinterface tự động từ phương thức 41 4.3.2 Tính input assumption tự động 43 4.3.3 Tính ξ mới được tạo ra tự động 44 4.3.4 Thực hiện việc kết hợp tự động 45 ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng IV 4.4 Mô tả các thành phần của công cụ 46 4.4.1 Lớp SourceFormat.java 47 4.4.2 Lớp RInterface.java 48 4.4.3 Lớp JavaFile.java 49 4.4.4 Lớp JavaClass.java 50 4.4.5 Lớp Tools.java 51 4.4.6 Lớp Expresstion.java 56 4.4.7 Lớp FOLOptimizer.java 59 CHƯƠNG 5: CÀI ĐẶT VÀ THỬ NGHIỆM 60 5.1 Xây dựng công cụ 60 5.2 Dữ liệu thử nghiệm 61 5.3 Kết quả thử nghiệm 62 5.3.1 Phân tích file mã nguồn 62 5.3.2 Chuyển những phương thức này thành relationalinterface 63 5.3.3 Kết hợp các interface 65 5.3.4 Dự đoán kết quả: 68 5.4 Đánh giá 69 CHƯƠNG 6: KẾT LUẬN 69 6.1 Kết luận về khóa luận 69 6.2 Hướng phát triển trong tương lai 70 Phụ lục 71 Phụ lục 1: Nội dung mã nguồn file thử nghiệm Sample.java 71 ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng V Bảng các kí hiệu nghĩa tiếng anh Kí hiệu Diễn giải Input Đầu vào Output Đầu ra Well-formed Định dạng hoàn chỉnh Well-formable Định dạng có thể hoàn chỉnh Interface Giao diện RelationalInterface Giao diện quan hệ Stateless Phi trạng thái Stateful Có trạng thái Feedback Phản hồi Formal methods Các phương pháp hình thức Formal specification Đặc tả hình thức Assumption Giả thiết Guarantee Bảo đảm Refinement Làm mịn ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng VI Danh mục hình vẽ Hình 3.1: Sơ đồ một interfacecho ví dụ 4 26 Hình 3.2: Sơ đồ một interface với feedback 31 Hình 4.1: Hàm parse() trong lớp JavaFile.java 50 Hình 4.2: Hàm parse() trong lớp JavaClass.java 51 Hình 4.3: Hàm Tools.rename(JavaMethod jm) 52 Hình 4.4: Hàm Tools. getRInterfaceList(JavaClass jc) 56 Hình 4.5: Hàm Shorten trong lớp Expression.java 58 Hình 5.1: Giao diện làm việc của Netbeans 60 Hình 5.2: Minh họa cách cài đặt thư viện (1) 61 Hình 5.3: Minh họa cách cài đặt thư viện (2) 61 Hình 5.4: Kết quả thử nghiệm 5.3.1 đối với hàm main 62 Hình 5.5: Kết quả thử nghiệm 5.3.1 đối với hàm cong 62 Hình 5.6: Kết quả thử nghiệm 5.3.1 đối với hàm tru 62 Hình 5.7: Kết quả thử nghiệm 5.3.1 đối với hàm nhan 63 Hình 5.8: Kết quả thử nghiệm 5.3.1 đối với hàm chia 63 Hình 5.9: Kết quả thử nghiệm 5.3.1 đối với hàm triTuyetDoi 63 Hình 5.10: Kết quả thử nghiệm 5.3.2 với hàm cong 64 Hình 5.11: Kết quả thử nghiệm 5.3.2 đối với hàm tru 64 Hình 5.12: Kết quả thử nghiệm 5.3.2 đối với hàm nhan 64 Hình 5.13: Kết quả thử nghiệm 5.3.2 đối với hàm chia 64 Hình 5.14: Kết quả thử nghiệm 5.3.2 đối với hàm triTuyetDoi 65 Hình 5.15: Biểu đồ interfacecho kết hợp chia(cong(a, b), tru(a, b)) 66 Hình 5.16: Kết quả thử nghiệm 5.3.3 đối với hàm main 68 ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng 1 CHƯƠNG 1: MỞ ĐẦU 1.1 Đặt vấn đề Hiện nay, với sự phát triển mạnh mẽ của công nghệ thông tin, nhiều hệ thống lớn được xây dựng nên nhằm mục đích giải quyết những bài toán với độ phức tạp tương đương. Với kích thước và độ phức tạp của những hệ thống như vậy, đòi hỏi phải có một phương pháp thiết kế hợp lý, hiệu quả và đáng tin cậy. Phương pháp thiết kế dựa trên thành phần đáp ứng được yêu cầu này, bởi vì, thay vì phải thiết kế toàn bộ từ đầu, hệ thống được thiết kế như là một tập các thành phần. Các thành phần này hoặc là được xây dựng lại từ đầu, hoặc là được thừa kế từ những thành phần khác. Do vậy mỗi thành phần phải có tính độc lập cao và chuẩn đặc tả rõ ràng. Điều này thường được thể hiện qua interface (giao diện) của thành phần. Một interface có thể coi như một đặc tả của một thành phần. Việc kết hợp các thành phần cũng thông qua việc kết hợp các interface. 1.2 Nội dung bài toán Trong phương pháp thiết kế dựa trên thành phần, interface chính là đặc tả của thành phần, nên quá trình đặc tả interface là một trong những bước quan trọng, cần được quan tâm. Do vậy, trong khóa luận này tôi muốn đề cập đến phương pháp xây dựnginterfacecho mỗi thành phần một cách tự động. Hiện nay có rất nhiều lý thuyết về interface được đưa ra để mô tả thành phần. Tuy nhiên, các các interface này thường gặp phải một số khó khăn như không bắt được quan hệ giữa giá trị đầu vào và đầu ra, hay khó khăn trong việc kết hợp các interface với nhau. Để khắc phục những nhược điểm này, tôi đề xuất việc sử dụngrelationalinterface trong đặc tả interfacecho mỗi thành phần. Nhiệm vụ chính của bài toán là xây dựng công cụ chuyển đổi các thành phần có trong mã nguồn của ngôn ngữ lập trình hướng đối tượng thành relational interface, rồi kết hợp các interface này với nhau một cách tự động. ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng 2 1.3 Cấu trúc khóa luận Phần còn lại của khóa luận được cấu trúc như sau: Chương 2: Giới thiệu chung về kỹ nghệ hướng thành phần, phương pháp hình thức, đặc tả hình thức, đặc tả giao diện. Một số loại interface (giao diện) cùng với những ưu điểm, hạn chế của chúng. Giới thiệu chung về relational interface. Chương 3: Mô tả nội dung lý thuyết của relational interface, về môi trường và khả năng lắp ghép. Lý thuyết về kết hợp relational interfaces [7]. Chương 4: Áp dụng lý thuyết về relationalinterface và một số lý thuyết khác để xây dựng công cụ tự động chuyển đổi từ file mã nguồn Java sang relational interface. Chương 5: Thử nghiệm công cụ và đánh giá. Chương 6: Kết luận. ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng 3 CHƯƠNG 2: GIỚI THIỆU CHUNG VỀ ĐẶC TẢ VÀ GIAO DIỆN 2.1 Công nghệ phần mềm hướng thành phần Công nghệ phần mềm hướng thành phần (component-based software engineering [8]) là một trong những bước tiến của quá trình sản xuất phần mềm trong công nghiệp. Nhờ vào đó, việc sản xuất phần mềm trở nên phát triển mạnh mẽ. Ta cùng nhìn lại các ngành kĩ nghệ khác. Mỗi ngành kĩ nghệ đều có riêng cho mình một số thành tố cơ bản. Sự khác biệt của công nghệ phần mềm so với các ngành kĩ nghệ khác là ở chỗ sự lắp ráp các thành phần khác nhau của phần mềm còn mang tính tùy biến. Nghĩa là đưa ra cùng hai linh kiện (hay thành phần) phần mềm với cùng một thiết kế, hai lập trình viên có thể lắp ráp theo cách khác nhau. Nhận thức được điều này, kỹ nghệ hướng thành phần trong sản xuất phần mềm được bắt đầu áp dụng. Điều cơ bản mà mỗi thành phần phải có là: tính độc lập cao và có chuẩn đặc tả rõ ràng cho từng thành. Đặc tả này phải không phụ thuộc vào cấu trúc bên trong của thành phần. Dựa trên 2 điểm cơ bản này của một thành phần, điều đầu tiên khi bắt đầu thiết kế thành phần là quan tâm đến đặc tả của thành phần. Điều này thường được thể hiện qua interface (giao diện). Tiếp theo, tính độc lập của thành phần. Do tất cả các thành phần được kết nối qua interface thay vì trực tiếp, mọi quá trình xây dựng bên trong thành phần đều được khép kín. Sự phụ thuộc sẽ chủ yếu dựa vào interface. Vì vậy sẽ tách được sự phụ thuộc về cách xây dựng bên trong. Việc xây dựng thành phần có thể bằng bất cứ phương pháp nào dù là lập trình cấu trúc hay lập trình hướng đối tượng. 2.2 Đặc tả hình thức Phương pháp hình thức bao gồm một số các hoạt động khác nhau như: đặc tả hệ thống hình thức, dẫn chứng và phân tích đặc tả, phát triển chuyển đổi, và kiểm chứng chương trình. Tất cả các hoạt động này đều phụ thuộc vào đặc tả hình thức của phần mềm. Một đặc tả hình thức phần mềm là một đặc tả được thể hiện bằng một loại ngôn ngữ mà từ vựng, cú pháp, ngữ nghĩa của nó được định nghĩa một cách hình thức. Điều [...]... hơn là các relationalinterface được liên kết hay có thể liên kết được với nhau 8 Ứng dụngRelationalInterfacechoJava Đỗ Duy Hưng Với những định hướng này, và do giới hạn của khóa luận, tôi sẽ giải quyết vấn đề a, b, c Vấn đề và những chế còn lại sẽ được giải quyết trong những nghiên cứu sau này 9 ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng CHƯƠNG 3: NỘI DUNG LÝ THUYẾT VỀ RELATIONAL INTERFACE. .. thể đạt được (reachable state) Well-formable interface không nhất thiết phải là 7 ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng well-formed, nhưng mà có thể được chuyển thành well-formed bằng cách hạn chế một cách hợp lý các input 2.3.5 Relationalinterface Trong khóa luận này, tôi muốn đề cập đến relationalinterface [7] Relationalinterface là một interface chỉ ra những relation ( quan hệ ) giữa... chuỗi, ai, được kí hiệu là si, với i = 1, … , n 3.2 Relational interfaces Định nghĩa 1 (Relational interface) : một relationalinterface (hay một interface đơn giản) là 1 bộ I = ( X, Y, ξ ) Trong đó X, Y là 2 tập hữu hạn và tách rời của các biến input và output tương ứng, và ξ là hàm tổng ξ: (X ∪ Y)* → ℱ(X ∪ Y) 12 ỨngdụngRelationalInterfacechoJava Gọi Đỗ Duy Hưng (V) là tập tất cả các phép gán... {x | ∃(y, x) ∈ θ} ): 23 ỨngdụngRelationalInterfacechoJava Xθ(I1, I2) ≔ (X1 ∪ X2) \ Xθ Yθ(I1, I2) ≔ Đỗ Duy Hưng Y1 ∪ Y2 ∪ Xθ Kết nối θ định nghĩa một interface tổ hợp θ(I1, I2) ≔ (Xθ(I1, I2) , Yθ(I1, I2), ξ), trong đó với mọi s ∈ (Xθ(I1, I2) ∪ Yθ(I1, I2))* ξ(s) ≔ ξ1(s1) ∧ ξ2(s2) ∧ ρθ ∧ ∀ Yθ(I1, I2) : Φ Φ ≔ (ξ1(s1) ∧ ρθ) → in(ξ2(s2)) 24 (4) ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng Và với... hoán): cho 2 interface tách rời I1 và I2, I1 || I2 ≡ I2 || I1 25 ỨngdụngRelationalInterfacechoJava Đỗ Duy Hưng Định lý 5 (Kết nối có tính liên kết): Cho I1, I2, I3 là những interfaceCho θ12 là một kết nối giữa I1 và I2, θ13 là một kết nối giữa I1 và I3, và θ23 là một kết nối giữa I2 và I3 Như vậy: (θ12 ∪ θ23) (I1, θ23(I2, I3)) ≡ (θ13 ∪ θ23) (θ12(I1, I2), I3) Hình 3.1: Sơ đồ một interfacecho ví... (Stateless interface) : Một interface I = (X, Y, ξ) là một interface phi trạng thái nếu với mọi s, s’ ∈ (X ∪ Y)*, ξ(s) = ξ(s’) Trong interface phi trạng thái, ràng buộc độc lập với trạng thái Với một interface phi trạng thái, ta có thể coi ξ như là một thuộc tính, thay vì một hàm ánh xạ các trạng thái tới các thuộc tính Để rõ ràng hơn, ta sẽ biểu diễn I = (X, Y, ϕ) cho 14 ỨngdụngRelationalInterfacecho Java. .. các 15 Ứng dụngRelationalInterfacechoJava Đỗ Duy Hưng biến input và output Những bước chuyển tiếp hướng ra ngoài của một trạng thái phải có các guard tách rời, và hợp của những guard phải là true Một interface có thể được chỉ rõ như một máy tự động hữu hạn trạng thái được gọi là một interface hữu hạn trạng thái (finite-state interface) Các A/G interface là trường hợp đặc biệt của relational interface. .. ra, nhưng interface này không bắt được mối quan hệ giữa các input và output [5] 6 Ứng dụngRelationalInterfacechoJava Đỗ Duy Hưng Extended interfaces: giống với relational interface, tuy nhiên interface này không được đánh giá cao bởi hạn chế tính chất của những bước làm mịn và thực thi độc lập là không có[6] Moore interfaces: được định nghĩa bởi công thức ϕi và ϕo Trong đó công thức ϕi chỉ rõ giá... input bên ngoài x1, x2 được tạo nên Một interface tổ hợp không được bảo đảm là well-formed, thậm chí nếu các thành phần của nó là well-formed: Ví dụ 5: Xem xét phép kết hợp θ3((Iid || I+1), Ieq) được nói đến trong ví dụ 4, cho Iy là một interface phi trạng thái được định nghĩa như sau: Iy ≔ ({}, {y}, true) 28 Ứng dụngRelationalInterfacechoJava Đỗ Duy Hưng Cho θ4 ≔ {(y, x1), (y, x2)} Có nghĩa là... điểm, tức là, để hX(s) ≡ false với một vài trạng thái s Cuối cùng, tồn tại các interface phi trạng thái và là non-well-formed Các interface này có thể được ghép vào các môi trường không thực ít quan trọng mà dừng ngay lập tức 22 Ứng dụngRelationalInterfacechoJava Đỗ Duy Hưng Định nghĩa 9 (Môi trường W.R.T tương đương): 2 interface I và I’ là 2 môi trường w.r.t tương đương, kí hiệu là I ≡E I’, nếu . động 45 Ứng dụng Relational Interface cho Java Đỗ Duy Hưng IV 4.4 Mô tả các thành phần của công cụ 46 4.4.1 Lớp SourceFormat .java 47 4.4.2 Lớp RInterface .java 48 4.4.3 Lớp JavaFile .java. thành relational interface, rồi kết hợp các interface này với nhau một cách tự động. Ứng dụng Relational Interface cho Java Đỗ Duy Hưng 2 1.3 Cấu trúc khóa luận Phần còn lại của khóa luận. những nghiên cứu sau này. Ứng dụng Relational Interface cho Java Đỗ Duy Hưng 10 CHƯƠNG 3: NỘI DUNG LÝ THUYẾT VỀ RELATIONAL INTERFACE Tóm tắt về relational interface đã mô tả ở phần 2.3.5,