ในแผนภาพคลาส UML ความสัมพันธ์แบบเชื่อมโยงกับความสัมพันธ์แบบพึ่งพาต่างกันอย่างไร
จากสิ่งที่ฉันรู้ความสัมพันธ์เป็นความสัมพันธ์ที่แน่นแฟ้นมากกว่าการพึ่งพาอาศัยกัน แต่ฉันไม่แน่ใจว่ามันแข็งแกร่งแค่ไหน
ตัวอย่างใด ๆ ก็ยินดีต้อนรับ :)
ในแผนภาพคลาส UML ความสัมพันธ์แบบเชื่อมโยงกับความสัมพันธ์แบบพึ่งพาต่างกันอย่างไร
จากสิ่งที่ฉันรู้ความสัมพันธ์เป็นความสัมพันธ์ที่แน่นแฟ้นมากกว่าการพึ่งพาอาศัยกัน แต่ฉันไม่แน่ใจว่ามันแข็งแกร่งแค่ไหน
ตัวอย่างใด ๆ ก็ยินดีต้อนรับ :)
คำตอบ:
ความแตกต่างระหว่างการพึ่งพาและการเชื่อมโยงคืออะไร? :
โดยทั่วไปคุณใช้การเชื่อมโยงเพื่อแสดงบางสิ่งเช่นเขตข้อมูลในชั้นเรียน ลิงก์จะอยู่ที่นั่นเสมอซึ่งคุณสามารถถามคำสั่งซื้อสำหรับลูกค้าได้ตลอดเวลา จริง ๆ แล้วไม่จำเป็นต้องเป็นฟิลด์หากคุณกำลังสร้างโมเดลจากมุมมองของอินเทอร์เฟซที่มากขึ้นก็สามารถบ่งบอกถึงการมีอยู่ของวิธีการที่จะส่งคืนลูกค้าของคำสั่งซื้อ
หากต้องการอ้างอิงจาก UML Distilled รุ่นที่ 3 (ตอนนี้เพิ่งออก) "การอ้างอิงมีอยู่ระหว่างสององค์ประกอบหากการเปลี่ยนแปลงคำจำกัดความขององค์ประกอบหนึ่ง (ซัพพลายเออร์) อาจทำให้เกิดการเปลี่ยนแปลงกับอีกองค์ประกอบหนึ่ง (ไคลเอนต์)" นี่เป็นความสัมพันธ์ทั่วไปที่คลุมเครือและคลุมเครือซึ่งเป็นสาเหตุที่ UML มีแบบแผนสำหรับการพึ่งพาในรูปแบบต่างๆ ในแง่โค้ดสิ่งต่างๆเช่นการตั้งชื่อประเภทพารามิเตอร์และการสร้างอ็อบเจกต์ในตัวแปรชั่วคราวบ่งบอกถึงการพึ่งพา
...
การเชื่อมโยงมักจะบอกเป็นนัยว่าวัตถุหนึ่งมีวัตถุอื่นเป็นฟิลด์ / คุณสมบัติ / แอตทริบิวต์ (คำศัพท์แตกต่างกัน)
พึ่งพาโดยทั่วไป ( แต่ไม่เสมอไป) หมายความว่าวัตถุยอมรับวัตถุอื่นเป็นพารามิเตอร์วิธี instantiates หรือใช้วัตถุอื่น พึ่งพาเป็นนัยอย่างมากโดยสมาคม
ในเงื่อนไข OOP:
การเชื่อมโยง -> A has-a C object (เป็นตัวแปรสมาชิก)
การพึ่งพา -> การอ้างอิง B (เป็นพารามิเตอร์วิธีการหรือประเภทการส่งคืน)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
นอกจากนี้ยังมีคำตอบที่ละเอียดกว่า
Dependency เหมือนกับเมื่อคุณกำหนดเมธอดที่ใช้ String (ใน Java, C # เนื่องจาก string เป็นอ็อบเจ็กต์) เป็นพารามิเตอร์ดังนั้นคลาสของคุณจะขึ้นอยู่กับคลาส String
การเชื่อมโยงก็เหมือนกับเมื่อคุณประกาศสตริงเป็นแอตทริบิวต์ในชั้นเรียนของคุณ จากนั้นรหัสของคุณจะเชื่อมโยงกับคลาสสตริง
String name = null //: is a association.
การพึ่งพา - การเปลี่ยนแปลงในคลาสมีผลต่อการเปลี่ยนแปลงในคลาสที่ขึ้นกับ ตัวอย่าง - วงกลมขึ้นอยู่กับรูปร่าง (อินเทอร์เฟซ) หากคุณเปลี่ยนรูปร่างจะมีผลกับวงกลมด้วย ดังนั้น Circle จึงมีการพึ่งพารูปร่าง
การเชื่อมโยง - หมายถึงมีความสัมพันธ์บางอย่างระหว่าง 2 วัตถุ
(หนึ่งหนึ่งหลายหลายหลาย)
สมาคมมี 2 ประเภท -
การรวม
1) องค์ประกอบ - การเชื่อมโยงหรือความสัมพันธ์ระหว่างวัตถุ 2 ชิ้นที่แข็งแกร่งขึ้น คุณกำลังสร้างออบเจ็กต์ของคลาส Bภายในคลาส Aอื่น
public class A { B b; public void setB(){ this.b= new B(); } }
ถ้าเราลบคลาส A จะไม่มี B (อ็อบเจ็กต์ B ถูกสร้างขึ้นภายใน A เท่านั้น)
อีกตัวอย่างหนึ่ง - ร่างกายและตับตับไม่สามารถอยู่นอกร่างกายได้
2) การรวม - ประเภทของการเชื่อมโยงที่อ่อนแอกว่าระหว่าง 2 วัตถุ
public class A {
B b;
public void setB(B b_ref){
this.b= b_ref;
/* object B is passed as an argument of a method */
}
}
แม้ว่าคุณจะลบคลาส A แต่ B ก็จะอยู่ภายนอก (B ถูกสร้างขึ้นภายนอกและส่งต่อไปยังคลาส A)
อีกตัวอย่างของสิ่งนี้ - Man & Car มนุษย์มีรถยนต์ แต่มนุษย์และรถยนต์ดำรงอยู่อย่างอิสระ
ที่นี่: "Association vs. Dependency vs. Aggregation vs. Composition"คุณมี vade mecum ที่ยอดเยี่ยมพร้อมด้วยไดอะแกรมคลาส uml และข้อมูลโค้ด ผู้เขียนให้รายการความสัมพันธ์แก่เรา: การเชื่อมโยงการพึ่งพาการรวมตัวการเรียบเรียงในที่เดียว
การพึ่งพาเป็นเรื่องทั่วไปมากและการลดความซับซ้อนนั้นเกี่ยวกับการลดการพึ่งพาให้ได้มากที่สุด
การเชื่อมโยงคือการพึ่งพาที่แข็งแกร่ง (คงที่) การรวมและการจัดองค์ประกอบจะยิ่งแข็งแกร่งขึ้น
การเชื่อมโยงคือเมื่อวัตถุหนึ่งมีลิงก์ไปยังอีกวัตถุหนึ่งและไม่ใช้วิธีการของวัตถุเชิงสัมพันธ์ สำหรับทับทิมเช่น
class User
has_one :profile
end
user = User.first
profile = user.profile
profile.sign_out
หมายความว่าคุณสามารถรับวัตถุโปรไฟล์จากผู้ใช้ แต่ผู้ใช้ไม่ได้ใช้วิธีการของโปรไฟล์ภายในตัวเอง (ไม่มีการพึ่งพาอินเทอร์เฟซของโปรไฟล์)
การพึ่งพาหมายความว่าผู้ใช้มีการเชื่อมโยงไปยังวัตถุอื่นและเรียกใช้วิธีการของวัตถุนั้นภายในตัวเอง
class User
has_one :profile
def personal_info
profile.info
end
end
ที่นี่หากวิธีการข้อมูลของ Profile จะถูกเปลี่ยนหรือเปลี่ยนชื่อคลาส Dependent User ของเราก็จำเป็นต้องเปลี่ยนด้วย