5 Hiện thực chương trình
4.3 Cấu trúc của một Bài toá n Problem
• Module Problem:
Ê Chứa dữ liệu của bài tốn: mơ hình (Model), thơng tin hiển thị mơ hình (Render), quản lý các bước (StepManager),...
Ê Quản lý tất cả các tác vụ liên quan đến bài tốn
• Module Model: Chứa và quản lý danh sách các hình vẽ của bài tốn
• Module Render:
Ê Chứa các thông số hiển thị riêng của từng mơ hình bài tốn. Đóng vai trị như một Camera lưu vị trí quan sát, góc nhìn, tỉ lệ phóng to thu nhỏ
Ê Chứa các hàm thực hiện việc hiển thị mơ hình ra View, được hiện thực sử dụng các hàm cơ bản của OpenGL
• Module StepManager: Quản lý danh sách các bước (Step) và các tác vụ
4.2 Các đối tượng chính của chương trình4.2 Các đối tượng chính của chương trình 4.2 Các đối tượng chính của chương trình
4.2.1 Các class ứng với mơ hình MDI của MFC
• class CGeosApp : public CWinAppEx (MFC) • class CGeosDoc : public CDocument (MFC)
Chứa biến lưu trữ Bài tốn (class Problem) • class CGeosView : public CView (MFC)
• class CMainFrame : public CMDIFrameWndEx (MFC) • class CChildFrame : public CMDIChildWndEx (MFC)
4.2.2 Các class và namespace của mơ hình bài tốn - Prob- lem
• class Problem: Ứng với Module Problem của kiến trúc Bài tốn
World m_TypeWorld (Kiểu khơng gian (2D/3D)) SModel m_Model
SRender m_Render StepManager m_StepManager
string m_FilePath (Đường dẫn đến tệp tin của bài tốn) string m_Descriptionn (Mơ tả bài tốn)
Bảng 4.1: Class Problem
• class SModel: Ứng với Module Model của kiến trúc Bài tốn
Problem m_Parent (Lưu con trỏ tới bài tốn chứa nó) std::vector¡SShape*> m_ListShape (Danh sách các hình vẽ)
4.2 Các đối tượng chính của chương trình
• class SFile:
Ê Chứa các hàm hiện thực việc đọc và lưu file của bài toán
Ê Hỗ trợ chuyển đổi mơ hình, các đối tượng sang dữ liệu văn bản
• class StepManager: Ứng với Module StepManager của kiến trúc Bài tốn
• class Step: Các bước của bài tốn, lưu trữ danh sách các mơ hình được vẽ
và mơ tả của bước đó
• class SShape: Là lớp cơ sở của các hình vẽ, được các class hình vẽ ở
namespace World2d và World3d kế thừa Các thuộc tính cơ bản:
World m_TypeWorld (Kiểu không gian (2D/3D)) State m_State (Trạng thái: Ẩn/Hiện)
Color m_Color (Màu sắc) vector¡string> m_Name (Danh sách tên)
Dependency m_Dependency (Sự phụ thuộc của đối tượng vào các đối tượng khác)
Bảng 4.3: Class SShape
• namespace World2d: Chứa các class liên quan đến hình vẽ và các thao tác
liên quan trong không gian 2D
Ê class Model : public class SModel
Ê class Render : public class SRender
Ê class File: Hỗ trợ đọc lưu file 2D Ê class Shape : public class SShape
Ê class Point : public class World2d::Shape - Điểm Các loại điểm
∗ Điểm tự do
∗ Điểm ngẫu nhiên nằm trên đoạn thẳng
∗ Điểm nằm trên đoạn thẳng với một tỉ lệ
4.2 Các đối tượng chính của chương trình
∗ Trực tâm
∗ Điểm là hình chiếu của một điểm lên đường thẳng ∗ Điểm là giao điểm giữa 2 đường thẳng
Ê class Vector : public class World2d::Point - Vectơ
Ê class Line: public class World2d::Shape - Đường thẳng và đoạn thẳng Các loại đường thẳng
∗ Đường thẳng đi qua 2 điểm ∗ Đoạn thẳng
∗ Đường thẳng đi qua 1 điểm và có vectơ chỉ phương
∗ Đường thẳng đi qua 1 điểm và song song với đường thẳng khác
Ê class Cirlcle : public class World2d::Shape - Đường tròn
Ê class Polygon : public class World2d::Shape - Đa giác
Ẹ namespace World3d: Chứa các class liên quan đến hình vẽ và các thao tác
liên quan trong khơng gian 3D
Ê class Model : public class SModel
Ê class Render : public class SRender
Ê class File: Hỗ trợ đọc lưu file 3D Ê class Shape : public class SShape
Ê class Point : public class World3d::Shape - Điểm Các loại điểm
∗ Điểm tự do
∗ Điểm ngẫu nhiên nằm trên đoạn thẳng, đường thẳng ∗ Điểm nằm trên đoạn thẳng với một tỉ lệ
∗ Điểm ngẫu nhiên nằm trên đa giác ∗ Trực tâm của tam giác
∗ Trọng tâm của đa giác/đa diện
∗ Điểm là hình chiếu của một điểm lên đường thẳng, mặt phẳng ∗ Điểm là giao điểm giữa 2 đường thẳng
4.3 Yêu cầu hệ thốngÊ class Line: public class World2d::Shape - Đường thẳng và đoạn thẳng Ê class Line: public class World2d::Shape - Đường thẳng và đoạn thẳng
Các loại đường thẳng
∗ Đường thẳng đi qua 2 điểm ∗ Đoạn thẳng
∗ Đường thẳng đi qua 1 điểm và có vectơ chỉ phương
∗ Đường thẳng đi qua 1 điểm và song song với đường thẳng khác ∗ Đường thẳng là giao giữa 2 mặt phẳng
Ê class Polygon : public class World3d::Shape Đa giác bao gồm 3 hoặc nhiều điểm hơn tạo thành
Ê class Plane: public class World3d::Shape - Mặt phẳng Các loại Mặt phẳng
∗ Mặt phẳng đi qua 1 điểm và có vectơ pháp tuyến ∗ Mặt phẳng đi qua 2 đường thẳng đồng phẳng ∗ Mặt phẳng đi qua 1 điểm và một đường thẳng ∗ Mặt phẳng đi qua 1 đa giác
Ê class Mesh : public class World3d::Shape - Đa diện Các loại đa diện
∗ Tứ diện ∗ Hình chóp ∗ Hình hộp ∗ Hình lăng trụ ∗ Hình chóp cụt
Ẹ class TDependency: Biểu thị sự phụ thuộc của 1 đối tượng vào các đối
tượng khác
4.3 Yêu cầu hệ thống
4.3.1 Yêu cầu phi chức năng
Ẹ Ứng dụng có thể chạy tốt trên nền tảng hệ điều hành Windows Ẹ Thời gian xử lý các tương tác nhanh
4.3 Yêu cầu hệ thống
Ẹ Thiết kế giao diện thân thiện với người dùng Ẹ Sử dụng ngôn ngữ là Tiếng Việt
4.3.2 Yêu cầu chức năng
Actor: chỉ có 1 actor duy nhất là người dùng (user)
Usecase: Hình 4.1 là biểu đồ use case của hệ thống thể hiện các chức năng của ứng dụng bao gồm:
Các usecase ứng với màn hình chính:
Ẹ Thêm đối tượng hình vẽ
Ê Chọn hình vẽ có sẵn
Ê Nhập thơng số Ẹ Tạo trang vẽ mới 2D/3D Ẹ Mở tệp tin bài tốn đã có sẵn Ẹ Lưu bài tốn
Ẹ Lưu bài tốn thành tệp Ẹ Đặt lại bài toán về mặc định
Ẹ Hiển thị thơng tin và mơ hình của bài tốn Ẹ Phóng to/ Thu nhỏ mơ hình hiển thị Ẹ Dịch chuyển mơ hình hiển thị
Ẹ Thay đổi góc nhìn của mơ hình hiển thị Ẹ Chuyển bước kế tiếp/ Lùi bước
Ẹ Hiển thị thuộc tính Ẹ Thay đổi thuộc tính Ẹ Xóa hình vẽ
4.3 u cầu hệ thống
4.3 Yêu cầu hệ thống Thêm đối tượng hình vẽ bằng cách chọn hình vẽ có sẵn
Use Case ID 01
Use Case Name Chọn hình vẽ có sẵn
Actor Người dùng
Description Thêm đối tượng hình vẽ có sẵn vào mơ hình đang được hiển thị trên cửa sổ khung nhìn
Pre-conditions Người dùng đang ở giao diện chính. Người dùng đang hoạt động trên một cửa sổ khung nhìn
Postconditions Tạo ra một hình vẽ theo mẫu có sẵn được lưu vào mơ hình và được cập nhật trên cửa sổ khung nhìn đang hoạt động.
Normal Flow
1. Ở giao diện chính, người dùng chọn “2D” hoặc “3D” trên thanh menu tùy theo loại mơ hình đang được hiển thị 2. Chọn biểu tượng hình vẽ tương ứng: Tứ diện, hình chóp,
hình hộp, hình lăng trụ, hình chóp cụt Alternative Flow Khơng có
Exception Flow Khơng có
4.3 Yêu cầu hệ thống Thêm đối tượng hình vẽ bằng cách nhập thơng số
Use Case ID 02
Use Case Name Nhập thông số
Actor Người dùng
Description Thêm đối tượng hình vẽ được tạo vào mơ hình đang được hiển thị trên cửa sổ khung nhìn
Pre-conditions Người dùng đang ở giao diện chính. Người dùng đang hoạt động trên một cửa sổ khung nhìn
Postconditions
Tạo ra một hình vẽ dựa trên thơng số đã nhập, lưu vào mơ hình và được cập nhật trên cửa sổ khung nhìn đang hoạt động nếu thành cơng.
Normal Flow
1. Ở giao diện chính, người dùng chọn “2D” hoặc “3D” trên thanh menu
2. Chọn loại hình cần vẽ được liệt kê ở bên dưới: Điểm, Đường thẳng, Mặt phẳng, Đa giác, Đa diện
3. Người dùng nhập thơng số của hình vẽ và nhấn “Xong” để hoàn tất.
Alternative Flow
Alternative1: bước 3
3a. Người dùng chọn “Hủy” để thoát ra khỏi hộp thoại và quay trở về màn hình chính.
Exception Flow
Exception1: bước 3
3a. Hình vẽ tạo khơng thành công. Hệ thống sẽ hiển thị hộp thoại thông báo.
3b. Người dùng chọn “Xong” và quay về bước 1. Bảng 4.5: Chức năng thêm đối tượng hình vẽ bằng cách nhập thơng số
4.3 Yêu cầu hệ thống Tạo trang vẽ mới 2D/3D
Use Case ID 03
Use Case Name Tạo trang vẽ mới 2D/3D
Actor Người dùng
Description Chọn trang vẽ mới trong không gian 2D hoặc 3D Pre-conditions Người dùng đang ở màn hình chính
Postconditions Việc chọn sẽ tạo ra một cửa sổ khung nhìn mới ứng với không gian 2D hoặc 3D.
Normal Flow 1. Ở màn hình chính, người dùng chọn “Tệp” -> “Tạo mới2D”/ “Tạo mới 3D” Alternative Flow Khơng có
Exception Flow Khơng có
4.3 u cầu hệ thống Mở tệp tin bài tốn đã có sẵn
Use Case ID 04
Use Case Name Mở tệp tin
Actor Người dùng
Description Mở mơ hình đã được lưu dưới dạng tệp tin Pre-conditions Người dùng đang ở giao diện chính
Postconditions
Hệ thống tiến hành đọc dữ liệu từ tệp, tạo ra một cửa sổ khung nhìn mới với mơ hình đã được lưu trong tệp tin được chọn
Normal Flow
1. Ở giao diện chính, người dùng chọn “Tệp” -> “Mở tệp tin”
2. Một hộp thoại hiện ra, người dùng chọn đường dẫn chứa tệp tin cần mở, rồi chọn “Xong”.
Alternative Flow Khơng có
Exception Flow
Exception1: bước 3
3a. Mơ hình lưu trong tệp được chọn không đúng định dạng, hệ thống đọc dữ liệu khơng thành cơng
3b. Khơng có cửa sổ mới nào được tạo ra, người dùng trở về màn hình chính
4.3 Yêu cầu hệ thống Lưu bài toán
Use Case ID 05
Use Case Name Lưu
Actor Người dùng
Description Lưu mơ hình bài tốn đang hiển thị trong cửa sổ khung nhìn hiện hành dưới dạng tập tin.
Pre-conditions Có một cửa sổ khung nhìn đang hoạt động Postconditions
Hệ thống tiến hành ghi dữ liệu vào tệp với đường dẫn ứng với mơ hình ở cửa sổ khung nhìn hiện tại hoặc tạo ra một tập tin mới
Normal Flow
1. Ở giao diện chính, người dùng chọn “Tệp” Ê> “Lưu” 2. Nếu cửa sổ khung nhìn hiện tại có đường dẫn, khơng
phải được tạo mới thì hệ thống sẽ cập nhật ghi đè vào đường dẫn đó
Alternative Flow Khơng có
Exception Flow
Exception1: bước 2
3a. Cửa sổ khung nhìn được tạo mới.
3b. Hiển thị hộp thoại chọn đường dẫn lưu tệp
3c. Người dùng chọn đường dẫn có sẵn để ghi đè, hoặc nhập tên để tạo tệp mới
4.3 Yêu cầu hệ thống Lưu bài toán thành tệp
Use Case ID 06
Use Case Name Lưu thành tệp
Actor Người dùng
Description Lưu mơ hình bài tốn đang hiển thị trong cửa sổ khung nhìn hiện hành dưới dạng tập tin mới.
Pre-conditions Có một cửa sổ khung nhìn đang hoạt động
Postconditions Hệ thống tiến hành ghi dữ liệu vào tệp với đường dẫn được nhập.
Normal Flow
1. Ở giao diện chính, người dùng chọn “Tệp” Ê> “Lưu với tên”
2. Một hộp thoại hện ra, người dùng nhập đường dẫn mới và chọn “Lưu”
3. Hệ thống tiến hành tao tệp mới theo đường dẫn và lưu mơ hình vào têp.
Alternative Flow Khơng có
Exception Flow
Exception1: bước 2
3a. Nếu đường dẫn đã tồn tại, hệ thống sẽ hiển thị hộp thoại cảnh báo ghi đè
3b. Người dùng chọn “Có” để ghi đè và trở về màn hình chính, hoặc “Khơng” để quay trở lại bước 2
4.3 Yêu cầu hệ thống Đặt lại bài toán về mặc định
Use Case ID 07
Use Case Name Đặt lại bài toán về mặc định
Actor Người dùng
Description Đặt lại tệp tin của bài toán được chọn về mặc định. Pre-conditions Người dùng đang ở giao diện chính
Postconditions Hệ thống tiến hành ghi dữ liệu vào tệp với đường dẫn được nhập.
Normal Flow 1. Người dùng nhấp chuột phải vào bài toán trên thanhMục lục và chọn “Đặt lại về mặc định” Alternative Flow Khơng có
Exception Flow Khơng có
4.3 Yêu cầu hệ thống Hiển thị thơng tin và mơ hình của bài tốn
Use Case ID 08
Use Case Name Hiển thị bài toán
Actor Người dùng
Description Hiển thị mơ hình và thơng tin, danh sách hình vẽ,.. của bài tốn được chọn
Pre-conditions Người dùng đang ở giao diện chính Postconditions
Hệ thống tạo cửa sổ khung nhìn mới và hiển thị mơ hình của bài tốn được chọn, liệt kê danh sách hình vẽ của bài tốn trên cửa sổ Mơ hình, hiển thị
Normal Flow
1. Người dùng nhấp đúp chuột trái vào bài toán trên thanh Mục lục
2. Hệ thống tạo cửa sổ khung nhìn mới và hiển thị mơ hình của bài tốn được chọn
3. Cửa sổ mơ hình sẽ cập nhật và liệt kê danh sách tên hình vẽ ứng với bài tốn theo từng loại: Điểm, Đường thẳng, Đa giác,...
4. Cửa sổ Mơ tả bài tốn sẽ cập nhật hiển thị mơ tả/ u cầu của bài tốn
Alternative Flow Khơng có Exception Flow Khơng có
4.3 u cầu hệ thống Phóng to/ Thu nhỏ mơ hình hiển thị
Use Case ID 09
Use Case Name Phóng to/ Thu nhỏ
Actor Người dùng
Description Phóng to/ Thu nhỏ mơ hình hiển thị trên cửa sổ khung nhìn bằng chuột
Pre-conditions Người dùng đang ở hoạt động trên cửa sổ khung nhìn
Postconditions Mơ hình trên cửa sổ khung nhìn sẽ được phóng to/ thu nhỏ theo thao tác lăn chuột
Normal Flow 1. Người dùng lăn chuột trên cửa sổ khung nhìn Alternative Flow Khơng có
Exception Flow Khơng có
4.3 u cầu hệ thống Dịch chuyển mơ hình hiển thị
Use Case ID 10
Use Case Name Dịch chuyển
Actor Người dùng
Description Dịch chuyển mơ hình hiển thị trên cửa sổ khung nhìn bằng chuột
Pre-conditions Người dùng đang ở hoạt động trên cửa sổ khung nhìn
Postconditions Mơ hình trên cửa sổ khung nhìn sẽ được dịch chuyển sang vị trí tương ứng với thao tác của người dùng
Normal Flow
1. Người dùng nhấn giữ phím Alt đồng thời nhấn giữ và dichuyển chuột phải trên cửa sổ khung nhìn để dịch chuyển mơ hình sang vị trí tương ứng
Alternative Flow Khơng có Exception Flow Khơng có
4.3 Yêu cầu hệ thống Thay đổi góc nhìn của mơ hình hiển thị
Use Case ID 11
Use Case Name Dịch chuyển
Actor Người dùng
Description Thay đổi góc nhìn của mơ hình hiển thị trên cửa sổ khung nhìn bằng chuột
Pre-conditions Người dùng đang ở hoạt động trên cửa sổ khung nhìn
Postconditions Mơ hình trên cửa sổ khung nhìn sẽ được thay đổi góc nhìn sang góc nhìn tương ứng với thao tác của người dùng
Normal Flow
1. Người dùng nhấn giữ đồng thời di chuyển chuột phải trên cửa sổ khung nhìn để thay đổi góc nhìn mơ hình sang góc tương ứng
Alternative Flow Khơng có Exception Flow Khơng có
4.3 Yêu cầu hệ thống Chuyển bước kế tiếp/ Lùi bước
Use Case ID 12
Use Case Name Chuyển bước kế tiếp/ Lùi bước
Actor Người dùng
Description Chuyển bước kế tiếp/ Lùi bước
Pre-conditions Người dùng đang ở hoạt động trên cửa sổ khung nhìn
Postconditions Hiển thị mơ hình ứng với bước kế tiếp của bài tốn trên cửa sổ khung nhìn
Normal Flow
1. Người dùng nhấn chuột trái hoặc nhấn kết hợp phím Shift để chuyển bước kế tiếp hoặc lùi bước
2. Hệ thống sẽ cập nhật bước kế tiếp của bài tốn trên cửa sổ khung nhìn
3. Tab Mơ tả bước trên cửa sổ Mơ tả bài tốn sẽ cập nhật lại mơ tả và danh sách các hình được hiển thị của bước. Alternative Flow Khơng có
Exception Flow
Exception1: bước 2
3a. Nếu bài tốn khơng mơ tả bước hoặc khơng có bước kế tiếp thì sẽ giữ nguyên khung nhìn
Nếu bài tốn khơng mơ tả bước hoặc khơng có bước kế tiếp thì sẽ giữ nguyên khung nhìn
4.3 Yêu cầu hệ thống Hiển thị thuộc tính
Use Case ID 13
Use Case Name Hiển thị thuộc tính