SlideShare a Scribd company logo
1 of 131
Download to read offline
Công cụ và môi trường phát triển phần mềm




                         Thiết kế Class




Thiết kế Class
Dương Anh Đức                        1
Mục tiêu

      w Tìm hiểu mục đích của bước thiết kế Class và vị trí của công
        đoạn này trong qui trình
      w Xác định bổ sung các class và quan hệ của chúng cần để hỗ
        trợ cho việc cài đặt các cơ chế kiến trúc đã chọn
      w Xác định và phân tích việc chuyển đổi trạng thái các đối tường
        trong các class kiểm soát được trạng thái
      w Tinh chỉnh các quan hệ, operation, và thuộc tính




Thiết kế Class
Dương Anh Đức                         2
Vị trí của Thiết kế Class



                             Architectural
                               Analysis


                                               Architectural     Describe                         Review the      Architecture
                                                                                    Describe      Architecture
                 Architect                        Design       Concurrency         Distribution                    Reviewer




                                                                   Subsystem Design
                                   Use-Case
                                    Analysis
                                                                                                     Review the
                                                   Use-Case                                          Design           Design
                 Designer                           Design                                                           Reviewer


                                                                           Class
                                                                          Design




Thiết kế Class
Dương Anh Đức                                                  3
Tổng quan về Class




                             Design       Architecture Document
                            Guidelines

       Design Classes


                                                      Class
                                                      Design      Design Classes
  Use-Case Realization




             Design Model
Thiết kế Class
                                 Supplementary
Dương Anh Đức                                     4
                                 Specifications
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á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 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

Thiết kế Class
Dương Anh Đức                         5
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á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 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

Thiết kế Class
Dương Anh Đức                         6
Các khảo sát khi thiết kế Class

      w Class stereotype
         § Boundary
         § Entity
         § Control
      w Các design pattern khả dụng
      w Các cơ chế kiến trúc
         § Persistence
         § Distribution
         § …




Thiết kế Class
Dương Anh Đức                         7
Cần bao nhiêu Class ?

      w Nếu nhiều class đơn giản. Nghĩa là mỗi class:
         § Đóng gói một phần ít hơn trên toàn bộ hệ thống
         § Nhiều khả năng dùng lại hơn
         § Dễ cài đặt hơn
      w Nếu nhiều class phức tạp. Nghĩa là mỗi class:
         § Đóng gói một phần nhiều hơn trên toàn bộ hệ thống
         § Ít khả năng dùng lại hơn
         § Khó cài đặt hơn

                 Một class phải có một mục tiêu rõ ràng.
     Một class phải làm một việc gì đó và phải làm tốt điều này !

Thiết kế Class
Dương Anh Đức                        8
Thiết kế các Boundary Class

      w Các User interface (UI) boundary class
         § Công cụ xây dựng giao diện người dùng nào sẽ được sử
           dụng?
         § Bao nhiêu giao diện có thể được xây dựng bởi công cụ?
      w Các External system interface boundary class
         § Thường được mô hình như subsystem

                                        MainWindow      SubWindow

                 MainForm


                                          Button       DropDownList




Thiết kế Class
Dương Anh Đức                       9
Thiết kế các Entity Class

      w Các Entity object thường thụ động và persistent
      w Các yêu cầu về hiệu năng có thể buộc ta phải tái xây dựng
      w Xem thêm bước xác định Persistent Class
                   Analysis                                 Design
                        << entity >>                           FatClass
                         FatClass
                                                   - transientBookeeping
                 - transientBookeeping
                 + commonlyUsedAtt1               + getCommonlyUsedAtt1()
                 + commonlyUsedAtt2               + getCommonlyUsedAtt2()
                 + rarelyUsedAtt3                 + getRarelyUsedAtt3()
                 + rarelyUsedAtt4                 + getRarelyUsedAtt4()



                                                           1                  1
                                                FatClassDataHelper           FatClassLazyDataHelper
                                         + commonlyUsedAtt1                + rarelyUsedAtt3
                                         + commonlyUsedAtt2                + rarelyUsedAtt4


Thiết kế Class
Dương Anh Đức                              10
Thiết kế Control Class

      w Chuyện gì xảy ra với các Control Class?
         § Chúng thật sự cần thiết?
         § Có phải tách chúng ra không?
      w Dựa vào đâu để quyết định?
         § Độ phức tạp
         § Khả năng thay đổi
         § Tính phân tán và hiệu năng
         § Transaction management




Thiết kế Class
Dương Anh Đức                        11
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á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 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

Thiết kế Class
Dương Anh Đức                         12
Xác định Persistent Class

      w Mọi thể hiện của class đều đòi hỏi phải lưu giữ trạng thái của
        nó
      w Các Persistent class được gán với cơ chế persistence

           Client        Analysis                   Design   Implementation
            Class       Mechanism              Mechanism       Mechanism
                       (Conceptual)            (Concrete)        (Actual)
                                      Legacy Data

            Course     Persistency    RDBMS                  JDBC to Ingres

                                       New Data

             Student
                       Persistency    OODBMS                 ObjectStore




Thiết kế Class
Dương Anh Đức                                 13
Database Design Preview

      w Chiến lược Persistence phải nhất quán
      w Ở đây, nhớ rằng các class đều persistent


                                 Class                     Class
                                 Design
                  Designer




                                               Database
                                                Design
             Database Designer
                                                          Data Model


Thiết kế Class
Dương Anh Đức                             14
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á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 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

Thiết kế Class
Dương Anh Đức                         15
Định nghĩa các Operation

      w Mục đích
         § Ánh xạ các nhiệm vụ đã xác định ơ mức phân tích thành
           các operation thực hiện chúng
      w Những cái cần xem xét:
         § Tên Operation, signature, và mô tả
         § Operation visibility
         § Tầm vực Operation
            • Class operation hay instance operation




Thiết kế Class
Dương Anh Đức                       16
Nhắc lại: Operation là gì ?




                                CourseOffering
                 Class
                             addStudent
                             deleteStudent
                             getStartTime
                 Operation   getEndTime




Thiết kế Class
Dương Anh Đức                                17
Operation: Tìm chúng ở đâu?

      w Các thông điệp trong các interaction diagram


        :ClassA                 :ClassB           :ClassA                        :ClassB



                 // Perform responsibility            performResponsibility():result




      w Các chức năng phụ thuộc vào cài đặt khác
         § Các chức năng quản trị
         § Các nhu cầu sao chép class
         § Các nhu cầu kiểm tra bằng, khác nhau, …

Thiết kế Class
Dương Anh Đức                                18
Đặt tên và mô tả các Operation

      w Các tên thích hợp cho operation
         § Chỉ rõ kết quả của operation
         § Đứng dưới góc nhìn của client
         § Nhất quán qua tất cả các class
      w Định nghĩa operation signature
         § operationName(parameter : class,..) : returnType
      w Cung cấp một mô tả ngắn, bao gồm ý nghĩa của tất cả các
        tham số




Thiết kế Class
Dương Anh Đức                       19
Guidelines: Thiết kế Operation Signatures

      w Khi thiết kế operation signatures phải bảo đảm hàm chứa:
         § Các tham số truyền theo giá trị hay tham số?
         § Các tham số có bị thay đổi bởi operation?
         § Các tham số là optional?
         § Tham số có giá trị mặc định?
         § Miền tham số hợp lệ?
      w Càng ít tham số càng tốt
      w Truyền các object thay vì “data bits”




Thiết kế Class
Dương Anh Đức                        20
Phát hiện Additional Classes và Relationships


                            ClassA                      Class2
                 op1(var1:Class2): Class3




                            Class3




                  Additional classes và relationships có thể được
                           thêm vào để hỗ trợ signature

Thiết kế Class
Dương Anh Đức                               21
Operation Visibility

      w Tính khả kiến được dùng để cung cấp tính đóng gói
      w Giá trị có thể là public, protected, hay private


                                                 Private operations



                                                      Protected
                                                      operations

                 Public
                 operations




Thiết kế Class
Dương Anh Đức                       22
Ký hiệu tính khả kiến?

      w Các ký hiệu sau được dùng:
         §     + Public access
         §     # Protected access
         §     - Private access

                                 Class
                    - privateAttribute
                    # protectedAttribute

                    +publicOp()
                    # protectedOp()
                    - privateOp()




Thiết kế Class
Dương Anh Đức                              23
Tầm vực

      w Xác định số lượng thể hiện của attribute / operation
         § Instance: 1 instance cho mỗi class instance
         § Classifier: 1 instance cho tất cả class instance
      w Tầm vực mức Classifier được ký hiệu bằng cách gạch dưới tên
        attribute/operation

                                        Class

                     - classifierScopeAttribute
                     - instanceScopeAttribute

                     classifierScopeOperation()
                     instanceScopeOperation()



Thiết kế Class
Dương Anh Đức                             24
Ví dụ: Scope


                                                 <<entity>>
                                                  Student
                 - name
                 - address
                 - studentID
                 - nextAvailID : int

                 + addSchedule(theSchedule : Schedule, forSemester : Semester)
                 + getSchedule(forSemester : Semester) : Schedule
                 + hasPrerequisites(forCourseOffering : CourseOffering) : boolean
                 # passed(theCourseOffering : CourseOffering) : boolean
                 + getNextAvailID() : int




Thiết kế Class
Dương Anh Đức                                            25
Utility Classes

      w Thế nào là một Utility Class?
         § Utility là một class stereotype
         § Dùng để chỉ các class chứa một bộ các chương trình con
           miễn phí
      w Tại sao lại dùng chúng?
         § Để cung cấp các dịch vụ có thể hữu dụng trong các ngữ
           cảnh khác nhau
         § Để gói các hàm thư viện hay các ứng dụng phi đối tượng

                               <<utility>>
                             MathFunctions




Thiết kế Class
Dương Anh Đức                         26
Ví dụ: Utility Classes




                            <<utility>>
                            MathPack

                 -randomSeed : long = 0
                 -pi : double = 3.14159265358979

                 +sin (angle : double) : double
                 +cos (angle : double) : double
                 +random() : double




Thiết kế Class
Dương Anh Đức                        27
Ví dụ: Định nghĩa các Operation
                                                                                                                                <<Interface>>
                                              <<control>>                                                                   ICourseCatalogSystem
                                         RegistrationController                                                  1      (from External System Interfaces)
                                              (from Registration)                            0..*
                                                                                                                        + getCourseOfferings()
      + submitSchedule()                                                                                                + initialize()
      + saveSchedule()
      + getCourseOfferings() : CourseOfferingList
      + getCurrentSchedule(forStudent : Student, forSemester : Semester) : Schedule
      + deleteCurrentSchedule()
      <<class>> + new(forStudent : string)                                                          +currentSchedule
      + getStudent(withID : string) : Student                                                0..1                                  <<entity>>
                                                                                                                     0..1           Schedule
                                                                                                                            (from University Artifacts)
                                                            0..1
                                                                                                                                                                 0..*
                                                                                                                  0..*
                                          +registrant                                                                       0..*
                                                             0..1

                                                 <<entity>>                                                    +alternateCourses
                                                  Student.                               1
                                          (from University Artifacts)                                                                              +primaryCourses
                 + getTuition() : double                                                                                               0..2               0..4
                 + addSchedule(theSchedule : Schedule)
                 + getSchedule(forSemester : Semester) : Schedule                                                                   <<entity>>
                 + deleteSchedule(forSemester : Semester)                                                                          CourseOffering
                 + hasPrerequisites(forCourseOffering : CourseOffering) : boolean                                             (from University Artifacts)
                 # passed(theCourseOffering : CourseOffering) : boolean
                 <<class>> + getNextAvailID() : int
                 + getStudentID() : int
                 + getName() : string
                 + getAddress() : string

Thiết kế Class
Dương Anh Đức                                                                       28
Bài tập: Định nghĩa các Operation

      w Hãy cho biết:
         § Các architectural layers, các package và các phụ thuộc của
           chúng
         § Các Design class cho một use case cụ thể




                                                        (còn tiếp)


Thiết kế Class
Dương Anh Đức                        29
Bài tập: Define Operations (tt.)

      w Với các design class, hãy xác định:
         § Các Operation và mô tả hoàn chỉnh của chúng
         § Operation scope và visibility
         § Mọi mối quan hệ và các class bổ sung để hỗ trợ cho các
           operation đã định nghĩa




                                                       (còn tiếp)


Thiết kế Class
Dương Anh Đức                       30
Bài tập: Định nghĩa các Operation (tt.)

      w Xây dựng lược đồ sau:
         § VOPC class diagram, chứa tất cả các operation, operation
           signature, và các quan hệ




Thiết kế Class
Dương Anh Đức                       31
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á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 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

Thiết kế Class
Dương Anh Đức                         32
Nhắc lại: Package Element Visibility
                                  PackageA


                                     Class A1
                                                             Class A2
                  A
                                             Class A3


                                                                         Chỉ có thể tham chiếu
                                                                         tới các public class từ
                                  PackageB
                                                                          bên ngoài package
                  B                                                             chứa nó
                                     +Class B1
                                                             -Class B2
             Public visibility

             Private visibility

                                  OO Principle: Encapsulation
