Composition راه حلی است برای طراحی و یا پیادهسازی ارتباط has-a (دارد یک) .Composition و Inheritance هر دو از تکنیک های طراحی هستند.از inheritance برای پیادهسازی رابطه is-a استفاده میشود .ارتباط hast-a برای از اطمینان از قابلیت استفاده مجدد در برنام های ما مورد استفاده قرار می گیرد.در Composition ما از متغیری (instance variable) استفاده میکنیم که به دیگر اشیاء ارجاع می شود. ارتباط Composition دو شی زمانی ممکن میشود که یک شی شامل اشیاء دیگر باشد و آن شی کاملاً وابسته به شی دیگر باشد به نحوی که آن شی شامل شده بدون شی پدر قابلیت موجود بودن نداشته باشد
نکات کلیدی:- Composition بخشی از ارتباط را نمایش میدهد
- هر دو موجودیت در Composition به یکدیگری مرتبط هستند
- Composition بین دو موجودیت زمانی ایجاد میشود که یک شی شامل اشیاء دیگر باشد و آن شی دیگر بدون شی اصلی موجودیت خارجی نداشته باشد.برای مثال یک دانشگاه لیستی از دانشکده ها دارد و حالا دانشکده و لیست دانشکده ها بخشی از این دانشگاه هستند و اگر دانشگاه از بین برود به تبع آن دانشکده ها هم از بین خواهد رفت
- Composition بر ارث بری در پیادهسازی ارجهیت دارد
- اگر دانشگاه حذف شود سپس همه دانشکده های وابسته برای آن دانشگاه نیز باید حذف شود.
اجازه بدهید با یک مثال از دانشگاه و دانشکده های آن مفهوم Composition را بیشتر درک کنیم
کلاسی تحت نام دانشکده College ایجاد میکنیم که شامل متغیر هایی است مثال نام و آدرس .همچنین کلاسی تحت نام دانشگاه University ایجاد میکنیم که شامل یک یک ارجاع به لیستی از دانشکده هاست.دانشگاه میتواند یک یا چند دانشکده داشته باشد .همچنین اگر دانشگاه برای همیشه بسته شود سپس همه دانشکده های موجود در آن دانشگاه نیز بسته خواند شد زیرا دانشکده بدون دانشگاه موجودیت نخواهد داشت.ارتباط بین دانشگاه و دانشکده یک ارتباط Composition خواهد بود
package compositionexample;
import java.io.*;
import java.util.*
/**
*
* @author mahdi
*/
class College {
public String name;
public String address;
public College(String name, String address)
{
this.name=name;
this.address=address;
}
}
class University
{
private final List<College> colleges;
public University(List<College> colleges)
{
this.colleges=colleges;
}
public List<College> getTotalCollegesInUniversity()
{
return colleges;
}
}
public class CompositionExample {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
College c1=new College("computer", "main block");
College c2=new College("chimical", "Second Block");
College c3=new College("history", "Third block");
List<College> college = new ArrayList<College>();
college.add(c1);
college.add(c2);
college.add(c3);
University university = new University(college);
List<College> colleges = university.getTotalCollegesInUniversity();
for (College cg : colleges) {
System.out.println("Name : " + cg.name
+ " and "
+ " Address : " + cg.address);
}
}
}