2.2 Các mẫu thiết kế đã áp dụng 2đ: mỗi mẫu 0.5đ + Singleton: PManager và GManager 0.25đ mỗi lớp + Factory Method biến thể 2: - Creator: khơng cĩ - ConcreteCreator: khơng cĩ - Product: G
Trang 1ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM ĐÁP ÁN CUỐI KỲ HK 2 NĂM HỌC 17-18
KHOA: Cơng nghệ Thơng tin MƠN HỌC: THIẾT KẾ PHẦN MỀM HĐT
BỘ MƠN: Cơng nghệ phần mềm MÃ MƠN HỌC: OOSD330879
- Đề số 01 Đáp án cĩ 04 trang
-Câu 01: (3đ)
Ghi chú:
- CĨ chức năng “Tải ứng dụng” -0.5đ
- CĨ tác nhân “Hệ thống” -1.0đ
- KHƠNG CĨ tác nhân “Người dùng hảo hạng” -1.5đ (khơng tách ra thành 2 loại người dùng mà gộp làm 1 rồi dùng các quan hệ <<include>> hoặc <<extend>>)
- KHƠNG CĨ tác nhân “Khách” -0.5đ
- KHƠNG CĨ mối quan hệ kế thừa giữa “Người dùng hảo hạng” và “Người dùng thường” -1.0đ
- Thiếu hoặc sai usecase và mối quan hệ giữa các usecase trừ điểm tùy mức độ
Đề 02-Trang 1
Trang 3Câu 2: (7đ)
2.1 Lập lược đồ lớp cho chương trình (2đ): (cĩ thể bỏ bớt những thuộc tính khơng phải kiểu lớp và các property)
+ Phương thức và thuộc tính tĩnh khơng gạch dưới, -0.25đ
+ Thiếu 2 mối quan hệ Aggregation, -0.5đ; thiếu cả 4 -1.0đ
+ Thiếu hoặc sai quan hệ kế thừa, -0.25đ
+ Thiếu lớp trừ điểm tùy mức độ
2.2 Các mẫu thiết kế đã áp dụng (2đ): mỗi mẫu 0.5đ
+ Singleton: PManager và GManager (0.25đ mỗi lớp)
+ Factory Method (biến thể 2):
- Creator: khơng cĩ
- ConcreteCreator: khơng cĩ
- Product: Game
- ConcreteProduct: MemoryGame, SpeedGame, AttentionGame, SolvingGame,
Flexibility Game
- FactoryMethod(): getGame()
+ Template Method:
- AbstractClass: Player
- ConcreteClass: NormalPlayer, PremiumPlayer
- TemplateMethod(): playCustomeGame()
+ Strategy (hoặc State cũng chấp nhận được):
Đề 02-Trang 3
Trang 4- Context: GameExecuter
- Strategy: Game
- ConcreteStrategy: MemoryGame, SpeedGame, AttentionGame, SolvingGame, Flexibility Game
2.3 Kết quả in ra màn hình (1đ):
You are playing memory game
Your LPI has been updated!
You cannot play this game!
You are playing memory game
Your LPI has been updated!
You are playing attention game
Your LPI has been updated!
You are playing problem solving game
Your LPI has been updated!
2.4
• Câu a (1đ): Lớp LanguageGame đã cĩ sẵn nên ta khơng thể chỉnh sửa mã nguồn của lớp này Muốn đưa game này vào hệ thống cần sử dụng mẫu Adapter, trong đĩ
LanguageGame đĩng vai trị là Adaptee, cịn Game là Target
Để hiện thực hĩa, cần xây dựng thêm lớp LanguageGameAdapter kế thừa từ lớp Game và giữ 1 tham chiếu tới đối tượng thuộc lớp LanguageGame (sử dụng Object Adapter) Khi cài đặt (override) lại phương thức execute(), ta gọi thực hiện phương thức run() của đối tượng LanguageGame
• Câu b (1đ): Để bổ sung thêm phần hướng dẫn cách chơi và tổng hợp nhận xét, ta cĩ thể sử dụng mẫu Decorator để gắn thêm các phương thức này vào cho mỗi Game
Để hiện thực hĩa, ta tạo 1 lớp GameDecorator kế thừa từ lớp Game, đồng thời giữ tham chiếu tới 1 đối tượng thuộc lớp này Khi cài đặt lại phương thức execute() thì mặc định ta thực hiện gọi phương thức execute() của đối tượng đĩ
Để thêm phần hướng dẫn và nhận xét, ta tạo 2 lớp ConcreteDecorator là HelpDecorator và SummaryDecorator kế thừa từ GameDecorator, cài đặt thêm các phương thức hướng dẫn hay nhận xét cần thiết và thực hiện lời gọi phương thức này khi cài đặt lại execute() trước/sau khi gọi execute() của lớp cha
Lưu ý: đề xuất dùng mẫu Template Method bằng cách điều chỉnh lại phương thức
playGame() trong lớp Player là khơng hợp lý, bởi các phương thức hướng dẫn cách chơi và nhận xét sau khi chơi khơng thể thêm vào lớp Player này mà nĩ phải gắn với các Game
Lưu ý: Đáp án chỉ mang tính chất tham khảo.
Ngày tháng năm 2018
Duyệt của Bộ mơn
Đề 02-Trang 4