1. Trang chủ
  2. » Luận Văn - Báo Cáo

ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu

99 768 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 99
Dung lượng 1,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài toán xếp thời khóa biểu là một trường hợp riêng của bài toán lập lịch trong đó đưa ra một chuỗi các sự kiện thông thường là các môn học, bài giảng, môn thi và bao gồm các giáo viên v

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Đỗ Huy Thịnh

ỨNG DỤNG FRAMEWORK VÀ LẬP TRÌNH RÀNG BUỘC CHO BÀI TOÁN LẬP THỜI KHÓA BIỂU

KHÓA LUẬN TỐT NGHIỆP HỆ ĐẠI HỌC CHÍNH QUY

Ngành: Công nghệ thông tin

HÀ NỘI – 2006

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Đỗ Huy Thịnh

ỨNG DỤNG FRAMEWORK VÀ LẬP TRÌNH RÀNG BUỘC CHO BÀI TOÁN LẬP THỜI KHÓA BIỂU

KHÓA LUẬN TỐT NGHIỆP HỆ ĐẠI HỌC CHÍNH QUY

Ngành: Công nghệ thông tin

Cán bộ hướng dẫn: PGS.Ts Nguyễn Văn Vỵ

HÀ NỘI – 2006

Trang 3

Lời đầu tiên em xin bày tỏ lòng biết ơn sâu sắc tới thầy giáo PGS.TS.Nguyễn Văn Vỵ, thầy đã tận tình hướng dẫn giúp em hoàn thành khóa luận

Em xin bày tỏ lòng biết ơn tới các thầy cô giáo trong khoa Công nghệ thông tin

- Trường Đại học Công nghệ - ĐHQGHN Các thầy cô đã dạy bảo và luôn tạo điều kiện tốt nhất cho chúng em học tập trong suốt quá trình học đại học đặc biệt là trong thời gian làm khóa luận tốt nghiệp

Tôi xin cảm ơn các bạn sinh viên lớp K47CA trường Đại học Công nghệ, những người bạn luôn bên cạnh ủng hộ tôi trong suốt những năm học đại học

Cuối cùng con xin gửi tới Bố Mẹ và gia đình tình thương yêu và lòng biết ơn

Bố mẹ luôn là nguồn động viên và là chỗ dựa vững chắc cho con

Hà Nội, ngày 20 tháng 5 năm 2006

Sinh viên

Đỗ Huy Thịnh

Trang 4

Bài toán sắp xếp thời khóa biểu từ lâu luôn thu hút được sự quan tâm của nhiều nhà nghiên cứu và nhiều chuyên gia trong lĩnh vực liên quan Sự nổi tiếng của bài toán không chỉ ở độ phức tạp mà còn ở tính thực tiễn, khả năng áp dụng trong thực

tế

Khóa luận tốt nghiệp “Ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu” hướng tới xây dựng hệ thống nhằm giải quyết bài toán xếp thời khóa biểu học kỳ vận dụng các công nghệ framework ( khung làm việc) và lập trình ràng buộc đối tượng

Khóa luận được tổ chức thành bốn phần với nội dung như sau:

♦ Chương I: Giới thiệu bài toán lập thời khóa biểu nói chung và bài toán lập thời khóa biểu học kỳ mà khóa luận giải quyết

♦ Chương II: Giới thiệu tổng quan và trình bày các thành phần của ngôn ngữ ràng buộc đối tượng

♦ Chương III: Giới thiệu tổng quan và cấu trúc khung làm việc thông qua một số ví dụ

♦ Chương IV: Phân tích, thiết kế và cài đặt hệ thống cho bài toán xếp thời khóa biểu học kỳ

Trang 5

LỜI CẢM ƠN ii

TÓM TẮT NỘI DUNG iii

MỤC LỤC iv

DANH MỤC BẢNG BIỂU vi

DANH MỤC HÌNH VẼ vii

MỞ ĐẦU 1

Chương 1 .2

Bài toán lập Thời khóa biểu 2

1.1 Giới thiệu chung bài toán lập thời khóa biểu 2

1.1.1 Bài toán xếp thời khóa biểu nhà trường 2

1.1.2 Phân loại bài toán xếp thời khóa biểu .2

1.1.3 Các đối tượng liên quan đến Thời khóa biểu 3

1.2 Bài toán lập thời khóa biểu giải quyết trong khóa luận 4

1.2.1 Hoạt động nghiệp vụ 5

1.2.2 Bảng tổng hợp các chức năng của hệ thống “Lập thời khóa biểu học kỳ” 6

1.2.3 Từ điển dữ liệu và mô hình lĩnh vực nghiệp vụ 7

Chương 2 .9

Ngôn ngữ ràng buộc đối tượng 9

2.1 Giới thiệu chung 9

2.2 Đặc điểm OCL 10

2.2.1 Cả truy vấn và ngôn ngữ ràng buộc 10

2.2.2 Ngôn ngữ dựa trên cơ sở toán học nhưng không có các ký hiệu toán học 10

2.2.3 Ngôn ngữ định nghĩa kiểu 11

2.2.4 Ngôn ngữ khai báo 11

2.3 Bài toán L&R 11

2.4 Ngữ cảnh của các biểu thức OCL 13

2.4.1 Mô hình kết hợp 13

2.4.2 Các lớp và các kiểu khác 15

2.4.3 Các thuộc tính và các đầu mút của liên kết 16

2.4.4 Các phương thức 17

2.4.5 Các biểu thức trong các biểu đồ hành vi 18

2.4.6 Các ca sử dụng 18

2.4.7 Các ràng buộc và thừa kế 18

2.5 Các thành phần OCL cơ bản 20

2.5.1 Các biểu thức, kiểu và giá trị 20

2.5.2 Các kiểu cơ sở và các toán tử 21

2.5.3 Các quy tắc ưu tiên 24

2.5.4 Chú thích 24

2.6 Các kiểu người dùng định nghĩa 24

Trang 6

2.6.3 Các kiểu liệt kê 27

2.7 Kiểu tập hợp 28

2.7.1 Các kiểu tập hợp 28

2.7.2 Các phép toán trên các kiểu tập hợp 30

2.7.3 Các phép toán lặp và duyệt 34

2.8 Các cấu trúc nâng cao 35

2.8.1 Các cấu trúc cho các điều kiện sau 35

Chương 3 .37

Giới thiệu khung làm việc 37

3.1 Sự ra đời của khung làm việc 37

3.1.1 Một số khái niệm hướng đối tượng 37

3.1.2 Sử dụng lại phần mềm 39

3.2 Ví dụ khung làm việc 43

3.2.1 Khung làm việc cộng tác 45

3.2.2 Làm mịn khung làm việc 51

Chương 4 .56

Xây dựng hệ thống cho bài toán lập Thời khóa biểu 56

4.1 Mô hình ca sử dụng 56

4.1.1 Xác định tác nhân 56

4.1.2 Các ca sử dụng 56

4.2 Phân tích 60

4.2.1 Phân tích kiến trúc 60

4.2.2 Phân tích ca sử dụng 61

4.3 Thiết kế 69

4.3.1 Thiết kế lớp 69

4.3.2 Cấu trúc dữ liệu và thuật toán 73

4.4 Cài đặt 77

4.4.1 Công cụ 77

4.4.2 Môi trường triển khai 77

4.4.3 Giao diện chính 78

4.4.4 Kết quả 86

KẾT LUẬN 89

TÀI LIỆU THAM KHẢO 90

Trang 7

Bảng 1 Tổng hợp các chức năng hệ thống "Lập thời khóa biểu học kỳ" 6

Bảng 2 Từ điển dữ liệu 7

Bảng 3 Các phép toán định nghĩa trên kiểu dữ liệu boolean 21

Bảng 4 Các toán tử chuẩn kiểu số nguyên và số thực 22

Bảng 5 Các toán tử kiểu dữ liệu xâu ký tự 23

Bảng 6 Độ ưu tiên các toán tử 24

Bảng 7 Các phép toán trên kiểu tập hợp 30

Bảng 8 Các phép toán biến đổi trên kiểu tập hợp 31

Bảng 9 Các phép toán duyệt định nghĩa trên kiểu tập hợp 34

Bảng 10 Bảng luồng sự kiện ca sử dụng lập danh sách lớp học 57

Bảng 11 Bảng luồng sự kiện ca sử dụng lập danh sách môn học 57

Bảng 12 Bảng luồng sự kiện ca sử dụng lập danh sách giáo viên giảng dạy 58

Bảng 13 Bảng luồng sự kiện ca sử dụng xác định giáo viên dạy môn học cho lớp 59

Bảng 14 Bảng luồng sự kiện ca sử dụng lập danh sách ràng buộc 59