Thiết kế Class
Dương Anh Đức                                           33
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á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 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

Thiết kế Class
Dương Anh Đức                         34
Định nghĩa các Method

      w Method là gì ?
         § Mô tả cài đặt của operation
      w Mục đích
         § Định nghĩa các khía cạnh đặc biệt của operation
           implementation
      w Những gì cần xem xét:
         § Các thuật toán đặc biệt
         § Các object và các operation khác cần sử dụng
         § Cách cài đặt và sử dụng các attribute và các tham số
         § Cách cài đặt và sử dụng các mối quan hệ




Thiết kế Class
Dương Anh Đức                        35
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á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 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

Thiết kế Class
Dương Anh Đức                         36
Định nghĩa các trạng thái

      w Mục đích
         § Thiết kế ảnh hưổng của trạng thái đối tượng lên hành vi của
           nó
         § Phát triển statecharts để mô hình các hành vi này
      w Những gì cần xem xét:
         § Những object nào có trạng thái đáng kể?
         § Cách xác định các trạng thái của một object?
         § Cách ánh xạ statechart với phần còn lại của mô hình?




Thiết kế Class
Dương Anh Đức                        37
Statechart là gì?

      w Là 1 đồ thị có hướng với các node là các trạng thái nối với
        nhau bới các transition
      w Mô tả lịch sử đời sống của đối tượng
                  State                          Event

                            State Name                        event(args)
                                                              [guard condition]
                       stateVar : type = value                / operation(args)
                                                               ^target.sendEvent(args)
                       entry/ entry action
                       do/ activity
                       exit/ exit action                  Action

            Activity
                                                                          Transition


Thiết kế Class
Dương Anh Đức                                        38
Các trạng thái đặc biệt

      w Trang thái bắt đầu (Initial state)
         § Là trạng thái khi mới được khởi tạo của object
         § Mang tính bắt buộc
         § Chỉ có thể có 1 initial state
                                                     Initial state
      w Trang thái kết thúc (Final state)
         § Chỉ vị trí kết thúc đời sống của object
         § Optional
         § Có thể có nhiều                                           Final state




Thiết kế Class
Dương Anh Đức                          39
Qui trình suy dẫn ra Statecharts

      w     Xác định và định nghĩa các trạng thái
      w     Xác định các event
      w     Xác định các transition (hồi đáp lại các event)
      w     Thêm các activity và các action




Thiết kế Class
Dương Anh Đức                              40
Xác định và định nghĩa các trạng thái

      w Significant, dynamic attributes
                         Số sinh viên tối đa trong 1 lớp là 100
                             numStudents < 100                    numStudents > = 100

                               Open                                    Closed


      w Sự tồn tại và không tồn tại của các link

                 Professor
                                                   Link to Professor             Link to Professor
                                                   Exists                        Doesn’t Exist
                  0..1
                  0..*                                    Assigned               Unassigned

          CourseOffering

Thiết kế Class
Dương Anh Đức                                              41
Xác định các Event

      w Xem xét các class interface operation


                         <<entity>>
                       CourseOffering     0..*                 0..1   <<entity>>
                    + addProfessor()                                   Professor
                                                      +instructor
                    + removeProfessor()




                 Events: addProfessor, removeProfessor



Thiết kế Class
Dương Anh Đức                                    42
Xác định các Transition

      w Với mỗi trạng thái, xác định events nào gây ra transitions đến
        trạng thái nào, bao gồm các điều kiện kiểm soát, nếu cần
      w Transitions mô tả điều gì xảy ra khi đối tượng hồi đáp lại một
        event nhân được
                           <<entity>>
                         CourseOffering        0..*             0..1   <<entity>>
                      + addProfessor()                                  Professor
                                                       +instructor
                      + removeProfessor()




                                                        Unassigned


                                                               addProfessor
                                            removeProfessor

                                                          Assigned


Thiết kế Class
Dương Anh Đức                                     43
Thêm Activities và Actions

      w Activities                                           State A
         § Kết hợp với một trạng thái
         § Bắt dầu khi trạng thái bắt đầu                                         action
         § Cần thời gian để hoàn tất           event[ condition ] / action
         § Có thể ngắt
                              activity          State B                        State C
                                              do: activity                   entry: action
      w Actions
         § Kết hợp với 1 transition
         § Cần thời gian không đáng kể để hoàn tất
         § Không thể ngắt ngang


Thiết kế Class
Dương Anh Đức                            44
Gửi Events

      w Một event có thể gây ra việc gửi một event khác
      w Một activity cùng có thể gửi event đến object khác

                   State A



                             event ^TargetObject.event


                                                            State B
                                               do: ^TargetObject.event




Thiết kế Class
Dương Anh Đức                                   45
Ví dụ: Statechart
                   add student / numStudents = numStudents + 1

     / numStudents = 0                         remove student / numStudents = numStudents - 1

                                Unassigned

                                                                 closeRegistration


                                                                  cancel                                 Cancelled
                                       addProfessor
                                                                                             do: Send cancellation notices
                                                             close

                     removeProfessor                                                                                         cancel
                                                                                                [ numStudents = 10 ]
                                                           cancel
                                                                                                                                Full


                                                            close[ numStudents < 3 ]                                                      close


add student /                                                                                    closeRegistration [ has Professor assigned ]
                                                                   [ numStudents = 10 ]
numStudents = numStudents + 1

                                 Assigned                   closeRegistration[ numStudents >= 3 ]                            Committed
                                                                                                                  do: Generate class roster


                                                                 close[ numStudents >= 3 ]
   remove student / numStudents = numStudents - 1
 Thiết kế Class
 Dương Anh Đức                                                              46
Ví dụ: Statechart với các trạng thái lồng nhau
                          superstate
     / numStudents = 0                     Open                  closeRegistration                               Closed


                                                                        close                                      Cancelled
                               Unassigned                                                               do: Send cancellation notices


                                                                                                                       cancel
                                                                          cancel
substate
                                                                                                                    Full
                                                                     close[ numStudents < 3 ]
                   remove a professor
                                                                          [ numStudents = 10 ]                                  close
                                        add a professor
                                                                                            closeRegistration [ has Professor assigned ]


                                                          closeRegistration[ numStudents >= 3 ]                Committed
                                 Assigned
                                                                                                       do: Generate class roster
 add student /
 numStudents = numStudents + 1
                                                                    close[ numStudents >= 3 ]
                    H




     remove student / numStudents = numStudents - 1
 Thiết kế Class
 Dương Anh Đức                                                            47
Những Object có Significant State?

      w Các Object có vai trò thể hiện rõ bởi state transitions
      w Các use case phức tạp là state-controlled
      w Không cần mô hình hóa tất cả các object
         § Các Object dễ dàng cài đặt
         § Các Object không thuộc loại state-controlled
         § Các Object chỉ với một trạng thái




Thiết kế Class
Dương Anh Đức                          48
Cách Statecharts gắn với phần còn lại?

      w Các Event biến thành các operation
      w Các Method phải được cập nhật với các thông tin đặc thù cho
        các trạng thái
      w Các trạng thái được biểu diễn bởi attributes
         § Chúng là input cho bước định nghĩa Attribute
                          [numStudents = 10]
                 Open                                    Full


                                                                           CourseOffering
    add student /                                                         /- numStudents
    numStudents = numStudents + 1
                                                                          + addStudent()
                                    (Stay tuned for derived attributes)




Thiết kế Class
Dương Anh Đức                                       49
Bài tập: Định nghĩa States (optional)

      w Hãy cho biết:
         § Tất cả các design classe
      w Hãy xác định:
         § Các Class vứi significant state-controlled behavior
         § Các trạng thái và transitions quan trong của class
      w Hãy xây dựng lược đồ:
         § Statechart của một class




Thiết kế Class
Dương Anh Đức                         50
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á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 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

Thiết kế Class
Dương Anh Đức                         51
Định nghĩa Attributes

      w Mục đích
         § Formalize definition of attributes
      w Những gì cần xem xét:
         § Persistency
         § Visibility
         § Tên gọi, kiểu, và giá trị mặc định




Thiết kế Class
Dương Anh Đức                          52
Nhắc lại: Thế nào là Attribute?

                                                 Object
   Class

    Attribute                      Attribute Value
                                                            :CourseOffering
                                                          number = 101
                                                          startTime = 900
                  CourseOffering                          endTime = 1100
                 number
                 startTime
                 endTime                                    :CourseOffering
                                                          number = 104
                                                          startTime = 1300
                                                          endTime = 1500



Thiết kế Class
Dương Anh Đức                             53
Cách tìm ra các Attribute?

      w Khảo sát mô tả của các method
      w Khảo sát các trạng thái
      w Bất kỳ thông tin nào mà class cần duy trì




Thiết kế Class
Dương Anh Đức                         54
Biểu diễn Attribute

      w Mô tả name, type, và giá trị mặc định
         § attributeName : Type = Default
      w Tuân thủ qui ước đặt tên của NNLT và dự án
      w Type phải là KDL cơ sở trong NNLT cài đặt
         § Các KDL định sẵn, người dùng đ/n
      w Mô tả tình khả kiến
         § Public: ‘+’
         § Private: ‘-’
         § Protected: ‘#’




Thiết kế Class
Dương Anh Đức                       55
Các Derived Attribute

      w Thế nào là derived attribute?
         § Một attribute mà giá trị co thể tính từ giá trị của các attribute
           khác
      w Khi nào dùng chúng?
         § Khi không đủ thời gian để tính lại giá trị mỗi khi cần thiết
         § Dung hòa giữa thời gian thực hiện và bộ nhớ sử dụng




Thiết kế Class
Dương Anh Đức                           56
Ví dụ: Define Attributes
                                                                                                  <<Interface>>
                                                                                             ICourseCatalogSystem
                                                                                           (from External System Interfaces)

                          <<control>>
                     RegistrationController
                          (from Registration)


                                                    0..1    +currentSchedule
                                                                                                      <<entity>>
                                        0..1                                                           Schedule
                                                                                    0..1     (from University Artifacts)

                                                                                           - semester : Semester
                                                                                                                                 0..*
                                                                                  0..*         0..*
                      +registrant
                                                                               +alternateCourses
                                                                                                                           +primaryCourses
                                        0..1                                                  0..2                             0..4
                             <<entity>>                                                              <<entity>>
                              Student.              1                                              CourseOffering
                      (from University Artifacts)                                             (from University Artifacts)
                 - name : string                                                           - number : String = "100"
                 - address : string                                                        - startTime : Time
                 <<class>> - nextAvailID : int                                             - endTime : Time
                 - studentID : int                                                         - days : string
                 - dateofBirth : Date                                                      /- numStudents : int = 0

Thiết kế Class
Dương Anh Đức                                              57
Bài tập: Define Attributes (optional)

      w Hãy cho biết:
         § Các architectural layers, các package và phụ thuộc của
           chúng
         § Các Design class của một use case cụ thể




                                                        (còn tiếp)


Thiết kế Class
Dương Anh Đức                        58
Bài tập: Define Attributes (tt.)

      w Với các design class hãy xác định:
         § Các Attribute và mô tả đầy đủ của nó
         § Tầm vực và tính khả kiến của Attribute
         § Mọi mối quan hệ và class bổ sung để hỗ trợ cho việc định
           nghĩa các attribute và attribute signatures




                                                       (còn tiếp)


Thiết kế Class
Dương Anh Đức                        59
Bài tập: Define Attributes (cont.)

      w Xây dựng lược đồ:
         § VOPC class diagram, chứa tất cả các attribute và mối quan
           hệ




Thiết kế Class
Dương Anh Đức                       60
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á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 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

Thiết kế Class
Dương Anh Đức                         61
Định nghĩa Dependency

      w Dependency là gì?
         § Là một loại quan hệ giữa hai object

                   Client                        Supplier




      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


Thiết kế Class
Dương Anh Đức                        62
So sánh Dependency và Association

      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ộ
                                                                  Supplier2
         § Tham chiếu đến tham số
         § Tham chiếu toàn cục                     Dependency

         § Tham chiếu đến trường dữ liệu (Field)
                                   Association
                                                         Client
                               Supplier1




Thiết kế Class
Dương Anh Đức                          63
Local Variable Visibility

      w Operation op1() chứa một biến cục bộ có kiểu ClassB


                          ClassA

                          op1 ()




                                   ClassB




Thiết kế Class
Dương Anh Đức                           64
Parameter Visibility

      w Thể hiện của ClassB được truyền đến cho thể hiện của ClassA


                                  ClassA

                         op1 (param1: ClassB)




                                  ClassB




Thiết kế Class
Dương Anh Đức                              65
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)

                                       ClassA

                            op1 ()




                             ClassUtility

                            utilityOp ()




