Role trong phát triển phần mềm hướng đối tượng

Một phần của tài liệu Mô hình tương tác dựa trên role trong hệ đa agent (Trang 42 - 45)

Qua phần khảo sát một số phương pháp phát triển phần mềm dựa trên role, chúng ta thấy role đã được sử dụng rất phổ biến trong các phương pháp phát triển phần mềm hướng đối tượng.

Năm 1995, Reenskaug [40] áp dụng role để mô tả các quá trình kỹ nghệ phần mềm hướng đối tượng. Một role trong một đặc tả đối tượng được gọi là một kiểu đối tượng. Kiểu đối tượng này là một đặc tả của một tập các đối tượng có các thuộc tính công cộng giống nhau. Tất cả các đối tượng phục vụ cùng một mục đích trong cấu trúc các đối tượng cộng tác trong một hoàn cảnh nhất định được coi là đóng cùng một role. Phương pháp này nhấn mạnh vào mô hình role chứ không phải role và giới thiệu role một cách trực quan. Vấn đề phân tách mối quan tâm là điều chủ yếu mà mô hình role này xem xét. Họ đã chỉ ra một áp dụng hay của mô hình role trong việc mô tả các quá trình kỹ nghệ.

Martin Fowler [25] xây dựng phương pháp hướng đối tượng của mình dựa vào các hành vi giống nhau của một nhóm đối tượng. Tất nhiên không phải mọi đối tượng đều giống nhau hết nhưng chắc chắn tồn tại những hành vi giống nhau (các hành vi tương tự này nhóm lại thành cụm hành vi). Thoạt tiên, điều này có vẻ giống như sự thừa kế cổ điển nhưng thực tế lại không phải vậy. Một đối tượng có thể

thuộc nhiều cụm hành vi khác nhau. Ví dụ, một người có thể vừa là khách hàng lại vừa là đại lý. Họ có những hành vi chung trong nhóm khách hàng, đồng thời lại có những hành vi thuộc nhóm đại lý. Role chính là cụm các hành vi giống nhau của một nhóm đối tượng

Năm 2000, Bäumer và các đồng sự đã đề xuất một cách áp dụng role khác trong hệ hướng đối tượng trong đó role được coi như một mẫu phát triển “role object” [6]. Phương pháp này mô hình một đối tượng dưới dạng nhiều role object khác nhau. Các role object này có thể được thêm vào hoặc bỏ bớt khỏi đối tượng gốc (core object) một cách tự động. Cấu trúc gồm đối tượng gốc và các role object được gọi là một subject. Một subject thường đảm nhận vài role (tức là gồm nhiều role object) và ngược lại, một role object có thể được nhiều subject đảm nhận. Sở dĩ có điều này bởi trên thực tế có thể có hai khách hàng khác nhau lần lượt đóng vai trò người vay và nhà đầu tư. Tuy nhiên, cả hai vai trò nhà đầu tư và người vay này đều có thể được đảm nhiệm bởi chỉ một đối tượng khách hàng.

Một client tương tác với role và các role object theo cách:

 Một client có thể mở rộng các đối tượng gốc với các role. Chúng mô tả các role được yêu cầu bằng các đối tượng đặc tả.

 Mỗi khi client muốn làm việc với đối tượng gốc theo một role nào đó, nó sẽ yêu cầu role tới đối tượng gốc. Nếu đối tượng gốc đang đảm nhiệm role này, nó sẽ trả về cho client. Nếu không, một lỗi được ném ra. Đối tượng gốc không bao giờ tự tạo ra các role object.

Phương pháp này cung cấp cho chúng ta một định hướng khá tốt để thiết kế một hệ đối tượng với khái niệm role. Điều này giúp chúng ta sử dụng lại khái niệm role ở mức mẫu thiết kế. Ngoài ra, một ưu điểm nữa của phương pháp này là role có thể được phát triển dễ dàng và độc lập với nhau, role object có thể được thêm vào hoặc bỏ đi một cách linh động trong thời gian chạy. Ngoài ra, ứng dụng phát triển với phương pháp này cũng được phân tách rõ ràng hơn nhờ sự phân chia rạch ròi giữa các thành phần và role của nó. Tuy nhiên, phương pháp này cũng tồn tại một

số nhược điểm như: các client trở nên phức tạp hơn do phải kiểm tra xem đối tượng có đảm nhận role yêu cầu không, phải mở rộng đối tượng gốc để nó có thể đảm nhiệm được role…Hơn nữa, việc duy trì ràng buộc giữa các role là khá khó khăn.

Trong hệ hướng đối tượng, role đặc biệt được sử dụng nhiều trong UML. Có ba định nghĩa khác nhau về role trong UML [42]:

(1)Role là tên các điểm cuối liên kết : rolename là tên của các vị trí của các quan hệ

(2)Role là các thành phần tham gia cộng tác (slots in collaborations) (3)Role là các lớp động (dynamic classes)

Khái niệm (1) là sự kế thừa của lược đồ quan hệ thực thể. Cơ sở của định nghĩa (1) rất đơn giản : để xác định duy nhất một role, mỗi điểm cuối của một liên kết (giống như mỗi ví trí của một quan hệ trong lược đồ quan hệ thực thể) có thể được gán một rolename và điểm cuối đó được coi là một role – association ends role. Trong khi đó, khái niệm (2) kế thừa các phương pháp hướng đối tượng như OORAM [43] coi một phân lớp (classifier) là một mô tả đầy đủ của các thể hiện (instance) còn role phân lớp là một mô tả các tính năng cần thiết trong một cộng tác cụ thể, tức là một role phân lớplà một hình chiếu hoặc một góc nhìn của một phân lớp. Định nghĩa (3) được coi là một cách nhìn về role thường thấy trong các phương pháp. Trong đặc tả UML, người ta còn có nhiều cách sử dụng khái niệm role khác nhau, chẳng hạn role trong trong lược đồ use case hoặc trong biểu đồ trạng thái. Tuy nhiên, những cách sử dụng này đều chỉ là các ví dụ cụ thể của ba định nghĩa đã nêu ở trên.

Khi nghiên cứu kỹ hơn, Steimann [44] nhận thấy các định nghĩa role trong UML ban đầu có rất nhiều vấn đề. Steimann đã đưa ra một số cải tiến để khái niệm role trong UML dễ dùng, đơn giản hơn [43]:

 Lớp giao diện (Interface) và role phân lớp được gộp lại thành một lớp mới có tên Role.

 Liên kết giữa các role phân lớp và phân lớp cơ sở của nó được thay thế bởi một mối quan hệ mới, tên là sản sinh (populates). Quan hệ này kết nối các lớp với role mà thể hiện của nó đảm nhận.

 Điểm cuối liên kết kết nối với role một cách độc quyền, do đó, không cần gán tên role cho các điểm cuối liên kết. Nếu có, tên này phải giống như role đã kết nối. Mọi role phải là duy nhất trong một liên kết, tức là không có hai điểm cuối của một liên kết có cùng một tên.

 Siêu lớp AssociationEndRole, AssociationRole, Association Generalization được thay thế bởi association overloading.

Một phần của tài liệu Mô hình tương tác dựa trên role trong hệ đa agent (Trang 42 - 45)