Bảng 15 Bảng luồng sự kiện ca sử dụng lập thời khóa biểu 60

Bảng 16 Các thuộc tính lớp thiết kế Spciality 69

Bảng 17 Các thuộc tính lớp thiết kế Teacher 69

Bảng 18 Các thuộc tính thêm lớp con Tie_Teacher 70

Bảng 19 Các thuộc tính lớp thiết kế Subject 70

Bảng 20 Các thuộc tính thêm lớp con Subject- Class 71

Bảng 21 Các thuộc tính lớp thiết kế Class 71

Bảng 22 Thuộc tính thêm lớp con Tie_Class 72

Bảng 23 Các thuộc tính lớp thiết kế Timeable 72

Bảng 24 Bảng chia môn học các ca học dựa trên số tiết học 75

Bảng 25 Kết quả chương trình trên một số bộ dữ liệu 87

Trang 8

Hình 1 Mô hình lĩnh vực nghiệp vụ bài toán xếp thời khóa biểu 8

Hình 2 Ví dụ mô hình UML không biểu diễn hết đặc tả 9

Hình 3 Mô hình hệ thống chương trình Loyalty 12

Hình 4 Định nghĩa ngữ cảnh trong mô hình UML 14

Hình 5 Cây thừa kế của ví dụ minh họa 19

Hình 6 Ví dụ điều hướng trong kết hợp ( kết tập) 25

Hình 7 Ví dụ lớp kết hợp 26

Hình 8 Ví dụ kiểu liệt kê 27

Hình 9 Ví dụ liên kết động và đa hình 38

Hình 10 Sự khác nhau trong điều khiển giữa khung làm việc và thư viện lớp 40

Hình 11 Ví dụ về áp dụng một mô hình khung làm việc 44

Hình 12 Sự cộng tác giữa các đối tượng 46

Hình 13 Khuôn mẫu cộng tác 48

Hình 14 Mô hình kiểu đích cho việc sử dụng sự quan sát 49

Hình 15 Ví dụ ứng dụng khung làm việc và sự thay thế 49

Hình 16 Kết quả mở của ứng dụng khung làm việc 50

Hình 17 Khung làm việc cho việc thương mại: duy trì kho hàng 52

Hình 18 Sự cộng tác Trade Supply 54

Hình 19 Làm tài liệu sự làm mịn khung làm việc 55

Hình 20 Mô hình ca sử dụng 56

Hình 21 Biểu đồ cộng tác ca sử dụng lập danh sách lớp học 61

Hình 22 Biểu đồ cộng tác ca sử dụng lập danh sách môn học trong học kỳ 62

Hình 23 Biểu đồ cộng tác ca sử dụng lập Danh sách giáo viên trong học kỳ 63

Hình 24 Biểu đồ cộng tác ca sử dụng lập danh sách lớp- môn học 65

Hình 25 Biểu đồ cộng tác ca sử dụng lập danh sách lớp- môn- giáo viên 66

Hình 26 Biểu đồ cộng tác ca sử dụng lập danh sách các ràng buộc 67

Hình 27 Biểu đồ cộng tác ca sử dụng lập thời khóa biểu 68

Hình 28 Biểu đồ lớp thiết kế 73

Hình 29 Ma trận đánh dấu trạng thái lớp 75

Hình 30 Giao diện menu Sửa dữ liệu 78

Hình 31 Giao diện chỉnh sửa danh sách chuyên ngành 79

Hình 32 Giao diện chỉnh sửa danh sách lớp học 79

Hình 33 Giao diện chỉnh sửa danh sách môn học .80

Hình 34 Giao diện chỉnh sửa danh sách giáo viên 80

Hình 35 Giao diện menu Chọn dữ liệu 81

Hình 36 Giao diện nhập học kỳ - năm học 81

Hình 37 Giao diện chọn lớp học cho học kỳ 82

Hình 38 Giao diện chọn môn học cho học kỳ 82

Hình 39 Giao diện chọn giáo viên giảng dạy cho học kỳ 83

Trang 9

Hình 42 Giao diện nhập ngày nghỉ giáo viên 84

Hình 43 Giao diện thông báo xếp xong thời khóa biểu 85

Hình 44 Xác nhận hủy lập thời khóa biểu 85

Hình 45 Giao diện menu Xem TKB 85

Hình 46 Giao diện xem thời khóa biểu theo lớp 86

Hình 47 Giao diện xem thời lịch dạy giáo viên 86

Hình 48 Ví dụ kết quả thời khóa biểu lớp 87

Hình 49 Ví dụ kết quả lịch dạy giáo viên 1 88

Hình 50 Ví dụ kết quả lịch dạy giáo viên 2 88

Trang 10

Bài toán lập thời khóa biểu từ lâu luôn thu hút được sự quan tâm của nhiều tổ chức giáo dục và các nhà nghiên cứu bởi tính ứng dụng cao và độ phức tạp Các bài toán lập thời khóa biểu rất phong phú và đa dạng bởi các ràng buộc và yêu cầu của từng tổ chức Bài toán đặc trưng bởi các ràng buộc và các ràng buộc có thể được thêm vào với nhiều mức khác nhau Rất nhiều chương trình đã được lập và đưa vào sử dụng Phần lớn các chương trình đó được phát triển dựa trên cơ sở một mô hình toán học chặt chẽ và thuật toán xây dựng là dành riêng cho mô hình đó Vì vậy khi áp dụng, nó chỉ thích hợp với một phạm vi hẹp mà ở đó bài toán đặt ra đúng với mô hình đã xây dựng Ngay trong phạm vi đó, khi xuất hiện thêm một vài ràng buộc mới thì kết quả đã không hiệu quả, thậm chí không cho lời giải

Một vấn đề đặt ra là, cần phát triển một hệ thống thời khóa biểu có thể thích nghi được với nhiều lớp bài toán lập thời khóa biểu khác nhau về ràng buộc với sự cải biên sửa đổi không nhiều và tiến hành là dễ dàng nhanh chóng Chỉ có một hệ thống như vậy mới thực sự đáp ứng được yêu cầu thực tế cao và hiệu quả

Khóa luận hướng đến giải quyết bài toán này dựa trên hai cơ sở sau:

♦ Tìm một thuật toán kiểu heuristic đủ đơn giản để giải bài toán Do đó dễ cải biên mỗi khi thêm ràng buộc

♦ Sử dụng hai công nghệ tiên tiến là Framework và lập trình ràng buộc Vì lớp bài toán thời khóa biểu có phần lõi chung, nên Framework trợ giúp thiết kế xây dựng ứng dụng cho lớp này dễ dàng thay đổi ràng buộc bổ sung Còn lập trình ràng buộc trợ giúp việc lâp trình có ràng buộc tiện lợi, nhanh chóng

Trang 11

Chương 1

Bài toán lập Thời khóa biểu 1.1 Giới thiệu chung bài toán lập thời khóa biểu

1.1.1 Bài toán xếp thời khóa biểu nhà trường

Bài toán sắp xếp thời khóa biểu từ lâu luôn thu hút được sự quan tâm của nhiều nhà nghiên cứu và nhiều chuyên gia trong lĩnh vực liên quan Sự nổi tiếng của bài toán không chỉ ở độ phức tạp mà còn ở tính thực tiễn, khả năng áp dụng trong thực tế Bất

cứ một cơ sở đào tạo nào, thời khóa biểu học tập của học viên ( học sinh, sinh viên) và giảng dạy của giáo viên giảng dạy luôn có vai trò quan trọng kết nối hầu như toàn bộ các hoạt động

Bài toán xếp thời khóa biểu là một trường hợp riêng của bài toán lập lịch trong

đó đưa ra một chuỗi các sự kiện (thông thường là các môn học, bài giảng, môn thi) và bao gồm các giáo viên và học viên trong một khoảng thời gian định trước và thoả mãn một tập hợp các ràng buộc của từng loại thời khoá biểu khác nhau Các ràng buộc bao gồm khả năng học tập của học viên và khả năng giảng dạy của giáo viên, số lượng và sức chứa của phòng học, hạn định về thời gian và yêu cầu đáp ứng của các sự kiện

1.1.2 Phân loại bài toán xếp thời khóa biểu

a Theo loại khuôn dạng thời gian Thời khóa biểu

Phân loại theo mẫu biểu của thời khóa biểu được in ra Trên thực tế có rất nhiều loại thời khóa biểu khác nhau, rất đa dạng và tùy thuộc vào hoàn cảnh, điều kiện của từng trường Có thể liệt kê một số loại tiêu biểu:

♦ Thời khóa biểu TUẦN

