Công nghệ phần mềm - Thiết kế hướng đối tượng sử dụng UML
Dựa vào các chức năng của hệ thống
Hệ thống là tập hợp các chức năng
Chia nhỏ các chức năng và làm mịn dần
Hệ thống gồm các hệ thống con
Làm chủ độ phức tạp
Các chức năng trao đổi với nhau bằng
truyền tham số hoặc dữ liệu (chẳng hạn
biến toàn cục) dùng chung
57 113 Biểu ñồ lớp Quan hệ kết tập (agregation) Quan hệ hợp thành (composition) DanhMụcMặtHàng MặtHàng*1 Quan hệ Company Person* 0..* Quan hệ 114 Biểu ñồ lớp Quan hệ phụ thuộc (dependence): mô tả một lớp phụ thuộc vào lớp khác Ví dụ PointCircle Quan hệ phụ thộc center : Point 58 115 Biểu ñồ lớp Ví dụ: chuyển ñổi mô hình khái niệm thành biểu ñồ lớp Giả sử mô hình khái niệm ThanhToán ThanhToánBằngTiềnMặt ThanhToánBằngThẻ PhiênBánHàng1 1thanh toán > 116 Biểu ñồ lớp Chi tiết các thuộc tính ThanhToán tổng : Integer ThanhToánBằngTiềnMặt ThanhToánBằngThẻ PhiênBánHàng1 1thanh toán > 59 117 Biểu ñồ lớp Chi tiết các phương thức ThanhToán tổng : Integer ThanhToánBằngTiềnMặt nhậnTiền() ThanhToánBằngThẻ trừVàoThẻ() PhiênBánHàng tínhTổng() : Integer 1 1thanh toán > 118 Biểu ñồ lớp Xác ñịnh các mức khả kiến ThanhToán # tổng : Integer ThanhToánBằngTiềnMặt + nhậnTiền() ThanhToánBằngThẻ + trừVàoThẻ() PhiênBánHàng + tínhTổng() : Integer 1 1thanh toán > 60 119 Nội dung Khái niệm cơ bản hướng ñối tượng Biểu ñồ ca sử dụng Thiết kế cấu trúc tĩnh Thiết kế cấu trúc ñộng Sinh mã 120 Cấu trúc ñộng Biểu ñồ tương tác Biểu ñồ tuần tự Biểu ñồ cộng tác 61 121 Biểu ñồ tương tác Biểu ñồ tương tác mô tả hành vi của hệ thống Mỗi biểu ñồ tương tác tương ứng một tác vụ ñược thực hiện bởi một số các ñối tượng Biểu ñồ tương tác xây dựng dựa trên nền tảng của biểu ñồ hoạt ñộng và biểu ñồ trạng thái Biểu ñồ tương tác mô tả các hành ñộng của các ñối tượng ñể thực hiện một tác vụ. Các hành ñộng của ñối tượng bao gồm: gửi các thông ñiệp (message) giữa các ñối tượng tạo (create) và hủy (destroy) các ñối tượng 122 Biểu ñồ tuần tự Biểu ñồ tuần tự (sequence diagram) biểu diễn sự tương tác giữa các ñối tượng bằng việc nhấn mạnh thứ tự trao ñổi thông ñiệp giữa các ñối tượng Biểu ñồ tuần tự gồm: các ñối tượng các thông ñiệp trao ñổi giữa các ñối tượng 62 123 Biểu ñồ tuần tự Mỗi ñối tượng có một ñường sinh tồn (lifeline) biểu diễn thời gian tồn tại của nó. Kí hiệu object object:Class :Class ðối tượng ðường sinh tồn 124 Biểu ñồ tuần tự Thời gian hoạt ñộng (activation) là thời gian mà ñối tượng ñang thực hiện một thao tác Kí hiệu object Thời gian hoạt ñộng 63 125 Biểu ñồ tuần tự Một thông ñiệp ñặc tả trao ñổi giữa các ñối tượng Các loại thông ñiệp Gọi (call) Trả về (return) Gửi (send) Tạo (create) Hủy (destroy) 126 Biểu ñồ tuần tự Thông ñiệp gọi gọi một phương thức/thao tác trên ñối tượng ðối tượng gọi phải ñợi thông ñiệp ñược thực hiện kết thúc mới có thể thực hiện công việc khác (thông ñiệp ñồng bộ) Một ñối tượng có thể gửi thông ñiệp cho chính nó Kí hiệu object A object B message() object Gửi thông ñiệp gọi Gửi cho chính nó 64 127 Biểu ñồ tuần tự Thông ñiệp trả về trả về một giá trị cho ñối tượng gọi Kí hiệu Object A Object B message() Thông ñiệp trả về value 128 Biểu ñồ tuần tự Thông ñiệp gửi gửi một tín hiệu ñến một ñối tượng Khác với thông ñiệp gọi, khi ñối tương gửi thông ñiệp gửi nó không chờ ñợi, mà tiếp tục thực hiện công việc khác (thông ñiệp không ñồng bộ) Kí hiệu object A object B message() Thông ñiệp gửi 65 129 Biểu ñồ tuần tự Thông ñiệp tạo gọi phương thức tạo một ñối tượng Thông ñiệp hủy gọi phương thức hủy một ñối tượng Kí hiệu object A object B> Thông ñiệp tạo > Thông ñiệp hủy 130 Biểu ñồ tuần tự Ví dụ :A :B>msg1 msg2 msg3 public class A { private B objB; public void msg1() { objB = new B(); objB.msg2(); objB.msg3(); } } public class B { … public void msg2() { … } public void msg3() { … } } 66 131 Biểu ñồ tuần tự Một thông ñiệp có thể ñược gửi lặp nhiều lần Kí hiệu object A *[1..10]message() Gửi lặp thông ñiệp 10 lần object B for(i = 1; i<= 10; i++) { objectB.message() } 132 Biểu ñồ tuần tự Một thông ñiệp có thể ñược gửi lặp nhiều lần phụ thuộc vào một ñiều kiện Kí hiệu object A *[C]message() Gửi lặp thông ñiệp trong khi C ñúng object B while(C) { objectB.message() } 67 133 Biểu ñồ tuần tự Một thông ñiệp có thể ñược gửi phụ thuộc vào ñiều kiện rẽ nhánh Kí hiệu object A [C]message() object B if(C) objectB.message(); else objectC.message(); object C [not C]message() 134 Biểu ñồ tuần tự Một thông ñiệp có thể ñược gọi ñệ quy Kí hiệu print() Thông ñiệp ñệ quy :BinaryTree print() 68 135 Biểu ñồ tuần tự Ví dụ :TàiLiệu :MáyFax gọi() :DâyðiệnThoại nhấcMáy() bấmSố(số) gửi(trang) chuyển(trang) ñãKếtNối âmMời ñãKếtNối 136 Biểu ñồ tuần tự Ví dụ :NgườiBán :MáyTínhTiền thanhToán(sốTiền) :PhiênBánHàng thanhToán(sốTiền) thanhToán(sốTiền) :ThanhToán tiềnDư tiềnDư trảTiềnDư() > > 69 137 Biểu ñồ tuần tự Giữa biểu ñồ tương tác và biểu ñồ lớp và có mối quan hệ chặt chẽ với nhau Ví dụ MáyTínhTiền mởThanhToán() PhiênBánHàng thanhToán() :MáyTínhTiền :PhiênBánHàng thanhToán(sốTiền)mởThanhToán(sốTiền) 138 Biểu ñồ cộng tác Biểu ñồ cộng tác (collaboration diagram) mô tả sự tương tác giữa các ñối tượng bằng việc nhấn mạnh cấu trúc kết hợp giữa các ñối tượng và những thông ñiệp trao ñổi giữa chúng Biểu ñồ cộng tác là sự mở rộng của biểu ñồ ñối tượng Biểu ñồ cộng tác chỉ ra thứ tự gửi các thông ñiệp: mỗi thông ñiệp ñược gán một số tuần tự ñiều kiện gửi các thông ñiệp 70 139 Biểu ñồ cộng tác Cấu trúc thông ñiệp ñược mô tả dạng tổng quát như sau: precondition / condition sequence * *|| iteration : result := message(parameters) “precondition /”: danh sách số tuần tự của các thông ñiệp trước thông ñiệp cần gửi. Thông ñiệp chỉ ñược gửi ñi khi tất cả các thông ñiệp trước nó ñã ñược gửi ñi. “condition”: thông ñiệp chỉ ñược gửi ñi khi ñiều kiện ñược thỏa mãn. “sequence”: số tuần tự của thông ñiệp cần gửi. Ví dụ, việc gửi thông ñiệp 1.3.5 theo sau việc gửi thông ñiệp 1.3.4, cả hai thông ñiệp này nằm trong luồng 1.3. “*”: chỉ ra thông ñiệp ñược gửi ñi nhiều lần một cách tuần tự. “*||”: chỉ ra thông ñiệp ñược gửi ñi nhiều lần một cách ñồng thời. “iteration”: chỉ ra số lần gửi thông ñiệp một cách tuần tự hoặc ñồng thời “result”: chỉ ra giá trị trả về của thông ñiệp. “message”: tên thông ñiệp “parameters”: danh sách các tham số của thông ñiệp. 140 Biểu ñồ cộng tác Ví dụ 4 : hello() : thông ñiệp có số tuần tự là 4. [time = 12h] 1 : lunch() : thông ñiệp này chỉ ñược gửi ñi nếu là lúc 12h. 1.3.5 * call() : thông ñiệp này ñược gửi ñi nhiều lần. 3 / *|| [i:= 1..5] 1.2 : close() : thông ñiệp này ñược gửi ñi năm lần một cách ñồng thời và sau thông ñiệp số 3. 1.2, 2.3 / [t < 10] 3.1 name = getName() : thông ñiệp này ñược gửi ñi sau các thông ñiệp 1.2, 2.3 và với ñiều kiện t<10. 71 141 Biểu ñồ cộng tác Ví dụ biểu ñồ cộng tác :NgườiBán :HệThống :PhiênBánHàng :ThanhToán 1 : thanhToán(sốTiền) 2 : trảTiềnDư() 1.2 tiềnDư() 1.1 : thanhToán(sốTiền) 1.1.1 : > 1.1.2 : thanhToán(sốTiền) 1.1.4 : > 1.1.3 : tiềnDư() 142 Biểu ñồ tương tác Bài tập 1: Máy rút tiền ATM Xây dựng biểu ñồ tuần tự cho ca sử dụng rút tiền trong trường hợp thành công Xây dựng biểu ñồ tuần tự cho ca sử dụng xem số tiền dư trong tài khoản 72 143 Nội dung Khái niệm cơ bản hướng ñối tượng Biểu ñồ ca sử dụng Thiết kế cấu trúc tĩnh Thiết kế cấu trúc ñộng Sinh mã 144 Sinh mã Chuyển các mô hình thiết kế sang mã chương trình (C++, Java, …) Mã chương trình hướng ñối tượng ðịnh nghĩa các lớp và giao diện ðịnh nghĩa các phương thức Các biểu ñồ lớp sẽ ñược chuyển sang mã chương trình ñịnh nghĩa các lớp tương ứng Các biểu ñồ tương tác sẽ ñược chuyển thành mã chương trình ñịnh nghĩa các phương thức Các biểu ñồ khác sẽ hỗ trợ cho quá trình mã hóa 73 145 Sinh mã Ví dụ: biểu ñồ lớp ListOfOrders − datePlaced − clientID + total() : double OneOrder − quantity: Integer + subtotal() : double AirPlane − price : float + getPrice() : float 1 1..* * 1 contains >orderListe 146 Sinh mã Mã lớp OneOrder OneOrder − quantity: Integer + subtotal() : double public class OneOrder { public double subtotal() { } private int quantity; } 74 147 Sinh mã Mã lớp OneOrder public class OneOrder { public double subtotal() { } private int quantity; private AirPlane airPlane; } OneOrder − quantity: Integer + subtotal() : double AirPlane − price : float + getPrice() : float * 1 contains > 148 Sinh mã Mã lớp ListOfOrders public class ListOfOrder { public double total() { } private Date datePlaced; private int clientID; private Vector orderList; } ListOfOrders − datePlaced − clientID + total() : double OneOrder − quantity: Integer + subtotal() : double 1 1..* orderListe 75 149 Sinh mã Biểu ñồ cộng tác thực hiện phương thức total() :ListOfOrders :OneOrder :AirPlane 1 : total() 2 : *[for each] subtotal() 3 : getPrice() 150 Sinh mã Mã phương thức total() :ListOfOrders :OneOrder :AirPlane 1 : total() 2 : *[for each] subtotal() 3 : getPrice() public double total() { } 76 151 Sinh mã Mã phương thức total() :ListOfOrders :OneOrder :AirPlane 1 : total() 2 : *[for each] subtotal() 3 : getPrice()public double total() { double sum = 0; for (int i=0; i<orderList.size(); i++) sum += orderList.elementAt(i).subtotal(); return sum; } 152 Sinh mã Mã phương thức subTotal() :ListOfOrders :OneOrder :AirPlane 1 : total() 2 : *[for each] subtotal() 3 : getPrice()public double subtotal() { return (quantity * airplane.getPrice()); } 77 153 Sinh mã Mã phương thức getPrice() :ListOfOrders :OneOrder :AirPlane 1 : total() 2 : *[for each] subtotal() 3 : getPrice()public float getPrice() { return price; } 154 Công cụ Phần mềm Rational Rose, Poisedon for UML, Umbrello Thiết kế các biểu ñồ UML Sinh mã chương trình • C++ • Java • VB • Ada
File đính kèm:
- 7_ThietKeHDT.pdf