الگو های طراحی (Design Pattern)

کسی وجود دارد که قبلاً مسله شما را حل کرده است.

در مهندسی نرم افزار یک الگوی طراحی، یک روش حل قابل تکرار برای مسائلی هست که عموماً در طراحی نرم افزار با آن برخورد می کنیم. یک الگوی طراحی یک قالب یا شرح برای چگونگی حل مسائلی است که می تواند در شرایط مختلف استفاده شود.یک الگوی طراحی، راه حلی است که برای مستند سازی ارزشمند تشخیص داده شده است، بطوریکه توسعه دهند گان دیگر می توانند آن را در حل مسائل مشابه به کار ببرند.همانگونه که طراحی شی گرا ادعا می کند که استفاده مجدد از کتابخانه ها و قطعات را افزایش می دهد، ادعا می شود که استفاده از الگو های طراحی، استفده مجدد از کتابخانه ها و قطعات را افزایش می دهد.

الگو ها تکنیک هایی هستند که افراد زمانی از آنها برای حل مسائل خاص استفاده کردند. و به عنوان راه حل های خوب شناخته شده اند. سپس این تکنیک ها مستند سازی شده اند تا توسعه دهندگان هنگام برخورد با مسائل مشابه از این مستندات استفاده کنند و مسائل خود را حل کنند.

تاریخچه الگو های طراحی :

استفاده از الگوها برای اولین بار به ذهن یک معمار به نام الکساندر خطور کرد. الکساندر با این مشکل روبرو شد که یک طرح خوب و با کیفیت برای یک ساختمان چگونه می تواند باشد. او برای حل مشکل خود، ساختمانها، خیابانها، شهرک ها و هر مکانی که یک انسان برای خودش می سازد را مورد مطالعه و بررسی قرار داد. او کشف کرد که بناهای خوب از نظر طراحی دارای ویژگیهای مشترک هستند. او کشف کرد که بناهای خوب دارای ویژگیهای مشابه هستند واین ویژگیهای مشابه را الگو نامید.

هر الگو بیانگر یک مسئله و مشکل است که می تواند بارها و بارها روی بدهد همراه با راه حل آن مسئله، وشما می تواند از این راه حل برای میلیون ها بار استفاده کند بدون نیاز مجدد برای پیدا کردن راه حل.

در اوایل دهه 1990، بعضی از توسعه دهندگان نرم افزار با کارهای الگساندر برخورد کردند.آنها با این سوال روبرو شدند که اگر الگو های طراحی معماری در این رشته به صورت صحیح جواب می دهد آیا می توان الگوهای را برای طراحی نرم افزار بوجود آورد.

  • در نرم افزار چه مسائل وجو دارد که بارها رخ می دهد و تقریبا با روشهای مشابه می توان آنها را حل کرد؟
  • آیا امکان استفاده از مفهوم الگوها در طراحی نرم افزار وجود دارد، آیا می توان راه حل های را برا اساس الگوها بعد از شناسایی الگوها ایجاد کرد.

سوالات بالا، سوالاتی بودند که توسعه دهندگان مطرح کردند و پاسخ آن را یافتند. پاسخ سوال بلی بود. مرحله بعدی شناسایی الگوها بود و توسعه استانداردهای برای مستند سازی الگوها.

در اوایل دهه 1990، افرادی زیادی روی الگوهای طراجی کار می کردند. اما چهار نفر به نام های، گاما، جاکوبسون، هلم و ولسایدز بیشترین تاثیر را در این زمینه با نوشتن کتابی به نام

“Design Pattern: Elements of Reusable Object-Oriented Software”، داشتند. این چهار نویسنده بهGang of Four مشهور است. آنها در این کتاب ائده استفاده از الگوها را در طراحی نرم افزار به کار بردند.و یک فرمت استاندارد را برای مستندسازی الگوها ایجاد کردند. 23 نوع از الگوها را دسته بندی کردند و …. به مرور زمان فرمت های استاندارد دیگری برای مستند سازی الگوها پیشهناد شد.

قالب مستند سازی برای الگوهای طراحی :

