همه چی از اصول آغاز می شود، اصول طراحی شی گرا

با یادگیری اصول دید ما وسیعتر خواهد شدبارها و بارها بخوانیم، یادگیری اصول می تونه کمک کنه بقیه داستان را بهتر متوجه بشیم.اصول پایین + اصول سالید S.O.L.I.D پایه شکل گیری الگوهای طراحی هستند، در مورد هر کدام می توانید گوگل کنید و اطلاعات کاملتری را بدست بیاوریدانتزاع سازیمکانیزمی برای تعریف مفاهیم اولیه به شکل عام و مستقل از مفاهیم خاص. مثال زیاد دیدیم، گربه یک حیوان است، پراید یک خودرو است.( علی نظر خیلی خوب توضیح داده.انتزاع سازی در برنامه نویسی )بتنی کردن(مهم concrete)وقتی شما بر اساس یک مفهوم انتزاعی، یک موجودیت خاص پیاده سازی می شود، به این موجودیت خاص پیاده سازی شده، یک موجودیت جامد، بتنی یا concrete گفته می شود. مثلا پراید پیاده سازی یک مفهوم انتزاعی به نام خودرو است. پراید یک موجودیت جسمانی یا بتنی می باشد.کوپلینگوقتی به طور مستقیم از چیزی استفاده کردیم و دانش و آگاهی دقیقی نسبت به آن داشته باشیم گفته می شود به آن اتصال پیدا کرده است یا کوپل شده است.در برنامه نویسی، کوپلینگ اجتناب ناپذیر است اما آنچه بد است اتصال محکم است( Tight Coupling )، اتصال سست( Loose Coupling ) سفارش شده است.<< فرض کنید نیاز دارید بنا به درخواست مشتری، یه قسمت از نرم افزار رو تغییر بدید. خوب مطمئنا تغییر این بخش مورد نیاز مشتری و مورد تایید شما بوده است. چنانچه این شی رو تغییر دادید، آیا اجزای دیگه ای هم هستند که مجبورند( تاکید میشود مجبورند نه به خواست شما ) تغییر کنند. یعنی نه من برنامه نویس و نه مشتری اصلا منظورمون تغییر اون یکی اجزا نبوده ولی به دلیل وجود وابستگی بین این اشیا مجبور شدیم یه سری دیگه از اجزا رو هم تغییر بدیم. به این وابستگی بین اشیا میگیم Coupling.>>(وبلاگ امیر عزتی)بنابراین Low Coupling، اتصال سست برای ما مفیدتر خواهد بود.در فارسی به Coupling، جفتگری هم گفته می شود. جفتگری در برنامه نویسی(ویکی پدیا)وقتی صحبت از کوپلینگ میشه نمی تونم از چسبندگی(Cohesion) حرفی نزنیم. بنابراین با یک مثال با چسبندگی آشنا می شیم.یه مثال: فرض کنید تشریف میبرید بقالی خرید آیا انتظار دارید بقالی از شیر مرغ تا جون آدمیزاد رو برای شما فراهم کرده باشه؟؟ یعنی اینکه بقالی هم شیرو پنیر بفروشه و هم بنزین؟ کار خوب و معقولیه؟مطمینا خیر. چون شما مطابق دسته بندیهای انجام شده انتظار دارید برای خرید لبنیات برید بقالی و برای خرید بنزین برید پمپ بنزین. یعنی فروش بنزین جزو وظایف بقال نیست. مطمینا من مشتری هم بهتر میتونم بگردم دنبال اجناسی که میخوام بخرم. در مجموع یعنی بهتره اجناسی که بقال میفروشه به هم ربط داشته باشه.در مورد اشیا و کلاسها هم همینطوره. هر چقدر وظیفه یک شی به هم نزدیک و مرتبط باشه باعث افزایش قابلیت نگهداری و استفاده مجدد اون شی میشه.** چسبندگی بالا و اتصال کم کیفیت نرم افزار ما بالاتر می برد.وابستگی Dependencyهنگامی که موجودیت A به گونه ای از موجودیت B استفاده می کند که هر تغییری در B باعث تغییر A شود، گفته می شود که موجودیت A به موجودیت B وابستگی دارد.آنچه مذموم است وابستگی بی رویه به موجودیت های سفت یا concrete می باشد.اتصال محکم Tight Couplingهنگامی که موجودیتی به یک موجودیت سفت( Concrete ) کوپل شده باشد گفته می شود به آن اتصال محکم دارد، زیرا نمی توان بدون دستکاری موجودیت وابسته چیزی را با موجودیت سفت جایگیزین کرد.اتصال سست Loose Couplingهنگامی که موجودیتی به جای یک موجودیت سفت به یک موجودیت انتزاعی کوپل می شود، گفته می شود اتصال آن سست است، زیرا می توان تحت آن موجودیت انتزاعی، مجموعه ای بیشماری از موجودیت های سفت را به او تحویل داد، بدون اینکه موجودیت نخست به هیچ گونه تغییری نیاز داشته باشد.اصل جداسازی دغدغه یا SoCروندی است که طی آن یک تکه نرم افزار به قابلیت های جدا از هم خر می شود که هر کدام اطلاعات و مسئولیت یکتایی را درون خود کپسوله کرده که می تواند توسط سایر کلاس ها استفاده بشود.این اصل به میزان چشمگیری قابلیت استفاده مجدد را از کد، آزمون پذیری و نگهداری پذیری نرم افزار را افزایش داده و در طراحی الگوها بسیار کاربرد دارد.اصل "استفاده از ترکیب به جای وراثت"به جای اتکا به کلاس پدر از رابطه ی ترکیب با کلاس های کوچک استفاده کنید، کد شما کمتر دچار وابستگی و اتصال ( کوپلینگ )می شود، در نتیجه بیشتر قابل آزمون و نگهداری خواهد بود.**هنگامی که کلاس پایه شلوغی را با قابلیت های بیشماری تعریف می کنید، قابلیت های کلاس پدر به کلاس های فرزند تحمیل می شود، پیش از هر تغییری در کلاس پدر، پیامدهای آن را در کلاس فرزند را به دقت بررسی کنید.اصول بعدی، اصول S.O.L.I.D هستش، که دوستان زیادی در این مورد مطلب قرار دادن. در آینده بخاطر علاقه خودم، مطلبی مفصل در این زمینه منتشر خواهم کرد.