Thiết kế Class
Dương Anh Đức                               66
Xác định Dependency

      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

Thiết kế Class
Dương Anh Đức                          67
Ví dụ: Trước khi định nghĩa Dependency
                                                                                              <<Interface>>
                                                                                         ICourseCatalogSystem
                                                                                       (from External System Interfaces)

                                                              + getCourseOfferings(forSemester : Semester) : CourseOfferingList
                                                                             1
                                                                    0..*         courseCatalog
                                                                                                                           <<entity>>
                                          <<control>>
                                                                                                                            Schedule
                                     RegistrationController
                                                                                                                      (from University Artifacts)
                                        (from Registration)
                                                                                            currentSchedule       - semester
                 + // submit schedule()
                 + // save schedule()                                                0..1                     0..1 + submit()
                                                                                                                   + // save()
                 + // create schedule with offerings()
                                                                                                                   # any conflicts?()
                 + // getCourseOfferings(forSemester) : CourseOfferingList
                                                                                                                   + // create with offerings()
                                                   0..1                                                       0..*
                                                                                                                         0..*                   0..*
                                                                                                    alternateCourses                    primaryCourses
                                      registrant                                 1
                                                                                                                      0..2                          0..4
                                                   0..1
                                                                                                                          <<entity>>
                                           <<entity>>                                                                   CourseOffering
                                            Student                                                                  (from University Artifacts)
                                      (from University Artifacts)                                    - number : String = "100"
         - name                                                                                      - startTime : Time
         - address                                                                                   - endTime : Time
         - StudentID : int                                                                           - days : Enum

         + addSchedule(theSchedule : Schedule, forSemester : Semester)                               + addStudent(studentSchedule : Schedule)
         + getSchedule(forSemester : Semester) : Schedule                                            + removeStudent(studentSchedule : Schedule)
         + hasPrerequisites(forCourseOffering : CourseOffering) : boolean                            + new()
         # passed(theCourseOffering : CourseOffering) : boolean                                      + setData()

Thiết kế Class
Dương Anh Đức                                                                           68
Ví dụ: Sau khi định nghĩa Dependency
                                                                                       <<Interface>>
                                                                                  ICourseCatalogSystem
                                                                                (from External System Interfaces)

                                                        + getCourseOfferings(forSemester : Semester) : CourseOfferingList

                     Global visibility
                                                                                                                    <<entity>>
                                    <<control>>
                                                                                                                     Schedule
                               RegistrationController
                                                                                                               (from University Artifacts)
                                  (from Registration)
                                                                                     currentSchedule       - semester
           + // submit schedule()
           + // save schedule()                                               0..1                     0..1 + submit()
                                                                                                            + // save()
           + // create schedule with offerings()
                                                                                                            # any conflicts?()
           + // getCourseOfferings(forSemester) : CourseOfferingList
                                                                                                            + // create with offerings()            Field visibility
                                             0..1                                                      0..*
                                                                                                                  0..*                   0..*
                                                    Field visibility                         alternateCourses                    primaryCourses
                                registrant                                1
                                                                                                               0..2                          0..4
                                             0..1
                                                                                                                   <<entity>>
                                     <<entity>>                                                                  CourseOffering
                                      Student                                                                 (from University Artifacts)
                                (from University Artifacts)                                   - number : String = "100"
      - name                                                                                  - startTime : Time
      - address                                                                               - endTime : Time
      - StudentID : int                                                                       - days : Enum

      + addSchedule(theSchedule : Schedule, forSemester : Semester)                           + addStudent(studentSchedule : Schedule)
      + getSchedule(forSemester : Semester) : Schedule                                        + removeStudent(studentSchedule : Schedule)
      + hasPrerequisites(forCourseOffering : CourseOffering) : boolean                        + new()
      # passed(theCourseOffering : CourseOffering) : boolean                                  + setData()

Thiết kế Class
Dương Anh Đức                                                                          69
                                                                                        Parameter visibility
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á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 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

Thiết kế Class
Dương Anh Đức                         70
Định nghĩa Associations

      w Mục đích
         § Tinh chỉnh các association còn lại
      w Những gì cần xem xét :
         § Cân nhắc giữa Association và Aggregation
         § Cân nhắc giữa Aggregation và Composition
         § Cân nhắc giữa Attribute và Association
         § Chiều của quan hệ (Navigability)
         § Thiết kế Association class
         § Thiết kế bản số (Multiplicity design)




Thiết kế Class
Dương Anh Đức                      71
Nhắc lại: Composition là gì ?

      w Là một dạng của aggregation với tính sở hữu cao và trùng
        khớp về chu kỳ sống
                 § “Bộ phận” không thể tồn tại lâu hơn “toàn thể”

            Whole                                                   Part




                           Whole                             Part



                                         Aggregation


Thiết kế Class
Dương Anh Đức                                 72
Aggregation: Shared hay không shared

      w Shared Aggregation
                                           Bản số > 1

                        Whole       1..*     0..*           Part


      w Non-shared Aggregation
                     Bản số = 1                                        Bản số = 1

       Whole     1     0..*       Part                   Whole     1      0..*      Part



                                                         Composition
           Theo định nghĩa, composition là non-shared aggregation

Thiết kế Class
Dương Anh Đức                                       73
Aggregation hay Composition?

      w Xem xét
         § Chu kỳ sống của Class1 và Class2


                                Class1                  Class2
                                          aggregation




                                Class1                  Class2
                                         composition




Thiết kế Class
Dương Anh Đức                       74
Ví dụ: Composition


                 Student       1            0..*       Schedule




      RegisterForCoursesForm       1               1   RegistrationController




Thiết kế Class
Dương Anh Đức                          75
Cân nhắc giữa Attributes và Composition

      w Dùng composition khi
         § Các thuộc tính cần được nhận dạng độc lập
         § Nhiều class có chung các thuộc tính
         § Các thuộc tính có cấu trúc phức tạp và bản thân chúng cũng
           có thuộc tính riêng
         § Các thuộc tính có hành vi riêng (phức tạp)
         § Các thuộc tính có quan hệ riêng
      w Các trường hợp còn lại dùng attributes




Thiết kế Class
Dương Anh Đức                       76
Ví dụ: Attributes/Composition


                                 <<entity>>                             Attributes
                                  Student
                 - name
                                                                                         <<entity>>
                 - address
                 <<classifier scope>> - nextAvailID : int                                 Schedule
                 - StudentID : int                                               - Semester
                 - dateofBirth : Date                                           + submit()
                                                                                + // save()
                 + addSchedule()                                 1       0..*   # any conflicts?()
                 + getSchedule()
                                                                                + // create with offerings()
                 + delete schedule()
                 + hasPrerequisites()                                           + new()
                 # passed()                                                     + passed()

                                                                     Composition of
                                                                     separate class



Thiết kế Class
Dương Anh Đức                                               77
Chiều của quan hệ

      w Khảo sát các interaction diagram
      w Ngay cả khi cả 2 chiều đều có vẻ cần thiết, vẫn có thể chỉ 1
        chiều hoạt động
         § Một chiều quan hệ ít xảy ra
         § Số thể hiện của một class ít
                                Schedule            primaryCourses CourseOffering

                                            0..*                 0..4


                                                        ?
Schedule                primaryCourses CourseOffering        Schedule          primaryCourses CourseOffering

                 0..*          0..4                                     0..*          0..4



Thiết kế Class
Dương Anh Đức                                               78
Ví dụ: Tinh chỉnh chiều quan hệ

      w Tổng số Schedule nhỏ, hay
      w Không bao giờ cần một list          Schedule          primaryCourses CourseOffering
        Schedule có CourseOffering
        xuất hiện trên đó                              0..*          0..4


      w Tổng số CourseOffering nhỏ,
        hay                                 Schedule          primaryCourses CourseOffering
      w Không bao giờ cần một list                     0..*          0..4
        CourseOffering có Schedule
        xuất hiện trên đó

      w Tổng số CourseOffering và
        Schedule đều không nhỏ              Schedule          primaryCourses CourseOffering
      w Phải quan tâm đến cả 2 chiều
                                                       0..*          0..4




Thiết kế Class
Dương Anh Đức                          79
Ví dụ: Thiết kế Association Class
                                                                        alternateCourses

                                             0..*                         0..2
                                 Schedule                     primaryCourses CourseOffering
                                              0..*                        0..4


                                                     PrimaryScheduleOfferingInfo
                                                    - grade: char = I


                                   Design Decisions


                                                                                                     alternateCourses
            0..*                                                                                        0..2
   Schedule                                                   PrimaryScheduleOfferingInfo            CourseOffering
                       primaryCourseOfferingInfo
                   1                                  0..4   - grade: char = I              0..* 1



Thiết kế Class
Dương Anh Đức                                                    80
Thiết kế bản số

      w Bản số = 1, hay = 0..1
         § Có thể cài đặt đơn giản như một giá trị hay pointer
                 § Không cần thiết kế gì thêm

                           Professor   instructor                 CourseOffering
                                       0..1               0..*


      w Bản số > 1
         § Không thể dùng giá trị đơn hay pointer
         § Cần thực hiện thêm một số công việc thiết kế
                           Professor    instructor                CourseOffering   Cần một
                                        0..1               0..*                    container


Thiết kế Class
Dương Anh Đức                                        81
Multiplicity Design Options

      w Mô hình hóa tường minh một container class

                                                                                                  CourseOfferingList
  Professor      instructor     CourseOffering               <<entity>>     +instructor
                                                              Professor
                 0..1   0..*                                                                     + new()
                                                                          0..1            0..1
                                                                                                 + add()
                                                                                                           1


                                                                                                      0..*
      w Ghi chú                                                                                      <<entity>>
                                                                                                    CourseOffering
                                                 List



                               Professor   instructor               CourseOffering
                                           0..1              0..*



Thiết kế Class
Dương Anh Đức                                           82
Parameterized Class (template) là gì?

      w Là một class dùng để định nghĩa các class khác
      w Thường dùng cho các container class
         § Một số container class thông dụng:
            • Set, list, dictionary, stack, queue, …


                                 Formal                  Item
                                 arguments
                 Parameterized                    List
                 Class




Thiết kế Class
Dương Anh Đức                                83
Thể hiện của Parameterized Class

                 Kết buộc tường minh                               Kết buộc ẩn

                           Formal arguments
                                                            Instantiated Class <actual arguments>
       Parameterized
       Class
                                                 HAY
                   <<bind>> <actual arguments>

      Instantiated Class




Thiết kế Class
Dương Anh Đức                                          84
Ví dụ: Thể hiện của Parameterized Class

 Trước
                                                                               <<entity>>
                          CourseOfferingList
                                                                              CourseOffering
                                                  1                    0..*



    Sau
                      Item


            List
                                                                List <CourseOffering>          CourseOffering
                                             HAY

                 <<bind>> <CourseOffering>

CourseOfferingList                             CourseOffering



Thiết kế Class
Dương Anh Đức                                              85
Multiplicity Design: Optionality

      w Nếu một link là tùy chọn, hãy cèn thêm một operation để kiểm
        tra sự tồn tại của link



                      Professor                                 CourseOffering

                                       0..1        0..*   hasInstructor( ) : Boolean
             isTeaching( ) : Boolean




Thiết kế Class
Dương Anh Đức                                 86
Bài tập: Đ/n Dependency và Association

      w Hãy cho biết:
         § Use-case realization của 1 use case và chi tiết thiết kế của 1
           subsystem
         § Thiết kế của tất cả các design element




Thiết kế Class
Dương Anh Đức                         87
Bài tập: Đ/n Dependenc và Association (tt.)

      w Hãy xác định:
         § Chiều của mỗi quan hệ
         § Mọi class cần bổ sung để hỗ trợ cho việc thiết kế quan hệ
         § Mọi association được tinh chỉnh thành dependency
         § Mọi association được tinh chỉnh thành aggregation hoặc
           composition
                 § Mọi tinh chỉnh liên quan đến bản số




Thiết kế Class
Dương Anh Đức                                88
Bài tập: Đ/n Dependency và Association (tt.)

      w Xây dựng lược đồ
         § Một bản cập nhật của VOPC, bao gồm cả các tinh chỉnh
           quan hệ




Thiết kế Class
Dương Anh Đức                      89
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á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 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

Thiết kế Class
Dương Anh Đức                         90
Định nghĩa quan hệ tổng quát hóa

      w Mục đích
         § Xác định các khả năng dùng lại
         § Tinh chỉnh cây kế thừa để có thể cài đặt hiệu quả
      w Những gì cần xem xét:
         § So sánh Abstract classes với concrete classes
         § Bài toán đa kế thừa
         § So sánh Generalization và Aggregation
         § Tổng quát hóa để hỗ trợ tái sử dụng trong cài đặt
         § Tổng quát hóa để hỗ trợ đa xạ (polymorphism)
         § Tổng quát hóa để hỗ trợ đa hình (metamorphosis)
         § Mô phỏng tổng quát hóa