Là mẫu dạng thời khóa biểu cho một tuần và được dùng làm chuẩn cho tất cả các tuần của học kỳ ( năm học) Đa số các trường học của Việt Nam đều sử dụng khuôn mẫu này

♦ Thời khóa biểu HỌC KỲ

Là mẫu khuôn dạng thời khóa biểu được biểu diễn đến từng ngày trong suốt học

kỳ ( năm học)

♦ Thời khóa biểu 2 ( nhiều) TUẦN / HỌC KỲ

Trang 12

Là loại thời khóa biểu khuôn dạng tuần, tuy nhiên thời gian phân bố cho thời khóa biểu được chia làm nhiều khoảng trong một học kỳ hay năm học Với mô hình này các môn học được sắp xêp không dàn đều trong một học kỳ mà thường co dãn trong những khoảng thời gian nhỏ hơn

♦ Thời khóa biểu THÁNG ( NĂM HỌC)

Là loại thời khóa biểu được thiết kế chi tiết từng tháng ( năm học)

b Phân loại theo đơn vị xếp Thời khóa biểu

Phân loại theo các đối tượng trực tiếp liên quan đến dữ liệu thời khóa biểu Các đối tượng chính của Thời khóa biểu bao gồm:

♦ Giáo viên giảng dạy: người trực tiếp giảng dạy theo các học phần môn học

được quy định chặt chẽ về thời lượng kiến thức và hình thức học

♦ Phòng học: địa điểm học các môn và bài giảng do giáo viên đảm nhận

♦ Học sinh: đối tượng học tập trực tiếp của giáo viên giảng dạy Học sinh được

phân công vào các lớp học Do có hai kiểu lớp học khác nhau tạo nên sự khác biệt của mô hình Thời khóa biểu:

♦ Mô hình lớp học niên chế: học sinh nhập học và phân cố định vào lớp

theo năm học Mô hình lớp này đơn giản về mặt tổ chức, quản lý nhưng lại phức tạp trong việc xếp Thời khóa biểu

♦ Mô hình lớp học tín chỉ: học sinh tự do đăng ký vào các bài giảng đã

chuẩn bị trước của thời khóa biểu Các lớp học thực chất là các bài giảng được thiết kế thời khóa biểu giảng dạy chi tiết Thường thì sau khi thời khóa biểu các lớp được lên kế hoạch thì học sinh mới căn cứ vào thời khóa biểu cụ thể để đăng ký lớp học Việc tổ chức Thời khóa biểu theo lớp tín chỉ sẽ đơn giản hơn cho việc xếp Thời khóa biểu nhưng lại phức tạp cho công việc quản lý chuyên môn đào tạo nhà trường

1.1.3 Các đối tượng liên quan đến Thời khóa biểu

Các đối tượng liên quan trực tiếp đến Thời khóa biểu bao gồm: Giáo viên giảng dạy, Phòng học và Môn học ( học phần giảng dạy):

Trang 13

♦ Giáo viên: trong mô hình bài toán xếp Thời khóa biểu vai trò các giáo viên là

ngang nhau Mỗi giáo viên về nguyên tắc thuộc một Khoa hay Bộ môn và sẽ có một Thời khóa biểu lịch giảng dạy riêng của mình trong học kỳ hay năm học hiện thời

♦ Môn học: môn học hay học phần là một đơn vị quản lý chính của chương trình

đào tạo và là đối tượng chính của cả hai mô hình lớp niên chế và tín chỉ Chính

vì vậy môn học có vai trò quan trọng trong mô hình bài toán xếp Thời khóa biểu Mỗi môn học thuộc khoa hay bộ môn trực tiếp phụ trách và đặc trưng bởi

số đơn vị học trình ( thời lượng học)

♦ Phòng học: phòng học cũng đóng vai trò quan trọng trong bài toán xếp thời

khóa biểu Phòng học đặc trưng bởi loại hình thức học ( lý thuyết, thực hành) hay sức chứa và căn cứ vào đó phân công cho các lớp

1.2 Bài toán lập thời khóa biểu giải quyết trong khóa luận

Trong khóa luận này chỉ xét bài toán lập thời khoá biểu cho trường đại học ở Việt Nam mà cụ thể là trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội ( có thể tổng quát cho các trường vẫn giảng dạy theo hệ lớp- môn- giáo viên giảng dạy)

Bài toán được phát biểu như sau:

Có một danh sách các lớp học học trong học kỳ, danh sách các môn học tương ứng cho từng lớp học và danh sách giảng viên tương ứng với mỗi môn cho từng lớp Giảng đường cho mỗi lớp đã được xếp trước

Một lời giải hay một thời khoá biểu chấp nhận được là tất cả các môn học được chia vào các tiết học trong một tuần thoả mãn các điều kiện ngặt sau:

♦ Các lớp học không có tiết trống ở giữa

♦ Giảng viên không dạy hai lớp khác nhau ở cùng một thời điểm

♦ Tại một thời điểm mỗi lớp học chỉ học một môn

Thêm vào đó, một thời khoá biểu chấp nhận được sẽ được đánh giá bằng số vi phạm các ràng buộc mềm được cho như sau:

♦ Số buổi lên lớp của giáo viên giảng dạy là ít nhất

♦ Giáo viên giảng dạy có không quá một tiết trống ở giữa các ca dạy trong ngày

Trang 14

♦ Giáo viên giảng dạy có thể không dạy vào buổi nào đó

♦ Lớp học có một ngày nghỉ ( ngoài chủ nhật) trong tuần

1.2.1 Hoạt động nghiệp vụ

1.2.1.1 Lên danh sách các lớp sẽ được học trong học kỳ

Vào đầu năm học, nhân viên phòng Đào Tạo phụ trách phần quản lí giảng dạy

và học tập phải ra kế hoạch lập thời khóa biểu Trước tiên nhân viên phòng Đào Tạo sẽ lập danh sách các lớp sẽ học trong học kỳ đó Đồng thời gửi số lớp học về phòng Hành Chính Tổng Hợp đề nghị chuẩn bị lớp Phòng Hành Chính Tổng Hợp gửi lại danh sách và qui mô phòng học cho phòng Đào Tạo

1.2.1.2 Xác định môn học cho mỗi lớp ( lớp- môn)

Với mỗi lớp học trong danh sách ở trên, nhân viên phòng Đào Tạo đối chiếu với chương trình đào tạo đã được áp dụng để đưa ra danh sách môn học của từng lớp

Từ danh sách các môn học, nhân viên phòng Đào Tạo trích ra các môn học cho mỗi bộ môn và số trình phải dạy và gửi về các bộ môn để bộ môn đăng kí hay phân công giáo viên giảng dạy Đồng thời gửi danh sách này cho lãnh đạo khoa để lấy ý kiến đánh giá giúp cho việc chỉnh sửa bổ sung chương trình đào tạo được khoa học hơn

1.2.1.3 Phân công giảng dạy ( lớp- môn- giáo viên)

Sau khi nhận danh sách các giáo viên đăng kí giảng dạy từ các bộ môn, phòng Đào Tạo tiến hành lập danh sách giáo viên giảng dạy tương ứng với mỗi môn học của lớp

1.2.1.4 Lên danh sách các phòng học

Dựa vào danh sách các phòng học và qui mô của từng lớp do phòng Hành Chính Tổng Hợp gửi lại, nhân viên phòng Đào Tạo lên danh sách các giảng đường có thể đưa vào sử dụng

1.2.1.5 Lập thời khóa biểu

Từ danh sách các lớp và các môn học tương ứng, danh sách các giáo viên giảng dạy đăng kí dạy và ý kiến của lãnh đạo khoa về chương trình đào tạo đưa ra, nhân viên phòng Đào Tạo lập ra thời khóa biểu dự kiến và gửi đi các đơn vị liên quan lấy ý kiến phản hồi Căn cứ vào ý kiến phản hồi, nhân viên phòng đào tạo xếp thời khóa biểu chính thức và gửi cho các đơn vị, bộ môn và các lớp

Trang 15

1.2.2 Bảng tổng hợp các chức năng của hệ thống “Lập thời khóa biểu

học kỳ”

Bảng 1 Tổng hợp các chức năng hệ thống "Lập thời khóa biểu học kỳ"

Số chức năng Chức năng

R1 Lập danh sách các lớp học sẽ học trong học kỳ

R2 Lập danh sách các môn học cho các lớp

R3 Lập danh sách các giáo viên giảng dạy

R4 Xác định giáo viên giảng dạy cho các môn học của các lớp

R5 Xác định các ràng buộc, ưu tiên

R6 Lập thời khóa biểu dự kiến, chính thức

Trang 16

1.2.3 Từ điển dữ liệu và mô hình lĩnh vực nghiệp vụ

4 Teacher-subject Giao viên – môn học

