Thiết kế lớp

Một phần của tài liệu ỨNG DỤNG UML DESIGN PATTERN XÂY DỰNG HỆ THỐNG ĐĂNG KÝ TÍN CHỈ TRỰC TUYẾN (ONLINE COURSE REGISTER SYSTEM) (Trang 92)

IV. Thiết kế hệ thống

1.Thiết kế lớp

Mục tiêu chính của giai đoạn phân tích là tập trung vào xác định những gì cần được thực hiện. Các đối tượng được phát hiện trong giai đoạn phân tích sẽ làm cơ sở cho giai đoạn thiết kế. Các thuộc tính, phương thức và mối liên kết của lớp được xác định trong giai đoạn phân tích, và được bổ sung từ các mô hình biểu diễn tương tác giữa các đối tượng, phải được thiết kế cho việc cài đặt như là một thành phần được mô tả theo ngôn ngữ cài đặt.

Trong phần này, chúng ta tập trung chi tiết hóa hướng nhìn logic bằng cách xác định thêm các lớp chi tiết ở cả tầng giao diện và tầng truy cập cơ sở dữ liệu để từ đó hình thành một sơ đồ lớp hoàn chỉnh mô tả đầy đủ các đối tượng của ứng dụng chuẩn bị cho việc cài đặt.

Ngoài ra, dựa trên các kết quả này chúng ta phát triển thiết kế vật lý hệ thống bằng cách xây dựng thêm các hướng nhìn cài đặt và hướng nhìn triển khai nhằm chuyển giao kết quả thiết kế hệ thống gần với một ngôn ngữ và công cụ lập trình xác định cho giai đoạn lập trình để có thể cài đặt phù hợp với các thiết bị tài nguyên trong một môi trường hệ thống thực tế một cách hiệu quả nhất.

Hầu hết các hệ thống được phát triển có xu hướng xây dựng một kiến trúc hai tầng đó là giao diện và dữ liệu. Trong kiến trúc hai tầng đó các màn hình giao diện người dùng liên kết để truy cập dữ liệu thông qua các đoạn chương trình được cài trực tiếp trên các đoạn giao diện. Ví dụ: một chương trình viết trên nền Visual Basic có một form giao diện, một thủ tục xử lý sự kiện trong nút “Cập nhật” của form này có tên cmd_CapNhat_Click() có thể thực hiện luôn việc truy cập và cập nhật cơ sở dữ liệu trực tiếp, như vậy thủ tục này cài đặt luôn các ngữ nghĩa về tác nghiệp. Việc thiết kế theo mô hình này tạo ra một sự phụ thuộc rất lớn giữa giao diện và cơ sở dữ liệu, do đó rất khó cải tiến bảo trì và khó sử dụng.

Một cách tiếp cận kiến trúc khác tốt hơn chính là tạo ra sự độc lập giữa giao diện và người sử dụng bằng cách cô lập các chức năng của lớp giao diện với các chức năng của lớp tác nghiệp, của lớp tác nghiệp với lớp truy cập cơ sở dữ liệu. Đó chính là cách tiếp cận ba lớp, từ cách tiếp cận này cho phép chúng ta tạo ra được các đối tượng đại diện cho các đối tượng hữu hình trong thực tế nhưng hoàn toàn độc lập với cách thức mà các đối tượng này trình bày tới người dùng cũng như cách mà dữ liệu của nó được lưu trữ trong cơ sở dữ liệu.

Một chương trình sẽ tạo ra một số dữ liệu trong quá trình thực thi. Mỗi dữ liệu sẽ có một thời gian sống khác nhau. Dữ liệu tạm thời (Transient Data) có thời gian sống phụ thuộc vào thời gian sống của tiến trình sử dụng nó và được giải phóng khi tiến trình như các biến trong một quá trình thực thi thủ tục, kết quả tạm thời để đánh giá biểu thức, biến toàn cục và biến cấp phát động. Dữ liệu liên tục (Persistent Data) có thời gian tồn tại lâu hơn và độc lập với tiến trình sử dụng nó, chúng được quản lý bởi hệ quản trị cơ sở dữ liệu hay hệ thống lưu trữ tập tin. Đa số các lớp trong ứng dụng được chúng em thiết kế là lớp Persistent.

Để phát huy hướng đối tượng ở mức cao nhất, người ta khuyến cáo tất cả các thuộc tính nên được gán cho một phạm vi truy cập nội bộ dạng Protected nhằm đảm bảo tính bao bọc và có thể thừa kế nếu sau này cần phát triển thêm các lớp con. Các phương thức thì nên được truy cập toàn cục như chính bản chất sử dụng phương thức, ngoại trừ một số phương thức chỉ được sử dụng trong nội bộ lớp đó hoặc lớp con kế thừa. Trong Rational Rose quy ước về các phạm vi truy cập như sau:

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

