Tải bản đầy đủ (.pdf) (99 trang)

ứ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ạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.33 MB, 99 trang )


ĐẠ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









HÀ NỘI – 2006



ĐẠ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

Đỗ Huy Thịnh Trang - ii -
LỜI CẢM ƠN
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
Đỗ Huy Thịnh Trang - iii -
TÓM TẮT NỘI DUNG
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ỳ.

Đỗ Huy Thịnh Trang - iv -
MỤC LỤC
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
Đỗ Huy Thịnh Trang - v -
2.6.1. Các thuộc tính và các phương thức 24
2.6.2. Các kết hợp và kết tập 25
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



Đỗ Huy Thịnh Trang - vi -
DANH MỤC BẢNG BIỂU
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







Đỗ Huy Thịnh Trang - vii -
DANH MỤC HÌNH 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 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
Đỗ Huy Thịnh Trang - viii -
Hình 40. Giao diện menu Xếp TKB 83
Hình 41. Giao diện nhập ngày nghỉ lớp học 84
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
Đỗ Huy Thịnh Trang - 1 -
MỞ ĐẦU
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.
Chương 1. Bài toán lập Thời khóa biểu
Đỗ Huy Thịnh Trang - 2 -
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Ỳ
Chương 1. Bài toán lập Thời khóa biểu

Đỗ Huy Thịnh Trang - 3 -

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):
Chương 1. Bài toán lập Thời khóa biểu

Đỗ Huy Thịnh Trang - 4 -
♦ 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.
Chương 1. Bài toán lập Thời khóa biểu

Đỗ Huy Thịnh Trang - 5 -
♦ 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.
Chương 1. Bài toán lập Thời khóa biểu

Đỗ Huy Thịnh Trang - 6 -
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












Chương 1. Bài toán lập Thời khóa biểu

Đỗ Huy Thịnh Trang - 7 -
1.2.3. Từ điển dữ liệu và mô hình lĩnh vực nghiệp vụ
1.2.3.1. Từ điển dữ liệu

Bảng 2. Từ điển dữ liệu
STT Thuật ngữ Giải thích
English Tiếng Việt
1 Class Lớp
2 Teacher Giáo viên
3 Subject Môn học
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)

6 Degree Hệ đào tạo
Bao gồm hệ chính qui, tại
chức, tập trung hay từ xa…
7 Semester Học kỳ
8 Timetable Thời khóa biểu
Lịch học cho các lớp trong
trường, khoa

9 SubjectClass Môn học – lớp
Các môn học tương ứng với
lớp
10
Training
bureau staff
Nhân viên phòng
Đào Tạo
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
13 Department Bộ phận
14 Classroom Giảng đường Địa điểm học tập
15 Priority Ưu tiên, ràng buộc
Yêu cầu đặt ra khi lập thời
khóa biểu
Chương 1. Bài toán lập Thời khóa biểu

Đỗ Huy Thịnh Trang - 8 -
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




Chương 2. Ngôn ngữ ràng buộc đối tượng
Đỗ Huy Thịnh Trang - 9 -
Chương 2.
Ngôn ngữ ràng buộc đối tượng
2.1. Giới thiệu chung
OCL ( Object Contraint Language) là ngôn ngữ xây dựng mô hình phần mềm,
được định nghĩa như một chuẩn thêm vào UML cho phân tích và thiết kế hướng đối
tượng. Các biểu thức viết trong OCL phụ thuộc vào các kiểu ( lớp, giao diện,…) được
định nghĩa trong các biểu đồ UML.
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

Chương 2. Ngôn ngữ ràng buộc đối tượng

Đỗ Huy Thịnh Trang - 10 -
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.
Chương 2. Ngôn ngữ ràng buộc đối tượng

Đỗ Huy Thịnh Trang - 11 -
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).


Chương 2. Ngôn ngữ ràng buộc đối tượng

Đỗ Huy Thịnh Trang - 12 -

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
Chương 2. Ngôn ngữ ràng buộc đối tượng

Đỗ Huy Thịnh Trang - 13 -
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
hàng thành viên dùng.
Mỗi khi khách hàng thành viên được tăng bậc thẻ
, R& L gửi tới khách hàng thẻ
mới cùng các thông tin về dịch vụ ưu đãi đi kèm, đồng thời làm mất hiệu lực thẻ cũ.
Khách hàng có thể rút khỏi chương trình. Khi đó thẻ của khách hàng đó sẽ mất
hiệu lực, số điểm thưởng còn lại bị xóa. R& L sẽ xóa quyền thành viên nếu khách hàng
không dùng thẻ trong một thời gian nhất định.
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 (

Chương 2. Ngôn ngữ ràng buộc đối tượng

Đỗ Huy Thịnh Trang - 14 -
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
Chương 2. Ngôn ngữ ràng buộc đối tượng

Đỗ Huy Thịnh Trang - 15 -
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:


context Customer
inv: name = 'Edward'
2.4.1.2. Từ khóa self
T ừ khóa self được dùng trong trường hợp cần thiết để chỉ ra một cách rõ ràng
ngữ cảnh. Ví dụ :

context Customer
inv: self.name = 'Edward'

context Membership
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.
Chương 2. Ngôn ngữ ràng buộc đối tượng

Đỗ Huy Thịnh Trang - 16 -
Để 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 )
init: Set{}

context CustomerCard::valid : Boolean
init: true
Chú ý rằng, có sự khác nhau giữa quy tắc dẫn xuất và giá trị khởi tạo. Quy tắc
dẫn xuất phát biểu một bất biến: thành phần dẫn xuất luôn nhận giá trị mà quy tắc đưa

×