อธิบายการเชื่อมโยงการรวมตัวและองค์ประกอบใน OOP

Unified Modeling Language (UML) เป็นมาตรฐาน de-facto สำหรับการสร้างโมเดลระบบเชิงวัตถุ ใน UML มีความสัมพันธ์ที่แตกต่างกันห้าประเภท ได้แก่ การเชื่อมโยงการรวมองค์ประกอบการพึ่งพาและการสืบทอด บทความนี้นำเสนอการอภิปรายเกี่ยวกับแนวคิดสามประการแรกเหล่านี้โดยปล่อยให้แนวคิดที่เหลืออยู่ในบล็อกโพสต์อื่น

การเชื่อมโยงในการเขียนโปรแกรมเชิงวัตถุ

การเชื่อมโยงเป็นความสัมพันธ์ที่อ่อนแอทางความหมาย (การพึ่งพาทางความหมาย) ระหว่างวัตถุอื่นที่ไม่เกี่ยวข้อง การเชื่อมโยงคือความสัมพันธ์แบบ "ใช้" ระหว่างออบเจ็กต์ตั้งแต่สองชิ้นขึ้นไปซึ่งอ็อบเจ็กต์มีอายุการใช้งานของตัวเองและไม่มีเจ้าของ

ตัวอย่างเช่นลองนึกภาพความสัมพันธ์ระหว่างแพทย์และผู้ป่วย แพทย์สามารถเชื่อมโยงกับผู้ป่วยหลายคน ในขณะเดียวกันผู้ป่วยรายหนึ่งสามารถไปพบแพทย์หลายคนเพื่อรับการรักษาหรือปรึกษา วัตถุแต่ละชนิดมีวงจรชีวิตของตัวเองและไม่มี "เจ้าของ" หรือผู้ปกครอง อ็อบเจ็กต์ที่เป็นส่วนหนึ่งของความสัมพันธ์ของการเชื่อมโยงสามารถสร้างและทำลายได้โดยอิสระ

ใน UML ความสัมพันธ์ของการเชื่อมโยงจะแสดงด้วยลูกศรเดียว ความสัมพันธ์ของการเชื่อมโยงสามารถแสดงเป็นหนึ่งต่อหนึ่งหนึ่งต่อหลายหรือหลายต่อกลุ่ม (หรือที่เรียกว่าคาร์ดินาลลิตี้) โดยพื้นฐานแล้วความสัมพันธ์ที่เชื่อมโยงระหว่างวัตถุสองชิ้นขึ้นไปหมายถึงเส้นทางการสื่อสาร (หรือที่เรียกว่าลิงค์) ระหว่างวัตถุเหล่านั้นเพื่อให้วัตถุหนึ่งสามารถส่งข้อความไปยังอีกวัตถุหนึ่งได้ ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นว่าสองคลาสคือ BlogAccount และ BlogEntry เชื่อมโยงกันอย่างไร

BlogAccount ระดับสาธารณะ

   {

       BlogEntry ส่วนตัว [] blogEntries;

       // สมาชิกคนอื่น ๆ ของคลาส BlogAccount

   }

BlogEntry ระดับสาธารณะ

   {

       Int32 blogId;

       คำบรรยายสตริง;

       ข้อความสตริง;

       // สมาชิกคนอื่น ๆ ของคลาส BlogEntry

   }

การรวมในการเขียนโปรแกรมเชิงวัตถุ

การรวมเป็นรูปแบบเฉพาะของการเชื่อมโยงระหว่างวัตถุสองชิ้นขึ้นไปซึ่งแต่ละวัตถุมีวงจรชีวิตของตัวเอง แต่ก็มีความเป็นเจ้าของเช่นกัน การรวมเป็นความสัมพันธ์ทั้งส่วน / ส่วนหรือแม่ / ลูกโดยทั่วไป แต่อาจแสดงถึงการกักกันทางกายภาพหรือไม่ก็ได้ คุณสมบัติที่สำคัญของความสัมพันธ์แบบรวมคือทั้งหมดหรือผู้ปกครอง (เช่นเจ้าของ) สามารถดำรงอยู่ได้โดยไม่ต้องมีส่วนหรือลูกและในทางกลับกัน  

ตัวอย่างเช่นพนักงานอาจอยู่ในแผนกหนึ่งหรือหลายแผนกในองค์กร อย่างไรก็ตามหากแผนกของพนักงานถูกลบออกไปวัตถุของพนักงานจะไม่ถูกทำลาย แต่จะยังคงอยู่ต่อไป โปรดทราบว่าความสัมพันธ์ระหว่างออบเจ็กต์ที่เข้าร่วมในการรวมจะไม่สามารถแลกเปลี่ยนซึ่งกันและกันได้กล่าวคือแผนกอาจ“ เป็นเจ้าของ” พนักงาน แต่พนักงานไม่ได้เป็นเจ้าของแผนก ในตัวอย่างโค้ดต่อไปนี้ความสัมพันธ์การรวมจะเห็นได้ชัดระหว่างคลาส BlogAuthor และ BlogAccount

