ehsan hosseiny
ehsan hosseiny
خواندن ۲ دقیقه·۶ سال پیش

اصول طراحی شی گرا SOLID چیست؟

سلام دوستان عزیز

موضوع این مقاله , اصول طراحی شی گرا SOLID است . این اصول در تمام زبان های برنامه نویسی مثل php موجود و قابل پیاده سازی است .

SOLID مخفف پنج اصل بسیار مهم در مدیریت وابستگی (Dependency Management) در توسعه ی برنامه های شی گرا می باشد. در واقع هر کدام از حروف کلمه ی SOLID به یکی از این اصول بر می گردد.

یکی از مشکلاتی که طراحی نامناسب برنامه های شی گرا برای برنامه نویسان ایجاد می کند موضوع مدیریت وابستگی در اجزای برنامه می باشد. اگر این وابستگی به درستی مدیریت نشود مشکلاتی شبیه موارد زیر در برنامه ایجاد می شوند:
برنامه ی نوشته شده را نمی توان تغییر داد و یا قابلیت جدید اضافه کرد. دلیل آن هم این است که با ایجاد تغییر در قسمتی از برنامه، این تغییر به صورت آبشاری در بقیه ی قسمت ها منتشر می شود و مجبور خواهیم بود که قسمت های زیادی از برنامه را تغییر دهیم. (این مشکل را Rigidity می نامیم.)
تغییر دادن برنامه مشکل است و آن هم به این دلیل که با ایجاد تغییر در یک قسمت از برنامه، قسمت های دیگر برنامه از کار می افتند و دچار مشکل می شوند. (این مشکل را Fragility می نامیم.)
قابلیت استفاده مجدد از اجزای برنامه وجود ندارد. در واقع، قسمت های مجدد برنامه ی شی گرای شما آنچنان به هم وابستگی تو در تو دارند که به هیچ وجه نمی توانید یک قسمت را جدا کرده و در برنامه ی دیگری استفاده کنید. (این مشکل را Immobility می نامیم.)

اصول SOLID که قصد رفع کردن این مشکلات و بسیاری مسائل گوناگون را دارند عبارت اند از:

1 : Single Responsibility Principle

2 : Open-Closed Principle

3 : Liskov Substitution Principle

4 : Interface Segregation Principle

5 : Dependency Inversion Principle

با کنار هم گذاشتن حرف اول هر کدام از این اصول کلمه ی SOLID ایجاد می شود. با در نظر گرفتن این پنج اصل و پیاده سازی آنها در برنامه های خود می توانید به یک طراحی شی گرا پاک و درست دست پیدا کنید.

  • Single responsibility principle یا SPR :

به معنی اینکه هر کلاس بایستی فقط یک کار انجام دهد نه بیشتر, که در ادامه  توضیح خواهم داد

  • Open/closed principle یا OCP

به معنی اینکه کلاس ها جوری نوشته بشن که قابل گسترش باشند اما نیاز به تغییر نداشته باشند.

  • Liskov Substitution Principle یا LSP

به مفهوم اینکه هر کلاسی که از کلاس دیگر ارث بری میکند هرگز نباید رفتار کلاس والد را تغییر دهد.

  • Interface Segregation Principle یا ISP

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

  • Dependency inversion principle یا DIP

به معنی اینکه از اینترفیس ها به خوبی استفاده کن!

solidoopاصول solid
شاید از این پست‌ها خوشتان بیاید