ii. Chuyển đổi đối tượng sang mô hình quan hệ

Trong cơ sở dữ liệu quan hệ, một lược đồ được hình thành bởi các bảng gồm các cột và dòng. Trong mô hình hướng đối tượng, tương ứng tới một bảng là một lớp hoặc nhiều lớp. Các thành phần tương ứng như sau:

 Một cột ứng với một thuộc tính của lớp.

 Một dòng của bảng ứng với một đối tượng.

 Một thủ tục lưu trữ nội, hay còn gọi là Store Procedure, có thể tương ứng với một phương thức.

Như vậy, việc chuyển đổi sơ đồ lớp sang lược đồ quan hệ gồm những công việc sau:

 Chuyển đổi lớp – bảng.

 Chuyển đổi mối liên kết bao gồm liên kết kết hợp và liên kết kế thừa.

a. Chuyển đổi lớp – bảng

Trong đa số các trường hợp thì việc chuyển đổi này là một - một, một lớp sẽ chuyển thành một bảng cụ thể như sau:

 Một lớp thành một bảng.

 Một thuộc tính (persistent) thành một cột: chỉ có các thuộc tính có nhu cầu cần lưu trữ và được đòi hỏi bởi ứng dụng sẽ được chuyển thành cột của bảng.

 Một đối tượng (thể hiện) thành một dòng.

b. Chuyển đổi mối liên kết

Chuyển đổi liên kết kết hợp

 Trường hợp 1: Trong chuyển đổi mối kết hợp một – một, chúng ta có thể lấy cột khóa chính trong một bảng chuyển qua bảng khác làm khóa ngoại.

 Trường hợp 2: Trong chuyển đổi một kết hợp dạng một - nhiều, chúng ta lấy cột khóa chính ứng với lớp phía một trong mối kết hợp đưa vào bảng ứng với lớp phía nhiều làm khóa ngoại. (adsbygoogle = window.adsbygoogle || []).push({});

 Trường hợp 3 : Trong chuyển đổi mối kết hợp nhiều – nhiều, chúng ta tạo ra một bảng cho mối kết hợp đó bằng cách lấy các khóa chính của các bảng đưa vào bảng mới này như là khóa ngoại.

Chuyển đổi liên kết kế thừa

Trong lược đồ quan hệ không có khái niệm kế thừa mà chúng ta thường dùng liên kết khóa chính – khóa ngoại để diễn đạt điều này. Ví dụ, ta có lớp CánBộ có các thuộc tính (canboid, hoten, ngaysinh) và hai lớp GiảngViên có thuộc (canboid, thuockhoa), CánBộĐàoTạo có thuộc tính (canboid) kế thừa từ lớp CánBộ, với kiểu liên kết này ta có thể chuyển đổi sau:

 Trường hợp 1: Chỉ sử dụng một bảng lưu trữ tất cả các loại cán bộ. Do đó, các thuộc tính của bảng được hình thành từ các thuộc tính của lớp CánBộ, GiảngViên, CánBộĐàoTạo. Ngoài ra chúng ta cũng đưa vào thêm một thuộc tính (loaicanbo) để phân biệt cán bộ thuộc loại nào trong cơ sở dữ liệu.

 Trường hợp 2: Sử dụng ba bảng tương ứng cho ba lớp. Tuy nhiên, nhằm mô tả sự kế thừa trong các bảng GiảngViên và CánBộĐàoTạo chúng ta thêm vào tất cả các thuộc tính của bảng CánBộ cho mỗi bảng. Các thể hiện tương ứng của nhóm các đối tượng giảng viên hay các cán bộ đào tạo sẽ được lưu trong bảng tương ứng.

 Trường hợp 3: Chỉ dùng hai bảng GiảngViên và CánBộĐàoTạo. Tuy nhiên, tất cả các thuộc tính của lớp CánBộ sẽ được đưa vào hai bảng này để thể hiện sự thừa kế. Nếu muốn truy xuất thông tin về lớp CánBộ, ta có thể tạo một bảng hợp của hai bảng.

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

Phân tích thiết kế hệ thống

iii. Triển khai hệ thống OCRS

