طراحی شیءگرا

بندانگشتی|برای مثال در این طرح می‌توان ارتباط بین اجزا در دوچرخه و ارتباط آن را با وسایل نقلیه دید.
**طراحی شیءگرا** روند برنامه‌ریزی یک سیستم اشیاء در تعامل با هدف حل یک مشکل نرم‌افزاری است. این یک رویکرد به طراحی نرم‌افزار است.

## بررسی اجمالی
یک شیء شامل داده‌ها و روش‌های محصور شده‌است که با هم برای نشان دادن یک موجودیت دسته‌بندی شده‌اند. رابط «شیء» تعریف می‌کند که چگونه می‌توان با آن تعامل برقرار کرد. یک برنامه شیءگرا با تعامل این اشیاها توصیف می‌شود. طراحی شیءگرا رشته‌ای تعریف اشیاء و تعاملات آن‌ها برای حل یک مشکل است که در تجزیه و تحلیل شیءگرا شناسایی و مستند شده‌است.

در زیر شرح زیر مجموعهٔ مبتنی بر کلاس طراحی شی گرا است که شامل برنامه‌نویسی بر پایه پیش‌نمونه نیست، جایی که اشیاء معمولاً با اکتیو کردن کلاس‌ها به دست نمی‌آیند بلکه توسط کلون کردن اشیاء دیگر (نمونه اولیه) به دست می‌آیند. طراحی شیءگرا یک شیوه طراحی است که شامل فرایند تجزیه شیء گرا و علامت گذاری برای نشان دادن مدل‌های منطقی و فیزیکی و همچنین حالت و پویا سیستم تحت طراحی می‌باشد.

## موضوعات طراحی شیءگرا
### ورودی (منابع) برای طراحیءشی گرا
ورودی برای طراحی شیءگرا توسط خروجی تحلیل شیءگرا ارائه شده‌است. می‌فهمید که یک مصنوع خروجی لازم نیست به‌طور کامل توسعه داده شود تا به عنوان ورودی طراحی شیءگرا خدمت کند؛ تجزیه و تحلیل و طراحی ممکن است به صورت موازی رخ دهد و در عمل نتیجه یک فعالیت می‌تواند در یک چرخه بازخورد کوتاه از طریق یک روند تکراری تغذیه کند. هر دو تجزیه و تحلیل و طراحی را می‌توان به صورت یکپارچه انجام داد و مصنوعات می‌توانند به‌طور مداوم به جای تکامل کامل در یک شات رشد داده شوند.

برخی از مصنوعات ورودی معمولی برای طراحیءشی گرا:
* مدل مفهومی: نتیجه تجزیه و تحلیل شیءگرا، آن مفاهیم در حوزه مشکل را ضبط می‌کند. مدل مفهومی به صراحت انتخاب شده‌است که مستقل از جزئیات پیاده‌سازی، مانند همپوشانی یا ذخیره‌سازی اطلاعات است.
* مورد استفاده: توصیف توالی حوادث که با هم، منجر به یک سیستم انجام کاری مفید است. هر مورد استفاده، یک یا چند سناریو را فراهم می‌کند که نشان می‌دهد چگونه سیستم باید با کاربران به نام بازیگران ارتباط برقرار کند تا به یک هدف یا عملکرد کاری خاص دست یابند. بازیگران مورد استفاده ممکن است کاربران نهایی یا سایر سیستم‌ها باشند. در موارد بسیاری، موارد استفاده بیشتر به نمودار مورد استفاده است. استفاده از نمودارهای مورد استفاده برای شناسایی بازیگر (کاربران یا سیستم‌های دیگر) و فرایندهایی که آن‌ها انجام می‌دهند استفاده می‌شود.
* نمودار پیوسته سیستم: یک نمودار توالی سیستم (SSD) تصویری است که برای یک سناریوی خاص از مورد استفاده، رویدادهایی که بازیگران خارجی تولید می‌کنند، سفارش آنها، و رویدادهای بین سیستم ممکن را نشان می‌دهد.
* واسط کاربر (در صورت وجود): سند که نشان دهنده و توصیف ظاهر و احساس رابط کاربری محصول نهایی است. این الزامی نیست که این کار را بکنید، اما به تولید محصول پایان می‌بخشد و بنابراین به طراح کمک می‌کند.
* مدل رابطه ای (در صورت وجود): یک مدل داده یک مدل انتزاعی است که نحوه نمایش داده‌ها و استفاده از آن‌ها را توصیف می‌کند. اگر یک پایگاه داده شیءگرا مورد استفاده قرار نگیرد، مدل رابطه ای معمولاً قبل از طراحی ایجاد می‌شود، زیرا استراتژی انتخاب شده برای نقشه‌برداری شیء-ارتباطی خروجی فرایند طراحی OO است. با این وجود، می‌توان مدل موازی ارتباطی و مصنوعات طراحی شیءگرا را به صورت موازی توسعه داد و رشد یک مصنوع ممکن است باعث بهبود پدیده‌های دیگر مصنوعات شود.