نام الگو یک نام خوب و مفید برای الگو
هدف (intent) یک جمله کوتاه و مختصر درباره چیزی که الگو انجام می دهد. (تعریف مسله و راه حل به صورت مختصر و مفید)
نام مستعار نام های دیگری که الگو با آن شناخته می شود.
ساختار یک نمایش گرافیکی از الگو
اجزاء تشکیل دهنده (Participants) کلاس ها و اشیائ که در الگو شرکت دارند (وجود دارند).
همکاریها (Collaborations) چگونه اجزای تشکیل دهنده با هم همکاری می کنند تا وظایفشان را انجام دهند.
نتايج‌ (Consequences) نتایج استفاده از الگوی مورد نظر
پیاده سازی تکنیک های برای پیاده سازی الگوی مورد نظر
نمونه کد تکه کدی برای پیاده سازی یک نمونه
الگو های مرتبط الگوهای طراحی دیگری که ارتباط نزدیگ با الگوی مورد نظر دارند.

دسته بندی الگو ها :

1-   الگوهای بوجود آورنده(Creational Pattern): همه الگو های که در این دسته قرار می کیرند در ارتباط با روش های ایجاد اشیاء هستند.

2-   الگوهای ساختاری(Structural Patten): این نوع الگوها شرح می دهند چگونه اشیاء و کلاس ها می توانند در ساختارهای بزرگتر باهم ترکیب شوند.

3-      الگوهای رفتاری(Behavioral Pattern): این نوع الگو ها روی ارتباط اشیاء با یکدیگر تمرکز دارند.

Creational Structural Behavioral
Factory Method

Abstract Factory

Builder

Prototype

Singleton

Adapter

Bridge

Composite

Decorator

Flyweight

Façade

Proxy

Interpreter

Template Method

Chain of Responsibility

Command

Iterator

Mediator

Memento

Observer

State

Strategy

Visitor

فهرست الگوهای طراحی

واژه نرم افزار

واژه نرم افزار

 

نرم افزار، کلمه ای است که شاید هر روز آنرا می شنوید یا بکار می برید. با شنیدن این کلمه چه چیزی به ذهن شما خطور می کند؟ شاید پاسخ شما چیزی معادل با برنامه های کامپیوتری باشد.آیا نرم افزار فقط برنامه های کامپیوتری هستند یا نه؟

یک توصیف از نرم افزار می تواند بصورت زیر باشد:

  1. دستورات(برنامه های کامپیوتری) که در صورا اجرا شدن باعث انجام عملیات مورد نظر می شوند.
  2. ساختمان داده هایی که باعث می شوند برنامه ها بطور مناسبی اطلاعاتی را دستکاری کنند.
  3. مستندان سیستم که برای تشریح ساختار سیستم بکار می روند.
  4. مستندات کاربر که برای تشریح چگونکی کار با سیستم بکار می روند.

 

نرم افزار یک محصول یا ابزاری برای تحویل محصول ؟

امروزه نرم افزار نقش دو جانبه دارد. نرم افزار یک محصول است، و در عین حال ابزاری برای تحویل  محصول می باشد.

نرم افزار به عنوان محصول، نوعی مبدل اطالاعاتی است که اطلاعات را تولید، مدیریت، دریافت یا اصلاح می نماید ویا آنها را نمایش می دهد.

نرم افزار به عناون ابزاری برای تحویل محصول، به عنوان مبنایی برای کنترل کامپیوتر( سیستم های عامل)، تبادل اطلاعات(شبکه ها) و … عمل می نماید.

 

دسته بندی محصولات نرم افزاری :

  1. محصولات کلی (pre-written): این دسته از محصولات سیستم های مستقلی اند که توسط یک شرکت تولید کننده تولید می شوند و به بازار عرضه می گردند و مشتریان می توانند بر حسب نیاز آنها را تهیه کنند.به عنوان مثال پایگاه داده ها (MSSQL, MySQL, …)، واژه پردازه ها(MSWord,…)
  2. محصولات سفارشی(bespoke): این دسته از محصولات سیستم های هستند که توسط مشتری خاص سفارش داده می شوند. این محصولات توسط پیمانکاران نرم افزاری برای آن مشتری تولید می شوند. نمونه های از این نرم افزار ها عبارتند از : سیستم اندازه گیری برای دستگا ههای الکترونیکی، سیستم های برای کنترل ترافیک هوایی و …

 تفاوت مهم بین این دو گروه این است که در محصولات کلی، سازمانی که محصولات را تولید می کند، مشخصات نرم افزار را کنترل می کند. اما در محصولات سفارشی، تعیین مشخصات و کنترل نرم افزار توسط مشتری(شرکت سفارش دهنده) انجام می شود.

 

هنر …

