یکی از اصول دیگر برنامه نویسی شی گرا و اصل سوم SOLID مفهوم LSP یا Liskov Substitution Principle می باشد, به این معنی که هیچ کلاسی نباید رفتار کلاس والد را تغییر دهد. برای رعایت این اصل باید در نظر داشته باشیم که هر کلاسی میتواند از کلاس دیگر ارث بری کند به شرطی که رفتار کلاس والد را تغییر ندهند. مثال زیر را در نظر بگیرید :‌

کلاس Rectangle (مستطیل) را به عنوان یک کلاس پایه در نظر بگیرید. در دنیای واقعی شکل مربع هم نوعی مستطیل است. اما آیا در دنیای برنامه نویسی هم این موضوع صحیح است؟

کلاس Square (مربع) از کلاس پایه ارث بری میکند. اما تفاوت این کلاس با کلاس پایه در این است که اگر هر یک از ابعاد طول و عرض مقدار دریافت کنند بعد دیگر نیز همان مقدار را خواهد داشت. یعنی اگر مقدار طول را 4 در نظر بگیریم, قطعا مقدار عرض نیز 4 خواهد بود.(خاصیت مربع)

حالا کلاس زیر را در نظر بگیرید:

این کلاس ورودی از نوع Rectangle را دریافت کرده و طول و عرض آنرا مقدار دهی میکند. و در نهایت بررسی میکند که آیا مساحت درست حساب شده است یا خیر. در ظاهر همه چیز خیلی خوب کار خواهد کرد. اما وقتی کلاس Square که نوعی از Rectangle هست را به عنوان ورودی به تابع areaVerifier بدهیم پاسخ کمی تغییر می کند. وقتی به متد $r->setHeight(4) می رسیم بر اساس کاری که Square انجام میدهد مقدار Width را نیز برابر ۴ قرار میدهد. بنابراین مساحت ۱۶ خواهد شد نه ۲۰.

این موضوع هدف اصلی LSP است و به ما آموزش میدهد که هنگام ارث بری از یک کلاس نباید رفتار کلاس والد را تغییر دهیم.

فرض کنید در یک کلاس پایه متدی با نام writeToFile دارید. هر کسی از این متد انتظار ذخیره اطلاعات در یک فایل را دارد. اما فرض کنید که  یکی از کلاس های زیر مجموعه با فراخوانی این متد کار دیگری انجام دهد! LSP بر روی این نکته تمرکز کرده است تا این مشکلات به وجود نیایند.

 

منابع :

http://code.tutsplus.com

http://en.wikipedia.org

 

 

محمد باقر رستمی

برنامه نویسی رو دوست دارم و از کارم و بیشتر از اون از یادگرفتن لذت می برم. دوست دارم از این طریق برای مردم دنیا مفید باشم. فارغ از رنگ، نژاد، ملیت و جنسیت.

Latest posts by محمد باقر رستمی (see all)

facebooktwittergoogle_pluslinkedin

دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

*


6 × = سی