thiết kế phần mềm hướng đối tượng
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCM
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
ĐÁP ÁN MÔN: TK PHẦN MỀM HĐT
Mã môn học: 1279100 Học kỳ: II Năm học: 2011-2012
-
Câu 1: (3 điểm)
Lập lược đồ Usecase cho hệ thống phần mềm
Trang 2Nguoi quan ly
Nguoi choi
Nguoi quan tri
Dang nhap
Dang ky
Khach
Mua gold bang tin nhan
Mua gold bang the cao
Dieu khien nhan vat
Di chuyen
Tro chuyen
Mua ban vat dung
Thuc hien nhiem vu
Tan cong quai vat Tan cong nguoi
choi khac
Hoc tuyet chieu
Lap doi choi
Tham gia doi choi
Tang vat dung
Thiet ke ban do
Tao cua hang
Quan ly nguoi dung
Roi doi choi
Su dung Item
Hien thi ban do
«extend»
«extend»
«extend»
«extend»
«extend»
«extend»
«extend»
«extend»
«extend»
«extend»
Trang 3Lưu ý:
+ Client và Server không phải là Actor: nếu xem xét 2 phần này là actor thì phải vẽ thành 2 module riêng biệt, và module này là actor của module kia Sai trừ 0.5đ
+ Không tách Khách và người chơi thành 2 tác nhân khác nhau (hoặc thiếu tác nhân Khách): trừ 0.5đ
+ Trừ điểm tùy theo mức độ nếu đặt tên tác nhân và usecase không đúng quy cách: Usecase bắt đầu bằng động từ, tác nhân phải là danh từ hoặc cụm danh từ
+ Vẽ sai ký hiệu các mối quan hệ <<include>>, <<extend>>: trừ 0.25đ
+ Thiếu các chức năng quan trọng: trừ điểm tùy mức độ
Câu 2: (7 điểm)
a) Lập lược đồ lớp cho chương trình:
Trang 4
Program
- Main(string[]) : void
PManager
- ins: PManager
# lstPlayer: Dictionary<string, Player>
+ getManager() : PManager
# PManager() + register(string, Player) : void
Item
# id: int
# name: String
«property»
+ Id() : int + Name() : String
Health Mana
Player
# items: Dictionary<Item, int> = new Dictionary<
+ attack(Player) : void + attack(Monster) : void
+ earnItem(Item, int) : void + useItem(Item, int) : int
«property»
# exp() : long
# gold() : long
# lvl() : int
Hum an
+ attack(Player) : void
+ attack(Monster) : void
Orge
+ attack(Player) : void + attack(Monster) : void
Undead
+ attack(Player) : void + attack(Monster) : void
SkilledPlayer
# player: Player
+ attack(Player) : void + attack(Monster) : void
+ performSkill() : void
AutoHeal
+ AutoHeal(Player) + performSkill() : void
SpeedBoost
+ performSkill() : void + SpeedBoost(Player)
M onster
+ attack(Player) : void + present() : Item
«property»
+ lvl() : int + spd() : int
Wolf
+ attack(Player) : void + present() : Item
Giant
+ attack(Player) : void + present() : Item
#player
Trang 5+ Thiếu mối quan hệ Aggregation, -0.5đ
b) Các mẫu thiết kế đã áp dụng: nêu đúng và đủ, 0.5đ/mẫu, chỉ nêu tên đúng được 0.25đ Nêu sai tên mẫu (dư) trừ điểm tùy mức độ
+ Factory Method:
+ Singleton: PManager
+ Decorator:
c)
đội đó Trong lớp Team có cài đặt các phương thức Add(), Remove() Trong lớp Player phải bổ sung thêm các giao diện Add(), Remove() và override lại (thực chất là phương thức rỗng) trong các lớp con của lớp Player
không thuộc đội nào và người chơi thuộc đội chơi Lớp TeamPlayer này có thể kế thừa từ lớp SkilledPlayer vì mẫu Decorator đã có sẵn trong chương trình ban đầu
d)
o AbstractClass: Quest
Trang 6o ConcreteClass: ConcreteQuest
o TemplateMethod(): performQuest()
Player p = new Human(); //hoặc sử dụng Player teo, ti cũng được
Quest q = new ConcreteQuest();
p.activeQuest = q;
p.doQuest();
- Hết - Ghi chú: Đáp án chỉ mang tính chất tham khảo Sinh viên nào có nhu cầu phúc khảo có thể liên hệ VP Khoa để làm đơn xin chấm phúc khảo, sau đó liên hệ với CBGD để được xem lại bài và chấm trực tiếp