اولین شاعر جهان حتما بسیار رنج برده است، آن گاه که تیر و کمانش را کنار گذاشت و کوشید که برای یارانش آن چه را که هنگام غروب خورشید احساس کرده، توصیف کند – و کاملا محتمل است که این یاران، آن چه را که گفته است، به سخره گرفته باشند. لیک او باز چنین می کند، چون هنر راستین می خواهد هنرمند در آشکاری اش بکوشد. هیچ کس نمی تواند به تنهایی از زیبایی ای که درک می کند، لذت ببرد.

جبران خلیل جبران

نهان سازی (Encapsulation)

نهان سازی (Encapsulation):

 

نهان سازی یک از مفاهیم شی گرایی است که شما بصورت مکرر در زندگی روزانه از آن استفاده می کنید .  آیا شما پو ل، گواهینامه رانندگی و کارت اعتباری خود را در کیف پو لتان قرار می دهید ؟ آیا شما خودکار ها، کاغذها و کتاب های خود را در کیف تان قرار می دهید و به مدرسه می برید؟ اگر اینگونه باشد پس شما از نهان سازی استفاده می کنید. نهان سازی به معنی قرار دادن چیزهای مرتبط به هم در داخل یک شی جدید است.برای مثال یک حساب بانکی شامل: شماره حساب، نام مشتری، آدرس مشتری، نوع حساب و موجودی مشتری می باشد. همچنین برای یک حساب بانکی رفتارهای مانند باز کردن حساب، بستن حساب، برداشت از حساب و واریز به حساب وجود دارد. شما این اطلاعات را باهم در داخل یک شی حساب پنهان می کنید.

ائده اصلی که نهان سازی ارائه می دهد این است که رفتار یک شی باید تا حد ممکن دور از دید کاربر باشد. به عبارت دیگر تا زمانی که لازم نباشد، کاربر نباید متوجه شود که یک شی چگونه درخواست های او را انجام می دهد.

 

استفاده از یک شی :

 

تصور کنید که شما می خواهید به یک فرد رانندگی یاد بدهید برای اینکار شما  یک سری از اطلاعات ضروری که باید آن فرد بداند را مشخص می کنید.به عنوان نمونه شما اطلاعاتی درباره ترمز ، دنده ، فرمان و آیینه را به او آموزش می دهید. اما آیا شما درباره نحوه کارکرد موتور ، نحوه عملکرد سیستم ترمز نیز مطالبی را به او یاد می دهید؟ نه، زیرا او نیازی ندارد که برای رانندگی کردن بداند که عملکرد داخلی ماشین چگونه است.

اطلاعاتی که ماشین در معرض نمایش قرار می دهد تا یک فرد بتواند از آن استفاده کند واسط ماشین (Interface) نامیده می شود.یک واسط راهی است تا شما با یک شی ارتباط برقرار کنید برای آنکه شما می خواهید از رفتارهای آن شی استفاده کنید. برای مثال هنگامیکه شما پای خود را روی پدال گاز ماشین قرار می دهید ، شما به او می گویید که سریعتر حرکت کند.

یک واسط همچنین به شما اجازه می دهد تا به اطلاعاتی از آن شی دسترسی پیدا کنید. برای مثال واسط کیلو متر شمار مقدار مسیری که به کیلومتر توسط آن ماشین طی شده است را نمایش می دهد.

آیا یک واسط به تنهایی کاری را انجام می دهد؟ نه، یک واسط به تنهایی کاری را انجام نمی دهد. یک واسط بدون پیاده سازی (implementation) هیچ کاری را انجام نمی دهد. شما می توانید با یک شی ارتباط برقرار کنید اما آن هیچ کاری انجام نمی دهد. برای مثال شما یک کنترل از راه دور تلویزیون را در نظر بگیرید اگر مدار داخلی این شی پیاده سازی نشده باشد ما با فشار دادن هر کدام از کلید ها هیچ عکس العملی را مشاهده نخواهیم کرد.

برای اینکه یک شی بتواند وظایف خود را انجام دهد، شما نیاز دارید که مکانیزمهای را فراهم کنید که به عملکردهای واسط جواب بدهد. برای مثال هنگامی که شما پدال گاز را فشار می دهید، رفتاری که پشت واسط قرار دارد ولی کاربر آنرا مشاهده نمی کند باعث خواهد شد که گاز بیشتری به موتور ارسال شود و ماشین شتاب بگیرد.

نفهمیدن …

راستی او به من چه آموخت ؟ هیچ!

او به من نیاموخت ، چه خود نمی دانست.

من از او آموختم .

