2010-04-24 25 views
7

Tôi đã đọc một số bài viết về sự khác biệt giữa 3 mối quan hệ này và tôi nghĩ rằng tôi nhận được điểm.cách liên kết, tập hợp và sáng tác được viết như thế nào?

tôi chỉ tự hỏi, tất cả những văn bản này có giống nhau khi mã hóa không?

câu hỏi 1: tất cả 3 chỉ là giá trị của loại đối tượng trong biến mẫu?

class A { 
    public $b = '' 

    public function __construct($object) { 
     $this->b = $object // <-- could be a association, aggregation or a composition relation? 
    } 
} 

câu hỏi 2: nó có phải là một biến mẫu hay nó có thể là biến tĩnh không?

class A { 
    public static $b = '' // <-- nothing changed? 

    public function __construct($object) { 
     $this->b = $object 
    } 
} 

câu hỏi 3: Có sự khác biệt về nơi đối tượng được tạo không?

tôi có xu hướng nghĩ rằng đối tượng thành phần được tạo ra bên trong đối tượng:

class A { 
    public $b = '' 

    public function __construct() { 
     $this->b = new Object // is created inside the object 
    } 
} 

và tập hợp/liên kết được chuyển qua một constructor hoặc phương pháp khác:

class A { 
    public $b = '' 

    public function __construct($object) { // passed through a method 
     $this->b = $object 
    } 
} 

câu hỏi 4: Tại sao/khi điều này là quan trọng cần biết. tôi có phải bình luận một đối tượng bên trong một mối quan hệ khác của nó về hoặc làm bạn làm điều đó trong một sơ đồ UML?

ai đó có thể làm sáng tỏ những câu hỏi này.

cảm ơn!

Trả lời

6

Bạn nói đúng rằng những điều này thường được coi là tham chiếu đối tượng, tất nhiên thường chỉ là các trường thành viên của một số lớp. Điều này chỉ vì nó tự nhiên trong một hệ thống hướng đối tượng, điều này có thể ánh xạ tới những thứ khác trong các ngữ cảnh khác nhau, ví dụ: các khóa ngoại trong cơ sở dữ liệu quan hệ.

Như đã đề cập bởi @erisco, các chi tiết cụ thể về mối quan hệ chỉ có thể được thực hiện trong ngữ cảnh của mô hình tổng thể. Ví dụ: chúng ta có thể đọc mối quan hệ sáng tác giữa Đơn đặt hàng và Dòng đơn hàng như thế này (ví dụ): Đơn đặt hàng bao gồm một hoặc nhiều Dòng đơn đặt hàng.

tôi thường giải thích ba bạn đưa ra như sau:

  1. Hiệp hội: Một biết của B, B có ý nghĩa theo đúng nghĩa của nó.
  2. Tổng hợp: A bao gồm B, B có thể nhận dạng bên ngoài và có thể tồn tại dựa trên giá trị riêng của nó.
  3. Thành phần: A bao gồm B, B không được nhận dạng bên ngoài hoặc không có ý nghĩa bên ngoài thành phần này.

Điều đó nói rằng, tôi đã thấy những điều này được sử dụng có ý nghĩa khá nhiều (và có rất nhiều người trên SO sẽ không đồng ý với đánh giá của tôi!) Vì vậy hãy cẩn thận khi giải thích sơ đồ của người khác: -) Các công ước trên đã phục vụ tôi tốt nhưng YMMV.

Câu hỏi 2: Một tham chiếu tĩnh sẽ mang lại một kết hợp chung trên các trường hợp, nhưng nó chỉ là một cách để thực hiện điều đó và có thể gây ngạc nhiên cho người tiêu dùng.

+0

để ngôn ngữ không thể diễn giải mối quan hệ giữa 2 đối tượng. nó chỉ được hiển thị trong sơ đồ UML để các lập trình viên hiểu được mối quan hệ giữa các đối tượng đó là gì? tôi đã tự hỏi liệu có một cách cụ thể để mã hóa các mối quan hệ này không, nhưng có vẻ như không phải như vậy. các mối quan hệ này sẽ được nhập vào mã dưới dạng nhận xét hay chỉ trong UML? –

2

Wikipedia: Class Diagrams có thể có định nghĩa tốt nhất của bạn. Không có ví dụ nào của bạn phân biệt giữa liên kết, tổng hợp hoặc thành phần. Không có bất kỳ định nghĩa nào về A, hoặc B là gì, không có định nghĩa về mối quan hệ của chúng. Làm thế nào tham chiếu đến đối tượng khác thu được là không liên quan đến sơ đồ lớp.

0

Như clearly stated trong php.net:

Một Hiệp hội là một phần của các bộ phận xây dựng một cách độc lập và bên ngoài có thể nhìn thấy. Khi chúng ta kết hợp các lớp hoặc các đối tượng, mỗi một lớp sẽ giữ một tham chiếu đến các lớp hoặc các đối tượng được liên kết với nó.

Khi chúng tôi liên kết các lớp học tĩnh, một lớp sẽ chứa tham chiếu đến một phiên bản của lớp khác.

Chúng tôi cũng có thể liên kết các trường hợp khi chạy theo chuyển tham chiếu trong hàm tạo (hoặc bất kỳ phương thức nào khác), cho phép chúng tôi tự động thay đổi mối quan hệ liên kết giữa các đối tượng.

Các vấn đề liên quan