Hệ thống OCRS là một ứng dụng Web chạy trên môi trường Internet và đặc thù của hệ thống này được thiết kế cho phép các đối tượng khác nhau có thể sử dụng các chức năng khác nhau với những cấp độ bảo mật khác nhau. Chính vì những lý do đó vấn đề bảo mật cho hệ thống được nhóm phát triển rất quan tâm ngay trong giai đoạn phân tích và thiết kế kiến trúc hệ thống.

Hiện nay, trong môi trường công nghệ thông tin của Việt Nam các ngôn ngữ lập trình Web được sử dụng rất đa dạng như PHP, JSP, ASP,… các ngôn ngữ được nêu ở trên là những ngôn ngữ được sử dụng phổ biến nhất trong các ứng dụng Web hiện nay. Mỗi ngôn ngữ đều có những mặt mạnh và mặt yếu riêng, tuy nhiên chúng em quyết định chọn ngôn ngữ ASP.Net

2.0 của Microsoft vì những tính năng linh hoạt trong việc xử lý dữ liệu thông qua mô hình

ADO.Net cũng như khả năng bảo mật cho ứng dụng khá cao dựa trên nền .Net Framework

2.0. Và sơ đồ sau sẽ minh họa cho điều này.

Hình IV.45: Sơ đồ triển khai của hệ thống OCRS

iv. Giải thuật và độ phức tạp giải thuật

Như hiện tại trường ĐHBK đang áp dụng, nhà trường phát sổ tay sinh viên cho mỗi sinh viên vào đầu mỗi học kỳ, vẫn cho phép sinh viên chọn lớp học phần muốn đăng ký, nhưng trên hết vẫn là khuyến cáo sinh viên nên học theo đúng chương trình đào tạo cho mỗi ngành ở mỗi học kỳ. Sau khi đăng ký, sinh viên phải nộp lại kết quả đăng ký của mình cho phòng đào tạo, và các cán bộ đào tạo phải kiểm tra thật chính xác trên cơ sở kết quả học tập của sinh viên từ khi vô trường đến thời điểm xét, cũng như ba điều kiện của từng học phần, và nhiều những điều kiện khác.

Vì vậy, với những quy định của cơ chế đào tạo tín chỉ, một vấn đề vô cùng quan trọng và cũng không kém phần khó khăn chính là việc quyết định cho phép một sinh viên được học một học phần nào đó hay không tại thời điểm xét?

Để kiểm tra quy định về việc cho phép mỗi sinh viên ở mỗi học kỳ được phép học tối đa – tốii thiểu bao nhiêu tín chỉ tổng cộng, chúng ta chỉ cần dựa vào những học phần mà sinh viên đã đăng ký cho học kỳ đó và tính tổng số tín chỉ của chúng là xong. Còn để kiểm tra số lượng sinh viên tối đa theo quy định cho mỗi lớp học phần ta chỉ việc sử dụng các biến đếm với giá trị khởi gán là 0 cho mỗi lớp học phần tương ứng, rồi tăng nó lên một đơn vị mỗi khi có thêm một sinh viên đăng ký vào lớp học phần đó, đồng thời so khớp với số lượng sinh viên tối đa được ấn định ngay khi lớp học phần đó được mở, và kết quả là cho phép sinh viên theo học lớp học phần đó nếu biến đếm tương ứng vẫn chưa lớn hơn số lượng sinh viên tối đa như quy định đó.

Tuy nhiên, để kiểm tra các điều kiện học trước, tiên quyết và song hành của mỗi học phần, chúng ta phải nắm được các danh sách A1, A2 cho biết tất cả những học phần mà một sinh

Phân tích thiết kế hệ thống

viên đã học, những học phần nào sinh viên đã học và có điểm thi kết thúc học phần lớn hơn hoặc bằng năm. Đồng thời chúng ta cũng phải nắm được lần lượt các danh sách A3, A4, A5 các học phần thỏa mãn điều kiện học trước, tiên quyết và song hành của học phần đó, để rồi từ đó tìm kiếm xem tất cả những học phần này có nằm trong tập các tập A1/A2 hay không? Điều đó cho thấy đây là công việc khá khó khăn và phức tạp, vì vậy việc đưa ra giải thuật và đánh giá độ phức tạp của giải thuật cũng rất quan trọng trong đồ án này.

Khi đã xây dựng được giải thuật và chương trình tương ứng, yêu cầu về tính đơn giản của giải thuật là rất cần thiết, đặc biệt là với ứng dụng xây dựng hệ thống đăng ký tín chỉ, với một khối lượng dữ liệu đưa vào khá lớn thì vấn đề thời gian phải được xem xét. Vì vậy, yêu cầu đặt ra là tốc độ, hơn nữa khối lượng dữ liệu quá lớn mà dung lượng bộ nhớ lại có giới hạn nên cũng không thể bỏ qua yêu cầu về tiết kiệm bộ nhớ được.