چه گرانبهایند انسانهایی که بزرگواری ها و عظمت های دوست داشتنی و زیبایی های لطیف و قیمتی انسانی دارند و خود از آن آگاه نیستند.

این این از آن مقوله “نفهمیدن” هایی است که  به روح ارجمندی متعالی و عزیزی می بخشد.

دکتر شریعتی

چند شکلی (Polymorphism)

چند شکلی (Polymorphism):

 

چند شکلی به طور تکنیکی بدین معنی است که یک شی(thing) قابلیت دارد که شکل های مختلف به خود بگیرد.منظور از شی در جمله بالا یک متد می باشد. و منظور از شکل، رفتاری است که توسط آن متد انجام می شود.چند شکلی یعنی اینکه یک متد می تواند دارای رفتار های مختلف باشد.

ممکن است در ابتدا مفهوم چند شکلی گیج کننده باشد. اما این سر در گمی با یک مثال از دنیا واقعی می تواند، بطور کامل از بین برود. کلید روشن و خاموش کردن کامپیوتر خود را در نظر بگیرید، زمانیکه شما بخواهید کامپیوتر خود را روشن کنید دکمه را فشار می دهید و کامپیوتر روشن می شود. زمانیکه می خواهید کامپیوتر خود را خاموش کنید، دکمه را فشار می دهید و کامپیوتر خاموش می شود.

در مثال بالا متد فشار دادن کلید در شرایط مختلف، عملیات خاصی را انجام می دهد. این یعنی چند شکلی. یک مثال دیگر را بررسی می کنیم، تصور کنید که در یک فروشگاه به کالاها تخفيف داده می شود. اما برای انواع مختلف کالاها، نخفیف به روش متقاوتی محاسبه می شود. در این حالت ما یک متد تخفیف داریم اما در پیاده سازی نسبت به نوع کالا، عملیات متفاوتی را برای محاسبه تخفیف خواهیم داشت.

چند شکلی در اغلب موارد از طریق رابطه تعمیم(Generalization) پیاده سازی می شود.تصور کنید که یک سوپر کلاس به نام کالا داریم که دارای متدی به نام تخفیف می باشد. کلاس های مواد غذایی، پوشاک،کتاب و …  را در نظر بگیرید.این کلاس ها،زیر کلاس، کلاس کالا می باشند. که صفات و متد های آن را به ارث برده اند.اما نحوه محاسبه تخفیف در کلاس های مختلف با همدیگر متفاوت می باشد.در این حالت در هر زیر کلاس متد تخفیف نسبت به عملیاتی که باید انجام بدهد تا تخفیف را محاسبه کند باید بازنویسی شود اما با همان نام قبلی تخفیف.متد تخفیف در کلاس های مختلف معرف رفتار جداگانه ای هست اما تخت همان نام قبلی تخفیف.

او …

و با نبودن چگونه توانستن بود ؟
و خدا بود و با او عدم بود .
و عدم گوش نداشت .
حرف هایی است برای گفتن که اگر گوشی نبود ، نمی گوییم .
و حرفهایی است برای نگفتن …
حرف های خوب و بزرگ و ماورائی همین هایند .
و سرمایه ی هر کسی به اندازه ی حرف هایی است که برای نگفتن دارد …
و خدا برای نگفتن حرف های بسیار داشت .
درونش از آنها سرشار بود .
و عدم چگونه می توانست مخاطب او باشد ؟
و خدا بود و عدم .
جز خدا هیچ نبود .
در نبودن ، نتوانستن بود .
با نبودن نتوان بودن .
و خدا تنها بود .
هر کسی گمشده ای دارد .
و خدا گمشده ای داشت …

علی شریعتی

رابطه تعمیم (Generalization)

رابطه تعمیم (Generalization):

 

شما زمانیکه در یک سوپر مارکت قدم می زنید. شما مواد غذایی را بر حسب ویژگهای آنها در قسمت های مختلف یک سوپر مارکت مشاهده می کنید. میوه ها و سبزیجات در یک قسمت فروشگاه، کوشت در قسمتی دیگر از فروشگاه و خشکبار را در قسمتی دیگر از فروشگاه پیدا می کنید. همه اینها مواد غذایی هستند، اما اینها انواع مختلفی از مواد غذایی هستند.عبارت های “تا حدی”(““Kind of)، “نوعی از” (““Type of) یک رابطه تعمیم را بین دو کلاس نشان میدهد.(برای مثال سیب نوعی از میوه است و میوه نیز نوعی از غذا است.) در بعضی مواقع  عبارت “هست یک” بیانگر رابطه تعمیم است.(برای مثال سیب قرمز یک سیب هست.)

