Tôi hiểu thành phần nào trong OOP, nhưng tôi không thể có được một ý tưởng rõ ràng về Uẩn là gì. Ai đó có thể giải thích?
Tôi hiểu thành phần nào trong OOP, nhưng tôi không thể có được một ý tưởng rõ ràng về Uẩn là gì. Ai đó có thể giải thích?
Câu trả lời:
Quy tắc đơn giản:
Ví dụ 1:
Một công ty là một tập hợp của người dân. Công ty là một thành phần của Tài khoản. Khi một Công ty ngừng hoạt động, Tài khoản của Công ty không còn tồn tại nhưng Mọi người vẫn tiếp tục tồn tại.
Ví dụ 2: (rất đơn giản)
Trình soạn thảo văn bản sở hữu bộ đệm (thành phần). Trình soạn thảo văn bản sử dụng tệp (tổng hợp). Khi Trình soạn thảo văn bản được đóng, Bộ đệm bị hủy nhưng Bản thân tệp không bị hủy.
Từ http://en.wikipedia.org/wiki/Object_cysis
Tập hợp khác với thành phần thông thường ở chỗ nó không bao hàm quyền sở hữu. Trong thành phần, khi đối tượng sở hữu bị phá hủy, các đối tượng được chứa cũng vậy. Tóm lại, điều này không nhất thiết đúng. Ví dụ, một trường đại học sở hữu nhiều khoa khác nhau (ví dụ: hóa học) và mỗi khoa có một số giáo sư. Nếu trường đại học đóng cửa, các khoa sẽ không còn tồn tại, nhưng các giáo sư trong các khoa đó sẽ tiếp tục tồn tại. Do đó, một trường đại học có thể được coi là một thành phần của các khoa, trong khi các khoa có một tập hợp các giáo sư. Ngoài ra, một giáo sư có thể làm việc ở nhiều bộ phận, nhưng một bộ phận không thể là một phần của nhiều trường đại học.
Vì vậy - trong khi bạn có mối quan hệ sở hữu với thành phần, đối tượng sở hữu cũng bị hủy khi chủ sở hữu - một tập hợp (và các đối tượng được chứa) có thể tồn tại độc lập.
-
Cập nhật: Lời xin lỗi - câu trả lời này quá đơn giản trong nhận thức muộn màng.
c.batt cung cấp một định nghĩa xuất sắc trong câu trả lời của ông: Tổng hợp so với Thành phần
Không có lời giải thích duy nhất. Các tác giả khác nhau có nghĩa là những thứ khác nhau bằng cách tổng hợp. Hầu hết không thực sự có nghĩa là bất cứ điều gì cụ thể bởi nó.
Thành phần là một Hiệp hội
Tập hợp là một hiệp hội
Thành phần là một Hiệp hội mạnh (Nếu tuổi thọ của đối tượng chứa hoàn toàn phụ thuộc vào đối tượng chứa, thì nó được gọi là liên kết mạnh)
Tập hợp là một Hiệp hội yếu (Nếu tuổi thọ của đối tượng chứa không phụ thuộc vào đối tượng chứa, thì nó được gọi là liên kết yếu)
Thí dụ:
class Contained {
public void disp() {
System.out.println("disp() of Contained A");
}
}
public class Container {
private Contained c;
//Composition
Container() {
c = new Contained();
}
//Association
public Contained getC() {
return c;
}
public void setC(Contained c) {
this.c = c;
}
public static void main(String[] args) {
Container container = new Container();
Contained contained = new Contained();
container.setC(contained);
}
}
Thành phần (hỗn hợp) là một cách để kết hợp các đối tượng đơn giản hoặc các kiểu dữ liệu thành các đối tượng phức tạp hơn. Các tác phẩm là một khối xây dựng quan trọng của nhiều cấu trúc dữ liệu cơ bản
Tập hợp (bộ sưu tập) khác với thành phần thông thường ở chỗ nó không bao hàm quyền sở hữu. Trong thành phần, khi đối tượng sở hữu bị phá hủy, các đối tượng được chứa cũng vậy. Tóm lại, điều này không nhất thiết đúng
╔═══════════╦═════════════════════════╦═══════════════════════╗
║ ║ Aggregation ║ Composition ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time ║
║ Relation ║ Has ║ part-of ║
║ Example ║ Car has driver ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝
Cả hai đều biểu thị mối quan hệ giữa các đối tượng và chỉ khác nhau về sức mạnh của họ.
Các ký hiệu UML cho loại phụ thuộc khác nhau giữa hai lớp
Thành phần : Vì Động cơ là một phần của Xe hơi, mối quan hệ giữa chúng là Thành phần. Đây là cách chúng được thực hiện giữa các lớp Java.
public class Car {
//final will make sure engine is initialized
private final Engine engine;
public Car(){
engine = new Engine();
}
}
class Engine {
private String type;
}
Tập hợp : Vì Tổ chức có Người là nhân viên, nên mối quan hệ giữa họ là Tập hợp. Đây là cách chúng trông giống như về các lớp Java
public class Organization {
private List employees;
}
public class Person {
private String name;
}
tập hợp là một bộ sưu tập đơn giản, giống như một túi bi
thành phần ngụ ý phụ thuộc nội bộ / chức năng, như bản lề trên hộp
xe tổng hợp hành khách; họ vào và ra mà không phá vỡ chức năng của xe
Các lốp xe là thành phần; loại bỏ một và chiếc xe không còn hoạt động chính xác
[lưu ý: lốp dự phòng là tổng hợp!]
Tôi luôn xem thành phần là "cần một", tức là một chiếc xe cần một động cơ và tôi xem tổng hợp là "những thứ liên quan cho một mục đích". Vì vậy, với sự tương tự xe hơi, tổng hợp của tôi có thể là đại diện cho một hành trình có thể liên quan đến việc đưa một chiếc xe và hành khách lại với nhau. Hành trình không sở hữu xe hơi hay hành khách, tôi đang tổng hợp dữ liệu liên quan đến một kịch bản cụ thể. Khi hành trình hoàn thành chiếc xe và hành khách đi tiếp. Khi một chiếc xe kết thúc, chiếc xe và động cơ của nó thường bị phá hủy cùng nhau.
Về mặt ngữ nghĩa, tất cả các bộ được làm từ các tập hợp con, phải không? Vì thế:
Tập hợp là khi các tập con đó tồn tại độc lập với tập hợp cha. Vì một màn hình có thể được rút ra khỏi máy tính để kết nối với màn hình khác.
Thành phần là khi các tập con đó phụ thuộc vào sự tồn tại của tập hợp cha. Vì một chiếc lá là một phần của cây hoặc gan là một phần của cơ thể.
Những khái niệm này nói về loại phụ thuộc giữa hai đối tượng hoặc lớp, về mặt khái niệm. Trực tiếp trong một chương trình, trong một tập hợp, khi đối tượng cha xử lý, các đối tượng tổng hợp cũng nên được xử lý. Trong cùng một kịch bản cho một tác phẩm, các đối tượng con trai hỗn hợp sẽ tồn tại sau đó đối tượng cha phân tán.
Làm thế nào về ví dụ đơn giản này:
Một mảng các đối tượng là một thành phần. Một mảng các con trỏ tới các đối tượng là một tập hợp.
Nếu tôi xóa cái đầu tiên, nội dung của nó sẽ biến mất cùng với nó. Mặt khác, cái thứ hai có thể biến mất mà không ảnh hưởng đến sự tồn tại của các thành viên trừ khi có một phương thức cụ thể xóa từng đối tượng khi con trỏ của nó bị xóa.