Lưu ý rằng, tất cả các giải thuật dưới đây đều tính cho thời điểm xét và được thực hiện ngay trong hệ quản trị cơ sở dữ liệu SQL trước khi trả dữ liệu về cho đối tượng gọi. Trước hết, ta xét giải thuật kiểm tra điều kiện học trước của học phần X ứng với sinh viên S như sau: 1) Yêu cầu : kiểm tra xem một sinh viên S có được phép học học phần X hay không?

2) Phác thảo giải thuật :

• Lấy tập những học phần có Điều_Kiện_Học_Phần = “Học trước” ở bảng dữ liệu điều kiện học phần trong cơ sở dữ liệu của học phần X, và đưa vào tập hợp T1. • Duyệt từng phần tử ai của tập hợp T1 trên:

 Lấy tập những học phần sinh viên S đã học, và đưa vào tập hợp T2.

 Kiểm tra ai có thuộc T2 hay không  nếu ai không thuộc T2 thì điều kiện học trước không được đảm bảo và dừng việc kiểm tra lại, kết luận sinh viên S không được học học phần X; còn nếu đã duyệt hết các phần tử của T1 mà vẫn không rơi vào trường hợp trên thì cũng dừng việc kiểm tra và kết luận sinh viên S được phép học học phần X.

3) Mô phỏng hàm kiểm tra bằng giả ngữ : (adsbygoogle = window.adsbygoogle || []).push({});

Function HỌC_TRƯỚC(Học_Phần X, Sinh_Viên S):Boolean;

Begin

T1,T2 : Set; T1 := ∅, T2 := ∅;

T2 := select HọcPhần from BảngKếtQuảThi where HọcPhần=X & SinhViên=S; T1 := select HọcPhần from BảngĐiềuKiệnHọcPhần where HọcPhần=X & Điều_Kiện_Học_Phần=“Học trước”;

Với mỗi học phần ai của T1 chưa được kiểm tra thì làm nếu ai∉ T2 thì

{Có một học phần sinh viên chưa hoàn thành trước đó} HỌCTRƯỚC := false;

{Đảm bảo điều kiện học trước, và cho phép sinh viên S theo học} HỌCTRƯỚC := true;

End

4) Đánh giá độ phức tạp : với những quy tắc xác định độ phức tạp, ta thấy trong đoạn lệnh

giả ngữ trên các phép gán có thời gian thực hiện là hằng số nên độ phức tạp thời gian là O(1). Tiếp đến là câu lệnh lặp bên trong có câu lệnh nếu…thì và phép gán nên có độ phức tạp bậc một, và gọi là O(n). Tuy nhiên, trong trường hợp này, thời gian thực hiện không

Phân tích thiết kế hệ thống

chỉ phụ thuộc vào kích thước dữ liệu mà còn phụ thuộc vào cả tình trạng dữ liệu nữa. Vì vậy, ta cần phải xét đến cả độ phức tạp thời gian trung bình. Có thể thấy, trong trường hợp thuận lợi nhất, tức là ngay khi xét phần tử đầu tiên của tập T1 thì điều kiện kiểm tra được thỏa mãn và khi đó Ttốt = O(1); ngược lại với trường hợp xấu nhất, tức là phải duyệt tất cả các phần tử của tập T1 thì khi đó Txấu = O(n). Vậy độ phức tạp thời gian của giải thuật trường hợp xấu nhất vẫn là O(n).

Như đã phân tích, việc kiểm tra điều kiện tiên quyết, song hành cũng giống như điều kiện học trước, chỉ khác ở chỗ với điều kiện tiên quyết thì tập T2 phải thỏa điều kiện điểm thi học phần không dưới năm và với điều kiện song hành thì lệnh điều kiện là xét ai ∈ T2 thì dừng đồng thời kết luận cho phép sinh viên theo học học phần X này. Do đó, việc đánh giá độ phức tạp cũng hoàn toàn tương tự và cho kết quả cũng giống nhau.

PHẦN V

XÂY DỰNG VÀ TRIỂN KHAI HỆ THỐNG

Dựa vào những kết quả đạt được trong quá trình phân tích thiết kế nêu trên, chúng

Một phần của tài liệu ỨNG DỤNG UML DESIGN PATTERN XÂY DỰNG HỆ THỐNG ĐĂNG KÝ TÍN CHỈ TRỰC TUYẾN (ONLINE COURSE REGISTER SYSTEM) (Trang 92)