thời cho phép nó hốn đổi vị trí một cách linh hoạt. Như minh họa trong Hình 4.6, chúng tơi phân rã phương thức optimizeTraffic() thành ba thuật toán con (OptimizeStrategy1, OptimizeStrategy2, OptimizeStrategy3) từ lớp
Optimizer sau đó hình thành một hệ thống các lớp giải thuật có chia sẻ giao diện OptimizerStrategy. Biểu đồ tuần tự tương ứng với kịch bản của hệ
thống sau khi tái cấu trúc được mô tả như trong Hình 4.7.
Nếu như biểu đồ ca sử dụng dùng để mơ tả các chức năng chính của hệ thống, cụ thể hơn, nó sẽ biểu diễn những hành vi (khía cạnh động) mà hệ thống sẽ thực hiện, thì biểu đồ lớp lại đóng vai trị mơ tả về mặt cấu trúc, tức là khía cạnh tĩnh của hệ thống. Biểu đồ lớp của hệ thống ARTC được biểu diễn như trong Hình 4.6, bao gồm bảy lớp: bốn lớp thông thường Detector, TrafficController, Junction andRoad, một lớp trừu tượngOptimizerStrategy
và ba lớp con OptimizeStrategy1, OptimizeStrategy2 và OptimizeStrategy3.
Lớp TrafficController sẽ đóng vai trị trung tâm, thu nhận và xử lý thông tin của cung cấp bởi tất cả các lớp còn lại, đưa ra các quyết định về thời gian của các tín hiệu, sao cho hệ thống ARTC hoạt động đạt được hiệu quả cao nhất.
4.4.3 Xác định các hành vi cần bảo toàn
Hệ thống ARTC mang những yếu tố đặc trưng về thời gian thực, nó cần phải đáp ứng một cách kịp thời tất cả những biến đổi của tình trạng giao thơng một cách hiệu quả và chính xác. Trong hệ thống ARTC, khơng mất tính tổng quát, giả sử rằng tại một hướng nào đó của giao lộ, chúng ta xác định một số hành vi của hệ thống cần được bảo tồn như sau:
– Khi giao thơng đang ở trạng thái ách tắc (heavyTraffic), tín hiệu đèn xanh cần được bật lên (nếu nó đang đỏ).
– Ngược lại, khi giao thơng đang ở trạng thái thơng thống (lowTraffic), tín hiệu đèn đỏ cần được bật lên (nếu nó đang xanh).
– Khi giao thông đang ở trạng thái ách tắc (heavyTraffic), tín hiệu đèn
xanh đã được bật lên, thì thời gian (time) dành cho tín hiệu này cần được gia tăng.
– Khi giao thơng đang ở trạng thái thơng thống, tín hiệu đèn đỏ đã được bật lên, thì thời gian dành cho tín hiệu này cần được gia tăng. – Tại một hướng giao lộ nào đó, khi giao thơng đang ở trạng thái với lưu
lượng cao (highTraffic), tín hiệu đèn xanh đang được bật, thì phương tiện giao thơng nên lựa chọn theo hướng đi này, còn với tất cả các trạng thái còn lại, giải pháp noChoose nên được thực hiện.
4.4.3.1 Biểu diễn các hành vi bằng OCL
Để phục vụ cho mục tiêu kiểm chứng tính nhất quán của hệ thống, các hành vi trên được biểu diễn bằng OCL như như Đặc tả 4.1.
1 Context Optimizer inv self.amberTime = 5 2 Context Detector::getTrafficFlow()
3 pre: self.trafficFlow -> isEmpty() 4 post: self.trafficFlow -> notEmpty()
5 Context TrafficController::analyzeTraffic() 6 pre: self.trafficFlow -> notEmpty()
7 post: (state = heavyTraffic) OR (state = lowTraffic)
8 OR (state = highTraffic) OR (state = noTraffic) 9 Context Optimizer::optimizeTraffic()
10 pre: (state = heavyTraffic) OR (state = lowTraffic) OR (state = highTraffic) OR (state = noTraffic)
11 post: if (state = heavyTraffic) then ((signal = green) AND ( greenTime > 60))
12 else (if (state = lowTraffic) then ((signal = red) AND ( redTime > 60))
13 else (if (state = highTraffic) then (direction = CHOOSE))
14 else (direction = NO_CHOOSE) 15 endif)
16 endif) 17 endif
Đặc tả 4.1: Đặc tả trên biểu đồ lớp của hệ thống ARTC khởi đầu. Sau khi áp dụng mẫu thiết kế Strategy, như minh họa trong Hình 4.6, chúng tơi đã phân rã phương thức optimizeTraffic() thành ba thuật toán con tương ứng được chứa đựng trong các lớp OptimizeStrategy1, OptimizeS- trategy2 và OptimizeStrategy3. Sau đó hình thành một hệ thống các lớp giải
thuật có chia sẻ giao diện OptimizerStrategy. Lúc này, các ràng buộc trên
mơ hình lớp sau tái cấu trúc được biểu diễn như Đặc tả 4.2.
1 Context OptimizerStrategy inv self.amberTime = 5 2 Context Detector::getTrafficFlow()
3 pre: self.trafficFlow -> isEmpty() 4 post: self.trafficFlow -> notEmpty()
5 Context TrafficController::analyzeTraffic() 6 pre: self.trafficFlow -> notEmpty()
7 post: (state = heavyTraffic) OR (state = lowTraffic) 8 OR (state = highTraffic) OR (state = noTraffic) 9 Context OptimizeStrategy1::optimizeTraffic()
10 pre: (state = heavyTraffic) OR (state = lowTraffic) OR (state = highTraffic) OR (state = noTraffic)
11 post: if (state = heavyTraffic) then (signal = green) 12 else (signal = red)
13 endif 14
15 Context OptimizeStrategy2::optimizeTraffic()
16 pre: (state = heavyTraffic) OR (state = lowTraffic) OR (state = highTraffic) OR (state = noTraffic)
17 post: if (state = heavyTraffic) then (greenTime > 60) 18 else (greenTime <= 60)
19 endif
20 Context OptimizeStrategy3::optimizeTraffic()
21 pre: (state = heavyTraffic) OR (state = lowTraffic) OR (state = highTraffic) OR (state = noTraffic)
22 post: if (state = highTraffic) then (direction = CHOOSE) 23 else (direction = NO_CHOOSE)
24 endif 25
Đặc tả 4.2: Đặc tả trên biểu đồ lớp của hệ thống ARTC sau tái cấu trúc.
Dựa trên Định nghĩa 4.4 và Định nghĩa 4.5 chúng ta có thể suy dẫn ra tiền và hậu điều kiện cho phương thức optimizeTraffic() trong giao diện
OptimizerStrategy như Đặc tả 4.3:
1 Context OptimizerStrategy inv self.amberTime = 5 2 Context OptimizerStrategy:: optimizeTraffic()
3 pre: (state = heavyTraffic) OR (state = lowTraffic) OR (state = highTraffic) OR (state = noTraffic)
4 post: if (state = heavyTraffic) then ((signal = green) AND ( greenTime > 60))
5 else (if (state = lowTraffic) then ((signal = red) AND ( greenTime <= 60))
6 else (if (state = highTraffic) then (direction = CHOOSE)
7 else (direction = NO_CHOOSE) 8 endif)
9 endif) 10 endif
Đặc tả 4.3: Đặc tả trên lớp OptimizerStrategy sau tái cấu trúc.
Sau khi áp dụng mẫu thiết kế Strategy cho biểu đồ lớp ban đầu, kịch bản tính tốn tối ưu hóa hệ thống calculating optimal control đã được vẽ lại như Hình 4.7.
Mối quan tâm lớn nhất của chúng ta bây giờ là liệu mơ hình phần mềm sau tiến hóa có bảo tồn các tính chất tĩnh và động sau khi thực hiện tái cấu trúc với mẫu thiết kế Strategy hay không ?