PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 61 Các bước thiết kế Class w Tạo các Design Class ban đầu w Xác đònh các Persistent Class w Đònh nghóa các Operation w Đònh nghóa Class Visibility w Đònh nghóa các Method w Đònh nghóa các trạng thái w Đònh nghóa cácthuộc tính w Đònh nghóa cácphụthuộc w Đònh nghóa các mỗi kết hợp w Đònh nghóa các quan hệ tổng quát hóa w Giải quyết đụng độ giữa các Use-Case w Xử lý các yêu cầu phi chức năng nói chung w Checkpoints PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 62 w Dependency là gì? § Là một loại quan hệ giữa hai object w Mục đích § Xác đònh những nơi KHÔNG cần đến các mối quan hệ cấu trúc w Những gì cần xem xét : § Những gì buộc supplier trở nên nhìn thấy được bởi client Client Supplier Đònh nghóa Dependency PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 63 w Association là quan hệ câu trúc w Dependency là quan hệ phi cấu trúc w Để “nói chuyện” được, object phải khả kiến § Tham chiếu đến biến cục bộ § Tham chiếu đến tham số § Tham chiếu toàn cục § Tham chiếu đến trường dữ liệu (Field) Association Client Supplier1 Supplier2 Dependency So sánh Dependency và Association PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 64 ClassA op1 () ClassB Local Variable Visibility w Operation op1() chứa một biến cục bộ có kiểu ClassB PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 65 ClassA op1 (param1: ClassB) ClassB Parameter Visibility w Thể hiện của ClassB được truyền đến cho thể hiện của ClassA PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 66 ClassUtility utilityOp () ClassA op1 () Global Visibility w Thể hiện của ClassUtility khả kiến với mọi dối tượng vì nó là toàn cục (global) PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 67 w Bám vào các quan hệ trong thế giới thực w Bám váo các quan hệ yếu nhất (dependency) w Quan hệ là “thường trực”? Dùng association (field visibility) w Quan hệ là “nhất thời”? Dùng dependency § Nhiều object chia sẻ chung 1 instance • Truyền instance như tham số (parameter visibility) • Đặt instance là global (global visibility) § Các object không chia sẻ cùng 1 instance (local visibility) w Cần bao nhiêu thời gian để create/destroy? § Chi phí ? Dùng field, parameter, hoặc global visibility Chọn lựa nào đúng? CÒN TÙY Xác đònh Dependency PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 68 Ví dụ: Trước khi đònh nghóa Dependency ICourseCatalogSystem + getCourseOfferings(forSemester : Semester) : CourseOfferingList (from External System Interfaces) <<Interface>> Student - name - address - StudentID : int + addSchedule(theSchedule : Schedule, forSemester : Semester) + getSchedule(forSemester : Semester) : Schedule + hasPrerequisites(forCourseOffering : CourseOffering) : boolean # passed(theCourseOffering : CourseOffering) : boolean (from University Artifacts) <<entity>> RegistrationController + // submit schedule() + // save schedule() + // create schedule with offerings() + // getCourseOfferings(forSemester) : CourseOfferingList (from Registration) <<control>> 0 1 0 1 registrant 0 * 1 courseCatalog Schedule - semester + submit() + // save() # any conflicts?() + // create with offerings() (from University Artifacts) <<entity>> 0 * 1 0 1 0 1 currentSchedule CourseOffering - number : String = "100" - startTime : Time - endTime : Time - days : Enum + addStudent(studentSchedule : Schedule) + removeStudent(studentSchedule : Schedule) + new() + setData() (from University Artifacts) <<entity>> 0 * 0 4 primaryCourses 0 * 0 2 alternateCourses PT & TK Hướng đối tượng – Thiết kế kiến trúc Dương Anh Đức 69 Ví dụ: Sau khi đònh nghóa Dependency Global visibility Parameter visibility ICourseCatalogSystem + getCourseOfferings(forSemester : Semester) : CourseOfferingList (from External System Interfaces) <<Interface>> Student - name - address - StudentID : int + addSchedule(theSchedule : Schedule, forSemester : Semester) + getSchedule(forSemester : Semester) : Schedule + hasPrerequisites(forCourseOffering : CourseOffering) : boolean # passed(theCourseOffering : CourseOffering) : boolean (from University Artifacts) <<entity>> RegistrationController + // submit schedule() + // save schedule() + // create schedule with offerings() + // getCourseOfferings(forSemester) : CourseOfferingList (from Registration) <<control>> 0 1 0 1 registrant Schedule - semester + submit() + // save() # any conflicts?() + // create with offerings() (from University Artifacts) <<entity>> 0 * 1 0 1 0 1 currentSchedule CourseOffering - number : String = "100" - startTime : Time - endTime : Time - days : Enum + addStudent(studentSchedule : Schedule) + removeStudent(studentSchedule : Schedule) + new() + setData() (from University Artifacts) <<entity>> 0 * 0 4 primaryCourses 0 * 0 2 alternateCourses Field visibility Field visibility . Đònh nghóa các Method w Đònh nghóa các trạng thái w Đònh nghóa các thuộc tính w Đònh nghóa các phụ thuộc w Đònh nghóa các mỗi kết hợp w Đònh nghóa các quan. kiến trúc Dương Anh Đức 61 Các bước thiết kế Class w Tạo các Design Class ban đầu w Xác đònh các Persistent Class w Đònh nghóa các Operation w Đònh nghóa