Thiết kế Class
Dương Anh Đức                        91
Nhắc lại: Generalization

      w Một class chi sẻ cấu trúc và hành vi của một hay nhiều class
      w Là quan hệ “Là một dạng của”                         ancestor
      w Trong phân tích, ít khi dùng đến               Account
                                                              balance
                                                              name
                                                              number
                                           Superclass
                                                              Withdraw()
                                            (parent)          CreateStatement()


                                     Generalization
                                      Relationship


                                                        Checking                    Savings
                                    Subclasses
                                                                                  GetInterest()
                                                             descendents
Thiết kế Class
Dương Anh Đức                         92
Abstract và Concrete Class

      w Abstract class không có bất kỳ thể hiện nào
      w Concrete classes có thể có thể hiện (object)

                                         Animal
                                       {abstract}                            Abstract class
Chuyên biệt hóa
                                   talk () {abstract}                        Abstract operation
                    Communication                                Không có thể hiện của Animal




                     Lion                               Tiger


                   talk ()                             talk ()
                 Tất cả các object đều hoặc là Lion hoặc là Tiger

Thiết kế Class
Dương Anh Đức                                     93
Nhắc lại: Đa kế thừa

      w Một class có thể kế thừa từ nhiều class


                            FlyingThing                            Animal


                                                multiple
                                              inheritance



                 Airplane        Helicopter    Bird         Wolf            Horse



       Dùng đa kế thức chỉ khi thật cần thiết, và phải luôn cẩn thận !


Thiết kế Class
Dương Anh Đức                                      94
Các vấn đề của đa kế thừa

                   Tên của attribute hay                     Lặp lại việc kế thừa
                    operation bị trùng
             FlyingThing               Animal                        AnimateObject
            color                    color                         color

            getColor                 getColor


                                                     FlyingThing                     Animal



                            Bird
                                                                        Bird



                 Lời giải của các vấn đề trên phụ thuộc cài đặt cụ thể


Thiết kế Class
Dương Anh Đức                                   95
Các ràng buộc của quan hệ tổng quát hóa

      w Complete (Hoàn chỉnh)
         § Kết thúc toàn bộ cây kế thừa trong thiết kế
      w Incomplete (Không hoàn chỉnh )
         § Cây kế thừa có thể mở rộng
      w Disjoint (Phân tách)
         § Các Subclass loại trừ lần nhau
         § Không hỗ trợ đa kế thừa
      w Overlapping (Chồng lắp)
         § Các Subclass không loại trừ lẫn nhau
         § Hỗ trợ đa kế thừa



Thiết kế Class
Dương Anh Đức                         96
Ví dụ: Generalization Constraints

                                                                                 Không hỗ trợ
                                                 Asset
                                                                                  đa kế thừa
                                                            {disjoint}


                           Bank                      Real
                                                     Estate                  Security
                          Account

                               {disjoint,complete}
                                                                                               {disjoint}

                 Saving             Checking                             Stock          Bond

                   Kết thúc cây kế thừa



Thiết kế Class
Dương Anh Đức                                          97
Ví dụ: Generalization Constraints (tt.)

                   Hoã trôï
                 ña keá thöøa
                                                 Vehicle
                                {overlapping}


                                   Land                      Water
                                  Vehicle                    Vehicle




                                                Amphibious
                                                 Vehicle




Thiết kế Class
Dương Anh Đức                                     98
Chọn Generalization hay Aggregation

      w Rất dễ nhầm lẫm giữa Generalization và aggregation
         § Generalization biểu diễn quan hệ “là một” hay “dạng của”
         § Aggregation biểu diễn quan hệ “một bộ phận của”

                  Window                         Scrollbar



                                                             Có đúng không?
                           WindowWithScrollbar




Thiết kế Class
Dương Anh Đức                               99
Chọn Generalization hay Aggregation

 Window                            Scrollbar




                 WindowWithScrollbar




                        Window
                                          Một WindowWithScrollbar “là một” Window
                                          Một WindowWithScrollbar “chứa một” Scrollbar


                  WindowWithScrollbar               Scrollbar
                                           1    1




Thiết kế Class
Dương Anh Đức                                         100
Sử dụng quan hệ tổng quát hóa

      w     Chia sẻ các thuộc tính và hành vi chung
      w     Chia sẻ cài đặt
      w     Cài đặt cơ chế Polymorphism
      w     Cài đặt cơ chế Metamorphosis




Thiết kế Class
Dương Anh Đức                      101
Sử dụng quan hệ tổng quát hóa

      w     Chia sẻ các thuộc tính và hành vi chung
      w     Chia sẻ cài đặt
      w     Cài đặt cơ chế Polymorphism
      w     Cài đặt cơ chế Metamorphosis




Thiết kế Class
Dương Anh Đức                      102
Chia sẻ các thuộc tính và hành vi chung

      w Tuân thủ qui tắc lập trình “Là một dạng của”
      w Khả năng thay thể Class
                                                               List

                                                     insertTop (Item)
                            Animal
                                                     insertBottom (Item)
                                                     removeTop ()
                           talk ()                   removeBottom ()
                                                     insert (Item,
                                                     position)



                   Lion               Tiger

                 talk ()             talk ()
                                                              Stack


                     Các class trên có tuân thủ IS-A style of programming?
Thiết kế Class
Dương Anh Đức                                  103
Chia sẻ các thuộc tính và hành vi chung (tt)

                                                            List

                         Animal
                                                  insertTop (Item)
                                                  insertBottom (Item)
                        talk ()                   removeTop ()
                                                  removeBottom ()
                                                  insert (Item,
                                                  position)


                 Lion              Tiger

           talk ()                talk ()

                                                           Stack




Thiết kế Class
Dương Anh Đức                               104
Sử dụng quan hệ tổng quát hóa

      w     Chia sẻ các thuộc tính và hành vi chung
      w     Chia sẻ cài đặt
      w     Cài đặt cơ chế Polymorphism
      w     Cài đặt cơ chế Metamorphosis




Thiết kế Class
Dương Anh Đức                      105
Chia sẻ cài đặt: Factoring (phân chia)

      w Hỗ trợ khả năng dùng lại khi cài đặt class khác
      w Không thể dùng nếu class bạn muốn “dùng lại” không thể thay
        đổi
                            List
                                                                       SequentialContainer
                 insertTop (Item)
                 insertBottom (Item)                             insertTop (Item)
                 removeTop ()                                    removeTop ()
                 removeBottom ()
                 insert (Item, position)


                                                        List
                                                                                             Stack
                                             insertBottom (Item)
                                             removeBottom ()
                                             insert (Item, position)

                           Stack




Thiết kế Class
Dương Anh Đức                              106
Chia sẻ cài đặt: Delegation (đại diện)

      w Hổ trợ khả năng dùng lại khi cài đặt class khác
      w Không thể dùng nếu class bạn muốn “dùng lại” không thể thay
        đổi
                  List

     insertTop (Item)
     insertBottom (Item)                                               List
     removeTop ()
     removeBottom ()              Stack                     insertBottom
     insert (Item, position)                                (Item)
                               push (Item)                  removeBottom ()
                               pop (): Item         1   1   insert (Item, position)
                                                            remove (position)



                 Stack




Thiết kế Class
Dương Anh Đức                                 107
Quan hệ kế thừa dạng <<implementation>>

      w Các public operation, attribute và relationship của tổ tiên không
        nhìn thấy được bởi các client của các thể hiện của các class
        con cháu
      w Các class con cháu phải định nghĩa các truy cập đến
        operations, attributes, và relationships của tổ tiên
                                                                      List
                 push() and pop() có thể truy cập đến các
                 method của List nhưng các thể hiện của     insertBottom (Item)
                                                            removeBottom ()
                 Stack thì không                            insert (Item,
                                                            position)
                                                            remove (position)
                                                            insertTop (Item)

                                                               <<implementation>>

                                                                     Stack
                                                                 push (Item)
                                                                 pop ()

Thiết kế Class
Dương Anh Đức                                       108
Sử dụng quan hệ tổng quát hóa

      w     Chia sẻ các thuộc tính và hành vi chung
      w     Chia sẻ cài đặt
      w     Cài đặt cơ chế Polymorphism
      w     Cài đặt cơ chế Metamorphosis




Thiết kế Class
Dương Anh Đức                      109
Nhắc lại: Polymorphism là gì ?

      w Khả năng che dấu nhiều cài đặt bên dưới một interface duy
        nhất




                                   Manufacturer B
                  Manufacturer A                     Manufacturer C



                 OO Principle:
                 Encapsulation


Thiết kế Class
Dương Anh Đức                         110
Cài đặt Polymorphism
                                                  Animal

                                                 talk ()




                                        Lion                      Tiger

                                     talk ()                     talk ()

                 Không có Polymorphism                                     Có Polymorphism
                 if animal = “Lion” then
                       do the Lion talk                                    do the Animal talk
                 else if animal = “Tiger” then
                       do the Tiger talk
                 end



Thiết kế Class
Dương Anh Đức                                              111
So sánh Interface và Generalization

      w Các Interface hỗ trợ biểu diễn độc lập với cài đặt của
        polymorphism
         § Realization relationships có thể băng ngang qua cấu trúc
           phân cấp của quan hệ tổng quát hóa
      w Các Interface chỉ thuần là đặc tả, không có hành vi
         § Abstract base class có thể định nghĩa attributes và
           associations
      w Các Interface hoàn toàn độc lập với quan hệ kế thừa
         § Generalization thường dùng để cài đặt việc dùng lại
         § Interfaces thường dùng để đặc tả việc tái sử dụng các hành
           vi
      w Generalization cung cấp một cách cài đặt polymorphism


Thiết kế Class
Dương Anh Đức                        112
Dùng quan hệ tổng quát hóa để cài Polymorphism

      w Chỉ cung cấp interface cho các class con cháu?
         § Thiết kế tổ tiên như một abstract class
         § Mọi method cài đặt ở các class con cháu
      w Cung cấp interface và behavior mặc định cho các class con
        cháu?
         § Thiết kế tổ tiên như một concrete class với các method mặc
           định
         § Cho phép dùng các polymorphic operation
      w Cung cấp interface và behavior bắt buộc cho các class con
        cháu?
         § Thiết kế tổ tiên là concrete class
         § Không cho phép các polymorphic operation


Thiết kế Class
Dương Anh Đức                        113
Sử dụng quan hệ tổng quát hóa

      w     Chia sẻ các thuộc tính và hành vi chung
      w     Chia sẻ cài đặt
      w     Cài đặt cơ chế Polymorphism
      w     Cài đặt cơ chế Metamorphosis




Thiết kế Class
Dương Anh Đức                      114
Metamorphosis là gì?

      w Metamorphosis
                 § 1. Một thay đổi trong hình dạng, cấu trúc, hay chức năng;
                   đặc biệt là các thay đổi vật lý mà các động vật phải trải qua,
                   như con nòng nọc biến thành con ếc
                 § 2. Mọi thay đổi được ghi nhận, như trong các ký tự, thể
                   hiện, hoặc điều kiện

                 § Xem thêm Webster’s New World Dictionary, Simon &
                   Schuster, Inc., 1979

                         Metamorphosis tồn tại trong thể giới thực
                              Làm sao mô hình hóa chúng?


Thiết kế Class
Dương Anh Đức                                 115
Ví dụ: Metamorphosis

      w Trong trường đại học, có full time students và part time
        students
         § Full time students có ngày tốt nghiệp dự kiến còn part time
           students lại không
         § Part time students có thể đăng ký học tối đa 3 môn trong khi
           full time students không bị giới hạn

                 ParttimeStudent           FulltimeStudent
                 name                      name
                 address                   address
                 studentID                 studentID
                 maxNumCourses             gradDate




Thiết kế Class
Dương Anh Đức                        116
Một hướng tiếp cận Modeling Metamorphosis

      w Có thể tạo một quan hệ tổng quát hóa

                                    Student
                                   name                          Chuyện gì xảy ra nếu
                                   address
                                   studentID                     một part-time student
                                                                  trở thành full-time
                                                                       student?

                 ParttimeStudent               FulltimeStudent
                 maxNumCourses                 gradDate




Thiết kế Class
Dương Anh Đức                                        117
Một hướng tiếp cận khác

      w Quan hệ kế thừa có thể dùng để mô hình hóa cấu trúc, hành vi
        và quan hệ chung và tạo quan hệ với phần “thay đổi”

                                                  Student
                    Student                                        1        1
                                                 name                             Classification
                   name                          address
                   address                       studentID
                   studentID




 ParttimeStudent               FulltimeStudent               FulltimeClassification       ParttimeClassification
  maxNumCourses                gradDate                      gradDate                     maxNumCourses




Thiết kế Class
Dương Anh Đức                                         118
Một hướng tiếp cận khác (tt)

      w Metamorphosis được hoàn tất bởi object “nói chuyện với” phần
        “thay đổi”


            : Student                         : Student              : Parttime       : Fulltime
            Manager                                                Classification   Classification

                        change to full time
                                                          delete

                                                                     create