Giáo viên dạy tương ứng với môn học

5 Curriculum

Chương trình đào tạo(CTĐT)

Bao gồm hệ chính qui, tại chức, tập trung hay từ xa…

Lịch học cho các lớp trong trường, khoa

Người phụ trách quản lí giảng dạy và học tập

11 Training bureau Phòng Đào Tạo

Phụ trách các vấn đề về giảng dạy và học tập

12

Bureau of

administration

Phòng hành chính tổng hợp

Yêu cầu đặt ra khi lập thời khóa biểu

Trang 17

1.2.3.2 Mô hình lĩnh vực nghiệp vụ

Hình 1 Mô hình lĩnh vực nghiệp vụ bài toán xếp thời khóa biểu

Trang 18

Các biểu thức viết trong OCL thêm các thông tin quan trọng cho các mô hình hướng đối tượng Các thông tin này thường không thể biểu diễn trong biểu đồ Trong UML phiên bản 1.1 các thông tin này được giới hạn bởi các ràng buộc, mỗi ràng buộc được định nghĩa như một hạn chế về giá trị nhận được ( một hay nhiều) của một hệ thống hay mô hình hướng đối tượng Trong UML phiên bản 2, một mô hình có thể chứa nhiều thông tin thêm hơn là chỉ có ràng buộc Tất cả các công việc như: định nghĩa truy vấn, các giá trị tham chiếu, các quy tắc nghiệp vụ hay các điều kiện trạng thái được viết bằng các biểu thức trong một mô hình OCL là ngôn ngữ chuẩn trong đó các biểu thức được viết một cách rõ ràng và dễ hiểu

Một mô hình thường có những thiếu sót do những hạn chế của các biểu đồ Một biểu đồ đơn giản không thể biểu diễn các phát biểu đặc tả Ví dụ trong mô hình UML sau:

Hình 2 Ví dụ mô hình UML không biểu diễn hết đặc tả

Trong mô hình, quan hệ giữa lớp Flight ( chuyến bay) và lớp Person ( khách hàng), phía lớp Person có bản số là 0…* tức là số khách hàng là không giới hạn Trong thực tế số khách hàng bị giới hạn bởi số ghế mà máy bay có, và giới hạn này

Trang 19

không thể biểu diễn trong biểu đồ Trong ví dụ này có một cách chỉ định ràng buộc về bản số thể hiện là thêm vào biểu đồ ràng buộc OCL sau:

context Flight

inv: passengers-> size () <= plane.numberOfSeats

2.2 Đặc điểm OCL

OCL thêm các thông tin làm mô hình nhất quán, hoàn thiện và rõ ràng Nếu chỉ

có biểu đồ trong mô hình UML, hệ thống sẽ không đảm bảo tính chính xác, đúng đắn OCL là ngôn ngữ quan trọng giúp xây dựng mô hình tốt hơn

2.2.1 Cả truy vấn và ngôn ngữ ràng buộc

Trong UML phiên bản 1.1 OCL là ngôn ngữ biểu diễn các ràng buộc trên các thành phần trong các biểu đồ của mô hình Một ràng buộc là một hạn chế trên một hay nhiều giá trị của một phần hay cả hệ thống mô hình hướng đối tượng Dù các biểu đồ trong mô hình biểu diễn các đối tượng hay các giá trị dữ liệu nhưng những giá trị đó chỉ hợp lệ nếu điều kiện xác định bởi ràng buộc thỏa mãn

Đến UML phiên bản 2, OCL viết không chỉ ràng buộc, mà bất kỳ biểu thức nào trên các thành phần của biểu đồ Mọi biểu thức OCL biểu thị một giá trị hay một đối tượng bên trong hệ thống

Các biểu thức OCL được dùng ở bất kỳ nơi nào trong mô hình để biểu thị một giá trị Một giá trị có thể là một giá trị kiểu cơ sở ( số nguyên,…) hay một tham chiếu tới một đối tượng, một tập các giá trị, hay tập các tham chiếu tới các đối tượng Một biểu thức OCL có thể biểu diễn , ví dụ một giá trị logic được dùng như điều kiện trong biểu đồ trạng thái, hay một thông điệp (message) trong biểu đồ tương tác Một biểu thức OCL cũng có thể dùng để chỉ một đối tượng cụ thể trong biểu đồ đối tượng hay biểu đồ tương tác

2.2.2 Ngôn ngữ dựa trên cơ sở toán học nhưng không có các ký hiệu

toán học

Đặc điểm nổi bật của OCL là xây dựng dựa trên cơ sở toán học Nó dựa trên lý thuyết tập hợp và logic vị từ Tuy nhiên OCL lại không dùng các ký hiệu toán học Một ngôn ngữ mô hình cần sự chặt chẽ và chính xác của toán học nhưng lại đòi hỏi đặc điểm dễ hiểu của ngôn ngữ tự nhiên OCL dùng các khái niệm toán học nhưng bỏ qua các ký hiệu khó hiểu của toán học Thay vì dùng ký hiệu toán học để biểu diễn cùng một khái niệm, OCL dùng các từ khóa dễ hiểu

Trang 20

2.2.3 Ngôn ngữ định nghĩa kiểu

Đặc trưng quan trọng của OCL là một ngôn ngữ định nghĩa kiểu Các biểu thức OCL được dùng cho các mục đích mô hình hóa và đặc tả Do hầu hết các mô hình không được thực thi trực tiếp, các biểu thức OCL được viết trên những phiên bản không thực thi được của hệ thống Tuy nhiên có thể kiểm tra một biểu thức OCL mà không cần đưa ra phiên bản thực thi được của mô hình Như một ngôn ngữ định nghĩa kiểu, các biểu thức OCL có thể được kiểm tra trong mô hình trước khi thực thi Nhờ

đó mà lỗi của mô hình có thể sớm được loại bỏ

2.2.4 Ngôn ngữ khai báo

Một đặc tính dễ phân biệt khác của OCL là ngôn ngữ khai báo Trong các ngôn ngữ thủ tục giống như các ngôn ngữ lập trình, các biểu thức là các mô tả về các hành động phải thực hiện Trong một ngôn ngữ khai báo, một biểu thức phát biểu đơn giản điều được thực hiện nhưng không chỉ ra cách làm như thế nào Để đảm bảo điều này, các biểu thức OCL không có ảnh hưởng tới hệ thống, có nghĩa là việc đánh giá một biểu thức OCL không thay đổi trạng thái của hệ thống

2.3 Bài toán L&R

Để tiện minh họa khi giới thiệu OCL xét một ví dụ mô hình một hệ thống của một công ty Royal & Loyal ( R& L) R & L nghiên cứu về các chương trình cho các công ty khuyến khích khách hàng thường xuyên bằng nhiều khoản tiền thưởng ( gọi là chương trình Loyalty)

Trang 21

Hình 3 Mô hình hệ thống chương trình Loyalty

Lớp trung tâm của mô hình là LoyaltyProgram Một hệ thống mà quản lý chỉ một chương trình Loyalty đơn chứa chỉ một thể hiện của lớp này Trong trường hợp

R& L, nhiều thể hiện của lớp này được biểu diễn trong hệ thống Một công ty tham dự

chương trình mà cấp cho khách hàng thẻ thành viên trong chương trình Loyalty được gọi là ProgramPartner Có thể có nhiều công ty đăng ký cùng chương trình Trong

Trang 22

trường hợp đó các khách hàng đăng ký chương trình Loyalty có thể thu lợi từ các dịch

vụ đưa ra do bất kỳ công ty tham dự nào

Mọi khách hàng thành viên của chương trình có thể đăng ký chương trình

Loyalty bằng cách điền vào một form và nhận được một thẻ hội viên Các đối tượng

của lớp Customer biểu diễn cho những người đã đăng ký chương trình Thẻ thành viên, biểu diễn bởi lớp CustomerCard, thuộc về một người Một thẻ có thể dùng cho

cả gia đình hay cửa hàng Hầu hết các chương trình Loyalty cho phép các khách hàng

tích lũy điểm thưởng Mỗi công ty tham dự chương trình quyết định khi nào và bao nhiều điểm thưởng sẽ chuyển khi khách hàng trả giá Những điểm thưởng tích lũy được có thể dùng để mua các dịch vụ cụ thể từ một trong các công ty tham gia chương trình

Để ghi lại điểm thưởng một khách hàng có được, mọi khách hàng thành viên

được kết hợp với một tài khoản LoyaltyAccount Có 2 loại giao dịch đối với tài khoản

này Thứ nhất là các giao dịch trong đó khách hàng nhận được điểm thưởng Trong mô

hình các giao dịch này được biểu diễn bằng một lớp con Earning của lớp Transaction

