Giáo trình Phân tích hướng đối tượng (Phần 2)
Như đã trình bày trong các chương trước, đối tượng là cái gì đó tồn tại trong thế giới thực. Nó
có thể là một phần của hệ thống như máy móc, tổ chức Nhưng cũng có đối tượng không tồn tại
trực tiếp, mà được phát sinh từ khảo sát cấu trúc hay hành vi của đối tượng trong thế giới thực.
Do vậy, các đối tượng này cũng như đối tượng trong thế giới thực đều liên quan đến hiểu biết của
chúng ta về thế giới thực. Lớp là mô tả thuộc tính, hành vi và ngữ nghĩa của một kiểu (một tập)
đối tượng. Đối tượng là hiện thực của lớp. Quan hệ của đối tượng với lớp tương tự như quan hệ
của biến với kiểu biến trong ngôn ngữ lập trình thông thường. Chúng ta sử dụng khái niệm lớp để
phân tích các đối tượng nhận ra trong thế giới thực. Nhà bác học Darwin đã sử dụng khái niệm
lớp để mô tả nòi giống loài người. Ông ta đã tổ hợp các lớp thông qua kế thừa để mô tả thuyết
tiến hóa của mình. Tương tự, kỹ thuật kế thừa giữa các lớp cũng được sử dụng trong thiết kế hệ
thống phần mềm theo phương pháp hướng đôi tượng. Không có lý do gì để xây dựng lớp trước
khi tìm ra đối tượng. Biết rằng mỗi đối tượng là hiện thực lớp, nhưng lớp phải được đặc tả đầy
đủ, rõ ràng sau khi đặc tả đối tượng. Thế giới quanh ta bao gồm các đối tượng chứ không phải
lớp, do vập tìm đối tượng trước khi trừu tượng lớp từ chúng. Tóm lại, lớp là cái gì đó cung cấp kế
hoạch chi tiết cho đối tượng. Nói cách khác lớp xác định thông tin nào đối tượng sẽ lưu giữ và
hành vi nào đối tượng có thể có. Thí dụ lớp tài khoản của ông A là Account, lớp của ngôi nhà tại
số 1 Tràng Tiền là House Lớp House cho biết ngôi nhà co độ cao, chiều rộng, tổng số buồng ở.
Lớp là khái niệm tổng quát, jo1 cho ta mẫu về đối tượng.
Tóm tắt nội dung tài liệu: Giáo trình Phân tích hướng đối tượng (Phần 2)
Phát triển phần mềm bằng UML trang | 92 CHƯƠNG 5 BIỂU ĐỒ LỚP VÀ GÓI Sau khi đã phân tích lĩnh vực vấn đề, ta sẽ tìm hiểu sâu hơn về các đối tượng trong đó để xây dựng mô hình đối tượng. Chương bốn đã đề cập đến một trong các kỹ thuật thiết kế hệ thống là xây dựng biểu đồ cộng tác. Chương này sẽ khảo sát một kỹ thuật thiết kế khác, đó là biểu đồ lớp. Phần cuối của chương là một số vấn đề liên quan đến ánh xạ đối tượng vào CSDL. 5.1 LỚP VÀ TIỀM KIẾM LỚP Như đã trình bày trong các chương trước, đối tượng là cái gì đó tồn tại trong thế giới thực. Nó có thể là một phần của hệ thống như máy móc, tổ chức Nhưng cũng có đối tượng không tồn tại trực tiếp, mà được phát sinh từ khảo sát cấu trúc hay hành vi của đối tượng trong thế giới thực. Do vậy, các đối tượng này cũng như đối tượng trong thế giới thực đều liên quan đến hiểu biết của chúng ta về thế giới thực. Lớp là mô tả thuộc tính, hành vi và ngữ nghĩa của một kiểu (một tập) đối tượng. Đối tượng là hiện thực của lớp. Quan hệ của đối tượng với lớp tương tự như quan hệ của biến với kiểu biến trong ngôn ngữ lập trình thông thường. Chúng ta sử dụng khái niệm lớp để phân tích các đối tượng nhận ra trong thế giới thực. Nhà bác học Darwin đã sử dụng khái niệm lớp để mô tả nòi giống loài người. Ông ta đã tổ hợp các lớp thông qua kế thừa để mô tả thuyết tiến hóa của mình. Tương tự, kỹ thuật kế thừa giữa các lớp cũng được sử dụng trong thiết kế hệ thống phần mềm theo phương pháp hướng đôi tượng. Không có lý do gì để xây dựng lớp trước khi tìm ra đối tượng. Biết rằng mỗi đối tượng là hiện thực lớp, nhưng lớp phải được đặc tả đầy đủ, rõ ràng sau khi đặc tả đối tượng. Thế giới quanh ta bao gồm các đối tượng chứ không phải lớp, do vập tìm đối tượng trước khi trừu tượng lớp từ chúng. Tóm lại, lớp là cái gì đó cung cấp kế hoạch chi tiết cho đối tượng. Nói cách khác lớp xác định thông tin nào đối tượng sẽ lưu giữ và hành vi nào đối tượng có thể có. Thí dụ lớp tài khoản của ông A là Account, lớp của ngôi nhà tại số 1 Tràng Tiền là House Lớp House cho biết ngôi nhà co độ cao, chiều rộng, tổng số buồng ở. Lớp là khái niệm tổng quát, jo1 cho ta mẫu về đối tượng. Ký pháp của lớp trong UML được biểu diễn bởi hình chữ nhật có ba phần dành cho tên lớp, các thuộc tính và các thao tác (hình 5.1). Tên lớp thường là danh từ bắt đầu bằng chữ hoa. Thuộc tính có tên của nó, kiểu đặc tả, giá trị khởi đầu, kiểu giá trị và ràng buộc. Thao tác cũng có tên, danh sách kiểu giá trị của tham số (có thể có giá trị khởi đầu) và ràng buộc. Phía trên tên lớp của hình 5.1a là tên stereotype của lớp trong dấu >. Dưới tên lớp trong dấu ngoặc nhọn là mở rộng ngữ nghĩa của phần tử mô hình (tagged values) [OEST00], thí dụ chúng có thể là xâu ký tự {abtract}. Tên lớp có thể có tiền tố, thí dụ tiền tố là tên gói trước hai dấu chấm. HÌnh 5.1b là ví dụ ký pháp của lớp hình tròn Circle. Chúng có thuộc tính bán kính (radius), vị trí (position) và các thao tác như display(), remove(), setPosition(pos) và setRadius(newRadius). Trong thí dụ này không có ký pháp gói còn ràng buộc {radius>0} cho biết thuộc tính đòi hỏi giá trị radius luôn lớn hơn 0. Giá trị khởi đầu (10,10) của thuộc tính center có nghĩa rằng khi đối tượng của lớp Circle được tạo lập thì thuộc tính này được gán bởi giá trị (10,10). Phát triển phần mềm bằng UML trang | 93 Hình 5.1 Ký pháp đồ họa của lớp Vấn đề khó khăn nhất của thiết kế theo quan điểm hướng đối tượng là tìm ra đầy đủ các lớp cho hệ thống. Mặc dù vậy, đôi khi cũng dễ dàng tìm ra một số lớp. Nhiều tài liệu có lời khuyên là nơi tốt nhất để bắt đầu tìm lớp là luồng sự kiện của UC. Tìn ra danh từ trong luồn sự kiện sẽ cho ta biết về lớp. Động từ trong đó là phương pháp. Hãy chú ý rằng mọi danh từ tìm ra không nhất thiế là lớp mà nó có thể là một trong bốn loại sau: tác nhân, lớp, thuộc tính lớp và biểu thức không phải các loại trên. Lớp còn có thể tìm thấy trong biểu đồ tương tác. Tìm những cái chung của đối tượng để hình thành lớp. Thí dụ có thể tạo lập biểu đồ trình tự chỉ sự tiến trình chi trả cho khách hàng trong ứng dụng ATM. Biểu đồ này có hai đối tượng Khách hàng A và Khách hang B rút tiền. Cả Khách hàng A và Khách hang B đều có chung một vài thuộc tính, đó là tên khách hàng, địa chỉ, số diện thoại. Hơn nữa, cả hai đều có một số thao tác tương tự nhau. Vậy lớp mới có thể được hình thành (thí dụ lớp Employee) cho đối tượng Khách hàng A và Khách hang B. Mỗi đối tượng trong biểu đồ tương tác sẽ được ánh xạ vào lớp tương ứng. Tuy nhiên một số lớp không thể tìm thấy trong luồng sự kiện và biểu đồ tương tác. Trong pha phân tích yêu cầu thường nhận thấy nhu cầu quan sát dữ liệu trong các báo các khác nhau. Mỗi loại báo cáo này được biểu diễn như một lớp. Nếu có quá nhiều loại báo cáo thì thông thường những báo cáo tương tự được tập hợp để biểu diễn bởi một lớp, đồng thời sử dụng các biến thành phần để quản lý các biến thể khác nhau của báo cáo. Nhóm lớp khác được hình thành để biểu diễn giao diện giữa các thành phần khác nhau của hệ thống, đặc biệt để biểu diễn giao diện giữa lớp ta tạo ra với hệ thống khác mà nó tương tác. Giao diện là nơi một đối tượng tương tác với một số đối tượng khác (thí dụ trình điều khiển máy in hay lớp nào đó của thư viện). Các lớp giao diện hình thành tầng ảo, nó bảo vệ thiết kế của ta trước sự thay đổi của cả hai phía giao diện. Một tập lớp khác được hình thành để biểu diễn thiết bị phần cứng khác nhau mà hệ thống phần mềm sẽ tương tác. Thí dụ, hệ thống rút tiền tự động của ATM tương tác với máy đọc thẻ từ và mày in, mỗi thiết bị phần cứng này đươc biểu diễn bởi một lớp. Việc biểu diễn thiết bị và giao diện như các lớp cho khả năng bao gói các yêu cầu riêng của chúng. Nếu phải thay thế thiết bị sau này, ta không thể viết lại toàn bộ mã trình đã có. Tốt nhất việc tìm kiếm lớp phải được cùng thưc hiện với chuyên gia lĩnh vực vấn đề. Sau đây là một sô câu hỏi giúp ta tìm ra lớp [ERIK98]: · Có thông in nào cần lưu trữ hay phân tích? Nếu có nó là ứng viên của lớp. · Có hệ thống ngoài không? Nếu có thì nó được xem như những lớp chứa trong hệ thống của ta hay hệ thống của ta tương tác với chúng. · Có mẫu, thư viện lớp, thành phần? Nếu có, thông thường chúng chứa các ứng viên lớp. Package::Class {Propertive Value} attribute : Type = initialValue{Constrain} operation(Parameter) : {Constrain} > Circle radius{radius>0} center:Point=(10,10) display() remove() setPosition(pos : Poin) setRadius(newRadius) a) b) Phát triển phần mềm bằng UML trang | 94 · Hệ thống cần quản lý các thiết bị ngoại vi nào? Mọi thiết bị kỹ thuật nối với hệ thống đều là ứng viên lớp. · Tác nhân đóng vai trò tác nghiệp nào? Các nhiệm vụ này có thể là lớp; Thí dụ người sử dụng, thao tác viên hệ thống, khách hàng 5.2 BIỂU ĐỒ LỚP Biểu đồ lớp và biểu đồ đối tượng thuộc hai góc nhìn mô hình bổ sung cho nhau. Biểu đồ lớp chỉ ra trừu trượng thế giới thực, tập trung vào giải thích cấu trúc tĩnh từ góc nhìn tổng quát. Biểu đồ đối tượng biểu diễn trường hợp đặc biệt, cụ thể vào một thời điểm, nó thể hiện cấu trúc tĩnh và hành vi. Thông thường ta xây dựng đồng thời biểu đồ lớp và biểu đồ đối tượng. Khung nhìn logic có thể chứa các thành phần đồ họa sau: biểu đồ tương tác, các lớp, biểu đồ lớp, biểu đồ UC, thuộc tính, thao tác, kết hợp (association) và biểu đồ chuyển trạng thái. Trong biểu đồ lớp được sử dụng để hiển thị lớp và gói của chúng trong hệ thống. Biểu đồ lớp cho hình ảnh tĩnh của các bộ phận hệ thống và các quan hệ giữ chúng. Thông thường mỗi hệ thống có vài biểu đồ lớp. Một số biểu đồ lớp trong số đó hiển thị lớp và quan hệ giữa các lớp, một vài biểu đồ lớp khác chỉ hiển thị gói lớp và quan hệ giữa các gói. Có thể tạo rất nhiều biểu đồ lớp để mô tả toàn bộ bức tranh hệ thống. Các biểu đồ lớp giúp người phát triển phần mềm quan sát và lập kế hoạch cấu trức hệ thống trước khi viết mã trình. Nó đảm bảo rằng hệ thống được thiết kế tốt ngay từ ban đầu. 5.2.1 - Các loại lớp trong biểu đồ Biểu đồ lớp có thể chứa nhiều loại lớp khác nhau, chúng có thể là lớp thông thường, lớp tham số, lớp hiện thực, lớp tiện ích, lớp tiện ích tham số, lớp tiện ích hiện thực và metaclass Lớp tham số (parameterized class). Lớp tham số là lớp được sử dụng để tạo ra họ các lớp khác. Nó còn có tên là lớp mẫu (template). Ngôn ngữ C++ hổ trợ đầy đủ lớp này, nhưng Java lại không hoàn toàn như vậy. Thí dụ từ lớp tham số List có thể tạo ra các lớp hiện thực Employeelist, AccountList Trong UML, lớp tham số được biểu diễn như trên hình 5.2. Lớp hiện thực (instantiated class). Lớp hiện thực là lớp tham số mà đối số của nó có giá trị. Thí dụ, lớp tham số trên đây chứa danh sách phần tử. Bây giờ ta có thể cung cấp giá trị cho đối số của phần tử, kết quả là ta có danh sách các nhân viên. Trong UML, ký pháp lớp hiện thực là lớp có tên đối số trong ngoặc như trên hình 5.3. Hình 5.2 Lớp tham số Hình 5.3 Lớp hiện thực tham số Lớp tiện ích (class utility). Lớp tiện ích là tập hợp các thao tác. Thí dụ có tập hàm toán học như squareroot(), cuberoot() sẽ được sử dụng nhiều nơi trong hệ thống, chúng có thể được gói vào lớp tiện ích để lớp khác trong hệ thống cùng sử dụng. Trong biểu đồ lớp, lớp tiện ích được thể hiện bằng lớp đường viền bóng như trên hình 5.4. Item List Attribute Operation() Attribute Opetation() Phát triển phần mềm bằng UML trang | 95 Hình 5.4 Lớp tiện ích Hình 5.5 Lớp tiện ích tham số Lớp tiện ích tham số (parameterized class utility). Lớp tiện ích tham số là lớp tham số chứa tập các thao tác. Đó là mẫu để tạo lập ra lớp tiện ích. Lớp này được vẽ trong biểu đồ lớp bằng biểu tượng như trên hình 5.5. Hình 5.6 Lớp tiện ích hiện thực Hình 5.7 Metaclass Lớp tiện ích hiện thực (instantiated class utility). Lớp tiện ích hiện thực là lớp ham số mà đối của chúng có giá trị. Lớp này được vẽ trong biểu đồ lớp bằng biểu tượng như trên hình 5.6. Metaclass. Metaclass là lớp mà hiện thực của nó là lớp chức không phải là đối tượng. Lớp tham số và lớp tiện ích là những thí dụ của metaclass. Lớp này được vẽ trong biểu đồ lớp bằng biểu tượng trên hình 5.7 5.2.2 - Stereotype của lớp Trong biểu đồ lớp, stereotype là cơ chế để phân nhóm lớp. Thí dụ, để nhanh chóng tìm kiếm biểu mẫu trong mô hình, ta tạo stereotype với tên biểu mẫu (form) rồi gán nó cho mọi lớp tương ứng. UML có ba loại stereotype mặc định để gán cho ba loại lớp, đó là lớp biên (Boundary), lớp thực thể (Entity) và lớp điều khiển (Control). Lớp biên (boundary class). Lớp biên là lớp nằm trên biên hệ thống và pah62n thế giới còn lại. Chúng có thể là biểu mẫu (form), báo cáo (report), giao diện với phần cứng như máy in, máy quyét và là giao diện với các hệ thống khác. Ký pháp trong UML của lớp biên như sau: Để tìm lớp biên hãy khảo sát biểu đồ UC. Với mỗi tác nhân ta có ít nhất một lớp biên (hình 5.8a). Lớp biên là cái cho pháp tác nhân tương tác với hệ thống. Không nhất thiếp phải tạo ra một lớp biên cho mỗi tác nhân. Nếu hai tác nhân cùng kích hoạt một UC thì chỉ cần tạo ra một lớp biên cho cả hai (hình 5.8b). Class Utility Operation() Item ClassUtility Operation() Operation() MetaClass Attribute Operation() Phát triển phần mềm bằng UML trang | 96 Hình 5.8 Lớp biên Lớp thực thể (entity class). Lớp thực thể lưu trữ thông tin mà nó sẽ được ghi vào bộ nhớ ngoài. Thí dụ lớp Employee là lớp thực thể. Các lớp thực thể có thể tìm thấy trong luồn sự kiện và biểu đồ tương tác. Nó là lớp có ý nghĩa nhất đối với người sử dụng. Trong UML, ký pháp của lớp thực thể như sau: Thông thường ta phải tạo ra một bảng trong CSDL cho mỗi lớp loại này. Thay cho xác định cấu trức CSDL trước, ta sẽ phát triển cấu trúc CSDL từ thông tin của mô hình đối tượng. Các yêu cầu hệ thống xác định luồng sự kiện. Luồng sự kiện xác định đối tượng và lớp. Mỗi thuộc tính của lớp thực thể trở thành trường torng CSDL. Lớp điều khiển (control class). Lớp điều khiển có trách nhiệm điều phối hoặt động của các lớp khác. Thông thường mỗi UC có một lớp điều khiển để điều khiển trình tự các sự kiện trong nó. Chú ý rằng lớp điều khiển không tự thực hiện chức năng nào (lớp khác không gửi nhiều thông điiệp đến chúng), nhưng chúng lại gửi nhiều thông điệp đi đến lớp khác. Do vậy, lớp điều khiển còn gọi là lớp quản lý. Trong UML, lớp điều khiển được ký hiệu như sau: Một loại lớp điều khiển khác là lớp cùng chia sẽ một vài UC. Thí dụ lớp SecurityManager có trách nhiệm điều khiển các sự kiện liên quan đến an toàn. Lớp TransactionManager có trách nhiệm điều phối các thông điệp liên quan đến giao dịch CSDL. Sử dụng loại lớp điều khiển này là cách tốt nhất để tách các chức năng trong hệ thống. Nếu thay đổi trình tự logic của chứng năng nào thì chỉ lớp điều khiển bị ảnh hưởng. Ngoài các stereotype mặc định của UML trình bày trên đây, ta còn có thể bổ sung stereotype mới vào mô hình để sử dụng cho mục đích riêng. 5.3 GÓI Gói được sử dụng để nhóm các lớp có cái chung với nhau. Có nhiều quan điểm khi hình thành gói lớp như dựa trên các chứ năng hay dựa trên đặt tính kỹ thuật. Quan điểm chung là ta có thể tùy ý gói các lớp lại với nhau. Thí dụ, nếu chọn tiêu chí là stereotype thì sẽ có gói của các lớp Entity, gói của các lớp Boundary, gói của các lớp Control Quan điểm khác là gói lớp theo chức Use Case 1Taùc nhaân Taùc nhaân 1 UseCase1 Taùc nhaân 2 Lôùp bieân Lôùp Bieân a) b) Phát triển phần mềm bằng UML trang | 97 năng. Thí dụ, có thể gói Security chứa lớp liên quan đến an toàn hệ thống, gói khá là Reporting hay Error Handling Lợi thế của gói là cho khả năng dễ sử dụng lại. Thí dụ, có thể lấy gói Sercurity để sử dụng lại trong các ứng dụng khác. Sau đây là ví dụ về các gói trong hệ thống quản lý thư viện. Gói giao diện (UI): bao gồm các lớp giao diện người dùng, cho khả năng quan sát dữ liệu và nhập dữ liệu mới. Các lớp này xây dựng trên cơ sở thư viện chuẩn của ngôn ngữ lập trình như MFC của Visual C++. Gói này sẽ kết hợp với gói các đối tượng tác nghiệp. Gói UI gọi các thao tác trên đối tượng tác nghiệp để truy vấn hay nhập dữ liệu. Gói đối tượng tác nghiệp: bao gồm các lĩnh vực từ mô hình phân tích. Chúng sẽ được chi tiết khi thiết kế để bổ sung các thao tác và hỗ trợ lưu trữ. Gói các đối tượng tác nghiệp hợp tác với gói CSDL để các lớp đối tượng tác nghiệp kế thừa từ lớp lưu trữ trong gói CSDL. Gói CSDL: gói này cung cấp dịch vụ cho các lớp khác trong gói tác nghiệp để nó có thể lưu trữ (thí dụ ghi lên tập đĩa). Gói tiện ích: gói này chứa các dch vụ để các gói khác trong hệ thống sử dụng. Thí dụ gói chứa lớp lưu trữ để lưu trữ đối tượng trong toàn bộ hệ thống và nó được sử dụng trong các gói UI, tác nghiệp và CSDL. Hình 5.9 là thiết kế các gói vừa mô tả trên. Hình 5.9 Gói các lớp 5.4 THUỘC TÍNH LỚP Thuộc tính là bộ phận thông tin liên kết với lớp, thí dụ lớp Công ty chứa các thuộc tính như Tên, địa chỉ, số nhân viên. Mỗi lớp trong mô hình chứa một hay nhiều thuộc tính. 5.4.1 - Tìm kiếm thuộc tính Có nhiều nơi để tìm ra thuộc tính lớp. Trước hết, tìm thuộc tính trong tài liệu UC. Tìm các danh từ trong luồng sự kiện. Chú ý rằng không phải mọi danh từ là thuộc tính mà một số danh từ trong đó có thể là lớp, đối tượng Thí dụ khi xem xét luồng ... ữ Italic vì khó đọc trên màn hình. · Cố gắng sử dụng các hộp thoại cùng kích thước.Các xâu ký tự được chỉnh hàng từ phía trái. Hình 8.24 Giao diện độc giả Router Gateway Modem Maùy chuû LAN Name Server ISPPc tìm kieám Maøn hình chính cuûa Ñoäc giaû Tìm kieám döõ lieäu Gôïi yù Internet Phát triển phần mềm bằng UML trang | 212 Hình 8.25 Phân cấp màn hình Độc giả Thông thường makét giao diện được thiết kế trên giấy để mọi người tham gia dự án trao đổi thống nhất.Tiếp theo là xây dựng các màn hình giao diện mẫu.Từ các biểu đồ UML phân tích trong các phần trên,ta có thể vẽ ra được giao diện người sử dụng.Thí dụ,hình 8.24 là biểu đồ trạng thái của giao diện “Độc giả”.Hình 8.25 là biểu đồ tổng hợp phân cấp màn hình “Độc giả”.Hình 8.26 là biểu đồ trạng thái mức cao của giao diện “Nhân viên”.Hình 8.27 là biểu đồ tổng hợp của phân cấp màn hình “Thủ thư”. Hình 8.26 Biểu đồ trạng thái của giao diện Nhân viên Tröôøng teân ngöôøi duøng Phím maät khaåu Phím ñeä trình Phím xoùa Maøn hình login ñoäc giaû Phím tìm kieám Phím gôïi yù Phím thoaùt Maøn hình chính ñoäc giaû Maøn hình tìm kieám döõ lieäu Maøn hình gôïi yù Maøn hình danh saùch saùch Phím ñaët tröôùc Cöûa soå ñaët tröôùc Phím ñeä trình Maøn hình keát quaû Maøn hình ñaët tröôùc Chöùa tröôøng: Taùc giaû Loaïi Teân taøi lieäu Soá taïp chí Chöùa phim: Ñeä trình Xoùa Maøn hình chính Nhaân vieân Maøn hình chính Thuû thö Maøn hình chính Nhaân vieân nhaäp lieäu Möôïn saùch, taïp chí Traû saùch, taïp chí Maøn hình Taùc giaû Maøn hình Ñoäc giaû Maøn hình saùch Maøn hình Taïp chí Maøn hình Maãu Phát triển phần mềm bằng UML trang | 213 Hình 8.27 Phân cấp màn hình Nhân viên Maøn hình chính Nhaân vieân nhaäp lieäu Phím trôû laï i Maøn hình chính Thuû thö Phím thöïc hieän Tröôøng Chæ danh nhaân söï Tröôøng chöõ kyù Maøn hình traû saùch Phím OK Maøn hình möôïn saùch Tröôøng teân ngöôøi söû duïng Tröôøng maät khaåu Phím ñeä trình Maøn hình login Nhaân vieân Phím xoùa [OR] Phát triển phần mềm bằng UML trang | 214 PHỤC LỤC CHƯƠNG 9 MÃ TRÌNH PHÁT SINH TRONG ROSE Phụ lục này trình bày một số mẫu mã trình do Rational Rose phát sinh tự động.Các thí dụ trong phụ lục này không mô tả toàn bộ khả năng phát sinh mã trình của Rose mà chỉ mô tả một số tương đương giữa UML và các ngôn ngữ lập trình như C++, Java và SQL. 9.1 PHÁT SINH MÃ TRÌNH C++ 9.1.1 - Các lớp 9.1.1.1 - Lớp rỗng Rose phát sinh cấu tử ,hủy tử ,cấu tử sao chép,toán tử gán và hai toán tử so sánh.Chú ý rằng để cho dễ đọc mã trình thì các thao tác trong thí dụ này sẽ không được viết lặp lại trong các thí dụ về sau. Mô hình Mã trình #ifndef A_h #define A_h 1 class A { public: //## Constructor (generated) A (); A (const A& right); //## Destructor (generated) ~ A () ;//## Assingnment Operation (generated) Const A& operator =(const A& right) //## Equality Operations (generated) int operator == (const A& right)const; int operator != (const A$ right)const; } ; #endif 9.1.1.2 - Lớp có thuộc tính và thoa tác Mô hình Mã trình Phát triển phần mềm bằng UML trang | 215 class A { public: //## Other operations (specified) void Op 1() void Op 2() const String get_A 1() const; void set_A (const String value); const String get_A2() const; void set_A2(const String value); private: String A1; String A2; }; inline const String A:: get_A1() const { Return A1; } inline void A:: set_A1(const String value) { A1=value; } inline const String A::get_A2() const { Return A2; } inline void A::set_A2(const String value) { A2=value; } 9.1.1.3 - Lớp tham số (template) Mô hình Mã trình A A1:String A2:String Op1() Op2() Phát triển phần mềm bằng UML trang | 216 template class D { public: D(); D(const D& right); ~D (); const D& operator=(const D& right); int operator == (const D& right) const; int operator != (const D& right) const; }; 9.1.1.4 - Lớp tiện ích (utility) Mọi thao tác của lớp tiện ích đều có tiền tố là từ khóa static. Mô hình Mã trình class F { pubilc: static void Op 1(); static void Op 2(); }; 9.1.2 - Quan hệ kết hợp 9.1.2.1 - Kết hợp 1-1 Nếu kết hợp theo tham chiếu thì mã trình được phát sinh cho kết hợp bao gồm con trỏ trong vùng private của lớp tham gia kết hợp. Mô hình Mã trình Class A { const B* get_Rb() const; void set_Rb (B* const value); private: B A 11 RbRa Phát triển phần mềm bằng UML trang | 217 B* Rb; }; inline const B* A:: get_Rb () const { return Rb; } inline void A:: set_Rb (B*const value) { Rb = value; } class B { const A* get_Ra () const; void set_Ra(A* const value); private: A* Ra; }; inline const A* B :: get_Ra() const { return Ra; } inline void A:: set_Ra (A* const value) { Ra=value; } 9.1.2.2 - Kết hợp N-1 Mã trình được phát sinh cho kết hợp bao gồm con trỏ trong vùng private của lớp tham gia kết hợp.Tính nhiều (multiplicity) 0 * được cài đặt bằng tập có kích thước không giới hạn. Mô hình Mã trình class B { const UnboundedSetByReference get_Ra() const; void set_Ra (const UnboundedSetByReferencevalue); Private: B A 10..n RbRa Phát triển phần mềm bằng UML trang | 218 unboundedSetByReferenceRa; }; inline const UnboundedSetByReference B:: get_Ra () const { return Ra; } inline void A:: set_Ra(const UnboundedSetByReferencevalue) { Ra=value; } 9.1.2.3 - Kết hợp N-1 có ràng buộc Mã trình được phát sinh cho kết hợp bao gồm con trỏ torng vùng private của lớp tham gia kết hợp.Do có ràng buộc {Ordered} cho nên tính nhiều (multiplicity) 0* được cài đặt bằng danh sách có kích thước không giới hạn thay cho tập như thí dụ trên đây. Mô hình Mã trình class B { const UnboundedListByReference get_Ra() const; void set_Ra(const UnboundedListByReferencvalue); private: unboundedListByReferenceRa; }; 9.1.2.4 - Lớp kết hợp 1-1 Mô hình B A 10..n RbRa {Ordered} A B 11 C Phát triển phần mềm bằng UML trang | 219 Mã trình class A; classB class C { const B* get_the_B () const; void set_the_B (B* const value); private: A* the_A; B* the_B; }; #include “C.h” class A { const C* get_the_C() const; void set_the_C(C* const value); private: C* the_C; }; #include “C.h” class B { const C* get_the_C() const; void set_the_C(C* const value); private: C* the_C; }; 9.1.2.5 - Lớp kết hợp N-N Mô hình Mã trình #include “C.h” class B { const UnboundedSetByReference get_the_C() const; void set_the_C(const UnboundedSetByReference value); private: Phát triển phần mềm bằng UML trang | 220 unboundedSetByReferencethe_C; }; 9.1.3 - Quan hệ phụ thuộc tập hợp 9.1.3.1 - Phụ thuộc tập hợp (aggregation)1-1 Mô hình Mã trình #include “B.h” class A { const B* get_the_B () const; void set_the_B (B* const value); private: B* the_B; }; #include “A.h” class B { const A* get_Ra () const; void set_Ra (A* const value); private: A* Ra; }; 9.1.3.2 - Phụ thuộc tập hợp với khả năng dẫn đường hạn chế Mô hình Mã trình class A { private: B A 1 1 Ra B A 1 1 Ra Phát triển phần mềm bằng UML trang | 221 }; #include “A.h” class B { const A* get_Ra () const; void set_Ra (A* const value); private: A*Ra; }; 9.1.3.3 - Quan hệ gộp (composition) 1-1 Mô hình Mã trình #include “B.h” class A { const B* get_the_B() const; void set_the_B (B* Const value); private: B* THE_b; }; #include “A.h” class B { const A get_Ra () const; void set_Ra (const Avalue); private: A Ra; }; 9.1.3.4 - Phụ thuộc tập hợp 1-N Mô hình B A 1 1 Ra Phát triển phần mềm bằng UML trang | 222 Mã trình #include “A.h” class B { const UnboundedSetByReferenceget_Ra () const; void set_Ra (const UnboundedSetByReferencevalue); private: unboundedSetByReference Ra; }; 9.1.4 - Quan hệ kế thừa 9.1.4.1 - Kết thừa đơn Mô hình Mã trình #include “A.h” class B:public A { }; 9.1.4.2 - Kế thừa bội Mô hình Mã trình #include “A1.h” #include “A2.h” class B:public A2,public A1 { }; 9.2 PHÁT SINH MÃ TRÌNH JAVA Các đoạn mã trình mẫu dưới đây được Rose phát sinh từ mô hình UML.Phần này không mô tả toàn bộ khả năng của Rose mà chỉ mô tả tương ứng giữa một vài biểu đồ UMLvới ngôn ngữ Java. B A 1 0..n Ra Phát triển phần mềm bằng UML trang | 223 9.2.1 - Các lớp 9.2.1.1 - Lớp rỗng Rose phát sinh cấu tử,hủy tử.Chú ý rằng để cho dễ đọc mã trình thì các thao tác này sẽ không được viết lặp lại trong các thí dụ về sau. Mô hình Mã trình public final class A { public A () { super (); } protected void finalize () throws Throwable { super.finalize (); } } 9.2.1.2 - Lớp có thuộc tính và thao tác Mô hình Mã trình public final class A { private String m_A1; private String m_A2; public void Op 1() { } public void Op 2 () { } } 9.2.1.3 - Lớp trừu tượng Mô hình Mã trình Insert Figure: 08710D01 public abstract class A { } Phát triển phần mềm bằng UML trang | 224 9.2.1.4 - Giao diện Mô hình Mã trình Insert Figure: 08710D01 public interface I_A { } 9.2.2 - Quan hệ kết hợp 9.2.2.1 - Kết hợp 1-1 Mô hình Mã trình public class A { public B m_Rb; }; public class B { public A m_Ra; }; 9.2.2.2 - Kết hợp 1-N Mô hình Mã trình public class B { public A m_Ra; } Mô hình A B 11 RbRa A B 10..n RbRa Phát triển phần mềm bằng UML trang | 225 Mã trình public class B { public Vector m_Ra = new Vector (); } Mô hình Khi tính nhiều có hạn chế thì kết hợp được cài đặt bằng mảng . Mã trình public class B { private A[] m_Ra = new A[5]; } 9.2.3 - Quan hệ phụ thuộc tập hợp 9.2.3.1 - Phụ thuộc tập hợp (aggregation) 1-1 Mô hình Mã trình public class A { public B m_B; } public class B { public A m_Ra; } Phụ thuộc tập hợp với khả năng dẫn đường hạn chế Mô hình A B 1n Rb-Ra A B 15 RbRa AB 1 1 Ra Phát triển phần mềm bằng UML trang | 226 Mã trình public class A { } public class B { public A m_Ra; } 9.2.4 - Quan hệ kế thừa 9.2.4.1 - Kế thừa đơn Mô hình Mã trình public class B extends A { } 9.2.4.2 - Kế thừa giữa các giao diện Mô hình Mã trình public interface I_C extends I_A { } public interface I_C extends I_A, I_B { } 9.2.4.3 - Cài đặt giao diện bằng lớp trừu tượng Mô hình Mã trình AB 1 1 RaRb Phát triển phần mềm bằng UML trang | 227 public abstract class A implements I_A { } 9.2.4.4 - Cài đặt giao diện bằng lớp Mô hình Mã trình public class A implements I_A { } 9.2.4.5 - Cài đặt một vài giao diện bằng lớp Mô hình Mã trình public class A implements I_A,I_B { } 9.3 PHÁT SINH MÃ TRÌNH VISUAL BASIC Các đoạn mã trình mẫu dưới đậy được Rose phát sinh từ mô hình UML. Phần này không mô tả toàn bộ khả năng của Rose mà chỉ mô tả tương ứng giữa một vài biểu đồ UML với ngôn ngữ Visual Basic. 9.3.1 - Các lớp 9.3.1.1 - Lớp rỗng Mô hình Mã trình Phát triển phần mềm bằng UML trang | 228 Option Base 0 Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub 9.3.1.2 - Lớp có thuộc tính và thao tác Mô hình Mã trình Option Base 0 Public A1 As String Public A2 As String Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Public Sub Op1() On Error GoTo Op1Err End Sub Op1Err: Call RaiseError (MyUnhandleError, “A:Op1 Method”) End Sub Public Property Get Op2() As Boolean On Error GoTo Op1Err Exit Property Op2Err: Call RaiseError (MyUnhandleError, “A:Op2 Method”) End Property 9.3.1.3 - Lớp có thuộc tính và thao tác Mô hình Mã trình Phát triển phần mềm bằng UML trang | 229 Option Base 0 Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Public Sub Op2() End Sub Public Property Get Op2() As Boolean End Property 9.3.2 - Quan hệ kết hợp 9.3.2.1 - Kết hợp 1-1 Mô hình Mã trình Option Base 0 Public Rb As B Private Sub Class_Terminate () End Sub Private Sub Class_Initialize () End Sub Option Base 0 Public Ra As A Private Sub Class_Terminate () End Sub Private Sub Class_Initialize () End Sub A B 11 Ra Rb Phát triển phần mềm bằng UML trang | 230 9.3.2.2 - Kết hợp 1-N Mô hình Mã trình Option Base 0 Public Rb As B Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Option Base 0 Public Ra As Collection Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub 9.3.3 - Quan hệ kế thừa đơn Mô hình Mã trình Option Base 0 Implements A Local superclass object (generated) Private mAObject As New A Private Sub Class_Initialize () End Sub Private Sub Class_Terminate () End Sub Public Sub Op 2() End Sub Private Sub A_Op1 () A B 10..n Ra Rb Phát triển phần mềm bằng UML trang | 231 mAObject.Op1 End Sub 9.4 PHÁT SINH MÃ TRÌNH SQL. Các đoạn mã trình mẫu dưới đây được Rose phát sinh từ mô hìnhUML. Phần này không mô tả toàn bộ khả năng của Rose mà chỉ mô tả tướng ứng giữa một vài biểu đồ UML với ngôn ngữ ANSI SQL. 9.4.1 - Các lớp 9.4.1.1 - Lớp rỗng Mô hình Mã trình CREATE TABLE T_A( A_Id NUMBER (5), PRIMARY KEY (A_Id) ) 9.4.1.2 - Lớp có thuộc tính và thao tác Mô hình Mã trình CREATE TABLE T_A ( A_ IdNUMBER (5) A1 VARCHAR (), A2 VARCHAR (), PRIMARY KEY (A_Id) ) 9.4.2 - Quan hệ kết hợp 9.4.2.1 - Kết hợp 1-1 Mô hình Phát triển phần mềm bằng UML trang | 232 Mã trình CREATE TABLE T_B ( B_Id NUMBER (5), PRIMARY KEY (B_Id) ) CREATE TABLE T_A ( A_Id NUMBER (5) B_Id NUMBER (5) REFERENCE T_B (B_Id), PRIMARY KEY (A_Id) ) 9.4.2.2 - Kết hợp N-1 Mô hình Mã trình CREATE TABLE T_B( B_Id NUMBER (5), PRIMARY KEY (B_Id) ) CREATE TABLE T-A( B_Id NUMBER (5) REFERENCES T_B (B_Id), A_Id NUMBER (5), PRIMARY KEY (A_Id) ) 9.4.2.3 - Lớp kết hợp N-N Mô hình A B 11 Ra Rb A B 10..n Ra Rb Phát triển phần mềm bằng UML trang | 233 Mã trình CREATE TABLE T_A( A_Id NUMBER (5), PRIMARY KEY (A_Id) ) CREATE TABLE T_B( B_Id NUMBER (5), PRIMARY KEY (B_Id) ) CREATE TABLE T_C ( A_Id NUMBER (5) REFERENCES T_A(A_Id)ON DELETE CASCADE, B_Id NUMBER (5) REFERENCES T-B (B_Id)ON DELETE CASCADE, PRIMARY KEY (A_Id,B_Id) ) 9.4.3 - Quan hệ kế thừa Trong các thí dụ sau đây, mỗi lớp được cài đặt trong một bảng. 9.4.3.1 - Kế thừa đơn Mô hình Mã trình CREATE TABLE T_A ( A_Id NUMBER (5), PRIMARY KEY (A_Id) ) CREATE TABLE T_B ( A_Id NUMBER(5) REFERENCES T_A (A_Id), PRIMARY KEY (A_Id) ) A B 0..n0..n C Phát triển phần mềm bằng UML trang | 234 9.4.3.2 - Kế thừa bội Mô hình Mã trình CREATE TABLE T_A1 ( A1_Id NUMBER (5), PRIMARY KEY (A1_Id) ) CREATE TABLE T_A2 ( A2_Id NUMBER (5), PRIMARY KEY (A2_Id) ) CREATE TABLE T_B ( A1_Id NUMBER (5) REFERENCES T_A1 (A1_Id), A2_Id NUMBER (5) REFERENCES T_A2 (A2_Id), PRIMARY KEY (A1_Id, A2_Id) )
File đính kèm:
- giao_trinh_phan_tich_huong_doi_tuong_phan_2.pdf