Thiết kế Class
Dương Anh Đức                                              119
Metamorphosis và tính mềm dẻo

      w Kỹ thuật này thêm tính mềm dẻo cho mô hình


             ResidentInformation               Student
           dorm                               name              1                 1      Classification
           room
           roomKeyID               0..1   1   address
                                              studentID




                                                                FulltimeClassification         ParttimeClassification
                                                                gradDate                       maxNumCourses




Thiết kế Class
Dương Anh Đức                                             120
Bài tập: Định nghĩa Generalizations

      w Hãy cho biết:
         § Tất cả các design class
      w Hãy xác định:
         § Tât cả các tinh chỉnh liên quan đên generalizations có sẵn
         § Mọi ứng dụng generalization mới
            • Kiểm tra là đã xem xétmọi metamorphosis
      w Xây dựng các lược đồ:
         § Class diagram chứa mọi quan hệ tổng quát hóa mới (hay đã
           tính chỉnh) giữa các class
                 § Tinh chỉnh use-case realizations (optional)



Thiết kế Class
Dương Anh Đức                                 121
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á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 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

Thiết kế Class
Dương Anh Đức                         122
Giải quyết đụng độ giữa các Use-Case

      w Nhiều use case có thể truy cập riêng rẽ đến các design object
      w Options
         § Dùng cơ chế truyền message đồng bộ => đến trước được
           xử lý trước
         § Xác định các operation (hay code) cần protect
         § Áp dụng cơ chế access control
            • Lập hàng đợi Message
            • Semaphores (hoặc 'tokens')
            • Các cơ chế khóa khác
      w Lời giải phụ thuộc nhiều vào môi trường cài đặt



Thiết kế Class
Dương Anh Đức                        123
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á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 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

Thiết kế Class
Dương Anh Đức                         124
Xử lý các yêu cầu phi chức năng nói chung
                                                      Analysis Class                Analysis Mechanism(s)

                                         Student                            Persistency, Security
                                         Schedule                           Persistency, Security
                                         CourseOffering                     Persistency, Legacy Interface
                                         Course                             Persistency, Legacy Interface
                                         RegistrationController             Distribution


      Analysis               Design         Implementation
    Mechanism           Mechanism             Mechanism
    (Conceptual)         (Concrete)               (Actual)

                     Legacy
                      Data                                             Some Design Class
  Persistency                              JDBC
                    RDBMS

                      New
  Persistency         Data                  ObjectStore                                                      Design
                    OODBMS                                                                                  Guidelines


     Distribution   Remote Method      Java 1.2 from Sun
                    Invocation (RMI)
    Analysis             Design             Implementation

Thiết kế Class
Dương Anh Đức                                                125
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á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 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

Thiết kế Class
Dương Anh Đức                         126
Checkpoints: Các Class

      w     Tên của mỗi class có phản ánh rõ vai trò của nó không?
      w     Class có biểu diễn một single well-defined abstraction?
      w     Tất cả các attribute và trách nhiệm có gắn kết với nhau?
      w     Có bất kỳ class attribute, operation hay relationship nào cần
            tổng quát hóa, nghĩa là, chuyển lên tổ tiên không?
      w     Mọi yêu cầu trên class đã xử lý?
      w     Mọi đòi hỏi trên class phù hơp với với statecharts mô hình hóa
            hành vi của class và các thể hiện của nó?
      w     Đã mô tả trọn vẹn chu kỳ sống của các thể hiện của class ?
      w     Class thực hiện mọi hành vi cần thiết?




Thiết kế Class
Dương Anh Đức                            127
Checkpoints: Operations

      w Các operation có dễ hiểu?
      w Các mô tả trạng thái của class và hành vi của các object của nó
        có chính xác?
      w Class có thực hiện đúng hành vi yêu cầu nó?
      w Bạn đã các định các tham số đúng chưa ?
      w Bạn đã gán đầy đủ operations cho các message của mỗi
        object?
      w Các đặc tả cài đặt (nếu có) của operation có chính xác ?
      w Các operation signature có phù hợp với ngôn ngữ lập trình cài
        đặt hệ thống?
      w Tất cả các operation đề cần cho use-case realization?



Thiết kế Class
Dương Anh Đức                        128
Ccmtptpm 13 thietkeclass
Ccmtptpm 13 thietkeclass
Ccmtptpm 13 thietkeclass

More Related Content

More from Nguyen Tran (20)

Se 06
Se 06Se 06
Se 06
 
12report
12report12report
12report
 
11script
11script11script
11script
 
10team
10team10team
10team
 
09componentdeployment
09componentdeployment09componentdeployment
09componentdeployment
 
08activity
08activity08activity
08activity
 
07state
07state07state
07state
 
06collaboration
06collaboration06collaboration
06collaboration
 
05sequence
05sequence05sequence
05sequence
 
04class
04class04class
04class
 
03usecase
03usecase03usecase
03usecase
 
02intro
02intro02intro
02intro
 
01about
01about01about
01about
 
Clear case
Clear caseClear case
Clear case
 
Business process excution language
Business process excution languageBusiness process excution language
Business process excution language
 
Vs doc man
Vs doc manVs doc man
Vs doc man
 
Cm mi
Cm miCm mi
Cm mi
 
Sql packager
Sql packagerSql packager
Sql packager
 
Snag it
Snag itSnag it
Snag it
 
Record mydesktop
Record mydesktopRecord mydesktop
Record mydesktop
 