Thứ hai là các giao dịch trong đó khách hàng tiêu tốn điểm thưởng Trong mô hình các

giao dịch loại này được biểu diễn bằng lớp con Burning

Ngoài ra, căn cứ vào các dịch vụ đã sử dụng và lượng tiền chi trả mà khách hàng có thể được xét lên khách hàng “vàng” Khi đó khách hàng sẽ được sử dụng ưu đãi các dịch vụ mức độ cao hơn Để quản lý các cấp độ dịch vụ khác nhau dùng lớp

ServiceLevel Một ServiceLevel được chương trình Loyalty định nghĩa và mỗi khách

2.4 Ngữ cảnh của các biểu thức OCL

2.4.1 Mô hình kết hợp

OCL dựa trên các kiểu ( lớp, loại dữ liệu,…) được định nghĩa trong một mô hình UML Do đó sử dụng OCL bao gồm việc sử dụng một số thành phần của UML Các biểu thức OCL có thể bao gồm một số biểu đồ UML, thông thường chỉ biểu đồ lớp được dùng

Một mô hình phải là một thực thể nhất quán Trong một mô hình, quan hệ giữa các thực thể trong hai biểu đồ phải dễ hiểu Tương tự với quan hệ giữa các biểu thức (

Trang 23

trong OCL) mà không gắn với các biểu đồ hay các thực thể trong biểu đồ Có thể biểu diễn quan hệ này bằng hai cách Một là các biểu thức gắn với các thực thể cụ thể chỉ

có các hàm cụ thể Ví dụ: một biểu thức định nghĩa một thuộc tính mới gắn với một lớp, giao diện hay kiểu dữ liệu Hai là thực thể mô hình UML mà có một biểu thức được gắn vào xác định rõ các thực thể khác và có thể được tham chiếu Ví dụ: một biểu thức gắn với một lớp, tất cả các thuộc tính, kết hợp và phép toán truy vấn của lớp

đó được dùng

Liên kết giữa một thực thể trong mô hình UML và một biểu thức OCL được gọi

là định nghĩa ngữ cảnh của biểu thức OCL đó

2.4.1.1 Ngữ cảnh của một biểu thức OCL

Ngữ cảnh một biểu thức OCL chỉ ra thực thể trong đó biểu thức OCL được định nghĩa Thông thường ngữ cảnh là một lớp, giao diện, kiểu dữ liệu hay thành phần của biểu đồ Hoặc đôi khi có thể là một thao tác và hiếm khi là một thể hiện Ngữ cảnh luôn là một thành phần cụ thể được định nghĩa trong biểu đồ UML

Các biểu thức OCL có thể đi kèm trong trong các biểu đồ trong mô hình, cũng

có thể được viết trong các file text riêng

Trong mô hình định nghĩa ngữ cảnh được chỉ ra bởi một đường nhiều dấu chấm liên kết thành phần mô hình và biểu thức OCL :

Hình 4 Định nghĩa ngữ cảnh trong mô hình UML

Trang 24

Khi biểu thức OCL được viết trong một file text riêng, định nghĩa ngữ cảnh

được viết theo khuôn dạng: từ khóa context theo sau là tên của kiểu VD:

inv: participants.cards.Membership.includes( self )

Có thể có hơn một biểu thức với mỗi ngữ cảnh và tùy theo ngữ cảnh mà biểu thức OCL có các chức năng khác nhau

2.4.2 Các lớp và các kiểu khác

Khi ngữ cảnh là một kiểu, ví dụ một lớp, giao diện, kiểu dữ liệu hay thành phần ( thuộc tính, thao tác truy vấn, trạng thái, kết hợp) các biểu thức thuộc một trong các dạng:

2.4.2.1 Các bất biến

Bất biến là một ràng buộc luôn đúng cho một đối tượng trong toàn bộ thời gian tồn tại của đối tượng đó Các bất biến thường biểu diễn các quy tắc gán cho các đối tượng thực sau khi các đối tượng phần mềm được mô hình hóa Một bất biến được gắn với một mô hình có nghĩa là khi bất biến bị phá vỡ thì mô hình sẽ lỗi

Để chỉ một biểu thức là một bất biến, sau khai báo ngữ cảnh là từ khóa inv, tên

tùy chọn, dấu : và biểu thức Ví dụ :

context Customer

inv myInvariant23: self.name = 'Edward'

Trong ví dụ trên bất biến được đặt tên là myInvariant23, chỉ ra ràng buộc tất cả thể hiện của lớp Customer có tên là Edward

2.4.2.2 Định nghĩa các thuộc tính hay phương thức

Các thuộc tính hay phương thức có thể được định nghĩa bằng một biểu thức OCL Định nghĩa một thuộc tính hay phương thức có nghĩa là mọi thể hiện của ngữ cảnh nhận thuộc tính hay phương thức được định nghĩa

Trang 25

Để chỉ ra biểu thức là định nghĩa, sau khai báo ngữ cảnh là từ khóa def , dấu hai

chấm: và biểu thức Ví dụ :

context Customer

def: initial : String = name.substring(1,1)

context CustomerCard

def: getTotalPoints( d: Date ) : Integer =

transactions->select( date.isAfter(d) ).points->sum()

Trong trường hợp định nghĩa thuộc tính, tên và loại của thuộc tính phải được chỉ ra, theo sau là dấu = và giá trị gán cho thuộc tính

Tất cả các phương thức định nghĩa trong OCL là các thao tác truy vấn Tên, các tham số ( gồm cả kiểu dữ liệu) và giá trị trả lại phải được đưa ra

2.4.3 Các thuộc tính và các đầu mút của liên kết

2.4.3.1 Các quy tắc dẫn xuất

Một biểu thức có ngữ cảnh là một thuộc tính hay một quy tắc kết hợp có thể được dùng như một quy tắc dẫn xuất Một quy tắc dẫn xuất chỉ ra giá trị của một thành phần của ngữ cảnh phải luôn bằng một giá trị được đưa ra bởi quy tắc

Để chỉ ra biểu thức là một quy tắc dẫn xuất, khai báo ngữ cảnh bao gồm tên của

thuộc tính hay đầu kết hợp, từ khóa derive, dấu hai chấm : như ví dụ sau Mức dịch vụ

trên thẻ của khách hàng luôn bằng cấp độ hiện tại của khách hàng đó :

context CustomerCard::myLevel : ServiceLevel

derive: Membership.currentLevel

2.4.3.2 Giá trị khởi tạo

Giá trị khởi tạo của một thuộc tính hay quy tắc kết hợp có thể đưa ra bởi một biểu thức OCL Một giá trị khởi tạo là giá trị mà thuộc tính hay quy tắc kết hợp nhận được ngay khi thể hiện của ngữ cảnh được tạo ra Sau khai báo ngữ cảnh dùng từ khóa

init, tên thuộc tính và biểu thức đưa ra giá trị khởi tạo Ví dụ:

context CustomerCard::transactions : Set( Transaction )

Trang 26

ra Một giá trị khởi tạo chỉ nhận ngay tại thời điểm tạo thể hiện ngữ cảnh Sau đó, thuộc tính có thể nhận giá trị khác tại các thời điểm khác

2.4.4 Các phương thức

2.4.4.1 Các điều kiện trước và điều kiện sau

Có hai cách trong đó các biểu thức được dùng cho các phương thức là các điều kiện trước và sau ( 2 dạng của các ràng buộc) Một điều kiện trước là một biểu thức logic phải đúng tại thời điểm khi phương thức bắt đầu thực thi Một điều kiện sau là một biểu thức logic phải đúng tại thời điểm phương thức kết thúc thực thi Một điều kiện trước chỉ rõ biểu thức phải nhận đúng, nếu không thao tác sẽ không được thực hiện Ý nghĩa của điều kiện sau là chỉ biểu thức phải đúng, nếu không thao tác đã thực hiện không chính xác

Ngữ cảnh được định nghĩa bởi từ khóa context, tiếp đến là tên của kiểu chứa

thao tác, dấu hai chấm :, toàn bộ phép toán ( gồm tên, tất cả tham số và kiểu tham số, giá trị trả về) Thường thì toàn bộ phép toán được định nghĩa trong biểu đồ lớp UML

Tiếp sau định nghĩa ngữ cảnh là các dòng- gán nhãn với từ khóa pre và post-

bao gồm các điều kiện trước và sau Cú pháp chung:

context Type1::operation(arg : Type2) : ReturnType

2.4.4.2 Phần thân của các phép toán truy vấn

Các phép toán truy vấn có thể được định nghĩa đầy đủ bằng cách chỉ ra kết quả của phép toán trong một biểu thức đơn Sau khi định nghĩa các phép toán truy vấn chưa có hiệu lực cho đến khi các phép toán được thực hiện