این نوع رابطه اغلب، وراثت(inheritance) نامیده می شود.مثال سیب را در نظر بگیرید. سیب نوعی میوه است پس سیب تمام ویژگیهای یک میوه را به ارث می برد.همچنان سیب (specialization) از میوه است زیرا آن تمام ویژگیهای میوه را به ارث می برد و همچنین سیب بعضی از ویژگیها را دارد که فقط متعلق به سیب می باشد و سیب را از دیگر میوه ها متمایز می کند.پس می توان گفت که میوه یک تعمیم (generalization) از هندوانه، سیب، هلو و همه دیگر اشیاء است که در این گروه قرار دارند.

وراثت در سیستم های شی گرا همانند به ارث بردن مشخصات رفتاری و بدنی از والدینتان است. مشخصات رفتاری و بدنی، همان صفات و رفتارهای یک کلاس هستند که یک کلاس از کلاس دیگر می تواند به ارث ببرد.وراثت زیستی یک مدل سلسله مراتبی بوجود می آورد که شما را قادر می سازد با دنبال کردن این سلسله مراتب و بالا رفتن در آن اجداد خودتان را بشناسد. در سیستم های شی گرا نیز دقیقا به ابن صورت است که شما می توانید با دنبال کردن این رابطه، کلاس مولد کلاس جاری را بدست آورید. سیب قرمز یک سیب است. پس کلاس مو لد سیب قرمز ، کلاس سیب است. سیب نوعی میوه است. پس کلاس مولد سیب، کلاس میوه است. سیب یک زیر کلاس(sub class) است. میوه یک سوپر کلاس(super class)است.

 

سوپر کلاس: یک سوپر کلاس، کلاسی است که دارای ویژگیهای است که بین دو یا چند کلاس مشترک است و آنها را با آن کلاس ها به اشتراک گذاشته است. سیب یک سوپر کلاس برای سیب قرمز است. همه صفات و رفتارهای مشترک بین سیب قرمز و سیب، در کلاس سیب تعریف شده است و سیب قرمز از آن صفات و رفتارها استفاده می کند.

 

زیر کلاس : یک زیر کلاس، کلاسی است که دارای ویژگیهای است که منحصر به آن کلاس می باشد همراه با ویژگیهای که در یک سوپر کلاس تعریف شده است و آنها را از آن سوپر کلاس به ارث می برد. یک کلاس می تواند هم سوپر کلاس باشد و هم یک زیر کلاس. کلاس سیب یک سوپر کلاس برای کلاس سیب قرمز است و یک زیر کلاس برای کلاس میوه است.

 

کلاس انتزاعی(class abstract ) : کلاس انتزاعی، کلاسی است که نمی تواند نمونه ای داشته باشد. یک کلاس انتزاعی باید توسط یک کلاس به ارث برده شود تا از صفات و رفتارهای آن استفاده شود.

او …

هر کسی دوتاست .
و خدا یکی بود .
و یکی چگونه می توانست باشد ؟
هر کسی به اندازه ای که احساسش می کنند ، هست .
و خدا کسی که احساسش کند ، نداشت .
عظمت ها همواره در جستجوی چشمی است که آنرا ببیند .
خوبی ها همواره نگران که آنرا بفهمد .
و زیبایی همواره تشنه دلی است که به او عشق ورزد .
و قدرت نیازمند کسی است که در برابرش رام گردد .
و غرور در جستجوی غروری است که آنرا بشکند .
و خدا عظیم بود و خوب و زیبا و پراقتدار و مغرور .
اما کسی نداشت …
و خدا آفریدگار بود .
و چگونه می توانست نیافریند .
زمین را گسترد و آسمانها را برکشید …
و خدا یکی بود و جز خدا هیچ نبود .

دکتر شریعتی

روابط (مفاهیم شی گرایی)

رابطه ها:

اشیاء برای اینکه کاری انجام بدهند نیاز دارند با هم کار کنند پس آنها نیاز به روشی دارند که با هم ارتباط برقرار کنند. وقتی که یک مشتری بلیط های را سفارش می دهد، مشتری باید یک سفارش ایجاد کند و بلیط مورد نظرش را به آن سفارش اضافه کند. اشیاء نرم افزاری که نماینده مشتری، سفارش، بلیط هستند نیاز دارند تا رابطه بین اشیاء دنیا واقعی را عینا تکرار کنند.

