Chương 1: TỔNG QUAN VỀ KHUNG LÀM VIỆC 1. Khái niệm về khung làm viêc Thiết kế phần mềm là công việc khó và việc thiết kế của phần mềm để có thể sử dụng lại còn khó hơn rất nhiều. Một khung làm việc định hƣớng đối tƣợng là một loại cấu trúc phần mềm có thể sử dụng lại bao gồm cả thiết kế và code. Khái niệm khung làm việc đƣợc mong đợi sẽ làm tăng tính hiệu quả trong quá trình phát triển phần mềm của các kỹ sƣ phần mềm.
Khung làm việc định hƣớng đối tƣợng là gì? Tồn tại rất nhiều định nghĩa khác nhau và giống nhau về khung làm việc trong đó định nghĩa bởi Johnson và Foote là định nghĩa đƣợc biết đến nhiều nhất “Một khung làm việc là một bộ các lớp mà nó là biểu hiện của một thiết kế trừu tượng cho các giải pháp cho loạt các vấn đề liên quan” [8]. Một định nghĩa tƣơng tự cũng đã đƣợc Johnson đƣa ra năm 1991 “Một khung làm việc là một bộ nổi bật các lớp cộng tác bao gồm cả các mẫu tỷ lệ nhỏ và cơ chế lớn mà nó thực hiện các yêu cầu chung và thiết kế trong phạm vi một miền ứng dụng cụ thể” [8]. Ngoài ra còn một số các định nghĩa khác nhƣ “Một khung làm việc ràng buộc các lựa chọn chính xác về sự phân chia trạng thái và luồng điều khiển, ngƣời dùng hoàn thiện hoặc mở rộng khung làm việc để tạo ra một ứng dụng cụ thể” [1]. “Một khung làm việc hƣớng đối tƣợng là một loại kiến trúc phần mềm có thể sử dụng lại đƣợc cả thiết kế và mã nguồn” [2].
“Một khung làm việc là một tập các đối tƣợng mà cộng tác với nhau để tạo ra một tập các đáp ứng cho một ứng dụng hoặc một vùng hệ thống con” [1]. “Một khung làm việc là một tập các ký hiệu của các lớp cộng tác mà đạt đƣợc cả các mẫu phạm vi nhỏ và các cơ chế chủ yếu để thực hiện các yêu cầu chung và thiết kế trong một phạm vi ứng dụng cụ thể” [8]. Dựa trên các định nghĩa, chúng ta có thể định nghĩa lại khung làm việc định hƣớng đối tƣợng nhƣ sau 1. Định nghĩa về khung làm việc Một khung làm việc bao gồm một tập các lớp mà các thể hiện của chúng cộng tác với nhau, đƣợc dự định để mở rộng, sử dụng lại cho các ứng dụng cụ thể của một lĩnh vực.
Một họ các vấn đề liên quan, cho phép tổng hợp trong một khung làm việc. Hơn z - 10 - nữa, các khung làm việc đƣợc biểu diễn thành một ngôn ngữ lập trình, nhƣ vậy nó cung cấp cho việc sử dụng lại cả mã thực hiện và thiết kế. Cấu trúc của một khung làm việc Một khung làm việc hƣớng đối tƣợng bao gồm 5 thành phần sau [3]: – Các tài liệu thiết kế – Các giao diện – Các lớp trừu tượng – Các thành phần – Các lớp hình 1.1 thể hiện mối quan hệ giữa các thành phần khác nhau trong một khung làm việc: Các tài liệu thiết kế phản ánh Các giao diện triển khai Các lớp trừu tƣợng triển khai thừa kế Các thành phần là một phần của Các lớp Hình 1. Mối quan hệ giữa các thành phần trong một khung làm việc [3].
Các thành phần của một khung làm việc đƣợc mô tả nhƣ sau: Các tài liệu thiết kế: các tài liệu thiết kế của một khung làm việc có thể bao gồm các lƣợc đồ lớp đƣợc mô tả bằng văn bản, hoặc có thể chi là một vài ghi chú về ý tƣởng nảy sinh trong đầu tác giả. Các giao diện: các giao diện mô tả đáp ứng bên ngoài của các lớp. Các giao diện có thể đƣợc sử dụng để mô hình hóa các vai trò khác nhau trong một hệ thống, ví dụ nhu z - 11 - các vai trò trong một mẫu thiết kế. Một vai trò đại diện cho một nhóm nhỏ của các phƣơng pháp trong giao diện mà liên quan tới phƣơng pháp khác.
Các lớp trừu tượng: một lớp trừu tƣợng là một sự thực hiện chƣa đầy đủ của một hoặc nhiều giao diện. Nó có thể đƣợc sử dụng để định nghĩa cách đối xử mà sẽ là chung cho một nhóm các thành phần thực hiện một nhóm các giao diện. Các thành phần: Giống nhƣ các lớp, các thành phần có thể đƣợc tích hợp với các lớp khác. Trong hình vẽ, có một mũi tên “là thành phần của” giữa các lớp và các thành phần.
Nếu bản thân các lớp có một API (Application Programming Interface – giao diện lập trình ứng dụng) đƣợc định nghĩa đầy đủ thì tập kết quả của các lớp sẽ đƣợc biểu hiện nhƣ là một tổ hợp các thành phần. Một thành phần đƣợc định nghĩa nhƣ sau: “Một thành phần phần mềm là một đơn vị kết cấu với các giao diện đƣợc ghi rõ theo hợp đồng và các phụ thuộc ngữ cảnh rõ ràng. Một thành phần phần mềm có thể đƣợc triển khai không phụ thuộc và đƣợc tổ hợp bằng các hãng thứ ba”. Các lớp: Mức thấp nhất của một framework là các lớp.
Các lớp chỉ khác với các thành phần là trong thực tế, các giao diện lập trình ứng dụng (API) đƣợc công khai của nó không đƣợc đƣa ra trong các giao diện của một khung làm việc. Một cách điển hình là các lớp đƣợc sử dụng bởi các thành phần để đại diện cho chức năng, ví dụ một ngƣời phát triển ứng dụng sử dụng khung làm việc thƣờng không nhìn thấy các lớp này trừ khi anh ta làm việc với các thành phần. Cách thức làm việc của một khung làm việc: Một khung làm việc hƣớng đối tƣợng làm việc bằng cách cung cấp một đặc tả rõ ràng của các tƣơng tác đƣợc mong đợi giữa các thành phần. Ví dụ, một thành phần có thể trông chờ những gì từ các thành phần khác và cái gì nên đƣợc cung cấp tới chúng? Một khung làm việc định nghia các dịch vụ lựa chọn, và cung cấp một giải thích cho việc định nghĩa thành phần nào là một thành phần cung cấp.
Nhƣ thế, một thành phần sẽ có khả năng đƣợc mở rộng rất lớn và các thành phần mới có thể tƣơng tác mạnh mẽ với những cái đã có. Chúng cộng tác với các chi tiết, khía cạnh cụ thể của các vấn đề đƣợc cân nhắc bởi khung làm việc. Các thành phần ứng dụng có thể vẫn còn chứng minh tính tƣơng thích với các vấn đề khác, nhƣ ngữ nghĩa của dữ liệu mà chúng chuyển qua. Các bộ phận phụ thuộc có thể đƣợc giới thiệu nhƣ là các thành phần của khung làm việc.
Sự thi hành các thành phần này có thể cùng khung làm việc xác định một dịch vụ và cung cấp các dịch vụ này cho các thành phần khác. Phân biệt khung làm việc với các khái niệm khác Một mẫu thiết kế khác với một khung làm việc ở ba điểm [1]: Thứ nhất, một mẫu thiết kế là trừu tƣợng hơn một khung làm việc, bởi vì một khung làm việc đƣợc bao gồm cả mã, trong khi đó chỉ có các ví dụ của các mẫu thiết z - 12 - kế mới đƣợc mã hóa. Các mẫu thiết kế thậm chí mô tả mục đích, việc cân bằng các yếu tố khác để đạt đƣợc sự kết hợp tốt nhất và các kết quả của một thiết kế. Điều này không là một trƣờng hợp cho các khung làm việc.
Thứ hai, các mẫu thiết kế là những kiến trúc nhỏ hơn so với các khung làm việc. Do vậy, một khung làm việc có thể chứa một số các mẫu thiết kế, nhƣng điều ngƣợc lại là không thể. Do vậy, các mẫu thiết kế không có ảnh hƣởng lớn tới kiến trúc của ứng dụng. Cuối cùng, các khung làm việc đƣợc chuyên môn hóa hơn so với các mẫu thiết kế.
Các khung làm việc luôn luôn liên quan đến một miền ứng dụng cụ thể, trong khi đó các mẫu thiết kế là chung và có thể đƣợc ứng dụng trong bất kỳ miền ứng dụng nào. Các ngôn ngữ mẫu khác với khung làm việc theo cách mà một ngôn ngữ mẫu miêu tả: làm nhƣ thế nào để tạo ra một thiết kế. Trong khi đó, một khung làm việc hƣớng đối tƣợng là một thiết kế. Các ngôn ngữ mẫu bổ sung cho một khung làm việc, do chúng có thể hƣớng dẫn các kỹ sƣ phần mềm sử dụng khung làm việc nhƣ thế nào, và mô tả tại sao nó lại đƣợc thiết kế nhƣ vậy.
Một ứng dụng hƣớng đối tƣợng khác với một khung làm việc ở chỗ, một ứng dụng mô tả một chƣơng trình thực hiện phức tạp mà thỏa mãn một yêu cầu cụ thể. Khung làm việc đạt đƣợc các tính năng của một ứng dụng nhƣng nó không thể thi hành bởi vì nó không bao gồm các tƣơng tác trong trƣờng hợp ứng dụng cụ thể. Các khung làm việc khác với các thƣ viện lớp ở chỗ: chúng nhắm tới các miền ứng dụng cụ thể. Trong khi đó, các thƣ viện lớp cung cấp cho ngƣời sử dụng các sự thực hiện trƣớc của thuật toán.
Các thƣ viện lớp là thụ động, ngƣời sử dụng gọi các phƣơng pháp trong thƣ viện lớp để thực hiện một số hoạt động. Trong khi đó các khung làm việc định nghĩa khung cho một ứng dụng thực tế và điều khiển luồng điều khiển trong ứng dụng. Các khung làm việc có thể khác so với thƣ viện lớp, nhƣng chúng có thể sử dụng các thƣ viện lớp đã có sẵn để thực hiện các thuật toán chung và các cấu trúc dữ liệu. Các thành phần phần mềm ban đầu đã đƣợc dự định là các thành phần chức năng riêng lẻ mà có thể đƣợc đầu tƣ từ nhà cung cấp và tích hợp vào trong các ứng dụng.
Các khung làm việc dƣờng nhƣ là những thành phần mà có thể đƣợc đầu tƣ từ nhà cung cấp và nhiều hơn một khung làm việc có thể đƣợc sử dụng trong một ứng dụng. Tuy nhiên, một điểm khác dễ nhận thấy giữa chúng là các khung làm việc cung cấp một bộ rộng hơn các dịch vụ so với các thành phần phần mềm. Chúng có khả năng tùy biến nhiều hơn, có các giao diện phức tạp hơn và điều quan trọng hơn là chúng thực sự z - 13 - định nghĩa cho một họ ứng dụng hoặc một diện rộng của các ứng dụng. Do vậy, các khung làm việc là khó học hơn đối với các nhà phát triển, nhƣng một khi đã hiểu đƣợc hết khung làm việc thì sẽ có đƣợc sự linh động cao hơn và với một khung làm việc đƣợc thiết kế tốt thì có thể giảm đƣợc các nỗ lực cần bỏ ra để xây dựng một ứng dụng đã đƣợc tùy biến rõ rệt hơn.