Friday, December 11, 2015

[UML Class relationships] Phân biệt quan hệ Aggregation và Composition trong Objective C và Swift

Aggregation

ClassA có dùng lớp và giữa ClassB nhưng không cho lớp khác truy xuất ClassB thông qua ClassA.  Trong Objective C ta dùng thuộc tính là weak để thể hiện mối quan hệ này, code ví dụ như sau:
Ngoài ra ta còn có sơ đồ Aggregation - Navigability:
Theo sơ đồ này thì ta dùng property để lớp khác có thể truy xuất ClassB thông qua ClassA.
Code ví dụ trong Objective C như:
Unit Test giả sử ta huỷ đối tượng ClassB thì ClassA sẽ không gọi hàm trong ClassB được, do đó trong sơ đồ này nên dùng if để kiểm tra đối tượng khi truyền vào để tránh bị crash ứng dụng:
Code ví dụ trong Swift như sau:

Composition

Composition giống như Aggregation nhưng giữ đối tượng theo kiểu strong, thì sẽ không phụ thuộc vào đối tượng truyền vào.
Giống code ở trên nhưng ta thay weak thành strong thì sẽ thể hiện mối quan hệ này, ví dụ như sau:

Cũng viết UnitTest như trên nhưng kết quả khi huỷ object tham chiếu thì đối tượng đó vẫn được giữ lại để thực hiện phương thức:
Code ví dụ trong Swift như sau:

Tài liệu tham khảo:

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.