Ngữ cảnh khai báo tương tự đối với trường hợp điều kiện trước và sau Thay vì

dùng từ khóa pre hay post, từ khóa body được dùng, tiếp là đến biểu thức Ví dụ :

context CustomerCard::getTransactions(from : Date, until: Date ) : Set(Transaction)

body: transactions->select( date.isAfter( from ) and

date.isBefore( until ) )

Trang 27

2.4.5 Các biểu thức trong các biểu đồ hành vi

2.4.5.1 Các thể hiện

Một biểu đồ tương tác chỉ ra chu kỳ sống của các thể hiện Trong một biểu đồ hoạt động, số các hoạt động có thể được thực hiện bởi một thể hiện cụ thể Các biểu thức OCL có thể được dùng để mô tả các thể hiện và quan hệ của chúng Ngữ cảnh của các biểu thức đó chính là biểu đồ thực hiện các biểu thức

2.4.5.2 Các điều kiện

Một thông điệp trong một biểu đồ tuần tự hay cộng tác có thể có một điều kiện đính kèm để quyết định việc thông điệp được gửi đi Điều kiện này có thể viết như một biểu thức OCL Trong trường hợp này, biểu thức OCL được gắn với một thể hiện, không gắn với một kiểu

Các điều kiện cũng có thể là một phần của các biểu đồ hoạt động Khi đó ngữ cảnh là các điểm quyết định

2.4.5.3 Các giá trị tham số thực

Các thông điệp trong các biểu đồ cộng tác và tuần tự có thể có các tham số Do một thông điệp mô tả một phương thức có các tham số là các giá trị thực Có thể chỉ ra giá trị thực của tham số bằng một biểu thức OCL Ngữ cảnh của biểu thức khi đó là thông điệp Một thông điệp tới một đối tượng trong một biểu đồ tương tác tương ứng với một phương thức trong kiểu của đối tượng đích

Các hành động trong biểu đồ trạng thái và biểu đồ hoạt động cũng có thể có các tham số giá trị thực

Trang 28

