ฉันเข้าใจว่าองค์ประกอบใดที่อยู่ใน OOP แต่ฉันไม่สามารถเข้าใจอย่างชัดเจนว่าการรวมคืออะไร มีคนอธิบายได้ไหม
ฉันเข้าใจว่าองค์ประกอบใดที่อยู่ใน OOP แต่ฉันไม่สามารถเข้าใจอย่างชัดเจนว่าการรวมคืออะไร มีคนอธิบายได้ไหม
คำตอบ:
กฎง่าย ๆ :
ตัวอย่างที่ 1:
บริษัท คือการรวมกลุ่มของผู้คน บริษัท เป็นองค์ประกอบของบัญชี เมื่อ บริษัท หยุดทำธุรกิจบัญชีของตนหยุดอยู่ แต่ผู้คนยังคงมีอยู่
ตัวอย่างที่ 2: (ประยุกต์ง่ายมาก)
ตัวแก้ไขข้อความเป็นเจ้าของบัฟเฟอร์ (องค์ประกอบ) Text Editor ใช้ไฟล์ (การรวม) เมื่อตัวแก้ไขข้อความถูกปิดบัฟเฟอร์จะถูกทำลาย แต่ตัวไฟล์เองจะไม่ถูกทำลาย
จากhttp://en.wikipedia.org/wiki/Object_composition
การรวมนั้นแตกต่างจากการแต่งเพลงธรรมดาที่ไม่ได้บ่งบอกถึงความเป็นเจ้าของ ในการจัดองค์ประกอบเมื่อวัตถุที่เป็นเจ้าของถูกทำลายดังนั้นวัตถุที่มีอยู่ โดยรวมแล้วนี่ไม่จำเป็นต้องเป็นเรื่องจริง ตัวอย่างเช่นมหาวิทยาลัยเป็นเจ้าของแผนกต่าง ๆ (เช่นเคมี) และแต่ละแผนกมีอาจารย์จำนวนหนึ่ง หากปิดมหาวิทยาลัยแผนกจะไม่มีอยู่อีกต่อไป แต่อาจารย์ในแผนกเหล่านั้นจะยังคงอยู่ ดังนั้นมหาวิทยาลัยจึงถูกมองว่าเป็นองค์ประกอบของแผนกในขณะที่ภาควิชามีการรวมตัวของอาจารย์ นอกจากนี้ศาสตราจารย์สามารถทำงานได้มากกว่าหนึ่งแผนก แต่แผนกไม่สามารถเป็นส่วนหนึ่งของมหาวิทยาลัยมากกว่าหนึ่งแห่งได้
ดังนั้น - ในขณะที่คุณมีความสัมพันธ์ความเป็นเจ้าของกับองค์ประกอบวัตถุที่เป็นเจ้าของก็จะถูกทำลายเช่นกันเมื่อเจ้าของ - การรวม (และวัตถุที่มีอยู่) สามารถอยู่ได้อย่างอิสระ
-
อัปเดต: ขอโทษ - คำตอบนี้ง่ายเกินไปในการเข้าใจถึงปัญหาหลังเหตุการณ์
c.batt ให้คำจำกัดความที่ยอดเยี่ยมในคำตอบของเขา: การรวมตัวกับองค์ประกอบ
ไม่มีคำอธิบายเดียว ผู้เขียนที่แตกต่างกันหมายถึงสิ่งต่าง ๆ โดยรวม ส่วนใหญ่ไม่ได้หมายถึงอะไรที่เฉพาะเจาะจงจริงๆ
องค์ประกอบเป็นสมาคม
การรวมตัวเป็นสมาคม
องค์ประกอบเป็นสมาคมที่แข็งแกร่ง (ถ้าชีวิตของวัตถุที่มีอยู่ทั้งหมดขึ้นอยู่กับวัตถุภาชนะมันจะเรียกว่าสมาคมที่แข็งแกร่ง)
การรวมกันเป็นกลุ่มที่อ่อนแอ (ถ้าชีวิตของวัตถุที่มีอยู่ไม่ได้ขึ้นอยู่กับวัตถุภาชนะมันจะเรียกว่าสมาคมอ่อนแอ)
ตัวอย่าง:
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);
}
}
องค์ประกอบ (ส่วนประสม) เป็นวิธีการรวมวัตถุหรือประเภทข้อมูลที่เรียบง่ายเข้ากับวัตถุที่ซับซ้อนมากขึ้น องค์ประกอบเป็นหน่วยการสร้างที่สำคัญของโครงสร้างข้อมูลพื้นฐานจำนวนมาก
การรวม (คอลเลกชัน) แตกต่างจากการแต่งเพลงทั่วไปซึ่งไม่ได้บ่งบอกถึงความเป็นเจ้าของ ในการจัดองค์ประกอบเมื่อวัตถุที่เป็นเจ้าของถูกทำลายดังนั้นวัตถุที่มีอยู่ โดยรวมแล้วนี่ไม่จำเป็นต้องเป็นเรื่องจริง
╔═══════════╦═════════════════════════╦═══════════════════════╗
║ ║ 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 ║
╚═══════════╩═════════════════════════╩═══════════════════════╝
ทั้งแสดงถึงความสัมพันธ์ระหว่างวัตถุและแตกต่างกันเพียงในความแข็งแกร่งของพวกเขา
สัญลักษณ์ UML สำหรับการพึ่งพาชนิดต่าง ๆ ระหว่างสองคลาส
ส่วนประกอบ : เนื่องจากเครื่องยนต์เป็นส่วนหนึ่งของรถยนต์ความสัมพันธ์ระหว่างพวกเขาคือองค์ประกอบ นี่คือวิธีการใช้งานระหว่างคลาส 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;
}
การรวม : เนื่องจากองค์กรมีบุคคลในฐานะพนักงานความสัมพันธ์ระหว่างพวกเขาคือการรวม นี่คือลักษณะที่ปรากฏในแง่ของคลาส Java
public class Organization {
private List employees;
}
public class Person {
private String name;
}
การรวมเป็นคอลเลคชันที่เรียบง่ายเหมือนถุงหินอ่อน
องค์ประกอบหมายถึงการพึ่งพาภายใน / การทำงานเช่นบานพับบนกล่อง
รถยนต์รวมผู้โดยสาร พวกเขาเข้าและออกโดยไม่ทำลายฟังก์ชั่นของรถ
ยางเป็นส่วนประกอบ ลบหนึ่งและรถไม่ทำงานอย่างถูกต้อง
[หมายเหตุ: ยางอะไหล่รวมกัน!]
ฉันมักจะมององค์ประกอบว่า 'ต้องการ' เช่นรถยนต์ต้องการเครื่องยนต์และฉันมองการรวมว่า 'สิ่งต่าง ๆ ที่เกี่ยวข้องกับจุดประสงค์' ดังนั้นการอยู่กับการเปรียบเทียบรถการรวมตัวของฉันอาจเป็นการแสดงการเดินทางซึ่งอาจเกี่ยวข้องกับการนำรถยนต์และผู้โดยสารมาด้วยกัน การเดินทางไม่ได้เป็นเจ้าของรถยนต์หรือผู้โดยสารฉันกำลังรวบรวมข้อมูลที่เกี่ยวข้องกับสถานการณ์เฉพาะ เมื่อการเดินทางเสร็จสิ้นลงรถและผู้โดยสารยังคงดำเนินต่อไป เมื่อรถยนต์สิ้นสุดลงรถยนต์และเครื่องยนต์จะถูกทำลายด้วยกัน
ความหมายชุดทั้งหมดทำจากชุดย่อยใช่มั้ย ดังนั้น:
การรวมตัวกันคือเมื่อส่วนย่อยเหล่านั้นมีอยู่เป็นอิสระจากชุดพ่อ ในฐานะที่เป็นจอภาพสามารถถอดปลั๊กจากคอมพิวเตอร์เพื่อเชื่อมต่อกับอีก
องค์ประกอบคือเมื่อส่วนย่อยเหล่านั้นขึ้นอยู่กับการดำรงอยู่ของพ่อตั้ง ใบเป็นส่วนหนึ่งของต้นไม้หรือตับเป็นส่วนหนึ่งของร่างกาย
แนวคิดเหล่านี้พูดถึงประเภทของการพึ่งพาระหว่างสองวัตถุหรือคลาส โดยตรงในโปรแกรมในการรวมเมื่อวัตถุพ่อจำหน่ายวัตถุรวมควรถูกกำจัดด้วย ในสถานการณ์เดียวกันสำหรับการแต่งภาพวัตถุผสมลูกจะยังคงอยู่จากนั้นวัตถุพ่อก็จะหายไป
ตัวอย่างง่ายๆเกี่ยวกับวิธีนี้:
อาร์เรย์ของวัตถุเป็นองค์ประกอบ อาร์เรย์ของพอยน์เตอร์ไปยังวัตถุคือการรวม
ถ้าฉันลบอันแรกเนื้อหาของมันจะหายไปด้วย วิธีที่สองในทางกลับกันจะหายไปโดยไม่ส่งผลกระทบต่อการดำรงอยู่ของสมาชิกเว้นแต่จะมีวิธีการเฉพาะที่จะลบแต่ละวัตถุเมื่อตัวชี้ถูกลบ