BlogAuthor ระดับสาธารณะ

   {

       AuthorId Int32 ส่วนตัว;

       สตริงส่วนตัว firstName;

       สตริงส่วนตัว lastName;

       // สมาชิกคนอื่น ๆ ของคลาส BlogAuthor

   }

BlogAccount ระดับสาธารณะ

   {

       BlogEntry ส่วนตัว [] blogEntries;

       // สมาชิกคนอื่น ๆ ของคลาส BlogAccount

   }

โดยปกติการรวมจะแสดงใน UML โดยใช้เส้นที่มีเพชรกลวง เช่นเดียวกับการเชื่อมโยงการรวมอาจเกี่ยวข้องกับความสัมพันธ์แบบหนึ่งต่อหนึ่งหนึ่งต่อกลุ่มหรือหลายต่อหลายระหว่างอ็อบเจ็กต์ที่เข้าร่วม ในกรณีของความสัมพันธ์แบบหนึ่งต่อกลุ่มหรือแบบกลุ่มต่อกลุ่มเราอาจกล่าวได้ว่าเป็นความสัมพันธ์ที่ซ้ำซ้อน

องค์ประกอบในการเขียนโปรแกรมเชิงวัตถุ

การจัดองค์ประกอบเป็นรูปแบบเฉพาะของการรวมตัว ในการจัดองค์ประกอบหากวัตถุแม่ถูกทำลายวัตถุลูกก็จะหยุดอยู่ด้วย การจัดองค์ประกอบเป็นรูปแบบการรวมที่แข็งแกร่งและบางครั้งเรียกว่าความสัมพันธ์แบบ "ตาย" ตัวอย่างเช่นบ้านอาจประกอบด้วยห้องเดียวหรือหลายห้อง ถ้าบ้านถูกทำลายห้องทั้งหมดที่เป็นส่วนหนึ่งของบ้านก็ถูกทำลายไปด้วย ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นถึงความสัมพันธ์ขององค์ประกอบระหว่างสองคลาสบ้านและห้อง

บ้านชั้นสาธารณะ

{

   ห้องส่วนตัว

   บ้านสาธารณะ()

   {

       ห้อง = ห้องใหม่ ();

   }

}

เช่นเดียวกับการรวมกันการเรียบเรียงยังเป็นความสัมพันธ์ทั้งหมด / บางส่วนหรือพ่อแม่ / ลูก อย่างไรก็ตามในองค์ประกอบวงจรชีวิตของชิ้นส่วนหรือเด็กนั้นถูกควบคุมโดยทั้งตัวหรือพ่อแม่ที่เป็นเจ้าของ ควรสังเกตว่าการควบคุมนี้อาจเป็นแบบตรงหรือแบบสกรรมกริยาก็ได้ นั่นคือผู้ปกครองอาจต้องรับผิดชอบโดยตรงต่อการสร้างหรือทำลายเด็กหรือผู้ปกครองอาจใช้ลูกที่สร้างไว้แล้ว ในทำนองเดียวกันอ็อบเจ็กต์พาเรนต์อาจมอบหมายการควบคุมให้พาเรนต์อื่น ๆ เพื่อทำลายอ็อบเจ็กต์ลูก องค์ประกอบจะแสดงใน UML โดยใช้เส้นที่เชื่อมต่อกับวัตถุด้วยเพชรทึบที่ส่วนท้ายของวัตถุที่เป็นเจ้าของวัตถุอื่น

ฉันหวังว่าการอภิปรายเกี่ยวกับความสัมพันธ์การรวมกลุ่มและองค์ประกอบจะช่วยให้คุณเข้าใจว่าแนวคิดทั้งสามนี้แตกต่างกันอย่างไร โปรดจำไว้ว่าการรวมและองค์ประกอบเป็นส่วนย่อยของการเชื่อมโยง ทั้งในการรวมและองค์ประกอบวัตถุของคลาสหนึ่งสามารถเป็นเจ้าของออบเจ็กต์ของคลาสอื่นได้ และทั้งในการรวมและการจัดองค์ประกอบออบเจ็กต์ลูกเป็นของอ็อบเจ็กต์พาเรนต์เดียวกล่าวคืออาจมีเจ้าของเพียงคนเดียว

สุดท้ายในความสัมพันธ์แบบรวมวงจรชีวิตของอ็อบเจ็กต์พาเรนต์และอ็อบเจ็กต์ลูกจะเป็นอิสระ ในความสัมพันธ์ขององค์ประกอบการตายของวัตถุแม่ก็หมายถึงการตายของลูก ๆ