### مفاهیم شیءگرا
پنج مفاهیم اساسی طراحی شیءگرا ویژگی‌های سطح پیاده‌سازی هستند که در زبان برنامه‌نویسی ساخته شده‌اند. این ویژگی‌ها اغلب توسط این نام‌های رایج مطرح می‌شوند:
* شیء/ کلاس: یک اتصال تنگ یا ارتباط ساختار داده‌ها با روش‌ها یا توابع که روی داده‌ها عمل می‌کنند. این کلاس یا شیء (یک شیء بر اساس یک کلاس ایجاد می‌شود) نامیده می‌شود. هر شیء به یک تابع جداگانه خدمت می‌کند. این است که توسط خواص آن تعریف می‌شود، چه چیزی و چه چیزی می‌تواند انجام دهد. یک شیء می‌تواند بخشی از یک کلاس باشد، که مجموعه ای از اشیاء مشابه هستند.
* پنهان سازی اطلاعات: توانایی حفاظت از برخی اجزاء جسم از نهادهای خارجی. این به واسطه کلمات کلیدی برای تحقق بخشیدن به یک متغیر به عنوان خصوصی یا محافظت شده به کلاس متعلق است.
* وراثت: توانایی برای یک کلاس برای گسترش یا سوءاستفاده از عملکرد کلاس دیگر. به اصطلاح زیر کلاس دارای بخش کامل است که مشتق شده (به ارث برده شده) از ابر کلاس و پس از آن مجموعه ای از توابع و داده‌های خود را دارد.
* رابط (برنامه‌نویسی شیءگرا): توانایی برای اجرای یک روش به تعویق انداختن. توانایی تعریف توابع یا امضاهای روش بدون اجرای آنها.
* چند ریختی (به‌طور خاص، زیرمجموعه): توانایی جایگزینی یک شیء با زیرمجموعه‌های آن. توانایی یک متغیر شیء شامل نه تنها این شی، بلکه تمام زیرمجموعه‌های آن است.

