IV. Thiết kế
5. Thiết kế một lớp
Mục tiêu của việc thiết kế một lớp là tạo ra một lớp thiết kế sao cho hoàn thành vai trò của nó trong các thực thi ca sử dụng và các yêu cầu phi chức năng được áp dụng cho nó. Công việc này bao gồm việc bảo trì chính bản thân lớp thiết kế, và các mặt sau đây của nó:
• Các tác vụ của nó • Các thuộc tính của nó
• Các mối quan hệ mà nó tham gia vào đó • Các phương pháp hóa học
• Các trạng thái được áp đặt cho nó
• Các mối quan hệ phụ thuộc của nó với bất kỳ các cơ chế thiết kế chung nào • Các yêu cầu thích hợp cho việc thực thi của nó
• Sự thực thi đúng đắn của bất kỳ giao diện nào mà nó được yêu cầu cung cấp
Trước hết, chúng ta cần phác thảo một hoặc nhiều lớp thiết kế dựa trên đầu vào là các lớp phân tích và/hoặc các giao diện. Khi một giao diện được dùng làm đầu vào thì vấn đề trở nên đơn giản và điều cần làm chỉ là gán một lớp thiết kế để cung cấp giao diện đó
Khi sử dụng các lớp phân tích được cho làm đầu vào thì phương pháp được sử dụng phụ thuộc vào khuôn mẫu của lớp phân tích:
§Việc thiết kế của lớp biên phụ thuộc vào các công nghệ giao diện cụ thể nào được sử dụng
§Việc thiết kế các lớp thực thể biểu diễn các thông tin lâu dài thường kéo theo việc sử dụng một công nghệ cơ sở dữ liệu riêng. Chẳng hạn, tạo ra các lớp thiết kế được ánh xạ tương ứng thành các bản ghi trong một mô hình dữ liệu quan hệ
§Thiết kế các lớp điều khiển là việc làm tinh tế, vì chúng bao gói các chuỗi, sự phù hợp của các đối tượng khác, và đôi khi có tính logic nghiệp vụ thuần túy
Xác định các thao tác
Chúng ta xác định các tác vụ được cung cấp bởi lớp thiết kế và mô tả các tác vụ đó bằng cách sử dụng cú pháp của ngôn ngữ lập trình. Các đầu vào quan trọng của bước này là:
§Các trách nhiệm của một lớp phân tích bất kỳ mà lớp thiết kế lần vết tới nó. Một trách nhiệm thường chưa một hoặc nhiều tác vụ. Hơn nữa, nếu đã có mô tả về đầu vào và đầu ra cho các trách nhiệm, ta có thể dùng chúng như là một phác thảo thứ nhất của các tham số hình thức và của các giá trị kết quả của các tác vụ
§Các yêu cầu đặc biệt của một lớp phân tích bất kỳ mà lớp thiết kế lần vết tới nó
§Các giao diện mà lớp thiết kế cần phải cung cấp. Các tác vụ của giao diện cũng cần được cung cấp bởi lớp thiết kế
§Các thực thi ca sử dụng thiết kế mà lớp tham gia vào đó
Các thao tác của một lớp thiết kế cần phải hỗ trợ mọi vai trò mà lớp này giữ trong việc thực thi ca sử dụng khác nhau. Đối với một số lớp thì hành vi của các đối
tượng của chúng phụ thuộc nhiều vào trạng thái của đối tượng. Tốt nhất đối với các lớp này là được mô tả bằng cách sử dụng các biểu đồ trạng thái.
Xác định các thuộc tính
Chúng ta xác định các thuộc tính do lớp thiết kế đòi hỏi và mô tả chúng bằng cú pháp của ngôn ngữ lập trình. Một thuộc tính quy định một tính chất của một lớp thiết kế và tường được ngầm định và yêu cầu bởi các tác vụ của lớp đó
Các điều sau cần chú ý khi thiết kế thuộc tính:
§ Xem xét các thuộc tính trên một lớp phân tích bất kỳ mà lớp thiết kế lần vết tới nó
§ Các loại thuộc tính khả dụng trong phạm vi của ngôn ngữ lập trình § Khi lựa chọn một loại thuộc tính, hãy cố sử dụng lại một loại đã có sẵn § Một thể hiện đơn của thuộc tính không thể để bị chia sẻ bởi nhiều đối tượng
thiết kế. Nếu cần phải như vậy thì thuộc tính đó cần phải được xác định là một lớp riêng
§ Nếu một lớp thiết kế trở thành quá phức tạp do các thuộc tính của nó, thì một số trong những thuộc tính này có thể được tách ra thành các lớp riêng § Nếu một lớp có nhiều thuộctinhs hoặc có các thuộc tính phức tạp, có thể
minh họa điều này trong một biểu đồ lớp riêng mà chỉ nêu ra ngăn thuộc tính mà thôi
Xác định các liên kết và các kết hợp
Các đối tượng thiết kế tương tác với nhau trong các biểu đồ tuần tự. Các tương tác này thường đòi hỏi các liên kết giữa các lớp tương ứng của chúng. Do vậy kỹ sư phần mềm phải nghiên cứu những sự truyền thông báo trong các biểu đồ tuần tự để xác định các liên kết nào cần có. Khi xác định và tinh chế các liên kết và các kết hợp, cần chú ý những điều sau đây:
§ Xem xét các liên kết hoặc các kết hợp liên quan của lớp phân tích tương ứng § Thẩm định tính đa tử của liên kết, các tên gọi vai trò, các lớp liên kết, các vai trò được sắp thứ tự, các vai trò được kiểm tra, và các liên kết n-bậc tuân theo sự hỗ trợ của ngôn ngữ lập trình được dùng
§ Thẩm địn tính định hướng của các liên kết. Hãy xem xét các biểu đồ tương tác mà trong đó liên kết được sử dụng. Hướng của việc truyền thông báo giữa các đối tượng ngầm chứa tính định hướng tương ứng của các liên kết độc lập
Xác định các tổng quát hóa
Các tổng quát hóa phải được dùng với cùng các ngữ nghĩa như đã được xác định bởi ngôn ngữ lập trình. Nếu ngôn ngữ lập trình không hỗ trợ sự tổng quát hóa(hoặc sự thừa kế) thì các liên kết và/hoặc các kết hợp phải được dùng thay thế để cung cấp sự ủy quyền từ các đối tượng của lớp có tính cụ thể hơn tới các đối tượng của lớp có tính chung hơn
Mô tả các phương thức
Các phương thức có thể được dùng trong quá trình thiết kế để chỉ ra các tác vụ được thực thi như thế nào. Chẳng hạn, một phương thức có thể quy định một thuật toán phải được sử dụng để thực thi một tác vụ. Phương thức có thể được chỉ ra bằng cách sử dụng ngôn ngữ tự nhiên hoặc dùng các giả mã nếu thấy thích hợp
Mô tả các trạng thái
Một số đối tượng thiết kế được kiểm soát về trạng thái, nghĩa là trạng thái của chúng xác định hành vi của chúng khi nhận được một thông báo. Trong những trường hợp như vậy, ta nên sử dụng biểu đồ trạng thái để mô tả các sự chuyển dịch trạng thái khác nhau của một đối tượng thiết kế. Một biểu đồ trạng thái như vậy sau đó sẽ là đầu vào có giá trị cho việc triển khai lớp thiết kế tương ứng