dotNet full-stack web developer
Composition, Aggregation and Assosiation in a simple word
ترکیب، تجمیع و ارتباط در مهندسی نرمافزار به مفاهیم مهمی اشاره دارند که در طراحی و پیادهسازی سیستمهای نرمافزاری استفاده میشوند. این مفاهیم نحوه ارتباط بین کلاسها و اشیا در یک سیستم را تعریف میکنند. در زیر به توضیح هر یک از این مفاهیم پرداخته میشود:
۱. ترکیب (Composition): ترکیب به معنای ایجاد ارتباط بین دو کلاس است به گونهای که یک کلاس به عنوان یک قسمت (بخش) از کلاس دیگر شناخته میشود. به عبارت دیگر، یک کلاس ترکیبشده دارای قسمتهای تشکیلدهندهای (زیرکلاسها یا اشیاء) است که هر یک میتوانند مستقل از یکدیگر عمل کنند. وقتی که کلاس اصلی حذف میشود، تمامی قسمتهای تشکیلدهنده نیز از بین میروند.
ترکیب یک رابطه "has-a" است که در آن یک کلاس شامل کلاس دیگری به عنوان بخشی است. وقتی جسم ظرف از بین می رود، قطعات آن نیز از بین می رود. برای نشان دادن این موضوع، اجازه دهید یک کلاس «ماشین» متشکل از یک کلاس «موتور» را در نظر بگیریم.
در این مثال، کلاس "Car" از طریق ترکیب با کلاس "Engine" رابطه "has-a" دارد. هنگامی که یک شی "Car" ایجاد می شود، حاوی یک شی "Engine" است و زمانی که شی "Car" از بین می رود، قسمت "Engine" آن نیز از بین می رود.
۲. تجمیع (Aggregation): تجمیع نیز مانند ترکیب، رابطهای بین دو کلاس ایجاد میکند، اما با این تفاوت که کلاسها به عنوان اجزای مجزای یک کل شناخته میشوند و از هم مستقل هستند. به عبارت دیگر، وقتی کلاس اصلی حذف میشود، کلاسهای دیگر به صورت مستقل باقی میمانند و از بین نمیروند.
تجمیع نیز یک رابطه "has-a" است، اما بر خلاف ترکیب، شیء تجمیع شده می تواند مستقل از شی ظرف وجود داشته باشد. در این مثال، اجازه دهید یک کلاس "Department" را در نظر بگیریم که اشیاء "Employee" را جمع آوری می کند.
در این مثال، کلاس "Department" اشیاء "Employee" را جمع می کند. هنگامی که شی "دپارتمان" از بین می رود، اشیاء "کارمند" بدون تاثیر باقی می مانند و می توانند به طور مستقل وجود داشته باشند.
۳. ارتباط (Association): ارتباط به عنوان یک رابطهی بین دو کلاس یا شیء در نظر گرفته میشود که میتوانند به صورت دوطرفه یا یکطرفه باشد. ارتباط نشاندهندهی ارسال یا دریافت اطلاعات و ارتباطات بین کلاسها است.
ارتباط یک رابطه ساده بین کلاس ها است که اغلب با یک رابطه "uses-a" یا "knows-a" نشان داده می شود. در این مثال، بیایید ارتباط بین کلاس های "دانشجو" و "دوره" را نشان دهیم.
در این مثال، کلاس های "Student" و "Course" از طریق روش "EnrollInCourse" مرتبط می شوند. یک رابطه ساده "uses-a" بین کلاسهای «دانشجو» و «دوره» وجود دارد، و آنها به طور محکمی با هم مرتبط نیستند.
نتیجه
در کل، تفاوت میان ترکیب، تجمیع و ارتباط در مهندسی نرمافزار، در نحوهی ارتباط و تعلق بین کلاسها و اشیاء است. هر یک از این مفاهیم به صورت مختصر، ساختار و روابط میان کلاسها را تعیین میکنند تا بتوان بهترین راهحل را برای پیادهسازی سیستم نرمافزاری مورد نظر انتخاب کرد.
وهمینطور این مقاله را بخوانید
مطلبی دیگر از این انتشارات
Composition Over Inheritance
مطلبی دیگر از این انتشارات
آموزش طراحی سیستم: سه مفهوم سیستم های توزیع شده که باید بدانید
مطلبی دیگر از این انتشارات
چرا می خواهید پایگاه داده خواندن/نوشتن جداگانه داشته باشید؟