معرفی
در مبحث طراحی شیءگرا میتوان گفت Association, aggregation, dependency همه ارتباطات توسعه یافته بین اشیاء است. این رابطه بر مبنای تعامل اشیا قرار میگیرد. به منظور تعریف عملکرد یک کلاس، آن کلاس میتواند از توابع / خواص در معرض یک کلاس دیگر به روشهای مختلف استفاده کند. در این مقاله، ما این روابط را بررسی خواهیم کرد. همچنین سعی خواهیم کرد که سناریوهایی که ما به آنها نیاز داریم، درک کنیم. این سه مفهوم واقعا بسیاری از توسعه دهندگان را درگیر کرده و در این مقاله مفاهیم را با شیوهای ساده با برخی نمونههای واقعی جهان ارائه دهیم.
Association
رابطه ی بین شیءها زمانی ایجاد میشود که یک شیء از شیء دیگری استفاده میکند. از لحاظ فنی، این رابطه مبتنی بر ارتباط بین دو کلاس است. یک کلاس ارتباط سطح کلاس را به کلاس دیگر نگه میدارد..
مثال:
در مثال فوق، یک لیست معلم در کلاس دانشآموزان ذکر شده است.
در این سیستم یک دانشآموز چندین معلم دارد. این به این معنی نیست که یکی از آنها بخشی از دیگری باشد. از این رو آنها زندگی خود را دارند. این نشان دهنده یک رابطه بین دو یا چند اشیا است که تمام اشیا چرخه عمر خود را دارند و هیچ صاحبی وجود ندارد.
و نماد آن را به شکل زیر نشان میدهند:
Aggregation
Aggregation شبیه بهAssosiation است. مانند Assosiation ، این رابطه زمانی که یک شیء از دیگری استفاده میکند توسعه مییابد. دراینجا همه شیء چرخه عمر خود را دارند، اما مالکیت وجود دارد. این نشان دهنده رابطه “کل-بخش یا بخشی از” است.
مثال:
در زندگی واقعی، باتری تلفن همراه بخشی از تلفن همراه است. اگر به دلایلی (غیر از آسیب باتری)، تلفن همراه من غیرفعال شد، هنوز هم میتوانم از باتری در تلفن دیگری استفاده کنم. طول عمر بخش (باتری تلفن همراه)، به طول عمر کل (تلفن همراه) بستگی ندارد.
میخوای یه فروشگاه به وسعت اینترنت داشته باشی؟
ما حرفهایترین فروشگاه آنلاین رو برات طراحی میکنیم.
ما نمونهای از CellBattery را خارج از کلاس CellPhone تنظیم میکنیم. این تضمین میکند، در حالی که CellPhone تخریب میشود، CellBattery باقی میماند. این CellBattery را میتوان به برخی دیگر از CellPhone ها مجددا استفاده کرد.
و نماد آن را به شکل زیر نشان میدهند:
تفاوت بین Aggregation و Assosiation
رابطه Assosiation با Aggregation یکسان هستند و اغلب به عنوان یک رابطه اضافی دیده میشود. از لحاظ فنی، Aggregation هیچ چیزی در مورد طراحی نرم افزار از یک ارتباط موثر تر منتقل نمیکند.
تفاوت در دیدگاه مفهومی است. هنگامی که اشیاء یک رابطه Part-Whole را ایجاد میکنند و طول عمر Part وابسته به عمر Whole نمیشود، رابطه به عنوان Aggregation میباشد. در حالی که در Assosiation رابطه Part-Whole وجود ندارد.
Composition
در Composition نیز، یک شیء از یک شیء دیگر استفاده میکند و یک رابطه Part-Whole ایجاد میکند. اما در اینجا، عمر Part بستگی به طول Whole دارد. این یک فرم تخصصی از Aggregation است. این یک نوع قوی از Aggregation است.
مثال:
در زندگی واقعی، اتاقها بخشی از هتل هستند. اگر هتل نابود شود، قطعا اتاق هتلها همان سرنوشت را خواهند دید. این نوع رابطه به Composition بستگی دارد.
طول عمر قسمت اتاق هتل بستگی به طول عمر کل (هتل) دارد. این سناریو زندگی واقعی از طریق برنامه نویسی بالا گرفته شده است. ما اتاقها را در داخل کلاس هتل ایجاد میکنیم. این نوع پیاده سازی تضمین میکند، در حالی که هتل تخریب شده ، اتاق نیز نابود شده است.
و نماد آن را به شکل زیر نشان میدهند:
Dependency
وابستگی میتواند بین اشیاء در حالی که آنها Composition ، Assosiation و یا Aggregation باشد ایجاد شود. این نوع ارتباط زمانیکه یک شی عملکرد شیء دیگر را به منظور انجام بعضی کارها فراخوانی میکند برقرار میشود.
مثال:
در مثال بالا، Greetings از طریق ایمیل ارسال میشود. شیء GreetingSender استفاده میکند از متد ( )SendEmail از شی EmailSender . در حال حاضر، اگر هر گونه اصلاح (به عنوان مثال معرفی یک پارامتر) به متد ( )SendEmail انجام شود، متد( ) SendGreetings کلاس GreetingSender شکست خواهد خورد. به این ترتیب، قابلیت شیء GreetingSender من وابسته به قابلیت شیء EmailSender است. این نوع رابطه به عنوان وابستگی نامیده میشود.
و نماد آن را به شکل زیر نشان میدهند: