در فاز طراحی شی گرا و یا همان Object-Oriented Design، یک مدل ادراکی و یا conceptual model توسعه داده شده و به یک مدل شی گرا با استفاده از طراحی شی گرا تقدیم می گردد. در این فاز، مفاهیم مستقل از تکنولوژی که در فاز تجزیه و تحلیل شی گرا ایجاد گردیدند به پیادهسازی کلاسها، قیود، interface ها و دیگر عناصر موجود در یک مدل شی گرا تبدیل میگردند. در واقع هدف از فاز طراحی شی گرا، توسعه دادن ساختار معماری یک سیستم است. مراحل مختلف طراحی شی گرا شامل عناصر زیر میباشند:
در فاز طراحی شی گرا می توانیم مراحل مختلفی را نیز داشته باشیم که به طور کلی تحت مراحل conceptual design و یا طراحی ادراکی و detailed design و یا طراحی جزئی تنظیم میگردند.
در این قسمت تمامی کلاس ها مشخص می گردند و سیستم بر اساس آنها ایجاد میشود. علاوه بر این؛ وظایف هر کدام از کلاس ها نیز مشخص و تعیین میگردند. نمودار کلاس و یا class diagram برای مشخص کردن ارتباط بین کلاس ها مورد استفاده قرار میگیرد و البته نمودار تعامل و یا interaction diagram برای نشان دادن جریان event ها مورد استفاده قرار میگیرد. از قسمت طراحی ادراکی، تحت عنوان طراحی سطح بالا و یا high-level design نیز یاد می شود.
در این مرحله attribute ها و operation های مربوط به هر کلاس مشخص و به آن انتصاب داده میشود. این موضوع بر اساس نمودار تعامل و یا interaction diagram اتفاق میافتد. علاوه بر این؛ state machine diagram توسعه داده شده و با استفاده از آن، جزئیات مربوط به طراحی هر کدام از کلاس ها به طور مفصل تری مشخص می گردد. به این قسمت low-level design و یا طراحی سطح پایین نیز می گویند.
یکی از موضوعات مهم در طراحی شی گرای موفق، طراحی کردن یک سیستم با استفاده از class های مستقل از یکدیگر است. به عبارت دیگر، کلاس ها باید طوری طراحی بشوند که ایجاد تغییر در یک کلاس، باعث ایجاد تغییرات آبشاری در دیگر کلاسها نشود. اگر قرار باشد که این در هم تنیدگی و یا اصطلاحاً tight coupling از بین برود، میبایست با استفاده از interface ها و دیگر تکنیک های شی گرا، طراحی سیستم انجام بپذیرد.
یکی دیگر از اصول بسیار مهم در طراحی شی گرا های موفق این است که کلاس ها همواره باید در سطح مناسبی از چسبندگی قرار داشته باشند. به عبارت دیگر؛ یک کلاس باید مجموعهای از attribute ها و function های مرتبط با یکدیگر باشد. فقدان cohesion به این معنی است که یک کلاس، شامل function های غیر مرتبط است. این موضوع باعث میشود که ساختار کلی یک سیستم نرمافزاری پیچیده شود و مدیریت کردن، گسترش دادن، نگهداری کردن و ایجاد تغییر در آن به مراتب دشوار بگردد.
بر اساس این اصل، یک سیستم باید برای پیادهسازی نیازمندی های جدید باز باشد و برای تغییر ایجاد کردن در پیاده سازی های از قبل موجود بسته باشد. به عبارت دیگر باید به سادگی بتوان در یک سیستم کدهای جدید را ایجاد کرد و تغییر کدهای از قبل نوشته شده دشوار باشد. این اصل، یکی از اصول پنج گانه SOLID است.
منبع:وبسایت پرووید