### مفاهیم طراحی یا مفهوم توسعه
* تعریف اشیاء، ایجاد نمودار کلاس از نمودار مفهومی: معمولاً نگاشت موجودیت به کلاس.
* شناسایی ویژگی‌ها
* استفاده از الگوی طراحی (دانش رایانه) (در صورت لزوم): یک الگوی طراحی یک طراحی نهایی نیست، توضیح یک راه حل برای یک مشکل رایج در یک زمینه است. مزیت اصلی استفاده از الگوی طراحی این است که می‌توان آن را در برنامه‌های متعدد استفاده کرد. همچنین می‌تواند به عنوان یک الگو برای حل مشکل که می‌تواند در بسیاری از موقعیت‌های مختلف و / یا برنامه‌های کاربردی استفاده شود، مورد توجه قرار گیرد. الگوهای طراحی شیءگرا معمولاً نشان دهنده روابط و تعاملات بین کلاس‌ها یا اشیاء هستند، بدون مشخص کردن کلاس‌های کاربردی نهایی یا اشیائی که درگیر هستند.
* چارچوب برنامه را تعریف کنید (در صورت لزوم): چارچوب برنامه معمولاً مجموعه ای از کتابخانه‌ها یا کلاس‌هایی است که برای اجرای ساختار استاندارد یک برنامه برای سیستم عامل خاص مورد استفاده قرار می‌گیرند. با جمع‌آوری مقدار زیادی از کد قابل استفاده مجدد در یک چارچوب، زمان زیادی برای توسعه دهنده ذخیره می‌شود، زیرا او وظیفه بازنویسی مقادیر زیادی از کد استاندارد برای هر برنامه جدید است که توسعه یافته‌است.
* شناسایی اشیاء دائمی / داده‌ها (در صورت لزوم): شناسایی اشیائی که باید طولانی‌تر از یک زمان اجرا برنامه باشند. اگر یک پایگاه داده رابطه ای استفاده می‌شود، نقشه‌برداری ارتباط شیء را طراحی کنید.
* شناسایی و تعریف اشیاء از راه دور (در صورت لزوم).

### خروجی (دستاوردهای) طراحی شیءگرا
* نمودار پیوندی: نمودار دنباله سیستم را برای اضافه کردن اشیاءخاصی که رویدادهای سیستم را اداره می‌کنند، گسترش دهید.
یک نمودار پیوسته نشان می‌دهد، به عنوان خطوط عمودی موازی، فرایندهای مختلف یا اشیاء که به‌طور همزمان زندگی می‌کنند، و به عنوان فلش‌های افقی، پیام‌های مبادله بین آنها، در ترتیب آن‌ها رخ می‌دهد.
* نمودار کلاس: یک نمودار کلاس یک نوع ساختار استاتیک است که نمودار UM L (زبان مدل‌سازی یکپارچه) را نشان می‌دهد که ساختار یک سیستم را با نشان دادن کلاس‌های سیستم، ویژگی‌های آن‌ها و روابط بین کلاس‌ها توصیف می‌کند. پیام‌ها و کلاس‌هایی که از طریق توسعه نمودارهای دنباله ای شناسایی شده‌اند می‌توانند به عنوان ورودی به نسل جدید دیاگرام طبقه‌بندی جهانی سیستم عمل کنند.

### برخی از اصول و استراتژی طراحی
* تزریق نیازمندی: ایده اساسی این است که اگر یک شیء به نوعی از یک شیء دیگر وابسته باشد، سپس شیء مورد نیاز تزریق می‌شود به شیء وابسته؛ برای مثال، اتصال به پایگاه داده به عنوان یک استدلال به سازنده منتقل می‌شود به جای ایجاد یک درون داخلی.
* اصل نیازمندی سیلیکونی: گراف وابستگی بسته‌ها یا اجزای (جزئیات دانه به محدوده کار برای یک توسعه دهنده بستگی دارد) باید چرخه ای نداشته باشد. این نیز به عنوان داشتن یک گراف جهت دار غیرمدور هدایت شده‌است. به عنوان مثال، بسته C بستگی به بسته B دارد که بستگی به بسته A دارد. اگر بسته A نیز در بسته C بستگی دارد، شما یک چرخه دارید.
* اصل استفاده مجدد کامپوزیت: ترجیح ترکیب پلی مورفیک از اجسام بیش از ارث.

## جستارهای وابسته
* کارت همکاری مسئولیت-کلاس
* درک (طراحی شیءگرا)
* سالید (طراحی شیءگرا)
* تعریف یکپارچه برای طراحی شیء گرا
* تجزیه و تحلیل شیء گرا
* برنامه‌نویسی شیء گرا

## منابع

رده:برنامه‌نویسی شیءگرا
رده:طراحی نرم‌افزار
رده:ویکی‌سازی رباتیک