کتاب اصل جایگزینی لیسکوف (LSP): وراثت صحیح و رفتارهای قابل پیشبینی با فرمت AZW3 برای کتابخوان کیندل و فرمت EPUB
اصول SOLID: اصل جایگزینی لیسکوف - وراثت صحیح و رفتارهای قابل پیشبینی اصول SOLID: اصل جایگزینی لیسکوف (LSP) - وراثت صحیح و رفتارهای قابل پیشبینی معرفی دوره آیا تا به حال در کدنویسی با چالشهایی مواجه...
🎓 دوره آموزشی جامع
📚 اطلاعات دوره
عنوان دوره: دوره اصل جایگزینی لیسکوف (LSP): وراثت صحیح و رفتارهای قابل پیشبینی
موضوع کلی: برنامه نویسی
موضوع میانی: اصول SOLID
📋 سرفصلهای دوره
- 1. مقدمهای بر اصول SOLID
- 2. مرور کلی اصل مسئولیت واحد (SRP)
- 3. مرور کلی اصل باز/بسته (OCP)
- 4. مرور کلی اصل جداسازی رابط (ISP)
- 5. مرور کلی اصل وارونگی وابستگی (DIP)
- 6. معرفی اصل جایگزینی لیسکوف (LSP): مشکل چیست؟
- 7. تاریخچه و معرفی باربارا لیسکوف
- 8. تعریف رسمی اصل جایگزینی لیسکوف
- 9. چرا LSP قلب برنامهنویسی شیءگرا است؟
- 10. مفهوم "جایگزینی" در LSP
- 11. مفهوم "رفتار قابل پیشبینی"
- 12. وراثت چیست؟ مرور مفاهیم پایه
- 13. وراثت به عنوان رابطه "is-a"
- 14. مزایای وراثت: استفاده مجدد از کد
- 15. خطرات وراثت: مشکل کلاس پایه شکننده (Fragile Base Class)
- 16. وراثت در مقابل ترکیب (Composition): چه زمانی از کدام استفاده کنیم؟
- 17. مفهوم پلیمورفیسم (Polymorphism) و ارتباط آن با LSP
- 18. قراردادهای طراحی (Design by Contract) به عنوان پایه LSP
- 19. پیششرطها (Preconditions) در یک متد
- 20. پسشرطها (Postconditions) در یک متد
- 21. ناورداها (Invariants) در یک کلاس
- 22. قانون اول LSP: پیششرطها در زیرکلاس نباید قویتر شوند
- 23. مثال عملی: نقض قانون پیششرطها
- 24. قانون دوم LSP: پسشرطها در زیرکلاس نباید ضعیفتر شوند
- 25. مثال عملی: نقض قانون پسشرطها
- 26. قانون سوم LSP: ناورداهای کلاس پایه باید در زیرکلاس حفظ شوند
- 27. مثال عملی: نقض قانون ناورداها
- 28. تاریخچه متدها (The History Rule) و ارتباط آن با وضعیت (State)
- 29. قانون استثناها (Exceptions): زیرکلاس نباید استثناهای جدیدی پرتاب کند
- 30. قانون امضای متدها: کوواریانس (Covariance) در نوع بازگشتی
- 31. قانون امضای متدها: تضادپذیری (Contravariance) در پارامترها
- 32. مشکل کلاسیک: مربع و مستطیل (The Rectangle-Square Problem)
- 33. تحلیل مشکل مربع-مستطیل: چرا مربع یک نوع مستطیل نیست؟
- 34. شکستن ناورداها در مثال مربع-مستطیل
- 35. راهحلهای مشکل مربع-مستطیل: تفکیک کلاسها
- 36. مشکل کلاسیک دوم: بیضی و دایره
- 37. بررسی بوی کد (Code Smell): بررسی نوع (Type Checking) با `is` یا `instanceof`
- 38. چرا بررسی نوع، LSP را نقض میکند؟
- 39. بوی کد: پرتاب استثنای `NotImplementedException` در متدهای بازنویسی شده
- 40. بوی کد: زیرکلاسی که هیچ کاری انجام نمیدهد (Empty Override)
- 41. بوی کد: بازگرداندن مقادیر غیرمنتظره (null یا مقادیر جادویی)
- 42. شناسایی نقض LSP در کد موجود
- 43. نقض LSP در سازندهها (Constructors)
- 44. نقض LSP از طریق تغییر وضعیت داخلی به شکل غیرمنتظره
- 45. عوارض نقض LSP: کدهای پیچیده و غیرقابل نگهداری
- 46. عوارض نقض LSP: نیاز به تغییرات گسترده در کلاینتها
- 47. عوارض نقض LSP: تستنویسی دشوار
- 48. الگوی طراحی Template Method و ارتباط آن با LSP
- 49. پیادهسازی صحیح Template Method با رعایت LSP
- 50. الگوی طراحی Strategy به عنوان جایگزین وراثت نامناسب
- 51. چگونه Strategy به رعایت LSP کمک میکند؟
- 52. الگوی طراحی Factory و نقش آن در حفظ LSP
- 53. الگوی طراحی Decorator و سازگاری آن با LSP
- 54. الگوی طراحی Null Object برای جلوگیری از نقض LSP
- 55. رفکتورینگ برای انطباق با LSP: استخراج رابط (Extract Interface)
- 56. رفکتورینگ: جایگزینی وراثت با ترکیب (Replace Inheritance with Composition)
- 57. رفکتورینگ: جایگزینی وراثت با تفویض اختیار (Replace Inheritance with Delegation)
- 58. طراحی سلسلهمراتب وراثت با ذهنیت LSP
- 59. نقش کلاسهای انتزاعی (Abstract Classes) در پیادهسازی LSP
- 60. نقش رابطها (Interfaces) در تضمین LSP
- 61. LSP و تستنویسی: چگونه LSP تستها را سادهتر میکند؟
- 62. نوشتن تستهای واحد برای اطمینان از رعایت LSP
- 63. استفاده از Mocking و Stubbing در تستهای مبتنی بر LSP
- 64. LSP و اصل باز/بسته (OCP): یک رابطه همافزا
- 65. چگونه نقض LSP منجر به نقض OCP میشود؟
- 66. LSP و اصل جداسازی رابط (ISP)
- 67. LSP و اصل وارونگی وابستگی (DIP)
- 68. تحلیل یک سناریوی واقعی: سیستم مدیریت کاربران
- 69. شناسایی نقض LSP در سیستم مدیریت کاربران
- 70. رفکتورینگ سیستم مدیریت کاربران برای رعایت LSP
- 71. تحلیل یک سناریوی واقعی: سیستم پردازش سفارش
- 72. شناسایی نقض LSP در سیستم پردازش سفارش
- 73. رفکتورینگ سیستم پردازش سفارش برای رعایت LSP
- 74. LSP در زبانهای برنامهنویسی استاتیک (مانند C# و Java)
- 75. LSP در زبانهای برنامهنویسی دینامیک (مانند Python و JavaScript)
- 76. مفهوم Duck Typing و ارتباط آن با LSP
- 77. LSP فراتر از کلاسها: اعمال اصل در سطح ماژولها و سرویسها
- 78. LSP و طراحی API: اطمینان از سازگاری نسخههای مختلف
- 79. چگونه فریمورکها LSP را ترویج یا نقض میکنند؟
- 80. مطالعه موردی: نقض LSP در یک کتابخانه معروف
- 81. مطالعه موردی: رعایت LSP در یک فریمورک موفق
- 82. تأثیر LSP بر قابلیت توسعهپذیری (Extensibility) سیستم
- 83. تأثیر LSP بر قابلیت نگهداری (Maintainability) کد
- 84. هزینههای کوتاهمدت و بلندمدت رعایت (یا عدم رعایت) LSP
- 85. چه زمانی میتوان LSP را (با احتیاط) نادیده گرفت؟
- 86. استدلالهای رایج برای نقض LSP و پاسخ به آنها
- 87. توسعه ذهنیت مبتنی بر رفتار (Behavioral Mindset)
- 88. LSP به عنوان یک ابزار تفکر برای طراحی بهتر
- 89. چکلیست بررسی انطباق کد با LSP
- 90. تمرین: طراحی یک سلسلهمراتب برای پرندگان (مشکل پرنده پنگوئن)
- 91. تمرین: طراحی سیستم حسابهای بانکی با رعایت LSP
- 92. تمرین: رفکتورینگ یک قطعه کد که LSP را نقض میکند
- 93. بازبینی کد (Code Review) با تمرکز بر LSP
- 94. ابزارهای تحلیل استاتیک و کمک به شناسایی نقض LSP
- 95. جمعبندی قوانین کلیدی LSP
- 96. LSP: پلی بین انتزاع و پیادهسازی انضمامی
- 97. آینده وراثت و نقش LSP
- 98. نتیجهگیری: ارزش نهایی LSP در ساخت نرمافزار پایدار
- 99. **LSP در عمل: مثالها و ضد الگوهای رایج**
- 100. **پیامدهای طراحی و معماری نرمافزار با رعایت LSP**
تگها:
آموزش آنلاین
اصل جایگزینی لیسکوف (LSP): وراثت صحیح و رفتارهای قابل پیشبینی
اصول SOLID
برنامه نویسی
دوره آموزشی
نظرات
هنوز نظری ثبت نشده است.
وارد شوید تا نظر ثبت کنید.