(có tên gọi Liskov's Substitution) được phát biểu: bất cứ một thể hiện của một lớp được

tạo ra, nó luôn có thể thay thế một thể hiện của bất kỳ lớp con của nó Các biểu thức OCL tuân theo nguyên tắc này

2.4.7.1 Hệ quả cho các bất biến

Các bất biến trong các lớp cha phải luôn áp dụng cho các lớp con Các lớp con

có thể làm chặt bất biến hơn Quy tắc tổng quát cho các bất biến được phát biểu: Một bất biến cho một lớp cha được bởi các lớp con của nó thừa kế Một lớp con có thể làm chặt bất biến hơn nhưng không được làm bất biến yếu đi

Hình 5 Cây thừa kế của ví dụ minh họa

Trong mô hình trên có thể định nghĩa lớp cha Stove một bất biến : nhiệt độ của

nó không được lớn hơn 200 độ C

context Stove

inv: temperature <= 200

Sẽ rất nguy hiểm nếu một lớp con ElectricStove có thể vượt giới hạn nhiệt độ

đó Ví dụ , giả sử ElectricStove có thể có nhiệt độ không vượt quá 300 độ C:

context ElectricStove

inv: temperature <= 300

Khi đó việc dùng ElectricStove sẽ không đảm bảo an toàn ở nơi nào mà Stove

được dùng Nếu tại một nơi mà nhiệt độ an toàn báo động hoản hoạn là 250 độ C, có

thể đặt một Stove ở đó Nhưng nếu đặt một Stove tại đó và Stove trở thành

ElectricStove, nơi đó có thể bị đặt báo động có hỏa hoạn

Trong một số trường hợp, nguyên tắc Liskov’s Substitution cũng có những hạn

chế Các lớp con có thể thay đối các phương thức lớp cha và thêm vào các phương thức hay thuộc tính, khi đó các bất biến của lớp cha có thể được thay đổi để phù hợp

Trang 29

với sự biến đổi đó Việc một bất biến trên một lớp cha có cần phải thay đối hay không khi một lớp con được thêm vào phụ thuộc vào nội dung của bất biến

2.4.7.2 Các hệ quả cho các điều kiện trước và sau

Khi một phương thức được định nghĩa lại trong một lớp con, một điều kiện trước có thể bị làm yếu đi nhưng không được làm chặt hơn Ngược lại, một điều kiện

sau có thể chặt hơn, không được yếu đi Ví dụ: định nghĩa phương thức open() cho lớp

Stove:

context Stove::open()

pre : status = StoveState::off

post: status = StoveState::off and isOpen

Biểu thức trên có nghĩa là có thể mở một Stove khi trạng thái của nó là off Sau khi đã mở, trạng thái mong muốn là off và biến isOpen có giá trị true Giả sử lớp con

ElectricStove định nghĩa lại phương thức open() với các điều kiện trước và sau khác:

mà Stove có thể mở Để đảm bảo một ElectricStove có thể thay thế một Stove tiền điều

kiện khi định nghĩa lại open() không được chặt hơn

Điều kiện sau của open() khi định nghĩa lại bị yếu đi vì điều kiện status=

StoveState::off bị loại bỏ Kết quả là ElectricStove không thực hiện như một Stove (

sau khi mở Stove ở trạng thái off)

2.5 Các thành phần OCL cơ bản

Các thành phần cơ bản được dùng để viết các ràng buộc và không tham chiếu tới các thành phần trong mô hình UML

2.5.1 Các biểu thức, kiểu và giá trị

Trong OCL, mỗi giá trị, là một đối tượng, một thể hiện thành phần hay một giá trị dữ liệu có một kiểu nhất định, định nghĩa các phương thức có thể áp dụng cho đối tượng Các kiểu trong OCL được chia làm các nhóm:

2.5.1.1 Các kiểu định nghĩa trước

Được định nghĩa trong thư viện chuẩn bao gồm :

Trang 30

♦ Các kiểu cơ bản:gồm các kiểu dữ liệu số nguyên, số thực, xâu ký tự và logic ( tương tự các ngôn ngữ lập trình.)

♦ Các kiểu tập hợp

2.5.1.2 Các kiểu do người dùng định nghĩa

OCL phân biệt giữa kiểu đối tượng và kiểu giá trị Kiểu giá trị định nghĩa các thể hiện không bao giờ thay đổi VD số nguyên 1 có giá trị không đổi Ngược lại kiểu đối tượng định nghĩa các thể hiện có thể thay đối giá trị VD một thể hiện của lớp

Person có thể thay đổi giá trị thuộc tính name Kiểu định nghĩa trước là kiểu giá trị còn

kiểu người dùng định nghĩa là kiểu đối tượng Các kiểu dữ liệu của UML, gồm các kiểu liệt kế cũng là kiểu giá trị Các giao diện, thành phần, lớp của UML là kiểu đối tượng

2.5.2 Các kiểu cơ sở và các toán tử

2.5.2.1 Kiểu boolean

Biến kiểu logic nhận một trong hai giá trị: true hay false Các phép toán định

nghĩa trên kiểu dữ liệu:

Bảng 3 Các phép toán định nghĩa trên kiểu dữ liệu boolean

Các toán tử trong OCL đều phổ biến trong các ngôn ngữ lập trình trừ toán tử

implies Phép toán này trả lại kết quả true nếu toán hạng thứ nhất có giá trị true và

toán hạng thứ hai cũng có giá trị true hoặc toán hạng thứ nhất có giá trị false

Trang 31

Xét một VD của lớp Service từ ví dụ R & L ở trên Kết quả của biểu thức sau có giá trị true nếu một dịch vụ cung cấp điểm thưởng thì khách hàng không thể dùng

điểm thưởng để trả cho dịch vụ đó:

context Service

inv: self.pointsEarned > 0 implies not (self.pointsBurned = 0)

Một toán tử khác của kiểu boolean là if-then-else, có dạng:

if < biểu thức logic OCL>

then < biểu thức OCL>

else < biểu thức OCL>

endif

2.5.2.2 Kiểu số nguyên và số thực

Kiểu số nguyên và số thực trong OCL cũng giống như trong các ngôn ngữ lập trình Các toán tử chuẩn :

Bảng 4 Các toán tử chuẩn kiểu số nguyên và số thực

Trang 32

giá trị lớn nhất a và b a.max(b) số nguyên hay số thực

giá trị nhỏ nhất a và b a.min(b) số nguyên hay số thực

2.5.2.3 Kiểu dữ liệu xâu ký tự

Cũng giống như các ngôn ngữ lập trình, kiểu dữ liệu xâu ký tự được viết trong

cặp dấu nháy ‘’ Các toán tử gồm có: toUpper, toLower, size, substring, concat:

Bảng 5 Các toán tử kiểu dữ liệu xâu ký tự

Toán tử Biểu thức Kiểu kết quả

VD:

'Anneke'.size() = 6

('Anneke' = 'Jos') = false

'Anneke '.concat('and Jos') = 'Anneke and Jos'

'Anneke'.toUpper() = 'ANNEKE'

'Anneke'.toLower() = 'anneke'

'Anneke and Jos'.substring(12, 14) = 'Jos'

Trang 33

2.5.3 Các quy tắc ưu tiên

Trong trường hợp nhiều toán tử đi với nhau cần có quy tắc qui định độ ưu tiên của các toán tử Bảng các toán tử sau từ trên xuống dưới sắp theo thứ tự giảm dần độ

ưu tiên toán tử Để an toàn, có thể dùng cặp dấu ngoặc () để chỉ định độ ưu tiên một cách rõ ràng:

Bảng 6 Độ ưu tiên các toán tử

::

@pre , ->, ^ -, not

thuộc tính nowOfDate là một thuộc tính của lớp:

context CustomerCard

inv: goodThru.isAfter( Date::now )

Trang 34

Trường hợp các phương thức hay thuộc tính không thuộc lớp trong biểu thức OCL trước tên phương thức hay thuộc tính là dấu chấm ( ) Tuy nhiên có một hạn chế trong OCL: các phương thức có thể trả lại giá trị nhưng không được thay đổi trạng thái của bất kỳ đối tượng nào ( hay còn gọi là phương thức truy vấn) Theo các đặc tả

UML, mỗi phép toán có nhãn logic isQuery Nếu nhãn có giá trị true, phép toán không

có tác dụng thay đổi đối tượng và có thể dùng trong các biểu thức OCL

2.6.2 Các kết hợp và kết tập

Một đặc điểm khác của kiểu người dùng định nghĩa là có thể dùng bên trong OCL dẫn xuất từ các kết hợp ( hoặc kết tập) trong mô hình lớp Các kết hợp có một số đầu mút, mỗi đầu có một bản số, có thể có tên ( tên vai trò) gắn với lớp tham gia kết hợp ( kết tập)

Các đầu mút kết hợp ( kết tập) có thể được dùng để điều hướng từ một đối tượng trong hệ thống đến một đối tượng khác Nếu tên của đầu kết hợp ( kết tập) thiếu,

có thể dùng tên của kiểu kết nối thay thế Nếu dùng tên kiểu mà nhập nhằng thì bắt buộc phải có mô tả của tên vai trò

Xét trong ví dụ R & L:

Hình 6 Ví dụ điều hướng trong kết hợp ( kết tập)

Lớp Customer có hai điều hướng programs và cards Lớp CustomerCard có một điều hướng tên owner, lớp LoyaltyProgram có một điều hướng tên customer

Các điều hướng trong OCL được coi như các thuộc tính Dấu chấm (.) dùng để tham chiếu tới các thuộc tính cũng được dùng để tham chiếu tới các điều hướng Trong một kiểu, tất cả tên ( của thuộc tính hay điều hướng) đều phải duy nhất, tránh sự nhập nhằng giữa tên các thuộc tính và điều hướng

Kiểu của một điều hướng có thể là kiểu người dùng định nghĩa hoặc là một tập các kiểu người dùng định nghĩa Nếu bản số ở đầu kết hợp là 1, kiểu kết quả là kiểu người dùng định nghĩa nối với đầu kết hợp Nếu bản số lớn hơn 1, kết quả có kiểu là một tập hợp Các thành phần trong tập hợp phải tuân theo kiểu người dùng định nghĩa

Trang 35

nối với đầu kết hợp Trong ví dụ trên kiểu kết quả của điều hướng owner từ

CustomerCard là một kiểu người dùng định nghĩa Customer Kiểu kết quả của cả programs và cards từ Customer là các tập hợp

Trong ví dụ hình trên có thể định nghĩa một bất biến dùng điều hướng owner từ ngữ cảnh CustomerCard Vì biểu thức OCL này cho kết quả một giá trị của kiểu

Customer, tất cả các thuộc tính và phương thức trong Customer có thể xuất hiện trong

Hình 7 Ví dụ lớp kết hợp

Trong hình MemberShip là một lớp kết hợp Lớp này có ba điều hướng:

programs của kiểu LoyaltyProgram, participants của kiểu Customer, và currentLevel

của kiểu ServiceLevel Bất biến sau phát biểu một mức dịch vụ thực sự của một thành viên phải luôn là một mức dịch vụ của chương trình Loyalty chứa thành viên đó:

Trang 36

context Membership

inv: programs.levels->includes( currentLevel )

Cũng có thể điều hướng từ lớp kết hợp Customer và LoyaltyProgram tới

Membership Do lớp kết hợp không có tên vai trò, tên của điều hướng là tên của lớp

kết hợp

Bản số tại các đầu mút kết hợp sẽ quyết định kiểu của biểu thức Nếu một ngữ cảnh nào đó bản số lớn hơn 1, điều hướng tới lớp kết hợp sẽ cho kết quả một tập hợp các thể hiện lớp kết hợp Ngược lại, điều hướng sẽ cho kết quả một thể hiện lớp kết

hợp Ví dụ, điều hướng từ Customer tới MemberShip sẽ cho kết quả là giá trị kiểu tập hợp Set(LoyaltyProgram)

Bất biến sau cũng phát biểu tương tự bất biến ở trên, nhưng là từ ngữ cảnh của

LoyaltyProgram: tập các mức dịch vụ phải chứa tất cả các mức của tất cả các thành

viên Chú ý rằng từ ngữ cảnh LoyaltyProgram, Membership.currentLevel là một kiểu

Bag(ServiceLevel) Do đó dùng phép toán includesAll thay cho includes:

context LoyaltyProgram

inv: levels->includesAll( Membership.currentLevel )

2.6.3 Các kiểu liệt kê

Một kiểu liệt kê là một kiểu người dùng định nghĩa đặc biệt thường được dùng như một kiểu cho các thuộc tính Nó được định nghĩa bên trong biểu đồ lớp UML, dùng kiểu nguyên mẫu liệt kê, như trong hình sau:

Hình 8 Ví dụ kiểu liệt kê

Các giá trị được định nghĩa trong <<enumeration>> có thể được dùng như các

giá trị trong một biểu thức OCL

Ở VD trên lớp Customer thuộc tính isMale được thay đối thành gender Bất

biến sau phát biểu các khách hàng nam tên phải bắt đầu bằng ‘Mr.’ :

context Customer

inv: gender = Gender::male implies title = 'Mr.'

Chỉ có hai toán tử dùng cho các giá trị liệt kê là toán tử = và <>

Trang 37

2.7 Kiểu tập hợp

2.7.1 Các kiểu tập hợp

Các hệ thống hướng đối tượng thường thao tác trên các tập đối tượng Vì bản số các kết hợp hiếm khi là 1-1, hầu hết các kết hợp định nghĩa một quan hệ giữa một đối tượng và một tập các đối tượng khác Để thao tác với các tập đó, OCL định nghĩa trước một số các kiểu tương ứng với các tập hợp

Trong OCL, có 5 kiểu tập hợp Có 4 kiểu cụ thể: Set, OrderedSet, Bag,

Sequence Kiểu còn lại là kiểu trìu tượng- Collection, là kiểu cha của bốn kiểu kia dùng

để định nghĩa các toán tử phổ biến cho tất cả các kiểu tập hợp

♦ Set: một tập các thể hiện của một kiểu của OCL Các phần tử trong Set không

có sự lặp lại và không có tính thứ tự

♦ OrderedSet: một tập các phần tử có tính thứ tự

♦ Bag: tập các phần tử không có thứ tự và cho phép lặp lại

♦ Sequence: tập các phần tử có thứ tự và cho phép lặp lại

Chú ý rằng thứ tự ở đây là thứ tự mà các phần tử được lưu chứ không phải thứ

Set { 'apple' , 'orange', 'strawberry' }

OrderedSet { 'apple' , 'orange', 'strawberry', 'pear' }

Trang 38

2.7.1.2 Các biểu thức kiểu tập hợp

Khi một kiểu của một phần tử là một tập hợp, biểu diễn bằng cách dùng các từ

Set, OrderedSet, Bag, Sequence và kiểu của các phần tử của tập hợp giữa cặp dấu

Tất cả các kiểu tập hợp được định nghĩa là các kiểu giá trị, do đó giá trị của một thể hiện không thể thay đổi Các phép toán tập hợp không thay đổi một tập hợp, nhưng

có thể cho kết quả là một tập hợp mới

Bất biến sau từ mô hình R & L, dùng phép toán chuẩn size(), phát biểu rằng số người tham dự vào chương trình Loyalty phải nhỏ hơn hoặc bằng 10.000:

context LoyaltyProgram

inv: self.participants->size() < 10000

2.7.1.4 Các thể hiện được đối xử như là các tập hợp

Do cú pháp của các phép toán tập hợp khác với các phép toán kiểu người dùng định nghĩa nên có thể dùng một thể hiện đơn như một tập hợp Tập hợp này được xem như một tập thể hiện chỉ có một phần tử Ví dụ , trong mô hình R & L, các ràng buộc

sau cho kết quả là giá trị của phép toán người dùng định nghĩa isEmpty() và một thể hiện của LoyaltyAccount:

Trang 39

Biểu thức có giá trị true nếu liên kết từ thể hiện của MemberShip tới một thể hiện của LoyaltyAccount rỗng, có nghĩa là MemberShip không gắn với

LoyaltyAccount

2.7.1.5 Tập hợp các tập hợp

Các tập hợp trong OCL là phẳng, nghĩa là nếu đặt một tập hợp vào bên trong một tập hợp khác, các phần tử sẽ được đưa ra ngoài để thành một tập hợp kết quả Ví

dụ, {set{1,2}, set{3,4}} trở thành set{1,2,3,4}

2.7.2 Các phép toán trên các kiểu tập hợp

Các phép toán thường gặp trên các kiểu tập hợp được liệt kê trong bảng sau

Các phép toán đó được định nghĩa bởi kiểu cha trìu tượng Collection:

Bảng 7 Các phép toán trên kiểu tập hợp

count( đối tượng ) Trả lại số các sự kiện của đối tượng trong tập hợp

excludes( đối tượng) Có giá trị true nếu đối tượng không là một phần tử của

tập hợp excludesAll( tập hợp) Có giá trị true nếu tất cả phần tử của tập hợp ( tham

số) không ở trong tập hợp hiện tại includes( đối tượng ) Có giá trị true nếu đối tượng là một phần từ của tập

hợp includeAll( tập hợp ) Có giá trị true nếu tất cả các phần tử của tập hợp (

tham số) có trong tập hợp hiện tại isEmpty() Có giá trị true nếu tập hợp không chứa phần tử nào

notEmpty() Có giá trị true nếu tập hợp chứa ít nhất một phần tử

size() Trả lại số các phần tử trong tập hợp

sum() Cộng tổng tất cả các phần tử trong tập hợp Các thành

phần phải là một kiểu hỗ trợ phép cộng ( như số nguyên hay số thực)

Các ví dụ sau dùng các phép toán includes và includesAll Bất biến phát biểu

mức dịch vụ của mỗi thành viên phải là một trong các mức của chương trình mà thành viên đó tham dự:

Trang 40

context Membership

inv: programs.levels ->includes(currentLevel)

Bất biến sau ràng buộc các dịch vụ có sẵn cho một mức dịch vụ được cung cấp

bởi một đối tác của chương trình Loyalty:

context ServiceLevel

inv: program.partners

->includesAll(self.availableServices.partner)

2.7.2.1 Các phép toán biến đổi

Một số phép toán định nghĩa trên tất cả các kiểu tập hợp nhưng có một số chỉ áp

dụng cho một hay một số kiểu Bảng sau chỉ ra khái quát về các phép toán biến đổi

trên bốn kiểu tập hợp Dấu X có nghĩa là phép toán đó được định nghĩa cho kiểu tương

ứng, dấu nối – chỉ ra phép toán không được định nghĩa cho kiểu đó:

Bảng 8 Các phép toán biến đổi trên kiểu tập hợp

intersection ( 2 đối tượng cộng

tác)

Ngày đăng: 06/11/2014, 16:35

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Nguyễn Việt Hùng, Nguyễn Văn Tuân - Xây dựng thời khóa biểu bằng cách kết hợp phương pháp Heuristics và tương tác người máy - Khóa luận tốt nghiệp đại học 2005, Đại học Công nghệ - ĐHQGHN Sách, tạp chí
Tiêu đề: Xây dựng thời khóa biểu bằng cách kết hợp phương pháp Heuristics và tương tác người máy
[2] Vũ Văn Thạch - Ứng dụng khung làm việc cho bài toán lập lịch - Khóa luận tốt nghiệp đại học 2005, Đại học Công nghệ - ĐHQGHN Sách, tạp chí
Tiêu đề: Ứng dụng khung làm việc cho bài toán lập lịch
[3] PGS.TS. Nguyễn Văn Vỵ - Bài giảng Phân tích thiết kế hệ thống phần mềm theo hướng đối tượng - Bộ môn Công nghệ phần mềm, Đại học Công nghệ - ĐHQGHN, Hà Nội, 2004. 109 tr.Tài liệu tham khảo tiếng Anh Sách, tạp chí
Tiêu đề: Bài giảng Phân tích thiết kế hệ thống phần mềm theo hướng đối tượng
[4] Michael Boggs, Wendy Boggs - Mastering UML With Rational Rose 2002 - Sybex Sách, tạp chí
Tiêu đề: Mastering UML With Rational Rose 2002
[5] Desmond Francis D’Souza, Alan Cameron Wills - Objects, Components, and Frameworks with UML - Addison Wesley, 1999 Sách, tạp chí
Tiêu đề: Objects, Components, and Frameworks with UML
[6] Anneke Kleppe, Jos Warmer - Object Constraint Languate, The: Getting Your Models Ready for MDA, Second Edition - Addision Wesley, 2003 Sách, tạp chí
Tiêu đề: Object Constraint Languate, The: Getting Your Models Ready for MDA, Second Edition
[7] Niklas Landin, Axel Niklasson- Development of Object- Oriented Frameworks - Department Of Communicaiton Systems Lund Institute of Technology, Lund University Lund, Sweden Sách, tạp chí
Tiêu đề: Development of Object- Oriented Frameworks
[8] J.Riel - Object- Oriented Design Heuristics - Addision Wesley, 1996 Sách, tạp chí
Tiêu đề: Object- Oriented Design Heuristics
[9] Alan Wills - Frameworks and component-based development- http://www.trireme.com Sách, tạp chí
Tiêu đề: Frameworks and component-based development

HÌNH ẢNH LIÊN QUAN

Hình 1. Mô hình lĩnh vực nghiệp vụ bài toán xếp thời khóa biểu - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 1. Mô hình lĩnh vực nghiệp vụ bài toán xếp thời khóa biểu (Trang 17)
Hình 2.  Ví dụ mô hình UML không biểu diễn hết đặc tả - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 2. Ví dụ mô hình UML không biểu diễn hết đặc tả (Trang 18)
Hình 3. Mô hình hệ thống chương trình Loyalty - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 3. Mô hình hệ thống chương trình Loyalty (Trang 21)
Hình 4. Định nghĩa ngữ cảnh trong mô hình UML - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 4. Định nghĩa ngữ cảnh trong mô hình UML (Trang 23)
Hình 5. Cây thừa kế của ví dụ minh họa - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 5. Cây thừa kế của ví dụ minh họa (Trang 28)
Bảng 3. Các phép toán định nghĩa trên kiểu dữ liệu boolean - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Bảng 3. Các phép toán định nghĩa trên kiểu dữ liệu boolean (Trang 30)
Hình 7. Ví dụ lớp kết hợp - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 7. Ví dụ lớp kết hợp (Trang 35)
Hình 9. Ví dụ liên kết động và đa hình - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 9. Ví dụ liên kết động và đa hình (Trang 47)
Hình 10. Sự khác nhau trong điều khiển giữa khung làm việc và thư viện lớp - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 10. Sự khác nhau trong điều khiển giữa khung làm việc và thư viện lớp (Trang 49)
Hình 12. Sự cộng tác giữa các đối tượng - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 12. Sự cộng tác giữa các đối tượng (Trang 55)
Hình 13. Khuôn mẫu cộng tác - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 13. Khuôn mẫu cộng tác (Trang 57)
Hình 14. Mô hình kiểu đích cho việc sử dụng sự quan sát - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 14. Mô hình kiểu đích cho việc sử dụng sự quan sát (Trang 58)
Hình 16. Kết quả mở của ứng dụng khung làm việc - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 16. Kết quả mở của ứng dụng khung làm việc (Trang 59)
Hình 17. Khung làm việc cho việc thương mại: duy trì kho hàng - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 17. Khung làm việc cho việc thương mại: duy trì kho hàng (Trang 61)
Hình 18. Sự cộng tác Trade Supply - ứng dụng framework và lập trình ràng buộc cho bài toán lập thời khóa biểu
Hình 18. Sự cộng tác Trade Supply (Trang 63)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w