Ccmtptpm 13 thietkeclass

  • 1. Công cụ và môi trường phát triển phần mềm Thiết kế Class Thiết kế Class Dương Anh Đức 1
  • 2. Mục tiêu w Tìm hiểu mục đích của bước thiết kế Class và vị trí của công đoạn này trong qui trình w Xác định bổ sung các class và quan hệ của chúng cần để hỗ trợ cho việc cài đặt các cơ chế kiến trúc đã chọn w Xác định và phân tích việc chuyển đổi trạng thái các đối tường trong các class kiểm soát được trạng thái w Tinh chỉnh các quan hệ, operation, và thuộc tính Thiết kế Class Dương Anh Đức 2
  • 3. Vị trí của Thiết kế Class Architectural Analysis Architectural Describe Review the Architecture Describe Architecture Architect Design Concurrency Distribution Reviewer Subsystem Design Use-Case Analysis Review the Use-Case Design Design Designer Design Reviewer Class Design Thiết kế Class Dương Anh Đức 3
  • 4. Tổng quan về Class Design Architecture Document Guidelines Design Classes Class Design Design Classes Use-Case Realization Design Model Thiết kế Class Supplementary Dương Anh Đức 4 Specifications
  • 5. 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á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 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 Thiết kế Class Dương Anh Đức 5
  • 6. 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á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 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 Thiết kế Class Dương Anh Đức 6
  • 7. Các khảo sát khi thiết kế Class w Class stereotype § Boundary § Entity § Control w Các design pattern khả dụng w Các cơ chế kiến trúc § Persistence § Distribution § … Thiết kế Class Dương Anh Đức 7
  • 8. Cần bao nhiêu Class ? w Nếu nhiều class đơn giản. Nghĩa là mỗi class: § Đóng gói một phần ít hơn trên toàn bộ hệ thống § Nhiều khả năng dùng lại hơn § Dễ cài đặt hơn w Nếu nhiều class phức tạp. Nghĩa là mỗi class: § Đóng gói một phần nhiều hơn trên toàn bộ hệ thống § Ít khả năng dùng lại hơn § Khó cài đặt hơn Một class phải có một mục tiêu rõ ràng. Một class phải làm một việc gì đó và phải làm tốt điều này ! Thiết kế Class Dương Anh Đức 8
  • 9. Thiết kế các Boundary Class w Các User interface (UI) boundary class § Công cụ xây dựng giao diện người dùng nào sẽ được sử dụng? § Bao nhiêu giao diện có thể được xây dựng bởi công cụ? w Các External system interface boundary class § Thường được mô hình như subsystem MainWindow SubWindow MainForm Button DropDownList Thiết kế Class Dương Anh Đức 9
  • 10. Thiết kế các Entity Class w Các Entity object thường thụ động và persistent w Các yêu cầu về hiệu năng có thể buộc ta phải tái xây dựng w Xem thêm bước xác định Persistent Class Analysis Design << entity >> FatClass FatClass - transientBookeeping - transientBookeeping + commonlyUsedAtt1 + getCommonlyUsedAtt1() + commonlyUsedAtt2 + getCommonlyUsedAtt2() + rarelyUsedAtt3 + getRarelyUsedAtt3() + rarelyUsedAtt4 + getRarelyUsedAtt4() 1 1 FatClassDataHelper FatClassLazyDataHelper + commonlyUsedAtt1 + rarelyUsedAtt3 + commonlyUsedAtt2 + rarelyUsedAtt4 Thiết kế Class Dương Anh Đức 10
  • 11. Thiết kế Control Class w Chuyện gì xảy ra với các Control Class? § Chúng thật sự cần thiết? § Có phải tách chúng ra không? w Dựa vào đâu để quyết định? § Độ phức tạp § Khả năng thay đổi § Tính phân tán và hiệu năng § Transaction management Thiết kế Class Dương Anh Đức 11
  • 12. 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á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 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 Thiết kế Class Dương Anh Đức 12
  • 13. Xác định Persistent Class w Mọi thể hiện của class đều đòi hỏi phải lưu giữ trạng thái của nó w Các Persistent class được gán với cơ chế persistence Client Analysis Design Implementation Class Mechanism Mechanism Mechanism (Conceptual) (Concrete) (Actual) Legacy Data Course Persistency RDBMS JDBC to Ingres New Data Student Persistency OODBMS ObjectStore Thiết kế Class Dương Anh Đức 13
  • 14. Database Design Preview w Chiến lược Persistence phải nhất quán w Ở đây, nhớ rằng các class đều persistent Class Class Design Designer Database Design Database Designer Data Model Thiết kế Class Dương Anh Đức 14
  • 15. 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á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 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 Thiết kế Class Dương Anh Đức 15
  • 16. Định nghĩa các Operation w Mục đích § Ánh xạ các nhiệm vụ đã xác định ơ mức phân tích thành các operation thực hiện chúng w Những cái cần xem xét: § Tên Operation, signature, và mô tả § Operation visibility § Tầm vực Operation • Class operation hay instance operation Thiết kế Class Dương Anh Đức 16
  • 17. Nhắc lại: Operation là gì ? CourseOffering Class addStudent deleteStudent getStartTime Operation getEndTime Thiết kế Class Dương Anh Đức 17
  • 18. Operation: Tìm chúng ở đâu? w Các thông điệp trong các interaction diagram :ClassA :ClassB :ClassA :ClassB // Perform responsibility performResponsibility():result w Các chức năng phụ thuộc vào cài đặt khác § Các chức năng quản trị § Các nhu cầu sao chép class § Các nhu cầu kiểm tra bằng, khác nhau, … Thiết kế Class Dương Anh Đức 18
  • 19. Đặt tên và mô tả các Operation w Các tên thích hợp cho operation § Chỉ rõ kết quả của operation § Đứng dưới góc nhìn của client § Nhất quán qua tất cả các class w Định nghĩa operation signature § operationName(parameter : class,..) : returnType w Cung cấp một mô tả ngắn, bao gồm ý nghĩa của tất cả các tham số Thiết kế Class Dương Anh Đức 19
  • 20. Guidelines: Thiết kế Operation Signatures w Khi thiết kế operation signatures phải bảo đảm hàm chứa: § Các tham số truyền theo giá trị hay tham số? § Các tham số có bị thay đổi bởi operation? § Các tham số là optional? § Tham số có giá trị mặc định? § Miền tham số hợp lệ? w Càng ít tham số càng tốt w Truyền các object thay vì “data bits” Thiết kế Class Dương Anh Đức 20
  • 21. Phát hiện Additional Classes và Relationships ClassA Class2 op1(var1:Class2): Class3 Class3 Additional classes và relationships có thể được thêm vào để hỗ trợ signature Thiết kế Class Dương Anh Đức 21
  • 22. Operation Visibility w Tính khả kiến được dùng để cung cấp tính đóng gói w Giá trị có thể là public, protected, hay private Private operations Protected operations Public operations Thiết kế Class Dương Anh Đức 22
  • 23. Ký hiệu tính khả kiến? w Các ký hiệu sau được dùng: § + Public access § # Protected access § - Private access Class - privateAttribute # protectedAttribute +publicOp() # protectedOp() - privateOp() Thiết kế Class Dương Anh Đức 23
  • 24. Tầm vực w Xác định số lượng thể hiện của attribute / operation § Instance: 1 instance cho mỗi class instance § Classifier: 1 instance cho tất cả class instance w Tầm vực mức Classifier được ký hiệu bằng cách gạch dưới tên attribute/operation Class - classifierScopeAttribute - instanceScopeAttribute classifierScopeOperation() instanceScopeOperation() Thiết kế Class Dương Anh Đức 24
  • 25. Ví dụ: Scope <<entity>> Student - name - address - studentID - nextAvailID : int + addSchedule(theSchedule : Schedule, forSemester : Semester) + getSchedule(forSemester : Semester) : Schedule + hasPrerequisites(forCourseOffering : CourseOffering) : boolean # passed(theCourseOffering : CourseOffering) : boolean + getNextAvailID() : int Thiết kế Class Dương Anh Đức 25
  • 26. Utility Classes w Thế nào là một Utility Class? § Utility là một class stereotype § Dùng để chỉ các class chứa một bộ các chương trình con miễn phí w Tại sao lại dùng chúng? § Để cung cấp các dịch vụ có thể hữu dụng trong các ngữ cảnh khác nhau § Để gói các hàm thư viện hay các ứng dụng phi đối tượng <<utility>> MathFunctions Thiết kế Class Dương Anh Đức 26
  • 27. Ví dụ: Utility Classes <<utility>> MathPack -randomSeed : long = 0 -pi : double = 3.14159265358979 +sin (angle : double) : double +cos (angle : double) : double +random() : double Thiết kế Class Dương Anh Đức 27
  • 28. Ví dụ: Định nghĩa các Operation <<Interface>> <<control>> ICourseCatalogSystem RegistrationController 1 (from External System Interfaces) (from Registration) 0..* + getCourseOfferings() + submitSchedule() + initialize() + saveSchedule() + getCourseOfferings() : CourseOfferingList + getCurrentSchedule(forStudent : Student, forSemester : Semester) : Schedule + deleteCurrentSchedule() <<class>> + new(forStudent : string) +currentSchedule + getStudent(withID : string) : Student 0..1 <<entity>> 0..1 Schedule (from University Artifacts) 0..1 0..* 0..* +registrant 0..* 0..1 <<entity>> +alternateCourses Student. 1 (from University Artifacts) +primaryCourses + getTuition() : double 0..2 0..4 + addSchedule(theSchedule : Schedule) + getSchedule(forSemester : Semester) : Schedule <<entity>> + deleteSchedule(forSemester : Semester) CourseOffering + hasPrerequisites(forCourseOffering : CourseOffering) : boolean (from University Artifacts) # passed(theCourseOffering : CourseOffering) : boolean <<class>> + getNextAvailID() : int + getStudentID() : int + getName() : string + getAddress() : string Thiết kế Class Dương Anh Đức 28
  • 29. Bài tập: Định nghĩa các Operation w Hãy cho biết: § Các architectural layers, các package và các phụ thuộc của chúng § Các Design class cho một use case cụ thể (còn tiếp) Thiết kế Class Dương Anh Đức 29
  • 30. Bài tập: Define Operations (tt.) w Với các design class, hãy xác định: § Các Operation và mô tả hoàn chỉnh của chúng § Operation scope và visibility § Mọi mối quan hệ và các class bổ sung để hỗ trợ cho các operation đã định nghĩa (còn tiếp) Thiết kế Class Dương Anh Đức 30
  • 31. Bài tập: Định nghĩa các Operation (tt.) w Xây dựng lược đồ sau: § VOPC class diagram, chứa tất cả các operation, operation signature, và các quan hệ Thiết kế Class Dương Anh Đức 31
  • 32. 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á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 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 Thiết kế Class Dương Anh Đức 32
  • 33. Nhắc lại: Package Element Visibility PackageA Class A1 Class A2 A Class A3 Chỉ có thể tham chiếu tới các public class từ PackageB bên ngoài package B chứa nó +Class B1 -Class B2 Public visibility Private visibility OO Principle: Encapsulation Thiết kế Class Dương Anh Đức 33
  • 34. 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á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 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 Thiết kế Class Dương Anh Đức 34
  • 35. Định nghĩa các Method w Method là gì ? § Mô tả cài đặt của operation w Mục đích § Định nghĩa các khía cạnh đặc biệt của operation implementation w Những gì cần xem xét: § Các thuật toán đặc biệt § Các object và các operation khác cần sử dụng § Cách cài đặt và sử dụng các attribute và các tham số § Cách cài đặt và sử dụng các mối quan hệ Thiết kế Class Dương Anh Đức 35
  • 36. 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á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 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 Thiết kế Class Dương Anh Đức 36
  • 37. Định nghĩa các trạng thái w Mục đích § Thiết kế ảnh hưổng của trạng thái đối tượng lên hành vi của nó § Phát triển statecharts để mô hình các hành vi này w Những gì cần xem xét: § Những object nào có trạng thái đáng kể? § Cách xác định các trạng thái của một object? § Cách ánh xạ statechart với phần còn lại của mô hình? Thiết kế Class Dương Anh Đức 37
  • 38. Statechart là gì? w Là 1 đồ thị có hướng với các node là các trạng thái nối với nhau bới các transition w Mô tả lịch sử đời sống của đối tượng State Event State Name event(args) [guard condition] stateVar : type = value / operation(args) ^target.sendEvent(args) entry/ entry action do/ activity exit/ exit action Action Activity Transition Thiết kế Class Dương Anh Đức 38
  • 39. Các trạng thái đặc biệt w Trang thái bắt đầu (Initial state) § Là trạng thái khi mới được khởi tạo của object § Mang tính bắt buộc § Chỉ có thể có 1 initial state Initial state w Trang thái kết thúc (Final state) § Chỉ vị trí kết thúc đời sống của object § Optional § Có thể có nhiều Final state Thiết kế Class Dương Anh Đức 39
  • 40. Qui trình suy dẫn ra Statecharts w Xác định và định nghĩa các trạng thái w Xác định các event w Xác định các transition (hồi đáp lại các event) w Thêm các activity và các action Thiết kế Class Dương Anh Đức 40
  • 41. Xác định và định nghĩa các trạng thái w Significant, dynamic attributes Số sinh viên tối đa trong 1 lớp là 100 numStudents < 100 numStudents > = 100 Open Closed w Sự tồn tại và không tồn tại của các link Professor Link to Professor Link to Professor Exists Doesn’t Exist 0..1 0..* Assigned Unassigned CourseOffering Thiết kế Class Dương Anh Đức 41
  • 42. Xác định các Event w Xem xét các class interface operation <<entity>> CourseOffering 0..* 0..1 <<entity>> + addProfessor() Professor +instructor + removeProfessor() Events: addProfessor, removeProfessor Thiết kế Class Dương Anh Đức 42
  • 43. Xác định các Transition w Với mỗi trạng thái, xác định events nào gây ra transitions đến trạng thái nào, bao gồm các điều kiện kiểm soát, nếu cần w Transitions mô tả điều gì xảy ra khi đối tượng hồi đáp lại một event nhân được <<entity>> CourseOffering 0..* 0..1 <<entity>> + addProfessor() Professor +instructor + removeProfessor() Unassigned addProfessor removeProfessor Assigned Thiết kế Class Dương Anh Đức 43
  • 44. Thêm Activities và Actions w Activities State A § Kết hợp với một trạng thái § Bắt dầu khi trạng thái bắt đầu action § Cần thời gian để hoàn tất event[ condition ] / action § Có thể ngắt activity State B State C do: activity entry: action w Actions § Kết hợp với 1 transition § Cần thời gian không đáng kể để hoàn tất § Không thể ngắt ngang Thiết kế Class Dương Anh Đức 44
  • 45. Gửi Events w Một event có thể gây ra việc gửi một event khác w Một activity cùng có thể gửi event đến object khác State A event ^TargetObject.event State B do: ^TargetObject.event Thiết kế Class Dương Anh Đức 45
  • 46. Ví dụ: Statechart add student / numStudents = numStudents + 1 / numStudents = 0 remove student / numStudents = numStudents - 1 Unassigned closeRegistration cancel Cancelled addProfessor do: Send cancellation notices close removeProfessor cancel [ numStudents = 10 ] cancel Full close[ numStudents < 3 ] close add student / closeRegistration [ has Professor assigned ] [ numStudents = 10 ] numStudents = numStudents + 1 Assigned closeRegistration[ numStudents >= 3 ] Committed do: Generate class roster close[ numStudents >= 3 ] remove student / numStudents = numStudents - 1 Thiết kế Class Dương Anh Đức 46
  • 47. Ví dụ: Statechart với các trạng thái lồng nhau superstate / numStudents = 0 Open closeRegistration Closed close Cancelled Unassigned do: Send cancellation notices cancel cancel substate Full close[ numStudents < 3 ] remove a professor [ numStudents = 10 ] close add a professor closeRegistration [ has Professor assigned ] closeRegistration[ numStudents >= 3 ] Committed Assigned do: Generate class roster add student / numStudents = numStudents + 1 close[ numStudents >= 3 ] H remove student / numStudents = numStudents - 1 Thiết kế Class Dương Anh Đức 47
  • 48. Những Object có Significant State? w Các Object có vai trò thể hiện rõ bởi state transitions w Các use case phức tạp là state-controlled w Không cần mô hình hóa tất cả các object § Các Object dễ dàng cài đặt § Các Object không thuộc loại state-controlled § Các Object chỉ với một trạng thái Thiết kế Class Dương Anh Đức 48
  • 49. Cách Statecharts gắn với phần còn lại? w Các Event biến thành các operation w Các Method phải được cập nhật với các thông tin đặc thù cho các trạng thái w Các trạng thái được biểu diễn bởi attributes § Chúng là input cho bước định nghĩa Attribute [numStudents = 10] Open Full CourseOffering add student / /- numStudents numStudents = numStudents + 1 + addStudent() (Stay tuned for derived attributes) Thiết kế Class Dương Anh Đức 49
  • 50. Bài tập: Định nghĩa States (optional) w Hãy cho biết: § Tất cả các design classe w Hãy xác định: § Các Class vứi significant state-controlled behavior § Các trạng thái và transitions quan trong của class w Hãy xây dựng lược đồ: § Statechart của một class Thiết kế Class Dương Anh Đức 50
  • 51. 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á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 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 Thiết kế Class Dương Anh Đức 51
  • 52. Định nghĩa Attributes w Mục đích § Formalize definition of attributes w Những gì cần xem xét: § Persistency § Visibility § Tên gọi, kiểu, và giá trị mặc định Thiết kế Class Dương Anh Đức 52
  • 53. Nhắc lại: Thế nào là Attribute? Object Class Attribute Attribute Value :CourseOffering number = 101 startTime = 900 CourseOffering endTime = 1100 number startTime endTime :CourseOffering number = 104 startTime = 1300 endTime = 1500 Thiết kế Class Dương Anh Đức 53
  • 54. Cách tìm ra các Attribute? w Khảo sát mô tả của các method w Khảo sát các trạng thái w Bất kỳ thông tin nào mà class cần duy trì Thiết kế Class Dương Anh Đức 54
  • 55. Biểu diễn Attribute w Mô tả name, type, và giá trị mặc định § attributeName : Type = Default w Tuân thủ qui ước đặt tên của NNLT và dự án w Type phải là KDL cơ sở trong NNLT cài đặt § Các KDL định sẵn, người dùng đ/n w Mô tả tình khả kiến § Public: ‘+’ § Private: ‘-’ § Protected: ‘#’ Thiết kế Class Dương Anh Đức 55
  • 56. Các Derived Attribute w Thế nào là derived attribute? § Một attribute mà giá trị co thể tính từ giá trị của các attribute khác w Khi nào dùng chúng? § Khi không đủ thời gian để tính lại giá trị mỗi khi cần thiết § Dung hòa giữa thời gian thực hiện và bộ nhớ sử dụng Thiết kế Class Dương Anh Đức 56
  • 57. Ví dụ: Define Attributes <<Interface>> ICourseCatalogSystem (from External System Interfaces) <<control>> RegistrationController (from Registration) 0..1 +currentSchedule <<entity>> 0..1 Schedule 0..1 (from University Artifacts) - semester : Semester 0..* 0..* 0..* +registrant +alternateCourses +primaryCourses 0..1 0..2 0..4 <<entity>> <<entity>> Student. 1 CourseOffering (from University Artifacts) (from University Artifacts) - name : string - number : String = "100" - address : string - startTime : Time <<class>> - nextAvailID : int - endTime : Time - studentID : int - days : string - dateofBirth : Date /- numStudents : int = 0 Thiết kế Class Dương Anh Đức 57
  • 58. Bài tập: Define Attributes (optional) w Hãy cho biết: § Các architectural layers, các package và phụ thuộc của chúng § Các Design class của một use case cụ thể (còn tiếp) Thiết kế Class Dương Anh Đức 58
  • 59. Bài tập: Define Attributes (tt.) w Với các design class hãy xác định: § Các Attribute và mô tả đầy đủ của nó § Tầm vực và tính khả kiến của Attribute § Mọi mối quan hệ và class bổ sung để hỗ trợ cho việc định nghĩa các attribute và attribute signatures (còn tiếp) Thiết kế Class Dương Anh Đức 59
  • 60. Bài tập: Define Attributes (cont.) w Xây dựng lược đồ: § VOPC class diagram, chứa tất cả các attribute và mối quan hệ Thiết kế Class Dương Anh Đức 60
  • 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á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 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 Thiết kế Class Dương Anh Đức 61
  • 62. Định nghĩa Dependency w Dependency là gì? § Là một loại quan hệ giữa hai object Client Supplier 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 Thiết kế Class Dương Anh Đức 62
  • 63. So sánh Dependency và Association 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ộ Supplier2 § Tham chiếu đến tham số § Tham chiếu toàn cục Dependency § Tham chiếu đến trường dữ liệu (Field) Association Client Supplier1 Thiết kế Class Dương Anh Đức 63
  • 64. Local Variable Visibility w Operation op1() chứa một biến cục bộ có kiểu ClassB ClassA op1 () ClassB Thiết kế Class Dương Anh Đức 64
  • 65. Parameter Visibility w Thể hiện của ClassB được truyền đến cho thể hiện của ClassA ClassA op1 (param1: ClassB) ClassB Thiết kế Class Dương Anh Đức 65
  • 66. 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) ClassA op1 () ClassUtility utilityOp () Thiết kế Class Dương Anh Đức 66
  • 67. Xác định Dependency 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 Thiết kế Class Dương Anh Đức 67
  • 68. Ví dụ: Trước khi định nghĩa Dependency <<Interface>> ICourseCatalogSystem (from External System Interfaces) + getCourseOfferings(forSemester : Semester) : CourseOfferingList 1 0..* courseCatalog <<entity>> <<control>> Schedule RegistrationController (from University Artifacts) (from Registration) currentSchedule - semester + // submit schedule() + // save schedule() 0..1 0..1 + submit() + // save() + // create schedule with offerings() # any conflicts?() + // getCourseOfferings(forSemester) : CourseOfferingList + // create with offerings() 0..1 0..* 0..* 0..* alternateCourses primaryCourses registrant 1 0..2 0..4 0..1 <<entity>> <<entity>> CourseOffering Student (from University Artifacts) (from University Artifacts) - number : String = "100" - name - startTime : Time - address - endTime : Time - StudentID : int - days : Enum + addSchedule(theSchedule : Schedule, forSemester : Semester) + addStudent(studentSchedule : Schedule) + getSchedule(forSemester : Semester) : Schedule + removeStudent(studentSchedule : Schedule) + hasPrerequisites(forCourseOffering : CourseOffering) : boolean + new() # passed(theCourseOffering : CourseOffering) : boolean + setData() Thiết kế Class Dương Anh Đức 68
  • 69. Ví dụ: Sau khi định nghĩa Dependency <<Interface>> ICourseCatalogSystem (from External System Interfaces) + getCourseOfferings(forSemester : Semester) : CourseOfferingList Global visibility <<entity>> <<control>> Schedule RegistrationController (from University Artifacts) (from Registration) currentSchedule - semester + // submit schedule() + // save schedule() 0..1 0..1 + submit() + // save() + // create schedule with offerings() # any conflicts?() + // getCourseOfferings(forSemester) : CourseOfferingList + // create with offerings() Field visibility 0..1 0..* 0..* 0..* Field visibility alternateCourses primaryCourses registrant 1 0..2 0..4 0..1 <<entity>> <<entity>> CourseOffering Student (from University Artifacts) (from University Artifacts) - number : String = "100" - name - startTime : Time - address - endTime : Time - StudentID : int - days : Enum + addSchedule(theSchedule : Schedule, forSemester : Semester) + addStudent(studentSchedule : Schedule) + getSchedule(forSemester : Semester) : Schedule + removeStudent(studentSchedule : Schedule) + hasPrerequisites(forCourseOffering : CourseOffering) : boolean + new() # passed(theCourseOffering : CourseOffering) : boolean + setData() Thiết kế Class Dương Anh Đức 69 Parameter visibility
  • 70. 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á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 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 Thiết kế Class Dương Anh Đức 70
  • 71. Định nghĩa Associations w Mục đích § Tinh chỉnh các association còn lại w Những gì cần xem xét : § Cân nhắc giữa Association và Aggregation § Cân nhắc giữa Aggregation và Composition § Cân nhắc giữa Attribute và Association § Chiều của quan hệ (Navigability) § Thiết kế Association class § Thiết kế bản số (Multiplicity design) Thiết kế Class Dương Anh Đức 71
  • 72. Nhắc lại: Composition là gì ? w Là một dạng của aggregation với tính sở hữu cao và trùng khớp về chu kỳ sống § “Bộ phận” không thể tồn tại lâu hơn “toàn thể” Whole Part Whole Part Aggregation Thiết kế Class Dương Anh Đức 72
  • 73. Aggregation: Shared hay không shared w Shared Aggregation Bản số > 1 Whole 1..* 0..* Part w Non-shared Aggregation Bản số = 1 Bản số = 1 Whole 1 0..* Part Whole 1 0..* Part Composition Theo định nghĩa, composition là non-shared aggregation Thiết kế Class Dương Anh Đức 73
  • 74. Aggregation hay Composition? w Xem xét § Chu kỳ sống của Class1 và Class2 Class1 Class2 aggregation Class1 Class2 composition Thiết kế Class Dương Anh Đức 74
  • 75. Ví dụ: Composition Student 1 0..* Schedule RegisterForCoursesForm 1 1 RegistrationController Thiết kế Class Dương Anh Đức 75
  • 76. Cân nhắc giữa Attributes và Composition w Dùng composition khi § Các thuộc tính cần được nhận dạng độc lập § Nhiều class có chung các thuộc tính § Các thuộc tính có cấu trúc phức tạp và bản thân chúng cũng có thuộc tính riêng § Các thuộc tính có hành vi riêng (phức tạp) § Các thuộc tính có quan hệ riêng w Các trường hợp còn lại dùng attributes Thiết kế Class Dương Anh Đức 76
  • 77. Ví dụ: Attributes/Composition <<entity>> Attributes Student - name <<entity>> - address <<classifier scope>> - nextAvailID : int Schedule - StudentID : int - Semester - dateofBirth : Date + submit() + // save() + addSchedule() 1 0..* # any conflicts?() + getSchedule() + // create with offerings() + delete schedule() + hasPrerequisites() + new() # passed() + passed() Composition of separate class Thiết kế Class Dương Anh Đức 77
  • 78. Chiều của quan hệ w Khảo sát các interaction diagram w Ngay cả khi cả 2 chiều đều có vẻ cần thiết, vẫn có thể chỉ 1 chiều hoạt động § Một chiều quan hệ ít xảy ra § Số thể hiện của một class ít Schedule primaryCourses CourseOffering 0..* 0..4 ? Schedule primaryCourses CourseOffering Schedule primaryCourses CourseOffering 0..* 0..4 0..* 0..4 Thiết kế Class Dương Anh Đức 78
  • 79. Ví dụ: Tinh chỉnh chiều quan hệ w Tổng số Schedule nhỏ, hay w Không bao giờ cần một list Schedule primaryCourses CourseOffering Schedule có CourseOffering xuất hiện trên đó 0..* 0..4 w Tổng số CourseOffering nhỏ, hay Schedule primaryCourses CourseOffering w Không bao giờ cần một list 0..* 0..4 CourseOffering có Schedule xuất hiện trên đó w Tổng số CourseOffering và Schedule đều không nhỏ Schedule primaryCourses CourseOffering w Phải quan tâm đến cả 2 chiều 0..* 0..4 Thiết kế Class Dương Anh Đức 79
  • 80. Ví dụ: Thiết kế Association Class alternateCourses 0..* 0..2 Schedule primaryCourses CourseOffering 0..* 0..4 PrimaryScheduleOfferingInfo - grade: char = I Design Decisions alternateCourses 0..* 0..2 Schedule PrimaryScheduleOfferingInfo CourseOffering primaryCourseOfferingInfo 1 0..4 - grade: char = I 0..* 1 Thiết kế Class Dương Anh Đức 80
  • 81. Thiết kế bản số w Bản số = 1, hay = 0..1 § Có thể cài đặt đơn giản như một giá trị hay pointer § Không cần thiết kế gì thêm Professor instructor CourseOffering 0..1 0..* w Bản số > 1 § Không thể dùng giá trị đơn hay pointer § Cần thực hiện thêm một số công việc thiết kế Professor instructor CourseOffering Cần một 0..1 0..* container Thiết kế Class Dương Anh Đức 81
  • 82. Multiplicity Design Options w Mô hình hóa tường minh một container class CourseOfferingList Professor instructor CourseOffering <<entity>> +instructor Professor 0..1 0..* + new() 0..1 0..1 + add() 1 0..* w Ghi chú <<entity>> CourseOffering List Professor instructor CourseOffering 0..1 0..* Thiết kế Class Dương Anh Đức 82
  • 83. Parameterized Class (template) là gì? w Là một class dùng để định nghĩa các class khác w Thường dùng cho các container class § Một số container class thông dụng: • Set, list, dictionary, stack, queue, … Formal Item arguments Parameterized List Class Thiết kế Class Dương Anh Đức 83
  • 84. Thể hiện của Parameterized Class Kết buộc tường minh Kết buộc ẩn Formal arguments Instantiated Class <actual arguments> Parameterized Class HAY <<bind>> <actual arguments> Instantiated Class Thiết kế Class Dương Anh Đức 84
  • 85. Ví dụ: Thể hiện của Parameterized Class Trước <<entity>> CourseOfferingList CourseOffering 1 0..* Sau Item List List <CourseOffering> CourseOffering HAY <<bind>> <CourseOffering> CourseOfferingList CourseOffering Thiết kế Class Dương Anh Đức 85
  • 86. Multiplicity Design: Optionality w Nếu một link là tùy chọn, hãy cèn thêm một operation để kiểm tra sự tồn tại của link Professor CourseOffering 0..1 0..* hasInstructor( ) : Boolean isTeaching( ) : Boolean Thiết kế Class Dương Anh Đức 86
  • 87. Bài tập: Đ/n Dependency và Association w Hãy cho biết: § Use-case realization của 1 use case và chi tiết thiết kế của 1 subsystem § Thiết kế của tất cả các design element Thiết kế Class Dương Anh Đức 87
  • 88. Bài tập: Đ/n Dependenc và Association (tt.) w Hãy xác định: § Chiều của mỗi quan hệ § Mọi class cần bổ sung để hỗ trợ cho việc thiết kế quan hệ § Mọi association được tinh chỉnh thành dependency § Mọi association được tinh chỉnh thành aggregation hoặc composition § Mọi tinh chỉnh liên quan đến bản số Thiết kế Class Dương Anh Đức 88
  • 89. Bài tập: Đ/n Dependency và Association (tt.) w Xây dựng lược đồ § Một bản cập nhật của VOPC, bao gồm cả các tinh chỉnh quan hệ Thiết kế Class Dương Anh Đức 89
  • 90. 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á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 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 Thiết kế Class Dương Anh Đức 90
  • 91. Định nghĩa quan hệ tổng quát hóa w Mục đích § Xác định các khả năng dùng lại § Tinh chỉnh cây kế thừa để có thể cài đặt hiệu quả w Những gì cần xem xét: § So sánh Abstract classes với concrete classes § Bài toán đa kế thừa § So sánh Generalization và Aggregation § Tổng quát hóa để hỗ trợ tái sử dụng trong cài đặt § Tổng quát hóa để hỗ trợ đa xạ (polymorphism) § Tổng quát hóa để hỗ trợ đa hình (metamorphosis) § Mô phỏng tổng quát hóa Thiết kế Class Dương Anh Đức 91
  • 92. Nhắc lại: Generalization w Một class chi sẻ cấu trúc và hành vi của một hay nhiều class w Là quan hệ “Là một dạng của” ancestor w Trong phân tích, ít khi dùng đến Account balance name number Superclass Withdraw() (parent) CreateStatement() Generalization Relationship Checking Savings Subclasses GetInterest() descendents Thiết kế Class Dương Anh Đức 92
  • 93. Abstract và Concrete Class w Abstract class không có bất kỳ thể hiện nào w Concrete classes có thể có thể hiện (object) Animal {abstract} Abstract class Chuyên biệt hóa talk () {abstract} Abstract operation Communication Không có thể hiện của Animal Lion Tiger talk () talk () Tất cả các object đều hoặc là Lion hoặc là Tiger Thiết kế Class Dương Anh Đức 93
  • 94. Nhắc lại: Đa kế thừa w Một class có thể kế thừa từ nhiều class FlyingThing Animal multiple inheritance Airplane Helicopter Bird Wolf Horse Dùng đa kế thức chỉ khi thật cần thiết, và phải luôn cẩn thận ! Thiết kế Class Dương Anh Đức 94
  • 95. Các vấn đề của đa kế thừa Tên của attribute hay Lặp lại việc kế thừa operation bị trùng FlyingThing Animal AnimateObject color color color getColor getColor FlyingThing Animal Bird Bird Lời giải của các vấn đề trên phụ thuộc cài đặt cụ thể Thiết kế Class Dương Anh Đức 95
  • 96. Các ràng buộc của quan hệ tổng quát hóa w Complete (Hoàn chỉnh) § Kết thúc toàn bộ cây kế thừa trong thiết kế w Incomplete (Không hoàn chỉnh ) § Cây kế thừa có thể mở rộng w Disjoint (Phân tách) § Các Subclass loại trừ lần nhau § Không hỗ trợ đa kế thừa w Overlapping (Chồng lắp) § Các Subclass không loại trừ lẫn nhau § Hỗ trợ đa kế thừa Thiết kế Class Dương Anh Đức 96
  • 97. Ví dụ: Generalization Constraints Không hỗ trợ Asset đa kế thừa {disjoint} Bank Real Estate Security Account {disjoint,complete} {disjoint} Saving Checking Stock Bond Kết thúc cây kế thừa Thiết kế Class Dương Anh Đức 97
  • 98. Ví dụ: Generalization Constraints (tt.) Hoã trôï ña keá thöøa Vehicle {overlapping} Land Water Vehicle Vehicle Amphibious Vehicle Thiết kế Class Dương Anh Đức 98
  • 99. Chọn Generalization hay Aggregation w Rất dễ nhầm lẫm giữa Generalization và aggregation § Generalization biểu diễn quan hệ “là một” hay “dạng của” § Aggregation biểu diễn quan hệ “một bộ phận của” Window Scrollbar Có đúng không? WindowWithScrollbar Thiết kế Class Dương Anh Đức 99
  • 100. Chọn Generalization hay Aggregation Window Scrollbar WindowWithScrollbar Window Một WindowWithScrollbar “là một” Window Một WindowWithScrollbar “chứa một” Scrollbar WindowWithScrollbar Scrollbar 1 1 Thiết kế Class Dương Anh Đức 100
  • 101. Sử dụng quan hệ tổng quát hóa w Chia sẻ các thuộc tính và hành vi chung w Chia sẻ cài đặt w Cài đặt cơ chế Polymorphism w Cài đặt cơ chế Metamorphosis Thiết kế Class Dương Anh Đức 101
  • 102. Sử dụng quan hệ tổng quát hóa w Chia sẻ các thuộc tính và hành vi chung w Chia sẻ cài đặt w Cài đặt cơ chế Polymorphism w Cài đặt cơ chế Metamorphosis Thiết kế Class Dương Anh Đức 102
  • 103. Chia sẻ các thuộc tính và hành vi chung w Tuân thủ qui tắc lập trình “Là một dạng của” w Khả năng thay thể Class List insertTop (Item) Animal insertBottom (Item) removeTop () talk () removeBottom () insert (Item, position) Lion Tiger talk () talk () Stack Các class trên có tuân thủ IS-A style of programming? Thiết kế Class Dương Anh Đức 103
  • 104. Chia sẻ các thuộc tính và hành vi chung (tt) List Animal insertTop (Item) insertBottom (Item) talk () removeTop () removeBottom () insert (Item, position) Lion Tiger talk () talk () Stack Thiết kế Class Dương Anh Đức 104
  • 105. Sử dụng quan hệ tổng quát hóa w Chia sẻ các thuộc tính và hành vi chung w Chia sẻ cài đặt w Cài đặt cơ chế Polymorphism w Cài đặt cơ chế Metamorphosis Thiết kế Class Dương Anh Đức 105
  • 106. Chia sẻ cài đặt: Factoring (phân chia) w Hỗ trợ khả năng dùng lại khi cài đặt class khác w Không thể dùng nếu class bạn muốn “dùng lại” không thể thay đổi List SequentialContainer insertTop (Item) insertBottom (Item) insertTop (Item) removeTop () removeTop () removeBottom () insert (Item, position) List Stack insertBottom (Item) removeBottom () insert (Item, position) Stack Thiết kế Class Dương Anh Đức 106
  • 107. Chia sẻ cài đặt: Delegation (đại diện) w Hổ trợ khả năng dùng lại khi cài đặt class khác w Không thể dùng nếu class bạn muốn “dùng lại” không thể thay đổi List insertTop (Item) insertBottom (Item) List removeTop () removeBottom () Stack insertBottom insert (Item, position) (Item) push (Item) removeBottom () pop (): Item 1 1 insert (Item, position) remove (position) Stack Thiết kế Class Dương Anh Đức 107
  • 108. Quan hệ kế thừa dạng <<implementation>> w Các public operation, attribute và relationship của tổ tiên không nhìn thấy được bởi các client của các thể hiện của các class con cháu w Các class con cháu phải định nghĩa các truy cập đến operations, attributes, và relationships của tổ tiên List push() and pop() có thể truy cập đến các method của List nhưng các thể hiện của insertBottom (Item) removeBottom () Stack thì không insert (Item, position) remove (position) insertTop (Item) <<implementation>> Stack push (Item) pop () Thiết kế Class Dương Anh Đức 108
  • 109. Sử dụng quan hệ tổng quát hóa w Chia sẻ các thuộc tính và hành vi chung w Chia sẻ cài đặt w Cài đặt cơ chế Polymorphism w Cài đặt cơ chế Metamorphosis Thiết kế Class Dương Anh Đức 109
  • 110. Nhắc lại: Polymorphism là gì ? w Khả năng che dấu nhiều cài đặt bên dưới một interface duy nhất Manufacturer B Manufacturer A Manufacturer C OO Principle: Encapsulation Thiết kế Class Dương Anh Đức 110
  • 111. Cài đặt Polymorphism Animal talk () Lion Tiger talk () talk () Không có Polymorphism Có Polymorphism if animal = “Lion” then do the Lion talk do the Animal talk else if animal = “Tiger” then do the Tiger talk end Thiết kế Class Dương Anh Đức 111
  • 112. So sánh Interface và Generalization w Các Interface hỗ trợ biểu diễn độc lập với cài đặt của polymorphism § Realization relationships có thể băng ngang qua cấu trúc phân cấp của quan hệ tổng quát hóa w Các Interface chỉ thuần là đặc tả, không có hành vi § Abstract base class có thể định nghĩa attributes và associations w Các Interface hoàn toàn độc lập với quan hệ kế thừa § Generalization thường dùng để cài đặt việc dùng lại § Interfaces thường dùng để đặc tả việc tái sử dụng các hành vi w Generalization cung cấp một cách cài đặt polymorphism Thiết kế Class Dương Anh Đức 112
  • 113. Dùng quan hệ tổng quát hóa để cài Polymorphism w Chỉ cung cấp interface cho các class con cháu? § Thiết kế tổ tiên như một abstract class § Mọi method cài đặt ở các class con cháu w Cung cấp interface và behavior mặc định cho các class con cháu? § Thiết kế tổ tiên như một concrete class với các method mặc định § Cho phép dùng các polymorphic operation w Cung cấp interface và behavior bắt buộc cho các class con cháu? § Thiết kế tổ tiên là concrete class § Không cho phép các polymorphic operation Thiết kế Class Dương Anh Đức 113
  • 114. Sử dụng quan hệ tổng quát hóa w Chia sẻ các thuộc tính và hành vi chung w Chia sẻ cài đặt w Cài đặt cơ chế Polymorphism w Cài đặt cơ chế Metamorphosis Thiết kế Class Dương Anh Đức 114
  • 115. Metamorphosis là gì? w Metamorphosis § 1. Một thay đổi trong hình dạng, cấu trúc, hay chức năng; đặc biệt là các thay đổi vật lý mà các động vật phải trải qua, như con nòng nọc biến thành con ếc § 2. Mọi thay đổi được ghi nhận, như trong các ký tự, thể hiện, hoặc điều kiện § Xem thêm Webster’s New World Dictionary, Simon & Schuster, Inc., 1979 Metamorphosis tồn tại trong thể giới thực Làm sao mô hình hóa chúng? Thiết kế Class Dương Anh Đức 115
  • 116. Ví dụ: Metamorphosis w Trong trường đại học, có full time students và part time students § Full time students có ngày tốt nghiệp dự kiến còn part time students lại không § Part time students có thể đăng ký học tối đa 3 môn trong khi full time students không bị giới hạn ParttimeStudent FulltimeStudent name name address address studentID studentID maxNumCourses gradDate Thiết kế Class Dương Anh Đức 116
  • 117. Một hướng tiếp cận Modeling Metamorphosis w Có thể tạo một quan hệ tổng quát hóa Student name Chuyện gì xảy ra nếu address studentID một part-time student trở thành full-time student? ParttimeStudent FulltimeStudent maxNumCourses gradDate Thiết kế Class Dương Anh Đức 117
  • 118. Một hướng tiếp cận khác w Quan hệ kế thừa có thể dùng để mô hình hóa cấu trúc, hành vi và quan hệ chung và tạo quan hệ với phần “thay đổi” Student Student 1 1 name Classification name address address studentID studentID ParttimeStudent FulltimeStudent FulltimeClassification ParttimeClassification maxNumCourses gradDate gradDate maxNumCourses Thiết kế Class Dương Anh Đức 118
  • 119. Một hướng tiếp cận khác (tt) w Metamorphosis được hoàn tất bởi object “nói chuyện với” phần “thay đổi” : Student : Student : Parttime : Fulltime Manager Classification Classification change to full time delete create Thiết kế Class Dương Anh Đức 119
  • 120. Metamorphosis và tính mềm dẻo w Kỹ thuật này thêm tính mềm dẻo cho mô hình ResidentInformation Student dorm name 1 1 Classification room roomKeyID 0..1 1 address studentID FulltimeClassification ParttimeClassification gradDate maxNumCourses Thiết kế Class Dương Anh Đức 120
  • 121. Bài tập: Định nghĩa Generalizations w Hãy cho biết: § Tất cả các design class w Hãy xác định: § Tât cả các tinh chỉnh liên quan đên generalizations có sẵn § Mọi ứng dụng generalization mới • Kiểm tra là đã xem xétmọi metamorphosis w Xây dựng các lược đồ: § Class diagram chứa mọi quan hệ tổng quát hóa mới (hay đã tính chỉnh) giữa các class § Tinh chỉnh use-case realizations (optional) Thiết kế Class Dương Anh Đức 121
  • 122. 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á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 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 Thiết kế Class Dương Anh Đức 122
  • 123. Giải quyết đụng độ giữa các Use-Case w Nhiều use case có thể truy cập riêng rẽ đến các design object w Options § Dùng cơ chế truyền message đồng bộ => đến trước được xử lý trước § Xác định các operation (hay code) cần protect § Áp dụng cơ chế access control • Lập hàng đợi Message • Semaphores (hoặc 'tokens') • Các cơ chế khóa khác w Lời giải phụ thuộc nhiều vào môi trường cài đặt Thiết kế Class Dương Anh Đức 123
  • 124. 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á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 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 Thiết kế Class Dương Anh Đức 124
  • 125. Xử lý các yêu cầu phi chức năng nói chung Analysis Class Analysis Mechanism(s) Student Persistency, Security Schedule Persistency, Security CourseOffering Persistency, Legacy Interface Course Persistency, Legacy Interface RegistrationController Distribution Analysis Design Implementation Mechanism Mechanism Mechanism (Conceptual) (Concrete) (Actual) Legacy Data Some Design Class Persistency JDBC RDBMS New Persistency Data ObjectStore Design OODBMS Guidelines Distribution Remote Method Java 1.2 from Sun Invocation (RMI) Analysis Design Implementation Thiết kế Class Dương Anh Đức 125
  • 126. 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á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 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 Thiết kế Class Dương Anh Đức 126
  • 127. Checkpoints: Các Class w Tên của mỗi class có phản ánh rõ vai trò của nó không? w Class có biểu diễn một single well-defined abstraction? w Tất cả các attribute và trách nhiệm có gắn kết với nhau? w Có bất kỳ class attribute, operation hay relationship nào cần tổng quát hóa, nghĩa là, chuyển lên tổ tiên không? w Mọi yêu cầu trên class đã xử lý? w Mọi đòi hỏi trên class phù hơp với với statecharts mô hình hóa hành vi của class và các thể hiện của nó? w Đã mô tả trọn vẹn chu kỳ sống của các thể hiện của class ? w Class thực hiện mọi hành vi cần thiết? Thiết kế Class Dương Anh Đức 127
  • 128. Checkpoints: Operations w Các operation có dễ hiểu? w Các mô tả trạng thái của class và hành vi của các object của nó có chính xác? w Class có thực hiện đúng hành vi yêu cầu nó? w Bạn đã các định các tham số đúng chưa ? w Bạn đã gán đầy đủ operations cho các message của mỗi object? w Các đặc tả cài đặt (nếu có) của operation có chính xác ? w Các operation signature có phù hợp với ngôn ngữ lập trình cài đặt hệ thống? w Tất cả các operation đề cần cho use-case realization? Thiết kế Class Dương Anh Đức 128