یک لینک(Link) رابطه بین دو شی است. یک رابطه(association) یک ارتباط بین دو کلاس هست.

رابطه بین کلاس ها (اشیاء) به سه شکل متفاوت تقسیم می شود:

  1. ارتباط (association)
  2. رابطه تجمع (aggregation)
  3. رابطه ترکیب (composition)

 

ارتباط (association) :

ساده ترین شکل رابطه، ارتباط می باشد. که یک رابطه نظیر به نظیر(peer-to-peer) بین دو شی می باشد. یک شی بطور ساده درباره شی دیگر می داند بهمان طریقی که یک فرد ممکن است فرد دیگری را بشناشد. یک ارتباط یه یک کلاس امکان می دهد تا درباره صفات و رفتارهای کلاس دیگر بداند.

یک سیستم شی گرا از انواع کلاس ها تشکیل شده است که از طریق ارسال پیام ها و دریافت پاسخها با یکدیگر همکاری دارند. هنگام اجرا، یک سیستم شی گرا، مملو از نمونه های می شوند که مطابق نوع کلاس خود می باشند. جایی که نمونه های کلاس پیام های را به نمونه های کلاس دیگر ارسال می کند یک ارتباط بین آنها بوجود آمده است.

برای مثال کلاس تحویل دار درباره صفات و رفتارهای کلاس حساب بانکی می داند و کلاس حساب درباره صفات و عملیات تحویل دار می داند. بنابراین این دو کلاس می توانند پیغامهایی را به یکدیگر ارسال کنند.

 

رابطه تجمع (aggregation):

رابطه تجمع، یک رابطه بین یک واحد کل و جزء است. در رابطه تجمع یک کلاس می تواند شامل نمونه های از کلاس های دیگر نیز باشد. برای مثال یک کلاس ماشین را در نظر بگیرید، که خود از چندین کلاس دیگر مانند یک کلاس موتور، چندین کلاس لاستیک و تعدادی کلاس دیگر برای سایر بخش ها تشکیل شده است.

در رابطه تجمع، شی جز به شی کل وابسته نیست. شی کل و جزء در زمانهای مختلف ایجاد و از بین می رود یعنی ممکن است شی جزء را ایجاد کنید بدون اینکه شی کل را یجاد کنید. برای مثال شی موتور و لاستیک را ایجاد می کنید بدون اینکه شی ماشین را ایجاد کنید. یا بر عکس ممکن است شی ماشین را با اشیاء که قبلا وجود داشته اند ایجاد کنیم بدون اینکه نیاز باشد همزمان با ایجاد ماشین، آنها را ایجاد کنیم.

برای مثال یک کلاس برای تیم پروژه در نظر بگیرید. و یک کلاس برای کارمندان شرکت در نظر بگیرید. تیم پروژه، از کارمندان شرکت تشکیل شده است. اما ممکن است یک تیم پروژه منحل شود در حالیکه کارمندان به کار خود در شرکت ادامه می دهند.

 

رابطه ترکیب (composition):

رابطه ترکیب، شبیه رابطه تجمع می باشد اما با یک تفاوت:

در رابطه ترکیب، چرخه حیات جزء نمی تواند بیش از چرخه حیات کل باشد. به عبارت دیگر شی جزء هیچ وقت نمی تواند بدون شی کل وجود داشته باشد، شی جزء همزمان با شی کل بوجود می آید و همزمان با شی کل از بین می رود.

برای مثال یک پنجره در سیستم عامل ویندوز را در نظر بگیرید، یک پنجره از چندین شی تشکیل شده است بعنوان مثال دکمه Minimize، Maximize، Close ، یک منو و …. زمانیکه یک شی پنجره ایجاد می شود همزمان با آن تمام دکمه ها و منو ایجاد می شود. با بستن پنجره تمام اشیاء، پنجره، دکمه ها و منو از بین می روند. امکان ندارد بدون وجود یک شی پنجره یک شی منو ایجاد شود و به کاربر نمایش داده شود یا با بستن و از بین رفتن شی پنجره، شی منو از بین نرود.  

رابطه ترکیب همان حذف پخش شونده (cascading deletion) است. در یک رابطه ترکیب هنگامیکه رکورد اصلی حذف می شود تمام رکورد های مرتبط با رکورد اصلی حذف می شوند.

رابطه ترکیب، مستلزم چرخه های حیات همزمان است، به طوریکه وقتی شی، کل حذف می شود، اشیاء جز نیز حذف می شود.